oversip 1.1.0.beta4 → 1.1.0.beta5
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +8 -4
- data/LICENSE +1 -1
- data/etc/oversip.conf +5 -5
- data/etc/proxies.conf +8 -9
- data/etc/server.rb +9 -9
- data/lib/oversip/default_server.rb +7 -7
- data/lib/oversip/proxies_config.rb +2 -2
- data/lib/oversip/sip/message.rb +3 -3
- data/lib/oversip/sip/proxy.rb +11 -10
- data/lib/oversip/version.rb +4 -4
- data/lib/oversip/websocket/constants.rb +1 -1
- data/lib/oversip/websocket/listeners/tcp_server.rb +3 -3
- metadata +43 -25
data/AUTHORS
CHANGED
@@ -9,10 +9,14 @@ CONTRIBUTORS
|
|
9
9
|
============
|
10
10
|
|
11
11
|
- Jon Bonilla <manwe@aholab.ehu.es> (Github @manwe)
|
12
|
-
Lot of help with Debian package.
|
13
12
|
|
14
|
-
|
15
|
-
|
13
|
+
Lots of help with packaging for Debian based distributions.
|
14
|
+
The first deployment of OverSIP in production for thousands of clients.
|
15
|
+
|
16
|
+
- Saúl Ibarra Corretgé <saghul@gmail.com> (Github @saghul)
|
17
|
+
|
18
|
+
Testing, ideas, proposals, too many proposals.
|
16
19
|
|
17
20
|
- José Luis Millán <jmillan@aliax.net> (Github @jmillan)
|
18
|
-
|
21
|
+
|
22
|
+
Intensive testing with JsSIP library acting as a SIP Outbound UA with OverSIP.
|
data/LICENSE
CHANGED
@@ -3,7 +3,7 @@ Maintainer: Iñaki Baz Castillo <ibc@aliax.net>
|
|
3
3
|
Copyright (c) 2012 Iñaki Baz Castillo <ibc@aliax.net>
|
4
4
|
|
5
5
|
|
6
|
-
License: The MIT
|
6
|
+
License: The MIT License
|
7
7
|
|
8
8
|
Permission is hereby granted, free of charge, to any person obtaining
|
9
9
|
a copy of this software and associated documentation files (the
|
data/etc/oversip.conf
CHANGED
@@ -21,7 +21,7 @@ core:
|
|
21
21
|
#
|
22
22
|
nameservers: null
|
23
23
|
|
24
|
-
# Syslog facility. Can be "user", "local0"..."local7".
|
24
|
+
# Syslog facility. Can be "kern", "user", "daemon", "local0"..."local7".
|
25
25
|
# By default "daemon".
|
26
26
|
#
|
27
27
|
syslog_facility: daemon
|
@@ -105,7 +105,7 @@ sip:
|
|
105
105
|
# TCP keepalive interval (in seconds).
|
106
106
|
# When acting as a TCP server, OverSIP sends TCP packets with null data payload
|
107
107
|
# as described in http://tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/.
|
108
|
-
# If not set, TCP keepalive is
|
108
|
+
# If not set, TCP keepalive is disabled.
|
109
109
|
# Minimun value is 180 seconds. Default value is _null_ (not enabled).
|
110
110
|
#
|
111
111
|
tcp_keepalive_interval: 300
|
@@ -207,7 +207,7 @@ tls:
|
|
207
207
|
# chain of X509 certificates in PEM format, with the most-resolved certificate at the
|
208
208
|
# top of the file, successive intermediate certs in the middle, and the root (or CA)
|
209
209
|
# cert at the bottom.
|
210
|
-
# If not set, TLS is
|
210
|
+
# If not set, TLS is disabled. Default value is _null_.
|
211
211
|
# If a relative path is given, it's searched under the tls/ directoy in the OverSIP
|
212
212
|
# configuration directory (typically /etc/oversip/).
|
213
213
|
#
|
@@ -215,7 +215,7 @@ tls:
|
|
215
215
|
|
216
216
|
# Server TLS private certificate. It must be the name of a readable file containing a
|
217
217
|
# private key in the PEM format.
|
218
|
-
# If not set, TLS is
|
218
|
+
# If not set, TLS is disabled. Default value is _null_.
|
219
219
|
# If a relative path is given, it's searched under the tls/ directoy in the OverSIP
|
220
220
|
# configuration directory (typically /etc/oversip/).
|
221
221
|
# NOTE: The private key MUST NOT require password.
|
@@ -227,7 +227,7 @@ tls:
|
|
227
227
|
# This is useful for storing the list of trusted CAs (i.e. http://curl.haxx.se/ca/cacert.pem)
|
228
228
|
# or CAs not in a standard trust hierarchy.
|
229
229
|
# This is *required* for validating certificates provided by remote peers.
|
230
|
-
# If _null_ this feature is
|
230
|
+
# If _null_ this feature is dssabled. Default value is _null_.
|
231
231
|
# If a relative path is given, it's searched under the tls/ directoy in the OverSIP
|
232
232
|
# configuration directory (typically /etc/oversip/).
|
233
233
|
#
|
data/etc/proxies.conf
CHANGED
@@ -13,12 +13,11 @@
|
|
13
13
|
#
|
14
14
|
default_proxy:
|
15
15
|
|
16
|
-
#
|
17
|
-
# For initial INVITE, SUBSCRIBE and REFER requests the proxy adds Record-Route header(s).
|
16
|
+
# For initial INVITE, SUBSCRIBE and REFER requests and in-dialog NOTIFY the proxy adds Record-Route header(s).
|
18
17
|
# For REGISTER requests the proxy adds Path header(s).
|
19
18
|
# By default _yes_.
|
20
19
|
#
|
21
|
-
|
20
|
+
do_record_routing: yes
|
22
21
|
|
23
22
|
# Enable DNS cache. By default _yes_.
|
24
23
|
#
|
@@ -35,7 +34,7 @@ default_proxy:
|
|
35
34
|
#
|
36
35
|
use_naptr: yes
|
37
36
|
|
38
|
-
# Use DNS SRV. If set, SRV query is performed when URI host is a domain and has no port
|
37
|
+
# Use DNS SRV. If set, SRV query is performed when URI host is a domain and has no port.
|
39
38
|
# If this is set to _no_ then _use_naptr_ is also set to _no_.
|
40
39
|
# Default value is _yes_.
|
41
40
|
#
|
@@ -72,21 +71,21 @@ default_proxy:
|
|
72
71
|
#
|
73
72
|
dns_failover_on_503: yes
|
74
73
|
|
75
|
-
# INVITE transaction timeout
|
74
|
+
# INVITE transaction timeout (in seconds).
|
76
75
|
# Time waiting for a provisional or final response.
|
77
76
|
# Minimum value is 2, maximum value is 64.
|
78
77
|
# Default value is 32.
|
79
78
|
#
|
80
79
|
timer_B: 32
|
81
80
|
|
82
|
-
# Proxy INVITE transaction timeout
|
81
|
+
# Proxy INVITE transaction timeout (in seconds).
|
83
82
|
# Time waiting for a final response.
|
84
83
|
# Minimum value is 8, maximum value is 180.
|
85
84
|
# Default value is 120.
|
86
85
|
#
|
87
86
|
timer_C: 120
|
88
87
|
|
89
|
-
# Non-INVITE transaction timeout
|
88
|
+
# Non-INVITE transaction timeout (in seconds).
|
90
89
|
# Time waiting for a final response.
|
91
90
|
# Minimum value is 2, maximum value is 64.
|
92
91
|
# Default value is 32.
|
@@ -96,7 +95,7 @@ default_proxy:
|
|
96
95
|
# Validate TLS certificate from the contacted server (just when using TLS transport).
|
97
96
|
# If set to _yes_, the contacted server MUST present a valid certificate. The connection
|
98
97
|
# will be inmediately closed otherwise and a 500 error locally generated.
|
99
|
-
# NOTE: This does not match the SIP request destination host
|
98
|
+
# NOTE: This does not match the SIP request destination host against the hosts asserted by
|
100
99
|
# the certificate. This just performs TLS certificate pure validation.
|
101
100
|
# Default value is _no_.
|
102
101
|
tls_validation: no
|
@@ -134,4 +133,4 @@ proxy_out:
|
|
134
133
|
timer_F: 6
|
135
134
|
|
136
135
|
|
137
|
-
# Add your own proxy configurations here and/or replace the above ones.
|
136
|
+
# Add your own proxy configurations here and/or replace the above ones.
|
data/etc/server.rb
CHANGED
@@ -34,14 +34,14 @@ end
|
|
34
34
|
### OverSIP System Events:
|
35
35
|
|
36
36
|
|
37
|
-
# This
|
37
|
+
# This callback is called once the OverSIP reactor has been started.
|
38
38
|
#
|
39
39
|
# def (OverSIP::SystemEvents).on_started
|
40
40
|
# [...]
|
41
41
|
# end
|
42
42
|
|
43
43
|
|
44
|
-
# This
|
44
|
+
# This callback is called when a USR1 signal is received by OverSIP main
|
45
45
|
# process and allows the user to set custom code to be executed
|
46
46
|
# or reloaded.
|
47
47
|
#
|
@@ -50,7 +50,7 @@ end
|
|
50
50
|
# end
|
51
51
|
|
52
52
|
|
53
|
-
# This
|
53
|
+
# This callback is called after OverSIP has been terminated. It's called
|
54
54
|
# with argument "error" which is _true_ in case OverSIP has died in an
|
55
55
|
# unexpected way.
|
56
56
|
#
|
@@ -64,7 +64,7 @@ end
|
|
64
64
|
### OverSIP SIP Events:
|
65
65
|
|
66
66
|
|
67
|
-
# This
|
67
|
+
# This callback is called when a SIP request is received.
|
68
68
|
#
|
69
69
|
def (OverSIP::SipEvents).on_request request
|
70
70
|
|
@@ -109,7 +109,7 @@ def (OverSIP::SipEvents).on_request request
|
|
109
109
|
|
110
110
|
if MyExampleApp::SIP_USE_MODULE_REGISTRAR_WITHOUT_PATH
|
111
111
|
# Extract the Outbound flow token from the RURI.
|
112
|
-
OverSIP::SIP::Modules::RegistrarWithoutPath.extract_outbound_from_ruri request
|
112
|
+
::OverSIP::SIP::Modules::RegistrarWithoutPath.extract_outbound_from_ruri request
|
113
113
|
end
|
114
114
|
|
115
115
|
# The request goes to a client using Outbound through OverSIP.
|
@@ -147,7 +147,7 @@ def (OverSIP::SipEvents).on_request request
|
|
147
147
|
# An outgoing initial request.
|
148
148
|
case request.sip_method
|
149
149
|
|
150
|
-
when :INVITE, :MESSAGE, :OPTIONS, :SUBSCRIBE, :PUBLISH
|
150
|
+
when :INVITE, :MESSAGE, :OPTIONS, :SUBSCRIBE, :PUBLISH, :REFER
|
151
151
|
|
152
152
|
if MyExampleApp::SIP_USE_MODULE_USER_ASSERTION
|
153
153
|
::OverSIP::SIP::Modules::UserAssertion.add_pai request
|
@@ -223,7 +223,7 @@ end
|
|
223
223
|
### OverSIP WebSocket Events:
|
224
224
|
|
225
225
|
|
226
|
-
# This
|
226
|
+
# This callback is called when a new WebSocket connection is being requested.
|
227
227
|
# Here you can inspect the connection and the HTTP GET request. If you
|
228
228
|
# decide not to accept this connection then call to:
|
229
229
|
#
|
@@ -238,10 +238,10 @@ end
|
|
238
238
|
# end
|
239
239
|
|
240
240
|
|
241
|
-
# This
|
241
|
+
# This callback is called when a WebSocket connection is closed. The connection
|
242
242
|
# is given as first argument along with a second argument "client_closed" which
|
243
243
|
# is _true_ in case the WebSocket connection was closed by the client.
|
244
244
|
#
|
245
|
-
# def (OverSIP::WebSocketEvents).
|
245
|
+
# def (OverSIP::WebSocketEvents).on_disconnection connection, client_closed
|
246
246
|
# [...]
|
247
247
|
# end
|
@@ -5,15 +5,15 @@ module OverSIP
|
|
5
5
|
extend ::OverSIP::Logger
|
6
6
|
|
7
7
|
def self.on_started
|
8
|
-
log_system_notice "on_started()
|
8
|
+
log_system_notice "on_started() callback is not defined"
|
9
9
|
end
|
10
10
|
|
11
11
|
def self.on_user_reload
|
12
|
-
log_system_notice "on_user_reload()
|
12
|
+
log_system_notice "on_user_reload() callback is not defined"
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.on_terminated error
|
16
|
-
log_system_notice "on_terminated()
|
16
|
+
log_system_notice "on_terminated() callback is not defined"
|
17
17
|
end
|
18
18
|
|
19
19
|
|
@@ -24,7 +24,7 @@ module OverSIP
|
|
24
24
|
extend ::OverSIP::Logger
|
25
25
|
|
26
26
|
def self.on_request request
|
27
|
-
log_system_notice "on_request()
|
27
|
+
log_system_notice "on_request() callback is not defined"
|
28
28
|
end
|
29
29
|
|
30
30
|
end
|
@@ -34,11 +34,11 @@ module OverSIP
|
|
34
34
|
extend ::OverSIP::Logger
|
35
35
|
|
36
36
|
def self.on_connection connection, http_request
|
37
|
-
log_system_notice "on_connection()
|
37
|
+
log_system_notice "on_connection() callback is not defined"
|
38
38
|
end
|
39
39
|
|
40
|
-
def self.
|
41
|
-
log_system_notice "
|
40
|
+
def self.on_disconnection connection, client_closed
|
41
|
+
log_system_notice "on_disconnection() callback is not defined"
|
42
42
|
end
|
43
43
|
|
44
44
|
end
|
@@ -10,7 +10,7 @@ module OverSIP
|
|
10
10
|
end
|
11
11
|
|
12
12
|
@proxy_configuration = {
|
13
|
-
:
|
13
|
+
:do_record_routing => true,
|
14
14
|
:use_dns => true,
|
15
15
|
:use_dns_cache => true,
|
16
16
|
:dns_cache_time => 300,
|
@@ -27,7 +27,7 @@ module OverSIP
|
|
27
27
|
}
|
28
28
|
|
29
29
|
PROXY_CONFIG_VALIDATIONS = {
|
30
|
-
:
|
30
|
+
:do_record_routing => :boolean,
|
31
31
|
:use_dns => :boolean,
|
32
32
|
:use_dns_cache => :boolean,
|
33
33
|
:dns_cache_time => [ :fixnum, [ :greater_equal_than, 300 ] ],
|
data/lib/oversip/sip/message.rb
CHANGED
@@ -5,7 +5,7 @@ module OverSIP::SIP
|
|
5
5
|
include ::OverSIP::Logger
|
6
6
|
|
7
7
|
DIALOG_FORMING_METHODS = { :INVITE=>true, :SUBSCRIBE=>true, :REFER=>true }
|
8
|
-
|
8
|
+
RECORD_ROUTING_AWARE_METHODS = { :INVITE=>true, :REGISTER=>true, :SUBSCRIBE=>true, :REFER=>true }
|
9
9
|
OUTBOUND_AWARE_METHODS = { :INVITE=>true, :REGISTER=>true, :SUBSCRIBE=>true, :REFER=>true }
|
10
10
|
EMPTY_ARRAY = [].freeze
|
11
11
|
|
@@ -79,8 +79,8 @@ module OverSIP::SIP
|
|
79
79
|
DIALOG_FORMING_METHODS[@sip_method]
|
80
80
|
end
|
81
81
|
|
82
|
-
def
|
83
|
-
|
82
|
+
def record_routing_aware?
|
83
|
+
RECORD_ROUTING_AWARE_METHODS[@sip_method]
|
84
84
|
end
|
85
85
|
|
86
86
|
def outbound_aware?
|
data/lib/oversip/sip/proxy.rb
CHANGED
@@ -265,17 +265,19 @@ module OverSIP::SIP
|
|
265
265
|
return if @num_target and @num_target > 0
|
266
266
|
|
267
267
|
add_rr_path = false
|
268
|
-
if @request.initial? && @request.loose_record_aware?
|
269
|
-
do_loose_routing = @proxy_conf[:do_loose_routing]
|
270
268
|
|
271
|
-
|
269
|
+
# NOTE: As per RFC 6665 the proxy MUST add Record-Route to in-dialog NOTIFY's.
|
270
|
+
if (@request.initial? and @request.record_routing_aware?) or @request.sip_method == :NOTIFY
|
271
|
+
do_record_routing = @proxy_conf[:do_record_routing]
|
272
|
+
|
273
|
+
# Request has no previous RR/Path and current proxy performs record-routing.
|
272
274
|
# So add RR/Path.
|
273
|
-
if ! @request.in_rr &&
|
275
|
+
if ! @request.in_rr && do_record_routing
|
274
276
|
add_rr_path = true
|
275
277
|
|
276
|
-
# Request has previous RR/Path and current proxy does not perform
|
278
|
+
# Request has previous RR/Path and current proxy does not perform record-routing.
|
277
279
|
# So don't add RR/Path and remove the existing one.
|
278
|
-
elsif @request.in_rr && !
|
280
|
+
elsif @request.in_rr && ! do_record_routing
|
279
281
|
case @request.in_rr
|
280
282
|
when :rr, :outgoing_outbound_rr, :incoming_outbound_rr, :both_outbound_rr
|
281
283
|
@request.delete_header_top "Record-Route"
|
@@ -285,8 +287,8 @@ module OverSIP::SIP
|
|
285
287
|
@request.in_rr = nil
|
286
288
|
|
287
289
|
# Remaining cases are:
|
288
|
-
# - Request has previous RR/Path and current proxy performs
|
289
|
-
# - Request has no previous RR/Path and current proxy does not perform
|
290
|
+
# - Request has previous RR/Path and current proxy performs record-routing.
|
291
|
+
# - Request has no previous RR/Path and current proxy does not perform record-routing.
|
290
292
|
# So don't add RR/Path.
|
291
293
|
end
|
292
294
|
end
|
@@ -300,7 +302,6 @@ module OverSIP::SIP
|
|
300
302
|
end
|
301
303
|
|
302
304
|
# Add Record-Route or Path header.
|
303
|
-
# Here we only arrive if @request.loose_record_aware?, so method is INVITE, REGISTER, SUBSCRIBE or REFER.
|
304
305
|
if add_rr_path
|
305
306
|
case @request.sip_method
|
306
307
|
|
@@ -321,7 +322,7 @@ module OverSIP::SIP
|
|
321
322
|
@request.insert_header "Path", @request.connection.class.record_route
|
322
323
|
end
|
323
324
|
|
324
|
-
# Record-Route for INVITE, SUBSCRIBE, REFER.
|
325
|
+
# Record-Route for INVITE, SUBSCRIBE, REFER and in-dialog NOTIFY.
|
325
326
|
else
|
326
327
|
if @request.outgoing_outbound_requested?
|
327
328
|
if @request.incoming_outbound_requested?
|
data/lib/oversip/version.rb
CHANGED
@@ -6,16 +6,16 @@ module OverSIP
|
|
6
6
|
MAJOR = 1
|
7
7
|
MINOR = 1
|
8
8
|
TINY = 0
|
9
|
-
DEVEL = "
|
9
|
+
DEVEL = "beta5" # Set to nil for stable releases.
|
10
10
|
end
|
11
11
|
|
12
12
|
PROGRAM_NAME = "OverSIP"
|
13
|
-
PROGRAM_NAME_LOW = PROGRAM_NAME.downcase
|
14
|
-
PROGRAM_DESC = "OverSIP Server"
|
15
13
|
VERSION = [Version::MAJOR, Version::MINOR, Version::TINY].join(".")
|
16
14
|
VERSION << ".#{Version::DEVEL}" if Version::DEVEL
|
17
15
|
AUTHOR = "Inaki Baz Castillo"
|
18
16
|
AUTHOR_EMAIL = "ibc@aliax.net"
|
19
|
-
|
17
|
+
HOMEPAGE = "http://www.oversip.net"
|
18
|
+
year = "2012"
|
19
|
+
DESCRIPTION = "#{PROGRAM_NAME} #{VERSION}\n#{HOMEPAGE}\n#{year}, #{AUTHOR} <#{AUTHOR_EMAIL}>"
|
20
20
|
|
21
21
|
end
|
@@ -48,7 +48,7 @@ module OverSIP::WebSocket
|
|
48
48
|
|
49
49
|
REASON_PHARSE_NOT_SET = "Reason Phrase Not Set"
|
50
50
|
|
51
|
-
HDR_SERVER = "Server: #{::OverSIP::
|
51
|
+
HDR_SERVER = "Server: #{::OverSIP::PROGRAM_NAME}/#{::OverSIP::VERSION}".freeze
|
52
52
|
|
53
53
|
WS_SIP_PROTOCOL = "sip"
|
54
54
|
WS_AUTOBAHN_PROTOCOL = "autobahn"
|
@@ -75,9 +75,9 @@ module OverSIP::WebSocket
|
|
75
75
|
|
76
76
|
if @ws_handshake_done
|
77
77
|
begin
|
78
|
-
::OverSIP::WebSocketEvents.
|
78
|
+
::OverSIP::WebSocketEvents.on_disconnection self, !@ws_locally_closed
|
79
79
|
rescue ::Exception => e
|
80
|
-
log_system_error "error calling OverSIP::WebSocketEvents.
|
80
|
+
log_system_error "error calling OverSIP::WebSocketEvents.on_disconnection():"
|
81
81
|
log_system_error e
|
82
82
|
end
|
83
83
|
end unless $!
|
@@ -264,7 +264,7 @@ module OverSIP::WebSocket
|
|
264
264
|
end
|
265
265
|
|
266
266
|
|
267
|
-
def http_reject status_code, reason_phrase=nil, extra_headers=nil
|
267
|
+
def http_reject status_code=403, reason_phrase=nil, extra_headers=nil
|
268
268
|
@http_request.reply(status_code, reason_phrase, extra_headers)
|
269
269
|
close_connection_after_writing
|
270
270
|
@state = :ignore
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oversip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.0.
|
4
|
+
version: 1.1.0.beta5
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: eventmachine-le
|
16
|
-
requirement: &
|
16
|
+
requirement: &19987280 !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: *19987280
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: iobuffer
|
27
|
-
requirement: &
|
27
|
+
requirement: &19986780 !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: *19986780
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: em-posixmq
|
38
|
-
requirement: &
|
38
|
+
requirement: &19986300 !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: *19986300
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: em-udns
|
49
|
-
requirement: &
|
49
|
+
requirement: &19985820 !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: *19985820
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: escape_utils
|
60
|
-
requirement: &
|
60
|
+
requirement: &19985360 !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: *19985360
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: term-ansicolor
|
71
|
-
requirement: &
|
71
|
+
requirement: &19984980 !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: *19984980
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: posix-spawn
|
82
|
-
requirement: &
|
82
|
+
requirement: &19984260 !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: *19984260
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: rake
|
93
|
-
requirement: &
|
93
|
+
requirement: &19983760 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,13 +98,31 @@ dependencies:
|
|
98
98
|
version: 0.9.2
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
102
|
-
description: !
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
101
|
+
version_requirements: *19983760
|
102
|
+
description: ! 'OverSIP is an async SIP proxy/server programmable in Ruby language.
|
103
|
+
Some features of OverSIP are:
|
104
|
+
|
105
|
+
- SIP transports: UDP, TCP, TLS and WebSocket.
|
106
|
+
|
107
|
+
- Full IPv4 and IPv6 support.
|
108
|
+
|
109
|
+
- RFC 3263: SIP DNS mechanism (NAPTR, SRV, A, AAAA) for failover and load balancing
|
110
|
+
based on DNS.
|
111
|
+
|
112
|
+
- RFC 5626: OverSIP is a perfect Outbound Edge Proxy, including an integrated STUN
|
113
|
+
server.
|
114
|
+
|
115
|
+
- Fully programmable in Ruby language (make SIP easy).
|
116
|
+
|
117
|
+
- Fast and efficient: OverSIP core is coded in C language.
|
118
|
+
|
119
|
+
OverSIP is build on top of EventMachine-LE async library which follows the Reactor
|
120
|
+
Design Pattern, allowing thousands of concurrent connections and requests in a never-blocking
|
121
|
+
fashion.
|
122
|
+
|
123
|
+
'
|
124
|
+
email:
|
125
|
+
- ibc@aliax.net
|
108
126
|
executables:
|
109
127
|
- oversip
|
110
128
|
extensions:
|
@@ -268,7 +286,7 @@ rubyforge_project:
|
|
268
286
|
rubygems_version: 1.8.11
|
269
287
|
signing_key:
|
270
288
|
specification_version: 3
|
271
|
-
summary: the SIP
|
289
|
+
summary: OverSIP (the SIP framework you dreamed about)
|
272
290
|
test_files:
|
273
291
|
- test/oversip_test_helper.rb
|
274
292
|
- test/test_sip_parser.rb
|