oversip 1.2.1 → 1.3.0.dev1

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.
Files changed (61) hide show
  1. data/README.md +28 -4
  2. data/bin/oversip +1 -1
  3. data/etc/proxies.conf +10 -0
  4. data/etc/server.rb +13 -9
  5. data/ext/utils/haproxy_protocol.c +0 -3
  6. data/ext/utils/outbound_utils.c +1 -1
  7. data/ext/utils/utils_ruby.c +0 -1
  8. data/ext/websocket_http_parser/ws_http_parser.c +940 -1903
  9. data/ext/websocket_http_parser/ws_http_parser.h +1 -0
  10. data/lib/oversip/config_validators.rb +2 -2
  11. data/lib/oversip/launcher.rb +275 -240
  12. data/lib/oversip/master_process.rb +7 -2
  13. data/lib/oversip/proxies_config.rb +8 -1
  14. data/lib/oversip/sip/client.rb +304 -0
  15. data/lib/oversip/sip/client_transaction.rb +31 -36
  16. data/lib/oversip/sip/core.rb +7 -4
  17. data/lib/oversip/sip/launcher.rb +30 -30
  18. data/lib/oversip/sip/listeners/connection.rb +4 -0
  19. data/lib/oversip/sip/listeners/ipv4_tcp_server.rb +1 -0
  20. data/lib/oversip/sip/listeners/ipv4_tls_server.rb +1 -0
  21. data/lib/oversip/sip/listeners/ipv4_tls_tunnel_server.rb +1 -0
  22. data/lib/oversip/sip/listeners/ipv4_udp_server.rb +1 -0
  23. data/lib/oversip/sip/listeners/ipv6_tcp_server.rb +1 -0
  24. data/lib/oversip/sip/listeners/ipv6_tls_server.rb +1 -0
  25. data/lib/oversip/sip/listeners/ipv6_tls_tunnel_server.rb +1 -0
  26. data/lib/oversip/sip/listeners/ipv6_udp_server.rb +1 -0
  27. data/lib/oversip/sip/listeners/tcp_client.rb +26 -0
  28. data/lib/oversip/sip/listeners/tcp_connection.rb +7 -1
  29. data/lib/oversip/sip/listeners/tcp_server.rb +1 -1
  30. data/lib/oversip/sip/listeners/tls_client.rb +28 -24
  31. data/lib/oversip/sip/listeners/tls_server.rb +25 -8
  32. data/lib/oversip/sip/listeners/tls_tunnel_connection.rb +1 -24
  33. data/lib/oversip/sip/message.rb +2 -2
  34. data/lib/oversip/sip/message_processor.rb +23 -13
  35. data/lib/oversip/sip/{grammar/name_addr.rb → name_addr.rb} +11 -0
  36. data/lib/oversip/sip/proxy.rb +53 -227
  37. data/lib/oversip/sip/request.rb +15 -11
  38. data/lib/oversip/sip/response.rb +3 -3
  39. data/lib/oversip/sip/rfc3263.rb +2 -3
  40. data/lib/oversip/sip/tags.rb +1 -1
  41. data/lib/oversip/sip/transport_manager.rb +6 -5
  42. data/lib/oversip/sip/uac.rb +93 -0
  43. data/lib/oversip/sip/uac_request.rb +82 -0
  44. data/lib/oversip/sip/{grammar/uri.rb → uri.rb} +22 -0
  45. data/lib/oversip/version.rb +3 -3
  46. data/lib/oversip/websocket/launcher.rb +25 -25
  47. data/lib/oversip/websocket/listeners/connection.rb +4 -0
  48. data/lib/oversip/websocket/listeners/ipv4_ws_server.rb +1 -0
  49. data/lib/oversip/websocket/listeners/ipv4_wss_server.rb +1 -0
  50. data/lib/oversip/websocket/listeners/ipv4_wss_tunnel_server.rb +1 -0
  51. data/lib/oversip/websocket/listeners/ipv6_ws_server.rb +1 -0
  52. data/lib/oversip/websocket/listeners/ipv6_wss_server.rb +1 -0
  53. data/lib/oversip/websocket/listeners/ipv6_wss_tunnel_server.rb +1 -0
  54. data/lib/oversip/websocket/listeners/ws_server.rb +55 -26
  55. data/lib/oversip/websocket/listeners/wss_server.rb +26 -9
  56. data/lib/oversip/websocket/listeners/wss_tunnel_server.rb +14 -11
  57. data/lib/oversip/websocket/ws_framing.rb +6 -2
  58. data/lib/oversip.rb +3 -1
  59. data/test/test_http_parser.rb +3 -3
  60. data/test/test_uri.rb +18 -12
  61. metadata +91 -77
data/README.md CHANGED
@@ -2,17 +2,41 @@
2
2
 
3
3
  [![Build Status](https://secure.travis-ci.org/versatica/OverSIP.png?branch=master)](http://travis-ci.org/versatica/OverSIP)
4
4
 
5
- ### Website and documentation: [www.oversip.net](http://www.oversip.net)
5
+ ## Website
6
+
7
+ * [www.oversip.net](http://www.oversip.net)
8
+
6
9
 
7
10
  ## Overview
8
11
 
9
- OverSIP is a powerful and flexible SIP proxy & server:
12
+ OverSIP is a powerful and flexible SIP proxy & server by the authors of [draft-ietf-sipcore-sip-websocket](http://tools.ietf.org/html/draft-ietf-sipcore-sip-websocket) (*The WebSocket Protocol as a Transport for SIP*):
10
13
 
11
14
  * Fully asynchronous event-based design, never block!
12
15
  * Enjoy coding your SIP logic in Ruby language, feel free to code whatever you need!
13
16
  * Fast: core and message parsers written in C language
14
- * SIP over UDP, TCP, TLS and WebSocket (integrate true SIP within your web apps)
17
+ * SIP over UDP, TCP, TLS and WebSocket (use true SIP in your web apps)
15
18
  * Full support for IPv4, IPv6 and DNS resolution (NAPTR, SRV, A, AAAA)
16
19
  * The perfect Outbound Edge Proxy
20
+ * Written by the authors of [draft-ietf-sipcore-sip-websocket](http://tools.ietf.org/html/draft-ietf-sipcore-sip-websocket) and [JsSIP](http://www.jssip.net)
21
+
22
+
23
+ ## Documentation
24
+
25
+ * [www.oversip.net/documentation](http://www.oversip.net/documentation/)
26
+
27
+
28
+ ## Authors
29
+
30
+ ### Main Author
31
+
32
+ * Iñaki Baz Castillo (<ibc@aliax.net> | [github](https://github.com/ibc) | [twitter](https://twitter.com/ibc_tw))
33
+
34
+ ### Contributors
35
+
36
+ * José Luis Millán (<jmillan@aliax.net> | [github](https://github.com/jmillan) | [twitter](https://twitter.com/jomivi))
37
+ * Saúl Ibarra Corretgé (<saghul@gmail.com> | [github](https://github.com/saghul) | [twitter](https://twitter.com/saghul))
38
+ * Jon Bonilla (<manwe@aholab.ehu.es> | [github](https://github.com/manwe) | [twitter](https://twitter.com/jbmanwe))
39
+
40
+ ## License
17
41
 
18
- **Get it at [www.oversip.net](http://www.oversip.net) !**
42
+ OverSIP is released under the [MIT license](http://www.oversip.net/license).
data/bin/oversip CHANGED
@@ -137,7 +137,7 @@ module OverSIP
137
137
  end
138
138
  end
139
139
 
140
- log_system_info "#{::OverSIP::PROGRAM_NAME} #{::OverSIP::VERSION} starting..."
140
+ log_system_notice "#{::OverSIP::PROGRAM_NAME} #{::OverSIP::VERSION} starting..."
141
141
 
142
142
  # Options checks.
143
143
 
data/etc/proxies.conf CHANGED
@@ -28,6 +28,16 @@ default_proxy:
28
28
  #
29
29
  dns_cache_time: 300
30
30
 
31
+ # Enable destination blacklist. When a destination (target) fails due to timeout, connection error
32
+ # or TLS validation error, the target is added to a temporal blacklist and requests to same
33
+ # targets are not tryed again until the entry in the blacklist expires. By default _yes_.
34
+ #
35
+ use_blacklist: yes
36
+
37
+ # Blacklist expiration time (in seconds). The time of live of failed targets within the blacklist.
38
+ #
39
+ blacklist_time: 400
40
+
31
41
  # Use DNS NAPTR. If set, NAPTR query is performed when URI host is a domain, has no port nor
32
42
  # ;transport param.
33
43
  # Default value is _yes_.
data/etc/server.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  #
2
4
  # OverSIP - Server Logic.
3
5
  #
@@ -16,18 +18,20 @@
16
18
  module MyExampleApp
17
19
  extend ::OverSIP::Logger
18
20
 
19
- # Custom configuration options:
21
+ class << self
22
+ attr_reader :do_outbound_mangling, :do_user_assertion
23
+ end
20
24
 
21
25
  # Set this to _true_ if the SIP registrar behind OverSIP does not support Path.
22
26
  # OverSIP::Modules::OutboundMangling methods will be used.
23
- DO_OUTBOUND_MANGLING = true
27
+ @do_outbound_mangling = true
24
28
 
25
29
  # Set this to _true_ if the SIP proxy/server behind OverSIP performing the authentication
26
30
  # is ready to accept a P-Asserted-Identity header from OverSIP indicating the already
27
31
  # asserted SIP user of the client's connection (this avoids authenticating all the requests
28
32
  # but the first one).
29
33
  # OverSIP::Modules::UserAssertion methods will be used.
30
- DO_USER_ASSERTION = true
34
+ @do_user_assertion = true
31
35
  end
32
36
 
33
37
 
@@ -118,7 +122,7 @@ def (OverSIP::SipEvents).on_request request
118
122
  return
119
123
  end
120
124
 
121
- if MyExampleApp::DO_OUTBOUND_MANGLING
125
+ if MyExampleApp.do_outbound_mangling
122
126
  # Extract the Outbound flow token from the RURI.
123
127
  ::OverSIP::Modules::OutboundMangling.extract_outbound_from_ruri request
124
128
  end
@@ -160,7 +164,7 @@ def (OverSIP::SipEvents).on_request request
160
164
 
161
165
  when :INVITE, :MESSAGE, :OPTIONS, :SUBSCRIBE, :PUBLISH, :REFER
162
166
 
163
- if MyExampleApp::DO_USER_ASSERTION
167
+ if MyExampleApp.do_user_assertion
164
168
  ::OverSIP::Modules::UserAssertion.add_pai request
165
169
  end
166
170
 
@@ -191,7 +195,7 @@ def (OverSIP::SipEvents).on_request request
191
195
 
192
196
  when :REGISTER
193
197
 
194
- if MyExampleApp::DO_OUTBOUND_MANGLING
198
+ if MyExampleApp.do_outbound_mangling
195
199
  # Contact mangling for the case in which the registrar does not support Path.
196
200
  ::OverSIP::Modules::OutboundMangling.add_outbound_to_contact request
197
201
  end
@@ -199,13 +203,13 @@ def (OverSIP::SipEvents).on_request request
199
203
  proxy = ::OverSIP::SIP::Proxy.new :proxy_out
200
204
 
201
205
  proxy.on_success_response do |response|
202
- if MyExampleApp::DO_OUTBOUND_MANGLING
206
+ if MyExampleApp.do_outbound_mangling
203
207
  # Undo changes done to the Contact header provided by the client, so it receives
204
208
  # the same value in the 200 response from the registrar.
205
209
  ::OverSIP::Modules::OutboundMangling.remove_outbound_from_contact response
206
210
  end
207
211
 
208
- if MyExampleApp::DO_USER_ASSERTION
212
+ if MyExampleApp.do_user_assertion
209
213
  # The registrar replies 200 after a REGISTER with credentials so let's assert
210
214
  # the current SIP user to this connection.
211
215
  ::OverSIP::Modules::UserAssertion.assert_connection response
@@ -213,7 +217,7 @@ def (OverSIP::SipEvents).on_request request
213
217
  end
214
218
 
215
219
  proxy.on_failure_response do |response|
216
- if MyExampleApp::DO_USER_ASSERTION
220
+ if MyExampleApp.do_user_assertion
217
221
  # We don't add PAI for re-REGISTER, so 401 will be replied, and after it let's
218
222
  # revoke the current user assertion (will be re-added upon REGISTER with credentials).
219
223
  ::OverSIP::Modules::UserAssertion.revoke_assertion response
@@ -6152,15 +6152,12 @@ case 374:
6152
6152
 
6153
6153
  #line 77 "haproxy_protocol.rl"
6154
6154
 
6155
- /* if(finished && len == p-str) */
6156
6155
  if(finished)
6157
6156
  haproxy_protocol.valid = 1;
6158
6157
 
6159
6158
  /* Write the number of read bytes so the HAProxy Protocol line can be removed. */
6160
6159
  haproxy_protocol.total_len = (int)(p - str);
6161
6160
 
6162
- printf("**** haproxy_protocol.total_len = %i\n", haproxy_protocol.total_len);
6163
-
6164
6161
  return haproxy_protocol;
6165
6162
  }
6166
6163
 
@@ -25,7 +25,7 @@ static const int utils_outbound_udp_flow_token_parser_en_main = 1;
25
25
 
26
26
  /** exec **/
27
27
  /*
28
- * Expects a string like "1.2.3.4_5060" or "_1af:43::ab_9090" (no "_" at the beginning).
28
+ * Expects a string like "1.2.3.4_5060" or "1af:43::ab_9090" (no "_" at the beginning).
29
29
  */
30
30
  struct_outbound_udp_flow_token outbound_udp_flow_token_parser_execute(const char *str, size_t len)
31
31
  {
@@ -306,7 +306,6 @@ VALUE Utils_parser_outbound_udp_flow_token(VALUE self, VALUE string)
306
306
  str = RSTRING_PTR(string);
307
307
  len = RSTRING_LEN(string);
308
308
 
309
- /* Remove the leading "_" from the string. */
310
309
  outbound_udp_flow_token = outbound_udp_flow_token_parser_execute(str, len);
311
310
 
312
311
  if (outbound_udp_flow_token.valid == 0)