gpt4 book ai didi

java - 如何正确地向 sip 服务器重新注册?

转载 作者:搜寻专家 更新时间:2023-11-01 02:18:13 25 4
gpt4 key购买 nike

我目前有一个与 Jain-SIP 正常工作的 SIP 注册。

我接受了挑战,对随机数等使用 MD5 并发送我的回复。

然后我收到 200 OK 消息。

这样就没问题了。

但是我想根据过期时间每隔 X 秒自动重新注册一次。

为此,我尝试使用计时器每隔 X 秒重新运行一次代码。

但是它会导致一些问题:

SipProvider 已经附加并且不会运行第二次。或者我收到一条错误消息,指出请求已发送。

所以我想知道是否有人对如何最好地每隔 X 秒向服务器重新注册有任何建议?如建议采取的步骤?


源代码 public void register() 抛出异常{

    // all this into a create request method
String fromName = "xxxxxxxx";
String fromSipAddress = "sip.network.com";

String toSipAddress = "sip.network.com";
String toUser = "xxxxxxxx";

SipURI fromAddress = addressFactory.createSipURI(fromName,
fromSipAddress);

Address fromNameAddress = addressFactory.createAddress(fromAddress);
FromHeader fromHeader = headerFactory.createFromHeader(
fromNameAddress, null);

SipURI toAddress = addressFactory
.createSipURI(toUser, toSipAddress);
Address toNameAddress = addressFactory.createAddress(toAddress);
ToHeader toHeader = headerFactory.createToHeader(toNameAddress,
null);

URI requestURI = addressFactory.createURI(
"sip:" + "sip.network.com");

List<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
String ipAddress = lp.getIPAddress();
ViaHeader viaHeader = headerFactory.createViaHeader(ipAddress,
lp.getPort(),
lp.getTransport(), null);

viaHeaders.add(viaHeader);

CallIdHeader callIdHeader = sipProvider.getNewCallId();

CSeqHeader cSeqHeader = headerFactory.createCSeqHeader(1L,
Request.REGISTER);

MaxForwardsHeader maxForwards = headerFactory
.createMaxForwardsHeader(70);

Request request = messageFactory.createRequest(requestURI,
Request.REGISTER, callIdHeader, cSeqHeader, fromHeader,
toHeader, viaHeaders, maxForwards);

SipURI contactUrl = addressFactory.createSipURI(fromName, fromSipAddress);
contactUrl.setPort(8002);
contactUrl.setLrParam();

SipURI contactURI = addressFactory.createSipURI(fromName, "sip.network.com");
contactURI.setPort(sipProvider.getListeningPoint(lp.getTransport())
.getPort());

Address contactAddress = addressFactory.createAddress(contactURI);

contactHeader = headerFactory.createContactHeader(contactAddress);
request.addHeader(contactHeader);
Header extensionHeader = headerFactory.createHeader("Expires",
"120");
request.addHeader(extensionHeader);

inviteTid = sipProvider.getNewClientTransaction(request);
inviteTid.sendRequest();
Log.d("AFTERSENDREQUEST", "SipProvider = : " + sipProvider.toString());

Log.d("INVITETID", "inviteTid = " + inviteTid.getState());

dialog = inviteTid.getDialog();

}
public void processResponse(ResponseEvent responseEvent) {
Message message = Message.obtain();
message.obj = "received response "+responseEvent.getResponse();
handler.sendMessage(message);
Response response = (Response) responseEvent.getResponse();
ClientTransaction tid = responseEvent.getClientTransaction();
CSeqHeader cseq = (CSeqHeader) response.getHeader(CSeqHeader.NAME);

if (response.getStatusCode() == Response.UNAUTHORIZED){
try {
createAuthReply(authHeader, callid);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

更新:

所以我想如果我继续创建与 register() 方法相同的新方法并保持相同的调用 ID 并对端口号的设置进行硬编码,我可以发送一些这样的消息(不是在循环)。

所以我必须更改我的注册码中的某些内容以确保它是每次发送的新请求或类似的东西?

有没有人有什么想法?

最佳答案

//掌心!!!!!!

错误是 SipProvider 附加到 Activity (Android) 并且我在代码中有 super.finish() 在错误的时间杀死了 Activity 所以注册仍然尝试但是 Activity 已经消失所以 sip 提供者失去了它上下文。

感谢 calvinscorner 的宝贵时间,非常感谢

关于java - 如何正确地向 sip 服务器重新注册?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2238549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com