Featured image of post b2b_logic模块介绍

b2b_logic模块介绍

b2b_logic模块介绍

b2b_logic 官方使用场景介绍:https://www.opensips.org/Documentation/Tutorials-B2BUA-3-2

本次测试的opensips版本为:

opensips 3.3.10 (x86_64/linux)

b2b_logic 实战

配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
loadmodule "b2b_entities.so"
loadmodule "rtp_relay.so"
loadmodule "dialog.so"
loadmodule "b2b_logic.so"
modparam("b2b_logic", "hash_size", 10)
modparam("b2b_logic", "script_req_route", "b2b_logic_request")
modparam("b2b_logic", "script_reply_route", "b2b_logic_reply")
modparam("b2b_logic", "cleanup_period", 60)
#modparam("b2b_logic", "db_url", "mysql://opensips:opensipsrw@172.16.4.111/opensips")
modparam("b2b_logic", "update_period", 60)
modparam("b2b_logic", "max_duration", 7200)
#modparam("b2b_logic", "contact_user", 1)
modparam("b2b_logic", "server_address", "sip:$fU@172.16.4.111:5360")
#modparam("b2b_logic", "db_mode", 1)
modparam("b2b_logic", "b2bl_th_init_timeout", 60)
modparam("b2b_logic", "b2bl_early_update", 1)

在 route主请求中添加:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 if(is_method("INVITE") && !has_totag()) {
    xlog("L_DBG","[$cfg_line][$ci]---b2b-server_new--:$rm|$rs|$tu|$socket_in(port)|$var(contact)\n");
    b2b_server_new("caller");
    create_dialog("B");
    rtp_relay_engage("rtpengine",0);

    #$avp(route)="Record-Route";
    #$avp(route-content)="<sip:172.16.4.111:5360;lr>";
    #b2b_client_new("callee", "sip:$tU@172.16.4.114:5080",,,$ct);
    b2b_client_new("callee", "sip:$tU@172.16.4.114:5080");
    #record_route();
    #b2b_client_new("callee", "sip:$tU@172.16.4.114:5080",,,$ct,$avp(route),$avp(route-content));
    # initialize B2B session
    b2b_init_request("prepaid");
    exit;
}

route[b2b_logic_reply] {
        xlog("L_INFO","[$fU $tU $ci $rm] B2B_Reply Received from $si:$sp User-Agent:$ua\n");
        xlog("L_INFO","[$fU $tU $ci $rm] B2B_Reply message $rs:$rr received \n");
        b2b_handle_reply();
        exit;
}

route[b2b_logic_request] {
    xlog("L_INFO","[$fU $tU $ci $rm] B2B_Request Received from $si:$sp User-Agent:$ua\n");
    xlog("L_INFO","[$fU $tU $ci $rm] B2B_Request message $rs:$rr received \n");
    b2b_pass_request();
    exit;
}

需要注意的是, b2b_logic中媒体服务使用的是rtp_relay,通过rtp_relay来选择媒体代理。 通过b2b_logic 转发的INVITE的Call-ID是新生成的(例如:B2B.377.4269969.1739239153)和主叫的INVITE的Call-ID不同。

目前发现,被叫挂断时b2b_logic会多发送一个Bye给自己,这个应该是invite的Contact被修改成了111机器的缘故。

主叫挂断的sip流程图:主叫挂断

被叫挂断的sip流程图:被叫挂断

本博客已稳定运行
发表了26篇文章 · 总计45.09k字
本站总访问量 次 · 您是本站第 位访问者
粤ICP备2025368587号-1| 使用 Hugo 构建
主题 StackJimmy 设计