0

我可以使用 pjsip 成功注册到我的 sip 服务器。
但是当使用 tls 传输从 pjsip 发送寄存器时,碰巧有额外的字符串附加到联系人标头。

Contact: <sip:8888@192.168.1.14:57336;transport=TLS;ob>;reg-id=1;+sip.instance="<urn:uuid:00000000-0000-0000-0000-0000e922f243>"

有人可以告诉如何从联系人标题中删除它吗?

这是我的代码。

    String sipURI = "sip:";
    String addTransport = "";
    if(enableTLS)
         addTransport = ";hide;transport=tls";
    String sipid = sipURI + username + "@" + switch_ip + ":" + switch_port;
    String registrar = sipURI + switch_ip + ":" + switch_port;
    String proxy = sipURI + switch_ip + ":" + switch_port+addTransport;

    AccountConfig accCfg = new AccountConfig();
    accCfg.setIdUri(sipid);

     AuthCredInfoVector creds = accCfg.getSipConfig().getAuthCreds();
    creds.clear();
    if (username.length() != 0) {
        creds.add(new AuthCredInfo("Digest", "*", username, 0, password));
    }
    StringVector proxies = accCfg.getSipConfig().getProxies();
    proxies.clear();

    if (proxy.length() != 0) {
        proxies.add(proxy);
    }
    accCfg.getRegConfig().setRegistrarUri(registrar);
    accCfg.getRegConfig().setRetryIntervalSec(60);
    accCfg.getRegConfig().setTimeoutSec(60);
    accCfg.getNatConfig().setIceEnabled(false);
 accCfg.getCallConfig().setTimerUse(pjsua_sip_timer_use.PJSUA_SIP_TIMER_INACTIVE);         accCfg.getCallConfig().setPrackUse(pjsua_100rel_use.PJSUA_100REL_NOT_USED);    
   app.addAcc(accCfg);
4

1 回答 1

0

首先,您必须将端口设置TransportConfigsetPort(switch_port). 无需使用端口设置 uri 的 id 或使用端口创建注册器字符串或使用端口编写代理。这已经足够了,请看下面的代码。

TransportConfig sipTpConfig = new TransportConfig();
sipTpConfig.setPort(switch_port); 
...

String sipid = sipURI + username + "@" + switch_ip;
String registrar = sipURI + switch_ip;
String proxy = sipURI + switch_ip + addTransport;
...

accCfg.getRegConfig().setRegistrarUri("sip:" + SIP_DOMAIN);
accCfg.getSipConfig().getProxies().add("sip:" + SIP_SERVER_HOST + ";hide");

再次,在设置传输配置时设置您的端口。另一件事是,如果您在服务器端配置了 SRV 记录,让 pjsip 自动检测可用端口。我的意思是,不要在寄存器信号中硬编码端口,也不要手动设置端口。请改用此代码来显示正确的联系人标题。

accCfg.getNatConfig().setContactRewriteUse(0);
accCfg.getNatConfig().setContactRewriteMethod(0);
accCfg.getNatConfig().setContactUseSrcPort(0);
accCfg.getNatConfig().setViaRewriteUse(0);

SIP_DOMAIN是您的域,switch_ip“@”之前的所有内容,并且是SIP_SERVER_HOST您的出站代理。

于 2017-08-11T11:32:38.673 回答