I have kamailio 4.0.2 installed with the websockets module, and when I try to connect from my test page (running sipml5) I get this error:root@phcdevel:/usr/local/src# 15(27061) DEBUG: <core> [ip_addr.c:247]: print_ip(): tcpconn_new: new tcp connection: 192.168.10.14115(27061) DEBUG: <core> [tcp_main.c:1102]: tcpconn_new(): tcpconn_new: on port 53756, type 215(27061) DEBUG: <core> [tcp_main.c:1416]: tcpconn_add(): tcpconn_add: hashes: 3014:920:113, 115(27061) DEBUG: <core> [io_wait.h:390]: io_watch_add(): DBG: io_watch_add(0x8270e00, 30, 2, 0xb2a5bc58), fd_no=1915(27061) DEBUG: <core> [io_wait.h:617]: io_watch_del(): DBG: io_watch_del (0x8270e00, 30, -1, 0x0) fd_no=20 called15(27061) DEBUG: <core> [tcp_main.c:4312]: handle_tcpconn_ev(): tcp: DBG: sending to child, events 115(27061) DEBUG: <core> [tcp_main.c:3983]: send2child(): selected tcp worker 0 11(27056) for activity on [tcp:192.168.10.202:5070], 0xb2a5bc5811(27056) DEBUG: <core> [tcp_read.c:1521]: handle_io(): received n=4 con=0xb2a5bc58, fd=1011(27056) DEBUG: <core> [tcp_read.c:572]: tcp_read_headers(): tcp_read_headers: ERROR: no clen, p=A11(27056) ERROR: <core> [tcp_read.c:1310]: tcp_read_req(): ERROR: tcp_read_req: bad request, state=7, error=4 buf:GET / HTTP/1.1Upgrade: websocketConnection: UpgradeHost: 192.168.10.202:5070Origin: http://sipml5.devel.phemium.comSec-WebSocket-Protocol: sipPragma: no-cacheCache-Control: no-cacheSec-WebSocket-Key: nEzBXhDED/hlJnGieFvp1w==Sec-WebSocket-Version: 13Sec-WebSocket-Extensions: x-webkit-deflate-frameUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36parsed:GET / HTTP/1.1Upgrade: websocketConnection: UpgradeHost: 192.168.10.202:5070Origin: http://sipml5.devel.phemium.comSec-WebSocket-Protocol: sipPragma: no-cacheCache-Control: no-cacheSec-WebSocket-Key: nEzBXhDED/hlJnGieFvp1w==Sec-WebSocket-Version: 13Sec-WebSocket-Extensions: x-webkit-deflate-frameUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.3611(27056) DEBUG: <core> [tcp_read.c:1311]: tcp_read_req(): - received from: port 5375611(27056) DEBUG: <core> [ip_addr.c:247]: print_ip(): - received from: ip 192.168.10.14111(27056) DEBUG: <core> [tcp_read.c:1448]: release_tcpconn(): releasing con 0xb2a5bc58, state -2, fd=10, id=111(27056) DEBUG: <core> [tcp_read.c:1449]: release_tcpconn(): extra_data (nil)15(27061) DEBUG: <core> [tcp_main.c:3395]: handle_tcp_child(): handle_tcp_child: reader response= b2a5bc58, -2 from 0It looks like the packet never reaches the routing config. Even when I changed the websockets listen port to 8081, it tghrows the same error.Here is my kamailio.cfg file:#!KAMAILIO## Several features can be enabled using '#!define WITH_FEATURE' directives:## *** To run in debug mode:# - define WITH_DEBUG## *** To enable mysql:# - define WITH_MYSQL## *** To enable authentication execute:# - enable mysql# - define WITH_AUTH# - add users using 'kamctl'## *** To enable IP authentication execute:# - enable mysql# - enable authentication# - define WITH_IPAUTH# - add IP addresses with group id '1' to 'address' table## *** To enable persistent user location execute:# - enable mysql# - define WITH_USRLOCDB## *** To enable presence server execute:# - enable mysql# - define WITH_PRESENCE## *** To enable nat traversal execute:# - define WITH_NAT# - install RTPProxy: http://www.rtpproxy.org# - start RTPProxy:# rtpproxy -l _your_public_ip_ -s udp:localhost:7722## *** To enable PSTN gateway routing execute:# - define WITH_PSTN# - set the value of pstn.gw_ip# - check route[PSTN] for regexp routing condition## *** To enable database aliases lookup execute:# - enable mysql# - define WITH_ALIASDB## *** To enable speed dial lookup execute:# - enable mysql# - define WITH_SPEEDDIAL## *** To enable multi-domain support execute:# - enable mysql# - define WITH_MULTIDOMAIN## *** To enable TLS support execute:# - adjust CFGDIR/tls.cfg as needed# - define WITH_TLS## *** To enable XMLRPC support execute:# - define WITH_XMLRPC# - adjust route[XMLRPC] for access policy## *** To enable the embedded http server:# - define WITH_XHTTP## *** To enable the RPC web interface execute:# - enable xhttp# - define WITH_XHTTP_RPC## *** To enable the provisioning web interface execute:# - enable mysql# - enable xhttp# - define WITH_XHTTP_PI## *** To enable anti-flood detection execute:# - adjust pike and htable=>ipban settings as needed (default is# block if more than 16 requests in 2 seconds and ban for 300 seconds)# - define WITH_ANTIFLOOD## *** To block 3XX redirect replies execute:# - define WITH_BLOCK3XX## *** To enable VoiceMail routing execute:# - define WITH_VOICEMAIL# - set the value of voicemail.srv_ip# - adjust the value of voicemail.srv_port## *** To enhance accounting execute:# - enable mysql# - define WITH_ACCDB# - add following columns to database#!ifdef ACCDB_COMMENTALTER TABLE acc ADD COLUMN src_user VARCHAR(64) NOT NULL DEFAULT '';ALTER TABLE acc ADD COLUMN src_domain VARCHAR(128) NOT NULL DEFAULT '';ALTER TABLE acc ADD COLUMN src_ip varchar(64) NOT NULL default '';ALTER TABLE acc ADD COLUMN dst_ouser VARCHAR(64) NOT NULL DEFAULT '';ALTER TABLE acc ADD COLUMN dst_user VARCHAR(64) NOT NULL DEFAULT '';ALTER TABLE acc ADD COLUMN dst_domain VARCHAR(128) NOT NULL DEFAULT '';ALTER TABLE missed_calls ADD COLUMN src_user VARCHAR(64) NOT NULL DEFAULT '';ALTER TABLE missed_calls ADD COLUMN src_domain VARCHAR(128) NOT NULL DEFAULT '';ALTER TABLE missed_calls ADD COLUMN src_ip varchar(64) NOT NULL default '';ALTER TABLE missed_calls ADD COLUMN dst_ouser VARCHAR(64) NOT NULL DEFAULT '';ALTER TABLE missed_calls ADD COLUMN dst_user VARCHAR(64) NOT NULL DEFAULT '';ALTER TABLE missed_calls ADD COLUMN dst_domain VARCHAR(128) NOT NULL DEFAULT '';#!endif####### Include Local Config If Exists #########import_file "kamailio-local.cfg"####### Defined Values ##########!define WITH_NAT#!define WITH_USRLOCDB#!define WITH_AUTH#!define WITH_MULTIDOMAIN#!define WITH_POSTGRES#!define WITH XHTTP#!define DBURL "postgres://postgres@127.0.0.1/openser"##!define WITH_TLS#!ifdef WITH_MULTIDOMAIN# - the value for 'use_domain' parameters#!define MULTIDOMAIN 1#!else#!define MULTIDOMAIN 0#!endif# - flags# FLT_ - per transaction (message) flags# FLB_ - per branch flags#!define FLT_ACC 1#!define FLT_ACCMISSED 2#!define FLT_ACCFAILED 3#!define FLT_NATS 5#!define FLB_NATB 6#!define FLB_NATSIPPING 7#!define WITH_WEBSOCKETS#!define WITH_DEBUG####### Global Parameters ##########!ifdef WITH_DEBUGdebug=9log_stderror=yes#!elsedebug=2log_stderror=no#!endifmemdbg=5memlog=5log_facility=LOG_LOCAL0fork=yeschildren=4/* uncomment the next line to disable TCP (default on) */#disable_tcp=yes/* uncomment the next line to disable the auto discovery of local aliasesbased on reverse DNS on IPs (default on) */#auto_aliases=no/* add local domain aliases */#alias="sip.mydomain.com"/* uncomment and configure the following line if you want Kamailio tobind on a specific interface/port/proto (default bind on all available) */listen=192.168.10.202:5070alias=devel.phemium.com#!ifdef WITH_WEBSOCKETSlisten=192.168.10.202:8081#!endif/* port to listen to* - can be specified more than once if needed to listen on many ports */#port=5070#!ifdef WITH_TLSenable_tls=yes#!endif# life time of TCP connection when there is no traffic# - a bit higher than registration expires to cope with UA behind NATtcp_connection_lifetime=3605#!ifdef WITH_XHTTPtcp_accept_no_cl=yes#!endif####### Custom Parameters ########## These parameters can be modified runtime via RPC interface# - see the documentation of 'cfg_rpc' module.## Format: group.id = value 'desc' description# Access: $sel(cfg_get.group.id) or @cfg_get.group.id##!ifdef WITH_PSTN# PSTN GW Routing## - pstn.gw_ip: valid IP or hostname as string value, example:# pstn.gw_ip = "10.0.0.101" desc "My PSTN GW Address"## - by default is empty to avoid misroutingpstn.gw_ip = "" desc "PSTN GW Address"pstn.gw_port = "" desc "PSTN GW Port"#!endif#!ifdef WITH_VOICEMAIL# VoiceMail Routing on offline, busy or no answer## - by default Voicemail server IP is empty to avoid misroutingvoicemail.srv_ip = "" desc "VoiceMail IP Address"voicemail.srv_port = "5060" desc "VoiceMail Port"#!endif####### Modules Section ######### set paths to location of modules (to sources or installation folders)#!ifdef WITH_SRCPATHmpath="modules_k:modules"#!elsempath="/usr/local/lib/kamailio/modules_k/:/usr/lib/kamailio/modules/"#!endif#!ifdef WITH_MYSQLloadmodule "db_mysql.so"#!endif#!ifdef WITH_POSTGRESloadmodule "db_postgres.so"#!endifloadmodule "mi_fifo.so"loadmodule "kex.so"loadmodule "corex.so"loadmodule "tm.so"loadmodule "tmx.so"loadmodule "sl.so"loadmodule "rr.so"loadmodule "pv.so"loadmodule "maxfwd.so"loadmodule "usrloc.so"loadmodule "registrar.so"loadmodule "textops.so"loadmodule "siputils.so"loadmodule "xlog.so"loadmodule "sanity.so"loadmodule "ctl.so"loadmodule "cfg_rpc.so"loadmodule "mi_rpc.so"loadmodule "acc.so"#!ifdef WITH_AUTHloadmodule "auth.so"loadmodule "auth_db.so"#!ifdef WITH_IPAUTHloadmodule "permissions.so"#!endif#!endif#!ifdef WITH_ALIASDBloadmodule "alias_db.so"#!endif#!ifdef WITH_SPEEDDIALloadmodule "speeddial.so"#!endif#!ifdef WITH_MULTIDOMAINloadmodule "domain.so"#!endif#!ifdef WITH_PRESENCEloadmodule "presence.so"loadmodule "presence_xml.so"#!endif#!ifdef WITH_NATloadmodule "nathelper.so"loadmodule "rtpproxy.so"#!endif#!ifdef WITH_TLSloadmodule "tls.so"#!endif#!ifdef WITH_WEBSOCKETSloadmodule "xhttp.so"loadmodule "websocket.so"#!endif#!ifdef WITH_ANTIFLOODloadmodule "htable.so"loadmodule "pike.so"#!endif#!ifdef WITH_XMLRPCloadmodule "xmlrpc.so"#!endif#!ifdef WITH_DEBUGloadmodule "debugger.so"#!endif#!ifdef WITH_XHTTPloadmodule "xhttp.so"#!endif#!ifdef WITH_XHTTP_RPCloadmodule "xhttp_rpc.so"#!endif#!ifdef WITH_XHTTP_PIloadmodule "xhttp_pi.so"#!endifloadmodule "avpops.so"# ----------------- setting module-specific parameters ---------------# ----- mi_fifo params -----modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")# ----- tm params -----# auto-discard branches from previous serial forking legmodparam("tm", "failure_reply_mode", 3)# default retransmission timeout: 30secmodparam("tm", "fr_timer", 30000)# default invite retransmission timeout after 1xx: 120secmodparam("tm", "fr_inv_timer", 120000)# ----- rr params -----# add value to ;lr param to cope with most of the UAsmodparam("rr", "enable_full_lr", 1)# do not append from tag to the RR (no need for this script)modparam("rr", "append_fromtag", 0)# ----- registrar params -----modparam("registrar", "method_filtering", 1)/* uncomment the next line to disable parallel forking via location */# modparam("registrar", "append_branches", 0)/* uncomment the next line not to allow more than 10 contacts per AOR */#modparam("registrar", "max_contacts", 10)# max value for expires of registrationsmodparam("registrar", "max_expires", 3600)# set it to 1 to enable GRUUmodparam("registrar", "gruu_enabled", 0)# ----- acc params -----/* what special events should be accounted ? */modparam("acc", "early_media", 0)modparam("acc", "report_ack", 0)modparam("acc", "report_cancels", 0)/* by default ww do not adjust the direct of the sequential requests.if you enable this parameter, be sure the enable "append_fromtag"in "rr" module */modparam("acc", "detect_direction", 0)/* account triggers (flags) */modparam("acc", "log_flag", FLT_ACC)modparam("acc", "log_missed_flag", FLT_ACCMISSED)modparam("acc", "log_extra","src_user=$fU;src_domain=$fd;src_ip=$si;""dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")modparam("acc", "failed_transaction_flag", FLT_ACCFAILED)/* enhanced DB accounting */#!ifdef WITH_ACCDBmodparam("acc", "db_flag", FLT_ACC)modparam("acc", "db_missed_flag", FLT_ACCMISSED)modparam("acc", "db_url", DBURL)modparam("acc", "db_extra","src_user=$fU;src_domain=$fd;src_ip=$si;""dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")#!endif# ----- usrloc params -----/* enable DB persistency for location entries */#!ifdef WITH_USRLOCDBmodparam("usrloc", "db_url", DBURL)modparam("usrloc", "db_mode", 2)modparam("usrloc", "use_domain", MULTIDOMAIN)#!endif# ----- auth_db params -----#!ifdef WITH_AUTHmodparam("auth_db", "db_url", DBURL)modparam("auth_db", "calculate_ha1", yes)modparam("auth_db", "password_column", "password")modparam("auth_db", "load_credentials", "")modparam("auth_db", "use_domain", MULTIDOMAIN)# ----- permissions params -----#!ifdef WITH_IPAUTHmodparam("permissions", "db_url", DBURL)modparam("permissions", "db_mode", 1)#!endif#!endif
# ----- alias_db params -----#!ifdef WITH_ALIASDBmodparam("alias_db", "db_url", DBURL)modparam("alias_db", "use_domain", MULTIDOMAIN)#!endif# ----- speeddial params -----#!ifdef WITH_SPEEDDIALmodparam("speeddial", "db_url", DBURL)modparam("speeddial", "use_domain", MULTIDOMAIN)#!endif# ----- domain params -----#!ifdef WITH_MULTIDOMAINmodparam("domain", "db_url", DBURL)# register callback to match myself condition with domains listmodparam("domain", "register_myself", 1)#!endif#!ifdef WITH_PRESENCE# ----- presence params -----modparam("presence", "db_url", DBURL)# ----- presence_xml params -----modparam("presence_xml", "db_url", DBURL)modparam("presence_xml", "force_active", 1)#!endif#!ifdef WITH_NAT# ----- rtpproxy params -----modparam("rtpproxy", "rtpproxy_sock", "udp:127.0.0.1:7899")# ----- nathelper params -----modparam("nathelper", "natping_interval", 30)modparam("nathelper", "ping_nated_only", 1)modparam("nathelper", "sipping_bflag", FLB_NATSIPPING)modparam("nathelper", "sipping_from", "sip:pinger@devel.phemium.com")# params needed for NAT traversal in other modulesmodparam("nathelper|registrar", "received_avp", "$avp(RECEIVED)")modparam("usrloc", "nat_bflag", FLB_NATB)#!endif
#!ifdef WITH_TLS# ----- tls params -----modparam("tls", "config", "/etc/kamailio/tls.cfg")#!endif#!ifdef WITH_ANTIFLOOD# ----- pike params -----modparam("pike", "sampling_time_unit", 2)modparam("pike", "reqs_density_per_unit", 16)modparam("pike", "remove_latency", 4)# ----- htable params -----# ip ban htable with autoexpire after 5 minutesmodparam("htable", "htable", "ipban=>size=8;autoexpire=300;")#!endif#!ifdef WITH_XMLRPC# ----- xmlrpc params -----modparam("xmlrpc", "route", "XMLRPC");modparam("xmlrpc", "url_match", "^/RPC")#!endif#!ifdef WITH_DEBUG# ----- debugger params -----modparam("debugger", "cfgtrace", 1)#!endif#!ifdef WITH_XHTTP_RPCmodparam("xhttp_rpc", "xhttp_rpc_root", "http_rpc")#!endif#!ifdef WITH_XHTTP_PImodparam("xhttp_pi", "xhttp_pi_root", "http_pi")modparam("xhttp_pi", "framework", "/etc/kamailio/pi_framework.xml")#!endif#!ifdef WITH_WEBSOCKETS# ----- nathelper params -----#modparam("nathelper|registrar", "received_avp", "$avp(RECEIVED)")# Note: leaving NAT pings turned off here as nathelper is _only_ being used for# WebSocket connections. NAT pings are not needed as WebSockets have# their own keep-alives.modparam("websocket", "sub_protocols", 1)#!endif####### Routing Logic ######### Main SIP request routing logic# - processing of any incoming SIP request starts with this route# - note: this is the same as route { ... }request_route {xlog("PHEMIUM Init request_route\n");# per request initial checksroute(REQINIT);# NAT detectionroute(NATDETECT);route(WESIP);# CANCEL processingif (is_method("CANCEL")){if (t_check_trans())t_relay();exit;}# handle requests within SIP dialogsroute(WITHINDLG);### only initial requests (no To tag)t_check_trans();# authenticationroute(AUTH);# record routing for dialog forming requests (in case they are routed)# - remove preloaded route headersremove_hf("Route");if (is_method("INVITE|SUBSCRIBE"))record_route();# account only INVITEsif (is_method("INVITE")){setflag(FLT_ACC); # do accounting}# dispatch requests to foreign domainsroute(SIPOUT);### requests for my local domains# handle presence related requestsroute(PRESENCE);# handle registrationsroute(REGISTRAR);if ($rU==$null){# request with no Username in RURIsl_send_reply("484","Address Incomplete");exit;}# dispatch destinations to PSTNroute(PSTN);# user location serviceroute(LOCATION);route(RELAY);}# Wesip forwarding# is IP based. Anything not coming from Wesip is# sent there. Anything coming from there, continues# its routeroute[WESIP] {if ( $si == "192.168.10.202" ) {if ( is_present_hf("X-Phemium-Reason") ) {$avp(phemreason) = $hdr(X-Phemium-Reason);}if ( is_present_hf("X-Phemium-Register") ) {$avp(phemreg) = $hdr(X-Phemium-Register);if (!avp_check("$avp(phemreg)","eq/yes/i")) {if (is_avp_set("$avp(phemreason)")) {sl_send_reply("403","$avp(phemreason)");} else {sl_send_reply("403","Request not accepted");}exit;}}} else {$avp(RECEIVED) = "sip:"+$si+":"+$sp;if ( is_method("REGISTER") ) {append_hf("P-Received: $avp(RECEIVED)\r\n");}record_route();t_relay_to_udp("192.168.10.202","50060");exit;}}# Initial fixesroute[FIXUP] {if ( $rd == "192.168.10.202" ) {rewritehost("devel.phemium.com");}}# Check accepted domainsroute[ACCDOMAIN] {if ! ( $rd == "devel.phemium.com"|| $si == "192.168.10.202"#OR_ACCEPTED_DOMAINS) {sl_send_reply("403", "Not accepted domain");exit;}}# Keepalive request respondingroute[KEEPALIVE] {if ( is_method("NOTIFY")&& is_uri_host_local()&& ( strempty($rU)|| search("^Event: keep-alive") ) ) {sl_send_reply("200", "OK - keepalive");exit;}if ( is_method("OPTIONS")&& is_uri_host_local()&& strempty($rU) ) {sl_send_reply("200", "OK - keepalive");exit;}}# Mirror service routingroute[MIRROR] {if ( uri=~"^sip:(.+@)?conf.devel.phemium.com" ){remove_hf("P-Asserted-Identity");avp_printf("$avp(i:1)", "<$fu>");append_hf( "P-Asserted-Identity: $avp(i:1)\r\n" );avp_delete("$avp(i:1)");record_route();t_relay_to_udp("192.168.10.202","50070");exit;}# Record route backwards from mirrorif ( $si == "192.168.10.202"&& from_uri=~"^sip:(.+@)?conf.devel.phemium.com") {record_route();t_relay();}}route[RELAY] {# enable additional event routes for forwarded requests# - serial forking, RTP relaying handling, a.s.o.if (is_method("INVITE|BYE|SUBSCRIBE|UPDATE")) {if(!t_is_set("branch_route")) t_on_branch("MANAGE_BRANCH");}if (is_method("INVITE|SUBSCRIBE|UPDATE")) {if(!t_is_set("onreply_route")) t_on_reply("MANAGE_REPLY");}if (is_method("INVITE")) {if(!t_is_set("failure_route")) t_on_failure("MANAGE_FAILURE");}if (!t_relay()) {sl_reply_error();}exit;}# Per SIP request initial checksroute[REQINIT] {#!ifdef WITH_ANTIFLOOD# flood dection from same IP and traffic ban for a while# be sure you exclude checking trusted peers, such as pstn gateways# - local host excluded (e.g., loop to self)if(src_ip!=myself){if($sht(ipban=>$si)!=$null){# ip is already blockedxdbg("request from blocked IP - $rm from $fu (IP:$si:$sp)\n");exit;}if (!pike_check_req()){xlog("L_ALERT","ALERT: pike blocking $rm from $fu (IP:$si:$sp)\n");$sht(ipban=>$si) = 1;exit;}}#!endifif (!mf_process_maxfwd_header("10")) {sl_send_reply("483","Too Many Hops");exit;}if(!sanity_check("1511", "7")){xlog("Malformed SIP message from $si:$sp\n");exit;}}# Handle requests within SIP dialogsroute[WITHINDLG] {if (has_totag()) {# sequential request withing a dialog should# take the path determined by record-routingif (loose_route()) {route(DLGURI);if (is_method("BYE")) {setflag(FLT_ACC); # do accounting ...setflag(FLT_ACCFAILED); # ... even if the transaction fails}else if ( is_method("ACK") ) {# ACK is forwarded statelessyroute(NATMANAGE);}else if ( is_method("NOTIFY") ) {# Add Record-Route for in-dialog NOTIFY as per RFC 6665.record_route();}route(RELAY);} else {if (is_method("SUBSCRIBE") && uri == myself) {# in-dialog subscribe requestsroute(PRESENCE);exit;}if ( is_method("ACK") ) {if ( t_check_trans() ) {# no loose-route, but stateful ACK;# must be an ACK after a 487# or e.g. 404 from upstream servert_relay();exit;} else {# ACK without matching transaction ... ignore and discardexit;}}sl_send_reply("404","Not here");}exit;}}# Handle SIP registrationsroute[REGISTRAR] {if (is_method("REGISTER")){if(isflagset(FLT_NATS)){setbflag(FLB_NATB);# uncomment next line to do SIP NAT pinging## setbflag(FLB_NATSIPPING);}if (!save("location"))sl_reply_error();exit;}}# USER location serviceroute[LOCATION] {#!ifdef WITH_SPEEDDIAL# search for short dialing - 2-digit extensionif($rU=~"^[0-9][0-9]$")if(sd_lookup("speed_dial"))route(SIPOUT);#!endif#!ifdef WITH_ALIASDB# search in DB-based aliasesif(alias_db_lookup("dbaliases"))route(SIPOUT);#!endif$avp(oexten) = $rU;if (!lookup("location")) {$var(rc) = $rc;route(TOVOICEMAIL);t_newtran();switch ($var(rc)) {case -1:case -3:send_reply("404", "Not Found");exit;case -2:send_reply("405", "Method Not Allowed");exit;}}# when routing via usrloc, log the missed calls alsoif (is_method("INVITE")){setflag(FLT_ACCMISSED);}}# Presence server routeroute[PRESENCE] {if(!is_method("PUBLISH|SUBSCRIBE"))return;#!ifdef WITH_PRESENCEif (!t_newtran()){sl_reply_error();exit;};if(is_method("PUBLISH")){handle_publish();t_release();}elseif( is_method("SUBSCRIBE")){handle_subscribe();t_release();}exit;#!endif# if presence enabled, this part will not be executedif (is_method("PUBLISH") || $rU==$null){sl_send_reply("404", "Not here");exit;}return;}# Authentication routeroute[AUTH] {#!ifdef WITH_AUTH#!ifdef WITH_IPAUTHif((!is_method("REGISTER")) && allow_source_address()){# source IP allowedreturn;}#!endifif (is_method("REGISTER") || from_uri==myself){# authenticate requestsif (!auth_check("$fd", "subscriber", "1")) {auth_challenge("$fd", "0");exit;}# user authenticated - remove auth headerif(!is_method("REGISTER|PUBLISH"))consume_credentials();}# if caller is not local subscriber, then check if it calls# a local destination, otherwise deny, not an open relay hereif (from_uri!=myself && uri!=myself){sl_send_reply("403","Not relaying");exit;}#!endifreturn;}# Caller NAT detection routeroute[NATDETECT] {#!ifdef WITH_NATforce_rport();if (nat_uac_test("19")) {if (is_method("REGISTER")) {fix_nated_register();} else {add_contact_alias();}setflag(FLT_NATS);}#!endifreturn;}# RTPProxy controlroute[NATMANAGE] {#!ifdef WITH_NATif (is_request()) {if(has_totag()) {if(check_route_param("nat=yes")) {setbflag(FLB_NATB);}}}if (!(isflagset(FLT_NATS) || isbflagset(FLB_NATB)))return;rtpproxy_manage();if (is_request()) {if (!has_totag()) {add_rr_param(";nat=yes");}}if (is_reply()) {if(isbflagset(FLB_NATB)) {add_contact_alias();}}#!endifreturn;}# URI update for dialog requestsroute[DLGURI] {#!ifdef WITH_NATif(!isdsturiset()) {handle_ruri_alias();}#!endifreturn;}# Routing to foreign domainsroute[SIPOUT] {if (!uri==myself){append_hf("P-hint: outbound\r\n");route(RELAY);}}# PSTN GW routingroute[PSTN] {#!ifdef WITH_PSTN# check if PSTN GW IP is definedif (strempty($sel(cfg_get.pstn.gw_ip))) {xlog("SCRIPT: PSTN rotuing enabled but pstn.gw_ip not defined\n");return;}# route to PSTN dialed numbers starting with '+' or '00'# (international format)# - update the condition to match your dialing rules for PSTN routingif(!($rU=~"^(\+|00)[1-9][0-9]{3,20}$"))return;# only local users allowed to callif(from_uri!=myself) {sl_send_reply("403", "Not Allowed");exit;}if (strempty($sel(cfg_get.pstn.gw_port))) {$ru = "sip:" + $rU + "@" + $sel(cfg_get.pstn.gw_ip);} else {$ru = "sip:" + $rU + "@" + $sel(cfg_get.pstn.gw_ip) + ":"+ $sel(cfg_get.pstn.gw_port);}route(RELAY);exit;#!endifreturn;}# XMLRPC routing#!ifdef WITH_XMLRPCroute[XMLRPC] {# allow XMLRPC from localhostif ((method=="POST" || method=="GET")&& (src_ip==127.0.0.1)) {# close connection only for xmlrpclib user agents (there is a bug in# xmlrpclib: it waits for EOF before interpreting the response).if ($hdr(User-Agent) =~ "xmlrpclib")set_reply_close();set_reply_no_connect();dispatch_rpc();exit;}send_reply("403", "Forbidden");exit;}#!endif# route to voicemail serverroute[TOVOICEMAIL] {#!ifdef WITH_VOICEMAILif(!is_method("INVITE"))return;# check if VoiceMail server IP is definedif (strempty($sel(cfg_get.voicemail.srv_ip))) {xlog("SCRIPT: VoiceMail rotuing enabled but IP not defined\n");return;}if($avp(oexten)==$null)return;$ru = "sip:" + $avp(oexten) + "@" + $sel(cfg_get.voicemail.srv_ip)+ ":" + $sel(cfg_get.voicemail.srv_port);route(RELAY);exit;#!endifreturn;}# manage outgoing branchesbranch_route[MANAGE_BRANCH] {xdbg("new branch [$T_branch_idx] to $ru\n");route(NATMANAGE);}# manage incoming repliesonreply_route[MANAGE_REPLY] {xdbg("incoming reply\n");if(status=~"[12][0-9][0-9]")route(NATMANAGE);}# manage failure routing casesfailure_route[MANAGE_FAILURE] {xlog( "PHEMIUM failure route\n" );route(NATMANAGE);if (t_is_canceled()) {exit;}#!ifdef WITH_BLOCK3XX# block call redirect based on 3xx replies.if (t_check_status("3[0-9][0-9]")) {t_reply("404","Not found");exit;}#!endif#!ifdef WITH_VOICEMAIL# serial forking# - route to voicemail on busy or no answer (timeout)if (t_check_status("486|408")) {route(TOVOICEMAIL);exit;}#!endif}#!ifdef WITH_XHTTPevent_route[xhttp:request] {xlog("Entering XHTTP\n");#!ifdef WITH_XHTTP_RPC$var(xhttp_rpc_root) = $(hu{s.substr,0,9});if ($var(xhttp_rpc_root) == "/http_rpc") {dispatch_xhttp_rpc();}#!endif#!ifdef WITH_XHTTP_PI$var(xhttp_rpc_root) = $(hu{s.substr,0,8});if ($var(xhttp_rpc_root) == "/http_pi") {dispatch_xhttp_pi();}#!endifxhttp_reply("200", "OK", "text/html","<html><body>Wrong URL $hu</body></html>");}#!endifAny thoughts??Thank you in advanced!--
_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
sr-users@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users