oversip 1.2.1 → 1.3.0.dev1

Sign up to get free protection for your applications and to get access to all the features.
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)