quaff 0.4.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|