oversip 1.1.0.beta5 → 1.1.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/etc/oversip.conf +16 -4
- data/etc/proxies.conf +8 -9
- data/etc/server.rb +59 -0
- data/ext/sip_parser/sip_parser.c +12066 -11975
- data/ext/sip_parser/sip_parser.h +1 -0
- data/ext/sip_parser/sip_parser_ruby.c +15 -4
- data/ext/utils/haproxy_protocol.c +4 -1
- data/ext/websocket_framing_utils/ws_framing_utils_ruby.c +2 -2
- data/lib/oversip/config.rb +50 -38
- data/lib/oversip/default_server.rb +12 -0
- data/lib/oversip/launcher.rb +10 -35
- data/lib/oversip/master_process.rb +2 -2
- data/lib/oversip/proxies_config.rb +2 -2
- data/lib/oversip/sip/client_transaction.rb +1 -7
- data/lib/oversip/sip/grammar/uri.rb +23 -1
- data/lib/oversip/sip/listeners/{reactor.rb → connection.rb} +16 -2
- data/lib/oversip/sip/listeners/ipv4_udp_server.rb +1 -1
- data/lib/oversip/sip/listeners/ipv6_udp_server.rb +1 -1
- data/lib/oversip/sip/listeners/tcp_client.rb +2 -3
- data/lib/oversip/sip/listeners/{tcp_reactor.rb → tcp_connection.rb} +14 -2
- data/lib/oversip/sip/listeners/tcp_server.rb +2 -5
- data/lib/oversip/sip/listeners/tls_client.rb +15 -12
- data/lib/oversip/sip/listeners/tls_server.rb +11 -11
- data/lib/oversip/sip/listeners/{tls_tunnel_reactor.rb → tls_tunnel_connection.rb} +20 -20
- data/lib/oversip/sip/listeners/tls_tunnel_server.rb +2 -5
- data/lib/oversip/sip/listeners/{udp_reactor.rb → udp_connection.rb} +4 -4
- data/lib/oversip/sip/listeners.rb +6 -10
- data/lib/oversip/sip/message.rb +4 -3
- data/lib/oversip/sip/message_processor.rb +17 -17
- data/lib/oversip/sip/modules/core.rb +18 -13
- data/lib/oversip/sip/modules/user_assertion.rb +7 -53
- data/lib/oversip/sip/proxy.rb +3 -3
- data/lib/oversip/sip/request.rb +2 -0
- data/lib/oversip/sip/rfc3263.rb +3 -3
- data/lib/oversip/sip/sip.rb +6 -0
- data/lib/oversip/sip/transport_manager.rb +8 -8
- data/lib/oversip/tls.rb +18 -22
- data/lib/oversip/version.rb +1 -1
- data/lib/oversip/websocket/constants.rb +0 -1
- data/lib/oversip/websocket/http_request.rb +4 -8
- data/lib/oversip/websocket/launcher.rb +83 -139
- data/lib/oversip/websocket/listeners/connection.rb +47 -0
- data/lib/oversip/websocket/{ws_apps/ipv4_ws_sip_app.rb → listeners/ipv4_ws_server.rb} +3 -3
- data/lib/oversip/websocket/{ws_apps/ipv4_wss_sip_app.rb → listeners/ipv4_wss_server.rb} +2 -2
- data/lib/oversip/websocket/listeners/ipv4_wss_tunnel_server.rb +21 -0
- data/lib/oversip/websocket/{ws_apps/ipv6_ws_sip_app.rb → listeners/ipv6_ws_server.rb} +3 -3
- data/lib/oversip/websocket/{ws_apps/ipv6_wss_sip_app.rb → listeners/ipv6_wss_server.rb} +2 -3
- data/lib/oversip/websocket/listeners/ipv6_wss_tunnel_server.rb +21 -0
- data/lib/oversip/websocket/listeners/{tcp_server.rb → ws_server.rb} +63 -43
- data/lib/oversip/websocket/listeners/{tls_server.rb → wss_server.rb} +14 -13
- data/lib/oversip/websocket/listeners/{tls_tunnel_server.rb → wss_tunnel_server.rb} +36 -10
- data/lib/oversip/websocket/listeners.rb +10 -9
- data/lib/oversip/websocket/websocket.rb +13 -0
- data/lib/oversip/websocket/ws_framing.rb +35 -97
- data/lib/oversip/websocket/ws_sip_app.rb +120 -0
- data/lib/oversip.rb +1 -1
- data/test/oversip_test_helper.rb +2 -2
- data/test/test_http_parser.rb +2 -2
- data/test/test_sip_parser.rb +18 -3
- data/test/test_uri.rb +44 -0
- metadata +39 -42
- data/lib/oversip/websocket/listeners/ipv4_tcp_server.rb +0 -15
- data/lib/oversip/websocket/listeners/ipv4_tls_server.rb +0 -15
- data/lib/oversip/websocket/listeners/ipv4_tls_tunnel_server.rb +0 -15
- data/lib/oversip/websocket/listeners/ipv6_tcp_server.rb +0 -15
- data/lib/oversip/websocket/listeners/ipv6_tls_server.rb +0 -15
- data/lib/oversip/websocket/listeners/ipv6_tls_tunnel_server.rb +0 -15
- data/lib/oversip/websocket/ws_app.rb +0 -77
- data/lib/oversip/websocket/ws_apps/ws_autobahn_app.rb +0 -23
- data/lib/oversip/websocket/ws_apps/ws_sip_app.rb +0 -156
- data/lib/oversip/websocket/ws_apps.rb +0 -9
@@ -0,0 +1,120 @@
|
|
1
|
+
module OverSIP::WebSocket
|
2
|
+
|
3
|
+
class WsSipApp
|
4
|
+
|
5
|
+
include ::OverSIP::Logger
|
6
|
+
include ::OverSIP::SIP::MessageProcessor
|
7
|
+
|
8
|
+
def self.class_init
|
9
|
+
@@max_message_size = ::OverSIP.configuration[:websocket][:max_ws_message_size]
|
10
|
+
@@ws_keepalive_interval = ::OverSIP.configuration[:websocket][:ws_keepalive_interval]
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
LOG_ID = "WsSipApp"
|
15
|
+
def log_id
|
16
|
+
LOG_ID
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
def initialize connection, ws_framing
|
21
|
+
@connection = connection
|
22
|
+
@ws_framing = ws_framing
|
23
|
+
@ws_message = ::IO::Buffer.new
|
24
|
+
|
25
|
+
# Mantain WebSocket keepalive.
|
26
|
+
@ws_framing.do_keep_alive @@ws_keepalive_interval if @@ws_keepalive_interval
|
27
|
+
|
28
|
+
# WebSocket is message boundary so we just need a SIP parser instance.
|
29
|
+
@@parser ||= ::OverSIP::SIP::MessageParser.new
|
30
|
+
@parser = @@parser
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
def receive_payload_data payload_data
|
35
|
+
# payload_data is always Encoding::BINARY so also @ws_message.to_str.
|
36
|
+
@ws_message << payload_data
|
37
|
+
|
38
|
+
# Check max message size.
|
39
|
+
return false if @ws_message.size > @@max_message_size
|
40
|
+
true
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
def message_done type
|
45
|
+
log_system_debug "received WS message: type=#{type}, length=#{@ws_message.size}" if $oversip_debug
|
46
|
+
|
47
|
+
# Better to encode it as BINARY (to later extract the body).
|
48
|
+
process_sip_message @ws_message.to_str.force_encoding ::Encoding::BINARY
|
49
|
+
|
50
|
+
@ws_message.clear
|
51
|
+
true
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
def process_sip_message ws_message
|
56
|
+
# Just a single SIP message allowed per WS message.
|
57
|
+
@parser.reset
|
58
|
+
|
59
|
+
unless parser_nbytes = @parser.execute(ws_message, 0)
|
60
|
+
if wrong_message = @parser.parsed
|
61
|
+
log_system_warn "SIP parsing error for #{MSG_TYPE[wrong_message.class]}: \"#{@parser.error}\""
|
62
|
+
else
|
63
|
+
log_system_warn "SIP parsing error: \"#{@parser.error}\""
|
64
|
+
end
|
65
|
+
@connection.close 4000, "SIP message parsing error"
|
66
|
+
return
|
67
|
+
end
|
68
|
+
|
69
|
+
unless @parser.finished?
|
70
|
+
log_system_warn "SIP parsing error: message not completed"
|
71
|
+
|
72
|
+
@connection.close 4001, "SIP message incomplete"
|
73
|
+
return
|
74
|
+
end
|
75
|
+
|
76
|
+
# At this point we've got a SIP::Request, SIP::Response or :outbound_keepalive symbol.
|
77
|
+
@msg = @parser.parsed
|
78
|
+
|
79
|
+
# Received data is a SIP Outbound keealive (double CRLF). Reply with single CRLF.
|
80
|
+
if @msg == :outbound_keepalive
|
81
|
+
log_system_debug "Outbound keepalive received, replying single CRLF" if $oversip_debug
|
82
|
+
@ws_framing.send_text_frame(CRLF)
|
83
|
+
return
|
84
|
+
end
|
85
|
+
|
86
|
+
@parser.post_parsing
|
87
|
+
|
88
|
+
@msg.connection = @connection
|
89
|
+
@msg.transport = @connection.class.transport
|
90
|
+
@msg.source_ip = @connection.remote_ip
|
91
|
+
@msg.source_port = @connection.remote_port
|
92
|
+
@msg.source_ip_type = @connection.remote_ip_type
|
93
|
+
|
94
|
+
return unless valid_message? @parser
|
95
|
+
# TODO: Make it configurable:
|
96
|
+
#add_via_received_rport if @msg.request?
|
97
|
+
return unless check_via_branch
|
98
|
+
|
99
|
+
# Get the body.
|
100
|
+
if parser_nbytes != ws_message.bytesize
|
101
|
+
@msg.body = ws_message[parser_nbytes..-1]
|
102
|
+
|
103
|
+
if @msg.content_length and @msg.content_length != @msg.body.bytesize
|
104
|
+
log_system_warn "SIP message body size (#{@msg.body.bytesize}) does not match Content-Length (#{@msg.content_length.inspect}), ignoring message"
|
105
|
+
@connection.close 4002, "SIP message body size does not match Content-Length"
|
106
|
+
return
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
if @msg.request?
|
111
|
+
process_request
|
112
|
+
else
|
113
|
+
process_response
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
data/lib/oversip.rb
CHANGED
data/test/oversip_test_helper.rb
CHANGED
@@ -6,11 +6,11 @@ require "oversip/master_process"
|
|
6
6
|
class OverSIPTest < Test::Unit::TestCase
|
7
7
|
|
8
8
|
def assert_true(object, message="")
|
9
|
-
assert_equal(
|
9
|
+
assert_equal(true, object, message)
|
10
10
|
end
|
11
11
|
|
12
12
|
def assert_false(object, message="")
|
13
|
-
assert_equal(
|
13
|
+
assert_equal(false, object, message)
|
14
14
|
end
|
15
15
|
|
16
16
|
def assert_equal_options(options, element)
|
data/test/test_http_parser.rb
CHANGED
@@ -42,7 +42,7 @@ Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r
|
|
42
42
|
Sec-WebSocket-protocol: foo , chat.lalala.com\r
|
43
43
|
Sec-WebSocket-protocol: xmpp.nonaino.org\r
|
44
44
|
Origin: http://example.Com\r
|
45
|
-
Sec-WebSocket-Version:
|
45
|
+
Sec-WebSocket-Version: 13\r
|
46
46
|
noNaino-lALA : qwe\r
|
47
47
|
NOnaino-lala: asd\r
|
48
48
|
\r
|
@@ -62,7 +62,7 @@ END
|
|
62
62
|
assert_nil request.content_length
|
63
63
|
assert request.hdr_connection.include?("upgrade")
|
64
64
|
assert_equal "websocket", request.hdr_upgrade
|
65
|
-
assert_equal
|
65
|
+
assert_equal 13, request.hdr_sec_websocket_version
|
66
66
|
assert_equal "dGhlIHNhbXBsZSBub25jZQ==", request.hdr_sec_websocket_key
|
67
67
|
assert_equal "http://example.com", request.hdr_origin
|
68
68
|
assert_equal ["foo", "chat.lalala.com", "xmpp.nonaino.org"], request.hdr_sec_websocket_protocol
|
data/test/test_sip_parser.rb
CHANGED
@@ -39,6 +39,7 @@ class TestSipParser < OverSIPTest
|
|
39
39
|
parser, msg = parse <<-END
|
40
40
|
INVITE sip:sips%3Auser%40example.com@example.NET.;transport=tcp;FOO=baz?Subject=lalala SIP/2.0\r
|
41
41
|
via: SIP/2.0/UDP host5.example.net;branch=z9hG4bKkdjuw ; Rport\r
|
42
|
+
v: SIP/2.0/TCP 1.2.3.4;branch=z9hG4bKkdjuw\r
|
42
43
|
To: <tel:+(34)-94-499-44-22;lalala=lololo>\r
|
43
44
|
from: <sips:I%20have%20spaces@[2001:123:Ab:0:0::123]:9999> ;\r
|
44
45
|
tag=938\r
|
@@ -48,8 +49,14 @@ Max-Forwards: 87\r
|
|
48
49
|
_i: esc01.239409asdfakjkn23onasd0-3234\r
|
49
50
|
CSeq: 234234 INVITE\r
|
50
51
|
C: application/sdp\r
|
52
|
+
Require: AAA, Bbb\r
|
53
|
+
Require: ccc\r
|
54
|
+
Proxy-Require: AAA, Bbb\r
|
55
|
+
Proxy-Require: ccc\r
|
56
|
+
Supported: AAA, Bbb\r
|
57
|
+
k: ccc\r
|
51
58
|
Contact:\r
|
52
|
-
<sip:cal%6Cer@host5.example.net;%6C%72;n%61me=v%61lue%25%34%31
|
59
|
+
<sip:cal%6Cer@host5.example.net;%6C%72;n%61me=v%61lue%25%34%31;ob>;p1=foo;P2=BAR;+sip-instance=qweqwe;reg-id=1\r
|
53
60
|
Content-Length: 150\r
|
54
61
|
\r
|
55
62
|
v=0\r
|
@@ -70,13 +77,14 @@ END
|
|
70
77
|
assert_false parser.duplicated_core_header?
|
71
78
|
assert_equal parser.missing_core_header?, "Call-ID"
|
72
79
|
|
73
|
-
assert_equal msg.num_vias,
|
80
|
+
assert_equal msg.num_vias, 2
|
74
81
|
assert_equal msg.via_sent_by_host, "host5.example.net"
|
75
82
|
assert_nil msg.via_sent_by_port
|
76
83
|
assert_nil msg.via_received
|
77
84
|
assert_true msg.via_rport?
|
78
85
|
assert_equal msg.via_core_value, "SIP/2.0/UDP host5.example.net"
|
79
86
|
assert_nil msg.via_params
|
87
|
+
assert_equal ["SIP/2.0/UDP host5.example.net;branch=z9hG4bKkdjuw ; Rport", "SIP/2.0/TCP 1.2.3.4;branch=z9hG4bKkdjuw"], msg.hdr_via
|
80
88
|
|
81
89
|
assert_equal msg.cseq, 234234
|
82
90
|
assert_equal msg.max_forwards, 87
|
@@ -114,7 +122,10 @@ END
|
|
114
122
|
assert_equal "host5.example.net", msg.contact.host
|
115
123
|
assert_equal :domain, msg.contact.host_type
|
116
124
|
assert_nil msg.contact.port
|
117
|
-
|
125
|
+
assert_true msg.contact.ob_param?
|
126
|
+
assert_equal({"%6c%72" => nil, "n%61me" => "v%61lue%25%34%31", "ob" => nil}, msg.contact.params)
|
127
|
+
assert_equal ";p1=foo;P2=BAR;+sip-instance=qweqwe;reg-id=1", msg.contact_params
|
128
|
+
assert_true msg.contact_reg_id?
|
118
129
|
|
119
130
|
assert_equal 2, msg.routes.size
|
120
131
|
|
@@ -134,6 +145,10 @@ END
|
|
134
145
|
assert_equal :ipv6_reference, msg.routes[1].host_type
|
135
146
|
assert_equal 6666, msg.routes[1].port
|
136
147
|
assert_true msg.routes[1].lr_param?
|
148
|
+
|
149
|
+
assert_equal ["aaa", "bbb", "ccc"], msg.require
|
150
|
+
assert_equal ["aaa", "bbb", "ccc"], msg.proxy_require
|
151
|
+
assert_equal ["aaa", "bbb", "ccc"], msg.supported
|
137
152
|
end
|
138
153
|
|
139
154
|
end
|
data/test/test_uri.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require "oversip_test_helper"
|
4
|
+
|
5
|
+
|
6
|
+
class TestUri < OverSIPTest
|
7
|
+
|
8
|
+
def test_sip_uri
|
9
|
+
full_uri = "sip:alice@atlanta.com:5060;transport=tcp;foo=123;baz?X-Header-1=qwe&X-Header-2=asd"
|
10
|
+
|
11
|
+
uri = ::OverSIP::SIP::Uri.new
|
12
|
+
uri.instance_variable_set :@scheme, :sip
|
13
|
+
uri.user = "alice"
|
14
|
+
uri.host = "atlanta.com"
|
15
|
+
uri.host_type = :domain
|
16
|
+
uri.port = 5060
|
17
|
+
uri.transport_param = :tcp
|
18
|
+
uri.instance_variable_set :@params, {"transport"=>"tcp", "foo"=>"123", "baz"=>nil}
|
19
|
+
uri.headers = "?X-Header-1=qwe&X-Header-2=asd"
|
20
|
+
|
21
|
+
assert_equal full_uri, uri.to_s
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_tel_uri
|
25
|
+
full_uri = "tel:944991212;foo=bar;phone-context=+34"
|
26
|
+
|
27
|
+
uri = ::OverSIP::SIP::Uri.new
|
28
|
+
uri.instance_variable_set :@scheme, :tel
|
29
|
+
uri.user = "944991212"
|
30
|
+
uri.instance_variable_set :@params, {"foo"=>"bar"}
|
31
|
+
uri.phone_context_param = "+34"
|
32
|
+
|
33
|
+
assert_equal full_uri, uri.to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_http_uri
|
37
|
+
full_uri = "http://oversip.net/authors/"
|
38
|
+
|
39
|
+
uri = ::OverSIP::SIP::Uri.new
|
40
|
+
uri.instance_variable_set :@uri, full_uri
|
41
|
+
|
42
|
+
assert_equal full_uri, uri.to_s
|
43
|
+
end
|
44
|
+
end
|
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oversip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.0
|
5
|
-
prerelease:
|
4
|
+
version: 1.1.0
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Inaki Baz Castillo
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: eventmachine-le
|
16
|
-
requirement: &
|
16
|
+
requirement: &20560580 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.1.2
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *20560580
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: iobuffer
|
27
|
-
requirement: &
|
27
|
+
requirement: &20560040 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.1.2
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *20560040
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: em-posixmq
|
38
|
-
requirement: &
|
38
|
+
requirement: &20559520 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.2.3
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *20559520
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: em-udns
|
49
|
-
requirement: &
|
49
|
+
requirement: &20559040 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.3.6
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *20559040
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: escape_utils
|
60
|
-
requirement: &
|
60
|
+
requirement: &20558560 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 0.2.4
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *20558560
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: term-ansicolor
|
71
|
-
requirement: &
|
71
|
+
requirement: &20558180 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *20558180
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: posix-spawn
|
82
|
-
requirement: &
|
82
|
+
requirement: &20557640 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 0.3.6
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *20557640
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: rake
|
93
|
-
requirement: &
|
93
|
+
requirement: &20557020 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
version: 0.9.2
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *20557020
|
102
102
|
description: ! 'OverSIP is an async SIP proxy/server programmable in Ruby language.
|
103
103
|
Some features of OverSIP are:
|
104
104
|
|
@@ -167,13 +167,12 @@ files:
|
|
167
167
|
- lib/oversip/sip/constants.rb
|
168
168
|
- lib/oversip/sip/launcher.rb
|
169
169
|
- lib/oversip/sip/listeners/tls_server.rb
|
170
|
-
- lib/oversip/sip/listeners/
|
170
|
+
- lib/oversip/sip/listeners/udp_connection.rb
|
171
|
+
- lib/oversip/sip/listeners/connection.rb
|
171
172
|
- lib/oversip/sip/listeners/ipv4_tls_server.rb
|
172
173
|
- lib/oversip/sip/listeners/ipv6_udp_server.rb
|
173
174
|
- lib/oversip/sip/listeners/ipv6_tcp_server.rb
|
174
|
-
- lib/oversip/sip/listeners/reactor.rb
|
175
175
|
- lib/oversip/sip/listeners/ipv4_udp_server.rb
|
176
|
-
- lib/oversip/sip/listeners/udp_reactor.rb
|
177
176
|
- lib/oversip/sip/listeners/tcp_server.rb
|
178
177
|
- lib/oversip/sip/listeners/tcp_client.rb
|
179
178
|
- lib/oversip/sip/listeners/tls_client.rb
|
@@ -183,37 +182,33 @@ files:
|
|
183
182
|
- lib/oversip/sip/listeners/tls_tunnel_server.rb
|
184
183
|
- lib/oversip/sip/listeners/ipv4_tls_client.rb
|
185
184
|
- lib/oversip/sip/listeners/ipv6_tls_server.rb
|
186
|
-
- lib/oversip/sip/listeners/tls_tunnel_reactor.rb
|
187
185
|
- lib/oversip/sip/listeners/ipv6_tls_tunnel_server.rb
|
186
|
+
- lib/oversip/sip/listeners/tcp_connection.rb
|
188
187
|
- lib/oversip/sip/listeners/ipv6_tls_client.rb
|
189
188
|
- lib/oversip/sip/listeners/ipv4_tls_tunnel_server.rb
|
189
|
+
- lib/oversip/sip/listeners/tls_tunnel_connection.rb
|
190
190
|
- lib/oversip/sip/grammar/uri.rb
|
191
191
|
- lib/oversip/sip/grammar/name_addr.rb
|
192
192
|
- lib/oversip/sip/modules/registrar_without_path.rb
|
193
193
|
- lib/oversip/sip/modules/core.rb
|
194
194
|
- lib/oversip/sip/modules/user_assertion.rb
|
195
195
|
- lib/oversip/websocket/listeners.rb
|
196
|
-
- lib/oversip/websocket/ws_app.rb
|
197
196
|
- lib/oversip/websocket/http_request.rb
|
198
197
|
- lib/oversip/websocket/ws_framing.rb
|
198
|
+
- lib/oversip/websocket/websocket.rb
|
199
199
|
- lib/oversip/websocket/constants.rb
|
200
200
|
- lib/oversip/websocket/launcher.rb
|
201
|
-
- lib/oversip/websocket/
|
202
|
-
- lib/oversip/websocket/listeners/
|
203
|
-
- lib/oversip/websocket/listeners/
|
204
|
-
- lib/oversip/websocket/listeners/
|
205
|
-
- lib/oversip/websocket/listeners/
|
206
|
-
- lib/oversip/websocket/listeners/
|
207
|
-
- lib/oversip/websocket/listeners/
|
208
|
-
- lib/oversip/websocket/listeners/
|
209
|
-
- lib/oversip/websocket/listeners/
|
210
|
-
- lib/oversip/websocket/listeners/
|
211
|
-
- lib/oversip/websocket/
|
212
|
-
- lib/oversip/websocket/ws_apps/ipv4_ws_sip_app.rb
|
213
|
-
- lib/oversip/websocket/ws_apps/ipv4_wss_sip_app.rb
|
214
|
-
- lib/oversip/websocket/ws_apps/ipv6_ws_sip_app.rb
|
215
|
-
- lib/oversip/websocket/ws_apps/ws_autobahn_app.rb
|
216
|
-
- lib/oversip/websocket/ws_apps/ws_sip_app.rb
|
201
|
+
- lib/oversip/websocket/ws_sip_app.rb
|
202
|
+
- lib/oversip/websocket/listeners/ws_server.rb
|
203
|
+
- lib/oversip/websocket/listeners/ipv4_wss_server.rb
|
204
|
+
- lib/oversip/websocket/listeners/connection.rb
|
205
|
+
- lib/oversip/websocket/listeners/ipv6_ws_server.rb
|
206
|
+
- lib/oversip/websocket/listeners/ipv4_wss_tunnel_server.rb
|
207
|
+
- lib/oversip/websocket/listeners/ipv6_wss_tunnel_server.rb
|
208
|
+
- lib/oversip/websocket/listeners/wss_server.rb
|
209
|
+
- lib/oversip/websocket/listeners/ipv4_ws_server.rb
|
210
|
+
- lib/oversip/websocket/listeners/ipv6_wss_server.rb
|
211
|
+
- lib/oversip/websocket/listeners/wss_tunnel_server.rb
|
217
212
|
- ext/common/ruby_c_util.h
|
218
213
|
- ext/common/c_util.h
|
219
214
|
- ext/sip_parser/extconf.rb
|
@@ -262,6 +257,7 @@ files:
|
|
262
257
|
- test/oversip_test_helper.rb
|
263
258
|
- test/test_sip_parser.rb
|
264
259
|
- test/test_http_parser.rb
|
260
|
+
- test/test_uri.rb
|
265
261
|
- bin/oversip
|
266
262
|
homepage: http://www.oversip.net
|
267
263
|
licenses: []
|
@@ -278,9 +274,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
278
274
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
279
275
|
none: false
|
280
276
|
requirements:
|
281
|
-
- - ! '
|
277
|
+
- - ! '>='
|
282
278
|
- !ruby/object:Gem::Version
|
283
|
-
version:
|
279
|
+
version: '0'
|
284
280
|
requirements: []
|
285
281
|
rubyforge_project:
|
286
282
|
rubygems_version: 1.8.11
|
@@ -291,4 +287,5 @@ test_files:
|
|
291
287
|
- test/oversip_test_helper.rb
|
292
288
|
- test/test_sip_parser.rb
|
293
289
|
- test/test_http_parser.rb
|
290
|
+
- test/test_uri.rb
|
294
291
|
has_rdoc: false
|
@@ -1,77 +0,0 @@
|
|
1
|
-
module OverSIP::WebSocket
|
2
|
-
|
3
|
-
class WsApp
|
4
|
-
|
5
|
-
include ::OverSIP::Logger
|
6
|
-
|
7
|
-
|
8
|
-
def self.class_init
|
9
|
-
@@max_message_size = ::OverSIP.configuration[:websocket][:max_ws_message_size]
|
10
|
-
@@ws_keepalive_interval = ::OverSIP.configuration[:websocket][:ws_keepalive_interval]
|
11
|
-
end
|
12
|
-
|
13
|
-
|
14
|
-
def initialize connection, ws_framing
|
15
|
-
@connection = connection
|
16
|
-
@ws_framing = ws_framing
|
17
|
-
@ws_message = ::IO::Buffer.new
|
18
|
-
@cvars = connection.cvars
|
19
|
-
|
20
|
-
# Mantain WebSocket keepalive.
|
21
|
-
@ws_framing.do_keep_alive @@ws_keepalive_interval if @@ws_keepalive_interval
|
22
|
-
end
|
23
|
-
|
24
|
-
|
25
|
-
def close_connection status=nil, reason=nil
|
26
|
-
@ws_framing.send_close_frame status, reason
|
27
|
-
@connection.ws_locally_closed = true
|
28
|
-
end
|
29
|
-
|
30
|
-
|
31
|
-
def receive_payload_data payload_data
|
32
|
-
# payload_data is always Encoding::BINARY so also @ws_message.to_str.
|
33
|
-
@ws_message << payload_data
|
34
|
-
|
35
|
-
# Check max message size.
|
36
|
-
if @ws_message.size > @@max_message_size
|
37
|
-
close_connection 1009, "message too big"
|
38
|
-
return false
|
39
|
-
end
|
40
|
-
true
|
41
|
-
end
|
42
|
-
|
43
|
-
|
44
|
-
def message_done type
|
45
|
-
log_system_debug "received WS message: length=#{@ws_message.size}" if $oversip_debug
|
46
|
-
|
47
|
-
case type
|
48
|
-
|
49
|
-
when :text
|
50
|
-
ws_message = @ws_message.to_str.force_encoding ::Encoding::UTF_8
|
51
|
-
process_text_message ws_message
|
52
|
-
|
53
|
-
when :binary
|
54
|
-
process_binary_message @ws_message.to_str # As IO::Buffer#to_str always generates Encoding::BINARY.
|
55
|
-
end
|
56
|
-
|
57
|
-
@ws_message.clear
|
58
|
-
true
|
59
|
-
end
|
60
|
-
|
61
|
-
|
62
|
-
def tcp_closed
|
63
|
-
nil
|
64
|
-
end
|
65
|
-
|
66
|
-
|
67
|
-
# Methods to be overriden by child classes.
|
68
|
-
def process_text_message ws_message
|
69
|
-
end
|
70
|
-
|
71
|
-
def process_binary_message ws_message
|
72
|
-
end
|
73
|
-
|
74
|
-
|
75
|
-
end # WsApp
|
76
|
-
|
77
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module OverSIP::WebSocket
|
2
|
-
|
3
|
-
class WsAutobahnApp < WsApp
|
4
|
-
|
5
|
-
LOG_ID = "WS IPv4 AutoBahn app"
|
6
|
-
def log_id
|
7
|
-
LOG_ID
|
8
|
-
end
|
9
|
-
|
10
|
-
def process_text_message ws_message
|
11
|
-
#log_system_info "received WS text message: length=#{ws_message.bytesize}, replying the same..."
|
12
|
-
@ws_framing.send_text_frame ws_message
|
13
|
-
end
|
14
|
-
|
15
|
-
|
16
|
-
def process_binary_message ws_message
|
17
|
-
#log_system_info "received WS binary message: length=#{ws_message.bytesize}, replying the same..."
|
18
|
-
@ws_framing.send_binary_frame ws_message
|
19
|
-
end
|
20
|
-
|
21
|
-
end # WsAutobahnApp
|
22
|
-
|
23
|
-
end
|