oversip 1.1.0.beta5 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|