帐户重新登记在PJSIP [英] Account re-registration in pjsip

查看:397
本文介绍了帐户重新登记在PJSIP的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用我的应用程序PJSIP。在注册的时候,我的超时设置为60秒。每隔60秒后,我的帐户将重新注册,但我的情况没有发生。如果有人知道这是为什么,请告诉我(我设置为来电PJSIP帐户添加方法,如果我错过任何事,请告诉我什么领域需要)。

  setRegistration(字符串sipUser,密码字符串,字符串sipServer){    INT状态= pjsuaConstants.PJ_FALSE;
    / *注册通过创建SIP帐户SIP服务器。 * /
    {        INT [] ACCID =新INT [1];        ACCID [0] = 1;        pjsua_acc_config CFG =新pjsua_acc_config();
        pjsua.acc_config_default(CFG);
        csipsimple_acc_config css_cfg =新csipsimple_acc_config();
        pjsua.csipsimple_acc_config_default(css_cfg);
        cfg.setPriority(100);
        cfg.setId(pjsua.pj_str_copy(SIP:+ sipUser +@+ sipServer));
        cfg.setReg_uri(pjsua.pj_str_copy(SIP:+ sipServer
                +;运输= UDP; LR));
        cfg.setReg_timeout(60);
        cfg.setCred_count(1);        cfg.setPublish_enabled(0);
        cfg.setReg_delay_before_refresh(-1);        cfg.setUse_timer(pjsua_sip_timer_use.PJSUA_SIP_TIMER_OPTIONAL);        pjsip_cred_info cred_info = cfg.getCred_info();
        cred_info.setRealm(pjsua.pj_str_copy(sipServer));
        cred_info.setScheme(pjsua.pj_str_copy(消化));
        cred_info.setUsername(pjsua.pj_str_copy(sipUser));
        cred_info
                .setData_type(pjsip_cred_data_type.PJSIP_CRED_DATA_PLAIN_PASSWD
                        .swigValue());
        cred_info.setData(pjsua.pj_str_copy(密码));
        cfg.setKa_interval(0);        pjsua.csipsimple_set_acc_user_data(CFG,css_cfg);
        Log.i(身份,ACC是增加......);
        状态= pjsua.acc_add(CFG,pjsuaConstants.PJ_FALSE,ACCID);
        Log.i(身份,ACC加);        如果(状态== pjsuaConstants.PJ_SUCCESS){
            状态= pjsua.acc_set_online_status(ACCID [0],1);
            Log.i(设置在线状态在线,--- online--+状态);
        }其他{
            Log.i(未成功,联合国--- success--+状态);
        }
    }
    返回状态== pjsuaConstants.PJ_SUCCESS;
}

日志

  12月5日至3日:17:58.820:I / libpjsip(1003):12:17:58.826 pjsua_acc.c

注册成功,状态= 200(OK),将在60秒重新注册

  12月5日至3日:17:58.820:D / libpjsip(1003):12:17:58.827 pjsua_acc.c ....保活定时器开始为ACC 1,目的地:4.53.123.201:5060,间隔:40秒


解决方案

您需要设置的时间间隔


  

cfg.reg_retry_interval


我是pretty确保Java API提供这个属性。

I'm using pjsip in my application. At the time of registration I set the timeout to 60 sec. After every 60 seconds my account will re-register but in my case it is not happening. If anybody knows why, please tell me (I set whatever fields required to call pjsip account add method, if i miss any thing please tell me).

setRegistration(String sipUser, String password,String sipServer) {

    int status = pjsuaConstants.PJ_FALSE;
    /* Register to SIP server by creating SIP account. */
    {

        int[] accId = new int[1];

        accId[0] = 1;

        pjsua_acc_config cfg = new pjsua_acc_config();
        pjsua.acc_config_default(cfg);
        csipsimple_acc_config css_cfg = new csipsimple_acc_config();
        pjsua.csipsimple_acc_config_default(css_cfg);
        cfg.setPriority(100);
        cfg.setId(pjsua.pj_str_copy("sip:" + sipUser + "@" + sipServer));
        cfg.setReg_uri(pjsua.pj_str_copy("sip:" + sipServer
                + ";transport=udp;lr")); 
        cfg.setReg_timeout(60);
        cfg.setCred_count(1);

        cfg.setPublish_enabled(0);
        cfg.setReg_delay_before_refresh(-1);

        cfg.setUse_timer(pjsua_sip_timer_use.PJSUA_SIP_TIMER_OPTIONAL);

        pjsip_cred_info cred_info = cfg.getCred_info();
        cred_info.setRealm(pjsua.pj_str_copy(sipServer));
        cred_info.setScheme(pjsua.pj_str_copy("Digest"));
        cred_info.setUsername(pjsua.pj_str_copy(sipUser));
        cred_info
                .setData_type(pjsip_cred_data_type.PJSIP_CRED_DATA_PLAIN_PASSWD
                        .swigValue());
        cred_info.setData(pjsua.pj_str_copy(password));
        cfg.setKa_interval(0);

        pjsua.csipsimple_set_acc_user_data(cfg, css_cfg);
        Log.i("status", "acc is adding....");
        status = pjsua.acc_add(cfg, pjsuaConstants.PJ_FALSE, accId);
        Log.i("status", "acc is added");

        if (status == pjsuaConstants.PJ_SUCCESS) {
            status = pjsua.acc_set_online_status(accId[0], 1);
            Log.i("Setting online status to online", "---online--" + status);
        } else {
            Log.i("Not success", "---un success--" + status);
        }
    }
    return status == pjsuaConstants.PJ_SUCCESS;
}

Logs

05-03 12:17:58.820: I/libpjsip(1003): 12:17:58.826    pjsua_acc.c  

registration success, status=200 (OK), will re-register in 60 seconds

05-03 12:17:58.820: D/libpjsip(1003): 12:17:58.827    pjsua_acc.c  ....Keep-alive timer started for acc 1, destination:4.53.123.201:5060, interval:40s

解决方案

You need to set the interval

cfg.reg_retry_interval

I am pretty sure that Java API provides this property.

这篇关于帐户重新登记在PJSIP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆