团队博客
Kamailio 极简 websocket 脚本
韩小仿
本文提供一个Kamailio
路由脚本,仅支持websocket
客户端注册。
#!KAMAILIO5.5.x debug=2 /* 下面是宏定义,其中7443是加密端口 */ #!substdef "!MY_IP_ADDR!192.168.31.63!g" /* CUSTOMIZE ME 地址 */ #!substdef "!MY_SIP_PORT!5060!g" /* CUSTOMIZE ME 不加密的端口 */ #!substdef "!MY_SIPS_PORT!7443!g" /* CUSTOMIZE ME 加密的端口 */ #!substdef "!MY_DOMAIN!whatever.net!g" /* CUSTOMIZE ME 域名 */ log_stderror=no /* 配置为no表示日志写到syslog */ log_facility=LOG_LOCAL0 tcp_accept_no_cl=yes /* 没有cl(content-length)头kamailio也接受,默认值是拒绝 */ enable_tls=yes /* 配置监听的地址和端口 */ listen=udp:MY_IP_ADDR:MY_SIP_PORT listen=tcp:MY_IP_ADDR:MY_SIP_PORT listen=tls:MY_IP_ADDR:MY_SIPS_PORT alias="MY_DOMAIN" force_rport=yes /* 模块路径 */ # mpath="/usr/local/lib/kamailio/modules/" /* 加载模块 */ loadmodule "xhttp.so" loadmodule "jsonrpcs.so" loadmodule "tm.so" loadmodule "sl.so" loadmodule "pv.so" loadmodule "usrloc.so" loadmodule "registrar.so" loadmodule "siputils.so" loadmodule "xlog.so" loadmodule "ctl.so" loadmodule "tls.so" loadmodule "websocket.so" modparam("jsonrpcs", "pretty_format", 1) modparam("jsonrpcs", "transport", 7) modparam("tm", "failure_reply_mode", 3) modparam("tm", "fr_timer", 30000) modparam("tm", "fr_inv_timer", 120000) modparam("registrar", "method_filtering", 1) modparam("registrar", "max_expires", 3600) modparam("usrloc", "use_domain", 0) modparam("usrloc", "db_mode", 0) /* 参考 https://github.com/kamailio/kamailio/blob/master/src/modules/tls/tls.cfg */ modparam("tls", "config", "/etc/kamailio/tls.cfg") /* 主路由入口 */ request_route { xinfo("*** $sel(msg)\n"); if ($rm == "REGISTER") { /* 为了尽量简单,这里只处理注册请求 */ save("location"); exit; } sl_send_reply("404", "Not here"); exit; } /* http请求的路由入口 */ event_route[xhttp:request] { set_reply_close(); set_reply_no_connect(); $var(msg) = @msg; /* 跟$sel(msg)等效, 参考kamailio的selects文档 */ xinfo("*** $var(msg)\n"); /* 处理http升级到websocket */ if ($hdr(Upgrade) =~ "websocket" && $hdr(Connection) =~ "Upgrade" && $rm =~ "GET") { if (ws_handle_handshake()) { /* websocket 握手 */ exit; } } xhttp_reply("404", "Not Found", "", ""); }
申请根证书或者用openssl
做好自签名证书之后就可以用js.sip
或者sipml5
等进行注册测试,Kamailio
的wss
端口是 7443,sip
用户名和密码可以配置为任意值。 注册成功后运行kamcmd ul.dump
可以看到用户的位置信息。