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 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
- - Saúl Ibarra <saghul@gmail.com> (Github @saghul)
15
- Testing, ideas, proposals, too much proposals.
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
- Intensive testing with JsSIP library acting as client with OverSIP.
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 LICENSE
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 dissabled.
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 dissabled. Default value is _null_.
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 dissabled. Default value is _null_.
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 dissabled. Default value is _null_.
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
- # Loose-Routing.
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
- do_loose_routing: yes
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 timer (in seconds).
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 timer (in seconds).
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 timer (in seconds).
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 agains the hosts asserted by
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 method is called once the OverSIP reactor has been started.
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 method is called when a USR1 signal is received by OverSIP main
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 method is called after OverSIP has been terminated. It's called
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 method is called when a SIP request is received.
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 method is called when a new WebSocket connection is being requested.
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 method is called when a WebSocket connection is closed. The connection
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).on_connection_closed connection, client_closed
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() event is not defined"
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() event is not defined"
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() event is not defined"
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() event is not defined"
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() event is not defined"
37
+ log_system_notice "on_connection() callback is not defined"
38
38
  end
39
39
 
40
- def self.on_connection_closed connection, client_closed
41
- log_system_notice "on_connection_closed() event is not defined"
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
- :do_loose_routing => true,
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
- :do_loose_routing => :boolean,
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 ] ],
@@ -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
- LOOSE_RECORD_AWARE_METHODS = { :INVITE=>true, :REGISTER=>true, :SUBSCRIBE=>true, :REFER=>true }
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 loose_record_aware?
83
- LOOSE_RECORD_AWARE_METHODS[@sip_method]
82
+ def record_routing_aware?
83
+ RECORD_ROUTING_AWARE_METHODS[@sip_method]
84
84
  end
85
85
 
86
86
  def outbound_aware?
@@ -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
- # Request has no previous RR/Path and current proxy performs loose-routing.
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 && do_loose_routing
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 loose-routing.
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 && ! do_loose_routing
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 loose-routing.
289
- # - Request has no previous RR/Path and current proxy does not perform loose-routing.
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?
@@ -6,16 +6,16 @@ module OverSIP
6
6
  MAJOR = 1
7
7
  MINOR = 1
8
8
  TINY = 0
9
- DEVEL = "beta4" # Set to nil for stable releases.
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
- DESCRIPTION = "#{PROGRAM_NAME} #{VERSION}\n2012, #{AUTHOR} <#{AUTHOR_EMAIL}>"
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::PROGRAM_DESC}/#{::OverSIP::VERSION}"
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.on_connection_closed self, !@ws_locally_closed
78
+ ::OverSIP::WebSocketEvents.on_disconnection self, !@ws_locally_closed
79
79
  rescue ::Exception => e
80
- log_system_error "error calling OverSIP::WebSocketEvents.on_connection_closed():"
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.beta4
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-08 00:00:00.000000000 Z
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: &18475300 !ruby/object:Gem::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: *18475300
24
+ version_requirements: *19987280
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: iobuffer
27
- requirement: &18474840 !ruby/object:Gem::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: *18474840
35
+ version_requirements: *19986780
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: em-posixmq
38
- requirement: &18474380 !ruby/object:Gem::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: *18474380
46
+ version_requirements: *19986300
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: em-udns
49
- requirement: &18473920 !ruby/object:Gem::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: *18473920
57
+ version_requirements: *19985820
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: escape_utils
60
- requirement: &18473460 !ruby/object:Gem::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: *18473460
68
+ version_requirements: *19985360
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: term-ansicolor
71
- requirement: &18473080 !ruby/object:Gem::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: *18473080
79
+ version_requirements: *19984980
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: posix-spawn
82
- requirement: &18472540 !ruby/object:Gem::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: *18472540
90
+ version_requirements: *19984260
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rake
93
- requirement: &18472040 !ruby/object:Gem::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: *18472040
102
- description: ! "OverSIP is an async SIP server. Built on top of Ruby EventMachine\n
103
- \ library it follows the Reactor Pattern, allowing thousands of concurrent connections
104
- and requests\n handled by a single processor in a never-blocking fashion. It
105
- supports SIP over UDP, TCP, TLS and\n WebSocket transports, full RFC 3263 (async
106
- DNS resolution), Outbound (RFC 5626) and more features."
107
- email: ibc@aliax.net
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 dreams factory
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