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等进行注册测试,sipml5wss端口是7443,sip用户名和密码可以配置为任意值。注册成功后运行kamcmd ul.dump可以看到用户的位置信息。

作者:韩小仿 | 来源:公众号——FreeSWITCH中文社区

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论