JISIP学习笔记14- PJSUA命令行解析

前面大致学习了pjsip的媒体系统和信令系统

现在进入pisua例子程序的学习,因为这个例子程序可能是我改造的对象

这两天又看了看设计模式的书, 感觉pjsip运用的最多的就是抽象接口和工厂模式,了解设计模式对理解代码很有帮助!

一)  命令行指定的配置文件的处理

今天看了一下,命令行代码的解析,对命令行中的配置文件解析函数看了看

原来配置文件的内容就是把命令行参数写到配置文件里面去了

格式还是和命令行参数的格式是一致的, 使用配置文件的好处是不用每次运行程序都输入命令行参数,还可一加入注释

注释有三种方式, 这个完全是python风格的注释:

1) ""    例子: “这是一段说明文字”     类似c语言的/* 这是一段说明文字 */

2) ''     例子: '这是一段说明文字'     类似c语言的/* 这是一段说明文字 */

3) #     例子: #这是一段说明文字     类似c语言的//这是一段说明文字

read_config_file()函数读取配置文件, 解析出的数据将被“连接到”main函数命令行参数的后面

最终将在后续的命令行参数解析代码段中被解析, 程序启动后,你可以在控制台输入菜单命令f,保存一个配置文件

pjsua的命令行参数这里总结好了:     https://blog.csdn.net/zoutian007/article/details/7970160?locationNum=4&fps=1

====================


2) 本地SIP账户添加

3)号码簿联系人添加

=== pjsua的app中pjsua_app_cfg_t结构体提供了一个接口on_config_init, 可以在解析命令行参数后,给移植者提供再次“覆盖”配置参数的机会, 所以我把本地SIP账户添加和号码本联系人添加的代码都放在这个接口里面了,以下是代码的例子:


void on_app_config_init(pjsua_app_config *pjsua_app_conf)
{//SET_TRACE_POINT;

    UCI_CONFIG uci_conf;
    pjsua_acc_config *cur_acc;
    pjsua_buddy_config    *cur_buddy;
    //get_uci_conf(&uci_conf);

    if(1){
        pjsua_app_conf->auto_answer = 180;//自动应答震铃
        pjsua_app_conf->rtp_cfg.port=4000;//媒体接收地址与端口
        pjsua_app_conf->udp_cfg.port = 5068;
        pjsua_app_conf->cfg.user_agent = pj_str(" pjsip2.7.2 device"); //SIP头部消息中代理名称

        //
        pj_log_set_level(pjsua_app_conf->log_cfg.level = 0);
        pjsua_app_conf->rtp_cfg.bound_addr = pj_str("192.168.200.1");
        pjsua_app_conf->udp_cfg.bound_addr = pj_str("192.168.200.1");

        //添加账户信息
        pjsua_app_conf->acc_cnt = 1;
       cur_acc = &pjsua_app_conf->acc_cfg[0];

       cur_acc->id = pj_str("'local'<SIP:[email protected]:5068>");    //请求消息中所携带的contact地址的uri
       cur_acc->reg_uri = pj_str("'local'<SIP:192.168.200.1:6060>");    //注册消息中的from/to头域中所使用的uri
       cur_acc->use_rfc5626 = PJ_FALSE;
        cur_acc->register_on_acc_add = PJ_TRUE;                               //账户添加时即发送注册消息
        cur_acc->reg_retry_interval = 60;

       //401/407鉴权相关
       cur_acc->cred_count = 1;
        cur_acc->cred_info[0].username = pj_str("username");
        cur_acc->cred_info[0].scheme = pj_str("Digest");
        cur_acc->cred_info[0].realm = pj_str("realm.com");
        cur_acc->cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
        cur_acc->cred_info[0].data = pj_str("password");

        //添加电话本//sip:[email protected]:6060 ---------注意下面3种uri的格式都是可用的,建议使用2/3两种格式
        pjsua_app_conf->buddy_cnt=3;
        cur_buddy = &pjsua_app_conf->buddy_cfg[0];
        cur_buddy->uri = pj_str("sip:[email protected]:6060");           
        cur_buddy = &pjsua_app_conf->buddy_cfg[1];
        cur_buddy->uri = pj_str("<sip:[email protected]:6060>");
        cur_buddy = &pjsua_app_conf->buddy_cfg[2];
        cur_buddy->uri = pj_str("'acc_lable' <sip:[email protected]:6060>");
    }
    //release_uci_conf(&uci_conf);
}






猜你喜欢

转载自blog.csdn.net/twd_1991/article/details/80757858
今日推荐