versatica / oversip Goto Github PK
View Code? Open in Web Editor NEWOverSIP: the SIP framework you dreamed about
Home Page: http://oversip.versatica.com
License: Other
OverSIP: the SIP framework you dreamed about
Home Page: http://oversip.versatica.com
License: Other
I'm trying to enable both WSS and SIP TLS on OverSIP, and it just crashes right away with no real information:
Aug 6 18:16:21 oversip-chi-02 oversip[10051]: CRIT: master process died, syslogger process terminated
OS: Ubuntu 12.04.2 LTS
I have enabled syslog_level: debug, but still not much information provided regarding the reason for the crash.
I installed using the documented method from package. The crash occurs right away on the connection, before a call even happens. Also, if I disable WSS, and enable TLS on the outbound SIP side, it accepts a call, then crashes.
Thoughts?
Installed oversip 1.3.7 on FreeBSD 9.0 system.
After launching - I can't log anything from servers.rb file, and no debug info is written to syslog.
On launch debugging info gives:
<code>
NOTICE: <executable> OverSIP 1.3.7 starting...
INFO: <executable> master process name: oversip
Exception `Errno::EHOSTUNREACH' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip- 1.3.7/lib/oversip/config.rb:534 - No route to host - connect(2)
WARN: <Config> cannot autodiscover local IPv6: No route to host - connect(2) (Errno::EHOSTUNREACH)
WARN: <Config> disabling IPv6 for SIP
Exception `Errno::EHOSTUNREACH' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip- 1.3.7/lib/oversip/config.rb:534 - No route to host - connect(2)
WARN: <Config> cannot autodiscover local IPv6: No route to host - connect(2) (Errno::EHOSTUNREACH)
WARN: <Config> disabling IPv6 for WebSocket
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip- 1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip- 1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip- 1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone FalseClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone FalseClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone FalseClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone FalseClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
core:
nameservers : null
syslog_facility : daemon
syslog_level : debug
sip:
sip_udp : yes
sip_tcp : yes
sip_tls : yes
enable_ipv4 : yes
listen_ipv4 : 172.16.144.112
enable_ipv6 : no
listen_ipv6 : null
listen_port : 5060
listen_port_tls : 5061
use_tls_tunnel : yes
listen_port_tls_tunnel : 5062
callback_on_client_tls_handshake: yes
local_domains : null
tcp_keepalive_interval : 300
record_route_hostname_tls_ipv4 : null
record_route_hostname_tls_ipv6 : null
websocket:
sip_ws : yes
sip_wss : yes
enable_ipv4 : yes
listen_ipv4 : 172.16.144.112
enable_ipv6 : no
listen_ipv6 : null
listen_port : 10080
listen_port_tls : 10443
use_tls_tunnel : yes
listen_port_tls_tunnel : 10444
callback_on_client_tls_handshake: yes
max_ws_message_size : 65536
max_ws_frame_size : 65536
ws_keepalive_interval : 300
tls:
public_cert : /etc/oversip/tls/demo-tls.oversip.net.crt
private_cert : /etc/oversip/tls/demo-tls.oversip.net.key
ca_dir : /etc/oversip/tls/ca/
full_cert : /tmp/oversip_full_cert_20130324-87880-1mokn47
INFO: <executable> increasing rlimits for 'nofiles'
INFO: <executable> creating Posix Message Queue for communicating master and syslogger processes
INFO: <PosixMQ /oversip_syslogger> queue requires 2008000 bytes
INFO: <PosixMQ /oversip_syslogger> rlimits for 'msgqueue' is 9223372036854775807 bytes (>= 2008000), no need to increase it
Exception `Errno::EINVAL' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip- 1.3.7/lib/oversip/posix_mq.rb:80 - Invalid argument - mq_open
WARN: <PosixMQ /oversip_syslogger> cannot set queue attributes due to user permissions, using system default values
INFO: <PosixMQ /oversip_syslogger> #<POSIX_MQ:0x00000802c3cdc8>
INFO: <PosixMQ /oversip_syslogger> wheel
WARN: <PosixMQ /oversip_syslogger> maxmsg=10, msgsize=1024, but recommended values are maxmsg=1000, msgsize=2000
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
INFO: <TLS> TLS enabled
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
INFO: <TLS> inspecting CA file 'cacert.pem'...
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
INFO: <TLS> 'cacert.pem': 158 public certificates found
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
INFO: <TLS> 158 public certificates available for TLS validation
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
NOTICE: <launcher (master)> using Ruby 1.9.3p392 (2013-02-22 revision 0) [x86_64- freebsd9.0]
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
NOTICE: <launcher (master)> using EventMachine-LE 1.1.4
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
NOTICE: <launcher (master)> starting event reactor...
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
INFO: <SIP launcher> SIP UDP server listening on IPv4 172.16.144.112:5060
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
INFO: <SIP launcher> SIP TCP server listening on IPv4 172.16.144.112:5060
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
INFO: <SIP launcher> SIP TLS-Tunnel server listening on IPv4 127.0.0.1:5062
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
INFO: <launcher (master)> spawned stud server (PID 87888) listening on 172.16.144.112 : 5061
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
INFO: <WebSocket launcher> WebSocket WS server listening on IPv4 172.16.144.112:10080 provides 'sip' WS subprotocol
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
INFO: <WebSocket launcher> WebSocket WSS_TUNNEL server listening on IPv4 127.0.0.1:10444 provides 'sip' WS subprotocol
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
INFO: <launcher (master)> spawned stud server (PID 87892) listening on 172.16.144.112 : 10443
Exception `Errno::ESRCH' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip- 1.3.7/lib/oversip/launcher.rb:275 - No such process
Exception `ArgumentError' at /usr/local/lib/ruby/gems/1.9.1/gems/oversip- 1.3.7/lib/oversip/launcher.rb:457 - unsupported signal SIGPOLL
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
NOTICE: <launcher (master)> cannot trap signal POLL, it could not exist in this system, ignoring it
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
NOTICE: <launcher (master)> calling OverSIP::SystemEvents.on_initialize() method...
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
NOTICE: <SystemEvents> on_initialize() method is not defined
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
NOTICE: <launcher (master)> executing OverSIP::SystemCallbacks.on_started_callbacks...
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
NOTICE: <launcher (master)> calling OverSIP::SystemEvents.on_started() method...
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
NOTICE: <SystemEvents> on_started() method is not defined
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
NOTICE: <launcher (master)> master process (PID 87885) ready
Exception `Errno::EBADF' at (eval):6 - Bad file descriptor - mq_send
Exception `Errno::EBADF' at (eval):16 - Bad file descriptor - mq_send
NOTICE: <launcher (master)> OverSIP 1.3.7 running in background
removing /tmp/oversip_full_cert_20130324-87880-1mokn47...done
I presume that the posix mq_send can't access the mqueue, and so the syslogger fails to log anything. The oversip_syslogger mqueue file is created, though, but with default maxmsg value. Can anyone advice me, how to get rid of the problem?
Currently for the following URI:
/chat.php?param=QWEQWE?query=qweqwe&jaja=qwe
The method uri_query
returns:
param=QWEQWE?query=qweqwe&jaja=qwe
It's an invalid URI query since the ?
should be a &
.
Questions:
log_xxxxx()
methods don't print to syslog in certain cases. For example within the (OverSIP::SystemEvents).on_initialize
event.
I must check all the events with log_xxxxx()
and log_system_xxxxx()
methods.
In some circumstances OverSIP's IPv6 auto-detection fails. It happens in a Debian Squeeze with IPv6 support but no global IPv6 set:
inet6 addr: fe80::21c:c0ff:fe40:2bf4/64 Scope:Link
OverSIP::Config.discover_local_ip
returns such an IPv6.OverSIP::Config.post_check
fails when trying to bind in that IPv6 (since it has link scope).The error is:
CRIT: Invalid argument - error binding in UDP IP 'fe80::21c:c0ff:fe40:2bf4' and port 5060 (Errno::EINVAL: Invalid argument - bind(2)) (Errno::EINVAL) /var/lib/gems/1.9.1/gems/oversip-1.0.4/lib/oversip/config.rb:442:in `rescue in block (2 levels) in post_check' /var/lib/gems/1.9.1/gems/oversip-1.0.4/lib/oversip/config.rb:415:in `block (2 levels) in post_check' /var/lib/gems/1.9.1/gems/oversip-1.0.4/lib/oversip/config.rb:414:in `each' /var/lib/gems/1.9.1/gems/oversip-1.0.4/lib/oversip/config.rb:414:in `block in post_check' CRIT: exiting with error status
It's strange but in Ubuntu 12.04 step 2 above fails so the IPv6 is not chosen as valid IPv6.
Centos 5 uses gcc 4.1.2 which doesn't grok "0b00000001":
stun_ruby.c:117:22: error: invalid suffix "b00000001" on integer constant
Could this be changed to 0x1 instead please?
There is an inconsistency for this config param.
security.rb (and default oversip.conf) refer to ws_max_message_size
config.rb refers to websocket_max_message_size
Causes the error:
oversip[3280]: ERROR: <launcher (master)> comparison of Fixnum with nil failed (ArgumentError)#012...OverSIP/lib/oversip/websocket/ws_framing.rb:181:in `receive_data'#012...OverSIP/lib/oversip/websocket/listeners/ws_server.rb:144:in `process_received_data'#012...OverSIP/lib/oversip/websocket/listeners/ws_server.rb:110:in `receive_data'
Patch:
--- a/lib/oversip/config.rb
+++ b/lib/oversip/config.rb
@@ -66,7 +66,7 @@ module OverSIP
},
:security => {
:sip_max_body_size => 65536,
- :websocket_max_message_size => 65536,
+ :ws_max_message_size => 65536,
:connection_in_inactivity_timeout => 120,
:connection_out_inactivity_timeout => 120,
:anti_slow_attack_timeout => 4
@@ -124,7 +124,7 @@ module OverSIP
},
:security => {
:sip_max_body_size => :fixnum,
- :websocket_max_message_size => :fixnum,
+ :ws_max_message_size => :fixnum,
:connection_in_inactivity_timeout => [ :fixnum, [ :greater_equal_than, 2 ] ],
:connection_out_inactivity_timeout => [ :fixnum, [ :greater_equal_than, 2 ] ],
:anti_slow_attack_timeout => :fixnum
It would be cool if we can use OverSIP to initiate or process a request, in our case, just SIP/MESSAGE, nothing more.
Thanks,
Currently once the WebSocketEvents.on_connection()
is executed OverSIP automatically accepts the WS connection (by calling OverSIP::WebSocket#accept_ws_handshake()
) unless the user has called to connection.http_reject()
.
This avoids the user writting a WebSocketEvents.on_connection()
code in which OverSIP generates a SIP request (Uac module) and waits for the SIP response before it accepts or rejects the WS connection. So for a new design:
WebSocketEvents.on_connection()
in default_server.rb
must call to #accept_ws_handshake()
.#accept_ws_handshake()
or http_reject()
in the event code. Otherwise the WS won't be replied.OverSIP::SIP::Uri#empty_params()
method would delete all the URI params.
I'm trying to start fresh installed OverSIP on CentOS and running into a problem:
/usr/bin/env: ruby_noexec_wrapper: No such file or directory
Can you give me a clue what might be wrong with my installation or the way I start server?
Taking a look to stud init script, should we do the same? or would it be better just to documentate that "oversip" user should have certain values in "limits.conf"?
OverSIP parser fails parsing the following URI:
sip:[email protected];gr=urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
Here the response to a SIP message with ':' in the 'gr' uri parameter.
MESSAGE sip:[email protected];gr=urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6 SIP/2.0
Via: SIP/2.0/WS r5k2o4bs5n91.invalid;branch=z9hG4bK8799091
Max-Forwards: 69
To: sip:[email protected];gr=urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
From: "aaa" <sip:[email protected]>;tag=60e4p0ufsr
Call-ID: a1imtv2trsj5qhq4b2j8
CSeq: 6418 MESSAGE
Content-Type: text/plain
Supported: path, outbound, gruu
User-Agent: JsSIP 0.3.0-devel
Content-Length: 2
aa
JsSIP | TRANSPORT | WebSocket disconnected (code: 4000, reason: SIP message parsing error)
':' character is permitted in URI paramater value as per RFC3261 (rule param-unreserved):
uri-parameter = transport-param / user-param / method-param
/ ttl-param / maddr-param / lr-param / other-param
other-param = pname [ "=" pvalue ]
pname = 1*paramchar
pvalue = 1*paramchar
paramchar = param-unreserved / unreserved / escaped
param-unreserved = "[" / "]" / "/" / ":" / "&" / "+" / "$"
Unfortunatelly EventMachine TLS stuf sucks as it does not allow to set what kind of SSL/TLS version to use for outbound connections. In SIP we need TLS and not SSL, but currently that depends on the installed version of openssl, and usually it's SSL.
There is a builtin module called "RegistrarWithoutPath": https://github.com/versatica/OverSIP/blob/master/lib/oversip/sip/modules/registrar_without_path.rb
Which doesn't implement a registrar nor deal with the Path header. Maybe we can call it "outbound" ?
From Emil Lenngren to the JsSIP mailing list:
Hi. When I login on JsSIP Tryit and try to register, I get an alert saying "Sip registration error. 500 Internal error". In the debug console in Chrome, I see the following:
SIP/2.0 500 Internal Error
Via: SIP/2.0/WS fheo1i09vdvq.invalid;branch=z9hG4bK3589954
From: "08xxxxxx" <sip:[email protected]>;tag=mfhmpdgvan
To: <sip:[email protected]>;tag=84b5c3d94d81
Call-ID: 1huc2enrs10na1dglbl8vo
CSeq: 81 REGISTER
Content-Length: 52
Content-Type: text/plain
Server: OverSIP/1.4.0.beta
NoMethodError: undefined method `<' for nil:NilClass
Since he was using the tryit.jssip.net platform, the logs remain at serverside
Running /etc/init.d/oversip start
while OverSIP is already running produces a wrong output and, even worse, it kills oversip_stud processes:
root@ks26913:/tmp# /etc/init.d/oversip start [....] Starting OverSIP (oversip): INFO: OverSIP 1.0.1 starting... INFO: master process name: oversip WARN: cannot autodiscover local IPv6: Network is unreachable - connect(2) (Errno::ENETUNREACH) WARN: dissabling IPv6 for SIP WARN: cannot autodiscover local IPv6: Network is unreachable - connect(2) (Errno::ENETUNREACH) WARN: dissabling IPv6 for WebSocket CRIT: configuration error: UDP IP 'X.X.X.X' and port 5060 already in use CRIT: exiting with error status [warn] already running. ... (warning). root@ks26913:/tmp# echo $? 0
OverSIP deb package installs a /etc/security/limits.d/oversip.conf
file to increase the numbre of file descriptors (sockets) and Posix messsage queues OverSIP can handle. The dile has this content:
# Increase the ammount of open file descriptors by oversip system user.
# This is required for both OverSIP and STUD servers (both running with
# oversip user).
#
oversip soft nofile 65536
oversip hard nofile 65536
# Increase the Posix Message Queue ammount of bytes for root user (the
# queue used by OverSIP is created as root).
# NOTE: Each OverSIP instance requires 2008000 bytes. Let's allocate
# a value for 4 instances of OverSIP (2008000 x 4 = 8032000). Increase
# this value if you need more instances of OverSIP in this host.
#
root soft msgqueue 8032000
root hard msgqueue 8032000
However under Ubuntu 12.10 it does not work:
INFO: <executable> creating Posix Message Queue for communicating master and syslogger processes
INFO: <PosixMQ /oversip_syslogger> queue requires 2008000 bytes
INFO: <PosixMQ /oversip_syslogger> incrementing rlimits for Posix Message Queues (currently 819200 bytes) to 2008000 bytes (ulimit -q)
CRIT: <launcher> the process already has the maximum number of files and message queues open (Errno::EMFILE: Too many open files - mq_open)
CRIT: <launcher> exiting with error status
However adding the following to /etc/security/limits.conf
makes it to work:
* soft msgqueue 8032000
* hard msgqueue 8032000
* soft nofile 65536
* hard nofile 65536
I need to inspect why this is required and why the previous settings is not enough.
trying to install it i get:
Building native extensions. This could take a while...
ERROR: Error installing oversip:
ERROR: Failed to build gem native extension.
/usr/local/bin/ruby extconf.rb
creating Makefile
make
compiling stun_ruby.c
stun_ruby.c: In function 'Stun_parse_request':
stun_ruby.c:58: warning: ISO C90 forbids mixed declarations and code
stun_ruby.c:117:22: error: invalid suffix "b00000001" on integer constant
*** Error code 1
hope it helps you
Related to versatica/JsSIP#85
For example remove OverSIP::LogicError
exception since the word "Logic" does not make sense after the refactoring in "/etc/oversip/server.rb".
Just that.
The proposal is the following:
3rd party OverSIP modules must provide a single configuration file (a Ruby .rb file) to be set by the user and stored in this directory. Every Ruby file in this directory is loaded when OverSIP is started, but before OverSIP executes the OverSIP::SystemCallbacks.on_started_callbacks
callbacks set by 3rd party modules and the OverSIP::SystemEvents.on_started()
method provided by the user (in server.rb).
Typically a Ruby file in this directory belongs to a 3rd party OverSIP module, for example "oversip-mod-database". This file should include code for the user to set module specific parameters. For example:
/etc/oversip/modules_conf/oversip-mod-database-conf.rb
:
OverSIP::Modules::Database::Connection.new({
:name => :local_mysql,
:db_type => "mysql",
:db_host => "localhost",
:db_user => "xxxxxx",
:db_pass => "xxxxxx"
:db_name => "my_oversip"
})
In /etc/oversip/server.rb
the user loads the "oversip-mod-database" library at the top of the file:
require "oversip-mod-database"
[...]
When OverSIP is started:
OverSIP::SystemCallbacks.on_started()
to perform the DB connection(s).OverSIP::SystemCallbacks.on_started_callbacks
. One of those callbacks (the one set by "oversip-mod-database" library) will then inspect the DB connections created by the user and will perform the corresponding DB connections.OverSIP::SystemEvents.on_started()
method provided by the user (in server.rb). There the user can access to the DB by using any of the created connections.During an inbound/outbound TLS connections the peer (TLS client or server) may present a certificate. OverSIP should provide a user programable callback for validating it.
NOTE: This is not posible when using Stud for handling TLS inbound connections.
In scenarios like Amazon AWS the hosts have private addresses and there are public ones pointing to them. OverSIP must work in those cases by binding into the private addresses and announcing the associated public IP into the headers (Via, Record-Route, Path...).
It must be done in 1.4.x series.
Oversip looks really cool I set it up, however I don't see how I configure the SIP server it proxies to. We have an existing sip server we want to enable websockets on. I got the example html page to connect to our oversip but I don't see I tell it where our SIP server is.
Hi!
At first thank you, guys, for a such useful product!
We have tried to make it work with out staging SIP-router (Crocodile SN/Kamailio). SIP router and OverSIP run on different hosts. However demo web-client (JsSIP, SIPML5) was configured to use OverSIP. Registration works good and it was possible to make a call from Chrome to few SIP-clients. But not vice a versa. When we try to make a call/message to web-client SIP router says: SIP/2.0 478 Unresolvable destination.
I have looked deeper into packets on the wire. And I suppose that problem is under "Via" headers. In the example below there's an attempt to call from one web-client to another. As we can see the first "Sent-By" from websocket is not valid "address:port" pair. I can suppose that this "broken text" is some kind of "session-id" for the webRTC side. But it has no value for present SIP intercommunication and should be fixed by WS/SIP gateway. Is OverSIP able to pass calls from SIP-to-websockets or it's not intended for this?
Record-Route: sip:10.61.24.86:5060;transport=tcp;lr;ovid=37762562
Record-Route: sip:[email protected]:10080;transport=ws;lr;ovid=37762562
Via: SIP/2.0/TCP 10.61.24.86:5060;branch=z9hG4bKa2cfcf39c4669b9484e0db9483def8aa3b23ce39;rport
Via: SIP/2.0/WS qhdk0k626e3o.invalid;branch=z9hG4bK8794175
Max-Forwards: 10
To: sip:[email protected]
From: sip:[email protected];tag=gcaodhu26a
Call-ID: q4uvkkdcrfoanlu0gk1d
CSeq: 2780 INVITE
.....
Your comments would be very appreciated.
best regards,
Alexey
Usually the "core" of something is not a module looks a bit weird :-O
Branches are almost free, experiments should be done in different branches and master should always be as stable as possible.
Regardless a SIP-WS client does not indicate Outbound (RFC 5626) support, it must be assumed since otherwise incoming in-dialog requests would not arrive to the client (since OverSIP cannot open WS connections).
Not sure where else to post or ask for help. I can not get oversip to start, Ikeep getting the following critical error. Any hints on how to get this working would be appreciated.
CRIT: <launcher (master)> can't trap reserved signal: SIGVTALRM (ArgumentError)
/usr/local/src/OverSIP/lib/oversip/launcher.rb:466:in trap' /usr/local/src/OverSIP/lib/oversip/launcher.rb:466:in
trap_signals'
/usr/local/src/OverSIP/lib/oversip/launcher.rb:149:in block in run' /usr/local/rvm/gems/ruby-2.0.0-p0/gems/eventmachine-le-1.1.5/lib/eventmachine.rb:173:in
call'
CRIT: <launcher (master)> exiting with error status
INFO: <launcher (master)> killing stud server with PID 21196...
INFO: <launcher (master)> killing stud server with PID 21200...
CRIT: <launcher (daemonize)> master process failed to start
CRIT: <launcher (daemonize)> exiting with error status
The relevant apt-get output is:
Calculating upgrade... Done
The following packages will be upgraded:
oversip
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
18 not fully installed or removed.
Need to get 0 B/152 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]?
(Reading database ... 61614 files and directories currently installed.)
Preparing to replace oversip 1.3.6 (using .../archives/oversip_1.3.7_all.deb) ...
installing 'oversip' Ruby Gem version 1.3.7...
ERROR: Could not find a valid gem 'oversip' (= 1.3.7) in any repository
ERROR: Possible alternatives: oversip
dpkg: error processing /var/cache/apt/archives/oversip_1.3.7_all.deb (--unpack):
subprocess new pre-installation script returned error exit status 2
[....] Restarting OverSIP (oversip):
And indeed there is no gem in the data.tar.gz w/in oversip_1.3.7_all.deb.
I'm using deb.versatica.com for the debs.
Currently if the required oversip Gem version is not published (or fails to compile) the command apt-get install oversip
performs anyway the "restart" action (which should not take place):
Preparando para reemplazar oversip 1.0.0 (usando .../archives/oversip_1.0.0_all.deb) ...
installing 'oversip' Ruby Gem (version ~>1.0.7.beta1)...
ERROR: Could not find a valid gem 'oversip' (~> 1.0.7.beta1) in any repository
dpkg: error al procesar /var/cache/apt/archives/oversip_1.0.0_all.deb (--unpack):
el subproceso script pre-installation nuevo devolvió el código de salida de error 2
configured to not write apport reports
Restarting OverSIP (oversip):
INFO: <executable> OverSIP 1.0.6.beta3 starting...
INFO: <executable> master process name: oversip
WARN: <Config> cannot autodiscover local IPv6: Network is unreachable - connect(2) (Errno::ENETUNREACH)
WARN: <Config> dissabling IPv6 for SIP
WARN: <Config> cannot autodiscover local IPv6: Network is unreachable - connect(2) (Errno::ENETUNREACH)
WARN: <Config> dissabling IPv6 for WebSocket
INFO: <executable> applied configuration:
It's hard to understand since the preinst
script has set -e
and returns code 2 (error) so I would expect that the deb installation should be stopped:
https://github.com/versatica/OverSIP/blob/master/debian/preinst
Requirements (given that security->anti_slow_attack_timeout
value is set to 2 seconds):
With the new OverSIP v1.4.0 installed and the only change in the oversip.conf to be included w.r.t. v1.3.0 was advertised_address_ipv4 in SIP and WS profile, it is not able to register to the OpenSIPS registrar. We have an AWS server with the given below details. We have OpenSIPS and OverSIP on the same AWS machine and trying to register an extension through SIPml5 latest code uploaded. With the same components installed but with OverSIP v1.3.0 we can register the extension though and also could make outbound calls but there were issues with inbound calls due to NAT which OverSIP 1.4.0 can resolve but with OverSIP v1.4.0 installed we could not even register to the OpenSIPS and given below are the configuration and output of an ngrep command:
OpenSIPS public advertised ipv4: a.b.c.d
OpenSIPS private IP: w.x.y.z
OpenSIPS port: efgh
OverSIP advertised_address_ipv4: a.b.c.d
OverSIP private IP: w.x.y.z
OverSIP port: pqrs
w.x.y.z:pqrs
a.b.c.d:pqrs
SIPml5 NAT'ed Public IPv4: l.m.n.p
SIPml5 NAT'ed Public port: hijk
l.m.n.p:hijk
ngrep output:
T l.m.n.p:hijk -> w.x.y.z:pqrs [AP]
GET / HTTP/1.1..Upgrade: websocket..Connection: Upgrade..Host: a.b.c.d:pqrs..Origin: http://a.b.c.d..Sec-WebSocket-Protocol: sip..Pragma: no-cache..Cach
e-Control: no-cache..Sec-WebSocket-Key: Iye+y+TilFccY4aSeXQ0Qw==..Sec-WebSocket-Version: 13..Sec-WebSocket-Extensions: x-webkit-deflate-frame..User-Agent: Mozilla/
5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36..Cookie: __utma=134628469.304461993.1377669373.1379266315.1379
274392.8; __utmb=134628469.2.10.1379274392; __utmc=134628469; __utmz=134628469.1377669373.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)....
T w.x.y.z:pqrs -> l.m.n.p:hijk [AP]
HTTP/1.1 101 Switching Protocols..Upgrade: websocket..Connection: Upgrade..Sec-WebSocket-Accept: hfm7/cqAtPsoy3h9T2zpGjK8Hmo=..Sec-WebSocket-Protocol: sip..Server:
OverSIP/1.4.0....
T l.m.n.p:hijk -> w.x.y.z:pqrs [AP]
...E.7...r...c...D..........................a...............S...V...[.......V.......Y...M.......e...........[...Y..._...G.......E...C...E...........D.......w....................R.......T.......T.......:...R...........p...r...t...R...{...C.......V...X...E.......=...
..................S...E.......f.......X...........G.......................t...V...........D.......w...].......S...A...S...T.......V.......C...D...C.......G...D....
...^...T...........Z...^...Z...B.......P...R...Y.......V...
E...R.......T...Y...z.......G...................=...V...V...Y...X...Y...c...T...=...G...R...G...:...
T w.x.y.z:pqrs -> l.m.n.p:hijk [AP]
.~..SIP/2.0 500 Internal Error..Via: SIP/2.0/WS df7jal23ls0d.invalid;branch=z9hG4bKFRNce5IP03ylmlaRwn60hhbpxpmV1HoS;rport..From: "9003"sip:[email protected];ta
g=SRGd38Rr1hT8OfuQFSQ4..To: "9003"sip:[email protected];tag=b062f4bf.3cdba5ae..Call-ID: 97ac7c06-c07e-b21c-2cca-6f0bcebb9ba8..CSeq: 17680 REGISTER..Content-Len
gth: 67..Content-Type: text/plain..Server: OverSIP/1.4.0....OverSIP::RuntimeError: proxy must be a OverSIP::SIP::Proxy instance
Could someone please help us out in resolving the issue. What I feel after looking at the output of the ngrep is that there is something wrong with the new OverSIP v1.4.0 code because the request to the OpenSIPS for registering an extension never reached, it died at OverSIP end itself.
According to the /etc/security/limits.conf
file in Debian Squeeze (6.0):
# - NOTE: group and wildcard limits are not applied to root.
So we have a problem.
force_nat()
is called.ERROR: <launcher (master)> error raised during event loop and rescued by EM.error_handler:
ERROR: <launcher (master)> undefined method `outbound_flow_token' for #<OverSIP::SIP::IPv4TcpClient:0x0000000130fb50> (NoMethodError)
/home/ibc/Proyectos/github_OverSIP/lib/oversip/sip/core.rb:171:in `connection_outbound_flow_token
/home/ibc/Proyectos/github_OverSIP/lib/oversip/sip/proxy.rb:343:in `add_routing_headers
/home/ibc/Proyectos/github_OverSIP/lib/oversip/sip/proxy.rb:436:in `use_target'
/home/ibc/Proyectos/github_OverSIP/lib/oversip/sip/proxy.rb:386:in `try_next_target'
This is because as per RFC 3261 a SIP element X should not accept incoming request via a connection open by X (unless Outbound or Alias is being used), and thus OverSIP is not ready for that.
What to do? allow it and "fix" the problem? or be strict and reply 403?
If an error occur after setting a Proxy
but before the request is sent, then the internal 500 response would contain the new Via added by OverSIP (as part of the generated client transaction) and thus the UAC would not match the response.
Improve it.
AFAIK the only way to represent a unicode hostname is by using its IDNA encoded form. So, if someone would try to route a packet to domain 'ñamñam.com' OverSIP should convert that to 'xn--amam-fqac.com' and then do the appropriate DNS lookup.
For reference, every builtin Python function that does a DNS lookup based on a hostname encodes it like this. I did the same in pycares. So this should probably be addressed in em-udns.
It would be useful that OverSIP replies 199 (defined in RFC 6228) when a INVITE client transaction with a remote peer ends and OverSIP performs serial forking.
This is due the code in launcher.rb. It must be refactorized.
The exception :
/usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.1/bin/oversip:146:in run': undefined method
fatal' for OverSIP::Executable:Class (NoMethodError)
from /usr/local/lib/ruby/gems/1.9.1/gems/oversip-1.3.1/bin/oversip:194:in <top (required)>' from /usr/local/bin/oversip:23:in
load'
from /usr/local/bin/oversip:23:in `
Please help.
Thanks !
Currently:
proxy = @request.proxy(PROXY_ID)
proxy.on_provisional_response(response) { lalala }
proxy.route
Proposal (=~ @saghul):
proxy = OverSIP.get_proxy(PROXY_ID)
proxy.on_provisional_response(response) { lalala }
proxy.route(@request)
NOTE: The @request
object within the logic file MUST NOT have a "proxy" attribute (due to internal design).
Add a MI (based on JSON) to manage OverSIP, get realtime information, set configuration parameters in runtime, etc.
Running OverSIP 1.3.7 in FreeBSD 9.0 gives the following errors:
Exception `TypeError' at [...]/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone Fixnum
Exception `TypeError' at [...]/gems/oversip-1.3.7/lib/oversip/proxies_config.rb:65 - can't clone TrueClass
Must fix it.
/etc/init.d/oversip restart
causes an error in Debian Wheezy:
# /etc/init.d/oversip restart [....] Restarting OverSIP (oversip): start-stop-daemon: invalid process scheduler policy Try 'start-stop-daemon --help' for more information. [FAIL] error, failed to start. ... failed!
Right now the Debian package version and gem version are disconnected and the Debian package installs a given gem version on install time. This is wrong in so many levels, but lets focus and fix them one by one.
The debian package should be built with OverSIP gem contents inside and install them from within the package, that is, without downloading the gem from anywhere.
For the moment dependencies are still downloaded on install time.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.