oversip 1.1.0.beta4 → 1.1.0.beta5
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/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
|