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 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