quaff 0.4.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/call.rb +6 -0
- data/lib/endpoint.rb +8 -4
- data/lib/sources.rb +29 -21
- metadata +1 -1
data/lib/call.rb
CHANGED
@@ -27,6 +27,7 @@ class Call
|
|
27
27
|
|
28
28
|
def initialize(cxn,
|
29
29
|
cid,
|
30
|
+
instance_id=nil,
|
30
31
|
uri="sip:5557777888@#{Utils::local_ip}",
|
31
32
|
destination=nil,
|
32
33
|
target_uri=nil)
|
@@ -42,6 +43,7 @@ class Call
|
|
42
43
|
setdest(destination, recv_from_this: true) if destination
|
43
44
|
set_callee target_uri if target_uri
|
44
45
|
@routeset = []
|
46
|
+
@instance_id = instance_id
|
45
47
|
end
|
46
48
|
|
47
49
|
def change_cid cid
|
@@ -194,6 +196,10 @@ class Call
|
|
194
196
|
"Contact" => "<sip:quaff@#{Utils::local_ip}:#{@cxn.local_port};transport=#{@cxn.transport};ob>",
|
195
197
|
}
|
196
198
|
|
199
|
+
if @instance_id
|
200
|
+
defaults["Contact"] += ";+sip.instance=\"<urn:uuid:"+@instance_id+">\""
|
201
|
+
end
|
202
|
+
|
197
203
|
is_request = code.nil?
|
198
204
|
if is_request
|
199
205
|
defaults['Route'] = @routeset
|
data/lib/endpoint.rb
CHANGED
@@ -10,7 +10,8 @@ require_relative './sources.rb'
|
|
10
10
|
|
11
11
|
module Quaff
|
12
12
|
class BaseEndpoint
|
13
|
-
attr_accessor :msg_trace, :uri, :sdp_port, :sdp_socket
|
13
|
+
attr_accessor :msg_trace, :uri, :sdp_port, :sdp_socket, :instance_id
|
14
|
+
attr_reader :msg_log
|
14
15
|
|
15
16
|
def setup_sdp
|
16
17
|
@sdp_socket = UDPSocket.new
|
@@ -31,13 +32,13 @@ module Quaff
|
|
31
32
|
def incoming_call *args
|
32
33
|
call_id ||= get_new_call_id
|
33
34
|
puts "Call-Id for endpoint on #{@lport} is #{call_id}" if @msg_trace
|
34
|
-
Call.new(self, call_id, *args)
|
35
|
+
Call.new(self, call_id, @instance_id, *args)
|
35
36
|
end
|
36
37
|
|
37
38
|
def outgoing_call to_uri
|
38
39
|
call_id = generate_call_id
|
39
40
|
puts "Call-Id for endpoint on #{@lport} is #{call_id}" if @msg_trace
|
40
|
-
Call.new(self, call_id, @uri, @outbound_connection, to_uri)
|
41
|
+
Call.new(self, call_id, @instance_id, @uri, @outbound_connection, to_uri)
|
41
42
|
end
|
42
43
|
|
43
44
|
def create_client(uri, username, password, outbound_proxy, outbound_port=5060)
|
@@ -51,6 +52,7 @@ module Quaff
|
|
51
52
|
end
|
52
53
|
|
53
54
|
def initialize(uri, username, password, local_port, outbound_proxy=nil, outbound_port=5060)
|
55
|
+
@msg_log = Array.new
|
54
56
|
@uri = uri
|
55
57
|
@resolver = Resolv::DNS.new
|
56
58
|
@username = username
|
@@ -88,7 +90,8 @@ module Quaff
|
|
88
90
|
end
|
89
91
|
|
90
92
|
def send_msg(data, source)
|
91
|
-
|
93
|
+
@msg_log.push "Endpoint on #{@lport} sending:\n\n#{data.strip}\n\nto #{source.inspect}"
|
94
|
+
puts "Endpoint on #{@lport} sending #{data} to #{source.inspect}" if @msg_trace
|
92
95
|
source.send_msg(@cxn, data)
|
93
96
|
end
|
94
97
|
|
@@ -139,6 +142,7 @@ module Quaff
|
|
139
142
|
end
|
140
143
|
|
141
144
|
def queue_msg(msg, source)
|
145
|
+
@msg_log.push "Endpoint on #{@lport} received:\n\n#{msg.to_s.strip}\n\nfrom #{source.inspect}"
|
142
146
|
puts "Endpoint on #{@lport} received #{msg} from
|
143
147
|
##{source.inspect}" if @msg_trace
|
144
148
|
msg.source = source
|
data/lib/sources.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'socket'
|
2
2
|
module Quaff
|
3
|
-
class Source
|
3
|
+
class Source
|
4
4
|
def remote_ip
|
5
|
-
|
5
|
+
@ip
|
6
6
|
end
|
7
7
|
|
8
8
|
def remote_port
|
9
|
-
|
9
|
+
@port
|
10
10
|
end
|
11
11
|
|
12
12
|
def close cxn
|
@@ -15,47 +15,55 @@ class Source
|
|
15
15
|
def sock
|
16
16
|
nil
|
17
17
|
end
|
18
|
-
end
|
19
18
|
|
20
|
-
|
19
|
+
def to_s
|
20
|
+
"#{@ip}:#{@port} (#{@transport})"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class UDPSource < Source
|
21
25
|
def initialize ip, port
|
22
|
-
|
26
|
+
@transport = "UDP"
|
27
|
+
@ip, @port = ip, port
|
23
28
|
end
|
24
29
|
|
25
30
|
def send_msg cxn, data
|
26
|
-
|
31
|
+
cxn.send(data, 0, @ip, @port)
|
27
32
|
end
|
28
|
-
end
|
33
|
+
end
|
29
34
|
|
30
|
-
class UDPSourceFromAddrinfo < UDPSource
|
35
|
+
class UDPSourceFromAddrinfo < UDPSource
|
31
36
|
def initialize addrinfo
|
32
|
-
|
37
|
+
@transport = "UDP"
|
38
|
+
@ip, @port = addrinfo[3], addrinfo[1]
|
33
39
|
end
|
34
|
-
end
|
40
|
+
end
|
35
41
|
|
36
42
|
|
37
|
-
class TCPSource < Source
|
38
|
-
|
43
|
+
class TCPSource < Source
|
44
|
+
attr_reader :sock
|
39
45
|
|
40
46
|
def initialize ip, port
|
41
|
-
|
42
|
-
|
47
|
+
@transport = "TCP"
|
48
|
+
@sock = TCPSocket.new ip, port
|
49
|
+
@port, @ip = port, ip
|
43
50
|
end
|
44
51
|
|
45
52
|
def send_msg _, data
|
46
|
-
|
53
|
+
@sock.sendmsg data
|
47
54
|
end
|
48
55
|
|
49
56
|
def close cxn
|
50
|
-
|
51
|
-
|
57
|
+
@sock.close
|
58
|
+
cxn.sockets.delete(@sock)
|
52
59
|
end
|
53
|
-
end
|
60
|
+
end
|
54
61
|
|
55
|
-
class TCPSourceFromSocket < TCPSource
|
62
|
+
class TCPSourceFromSocket < TCPSource
|
56
63
|
def initialize sock
|
64
|
+
@transport = "TCP"
|
57
65
|
@sock = sock
|
58
66
|
@port, @ip = Socket.unpack_sockaddr_in(@sock.getpeername)
|
59
67
|
end
|
60
|
-
end
|
68
|
+
end
|
61
69
|
end
|