• 欣赏一段Kamailio路由脚本


    1. #!KAMAILIO
    2. #!define MULTIDOMAIN 0
    3. log_stderror=no
    4. debug=3
    5. log_facility=LOG_LOCAL0
    6. log_prefix="{$mt $hdr(CSeq) $ci} "
    7. log_name="kamailio"
    8. # number of SIP routing processes
    9. children=8
    10. # Interface definition
    11. listen=udp:192.168.100.2:5060 name "udp"
    12. listen=tcp:192.168.100.2:5060 name "tcp"
    13. listen=tls:192.168.100.2:8088 name "wss"
    14. listen=tls:192.168.100.2:5061 name "tls"
    15. enable_tls=yes
    16. # life time of TCP connection when there is no traffic
    17. # a bit higher than registration expires to cope with UA behind NAT
    18. tcp_connection_lifetime=3605
    19. tcp_accept_no_cl=yes
    20. ####### Modules Section ########
    21. loadmodule "kex.so"
    22. loadmodule "corex.so"
    23. loadmodule "tm.so"
    24. loadmodule "tmx.so"
    25. loadmodule "sl.so"
    26. loadmodule "rr.so"
    27. loadmodule "pv.so"
    28. loadmodule "textops.so"
    29. loadmodule "siputils.so"
    30. loadmodule "xlog.so"
    31. loadmodule "counters.so"
    32. loadmodule "tls.so"
    33. loadmodule "dialog.so"
    34. loadmodule "sipdump.so"
    35. loadmodule "debugger.so"
    36. modparam("tls", "private_key", "/etc/kamailio/ssl/cakey.pem");
    37. modparam("tls", "certificate", "/etc/kamailio/ssl/cacert.pem");
    38. modparam("tls", "tls_method", "TLSv1.2");
    39. modparam("debugger", "log_level_name", "cfgtrace")
    40. ####### Routing Logic ########
    41. request_route {
    42. xdbg("==> $rm (initial request) from $si to $Ri ($RAi)\n");
    43. if (!is_method("ACK")) {
    44. if (t_precheck_trans()) {
    45. t_check_trans();
    46. exit;
    47. }
    48. t_check_trans();
    49. }
    50. # - remove preloaded route headers
    51. remove_hf("Route");
    52. if (is_method("INVITE|SUBSCRIBE|OPTIONS|NOTIFY|MESSAGE")) {
    53. record_route();
    54. }
    55. route(PSTN);
    56. exit;
    57. }
    58. # Wrapper for relaying requests
    59. route[RELAY] {
    60. if (!t_relay()) {
    61. sl_reply_error();
    62. }
    63. exit;
    64. }
    65. # PSTN GW routing
    66. route[PSTN] {
    67. $rd = "192.168.100.123";
    68. $rp = "5061";
    69. set_send_socket("tls");
    70. $du = $ru + ";transport=tls";
    71. route(RELAY);
    72. }
    73. onreply_route {
    74. xerr("$Rp $Rn $Rut");
    75. dbg_sip_msg();
    76. if ($Rp == 8088 && proto != WS && proto != WSS) {
    77. xwarn("SIP response received on $Rp\n");
    78. drop;
    79. }
    80. }

    好几个想不到:

    • 没想到有这样的函数dbg_sip_msg()
    • listen里面可以增加name参数,set_send_socket|set_send_socket_name|$fs去对应,这个也是没想到的
    • $RAi,$Rut,没想到还有这样的伪变量

    还得加油。

    文末留一个作业,有兴趣的可以尝试下:在路由脚本里面打印sip message,怎么弄?

  • 相关阅读:
    上海亚商投顾:沪指缩量震荡 龙字辈个股掀跌停潮
    远程连接服务器及可视化方法(Win和Linux)
    【大数据开发技术】实验02-Hadoop常用命令
    sentinel中流控规则 并发线程数的实战理解
    如何把 ThinkPHP 5 的项目迁移到阿里云函数计算来应对流量洪峰?
    陈志泊主编《数据库原理及应用教程第4版微课版》的实验题目参考答案实验4
    技术开发87
    运行disco项目报错及解决
    一文搞定你对网关的理解
    【Tailwind】footer固定底部
  • 原文地址:https://blog.csdn.net/qq_56167818/article/details/133987008