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
         
     |