• 欣赏一段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,怎么弄?

  • 相关阅读:
    解释Android中的Activity生命周期,以及在哪个生命周期方法中可以进行布局的初始化?
    JavaScript: 异步代码同步执行
    视觉语言模型详解
    又一嵌入式开源仿真器
    3D模型格式转换工具HOOPS Exchange协助Epic Games实现CAD数据轻松导入虚幻引擎
    HCIA-Security -- 防火墙安全策略
    Python编程从入门到实践 第八章:函数 练习答案记录
    14个SpringBoot优化小妙招
    TIOBE 滚动测试报 2021.10
    vue-cli搭建一个新项目及基础配置
  • 原文地址:https://blog.csdn.net/qq_56167818/article/details/133987008