Java-JAIN SIP INVITE不返回响应
这是processResponse:Java-JAIN SIP INVITE不返回响应,java,sip,jain-sip,Java,Sip,Jain Sip,这是processResponse: public void call(Response response) { try { cseq++; current_process = cseq + " INVITE"; ArrayList viaHeaders = new ArrayList(); ViaHeader viaHeader = this.headerFactory.createViaHeader(this.ip,
public void call(Response response) {
try {
cseq++;
current_process = cseq + " INVITE";
ArrayList viaHeaders = new ArrayList();
ViaHeader viaHeader = this.headerFactory.createViaHeader(this.ip,
5060, "udp", null);
viaHeaders.add(viaHeader);
// The "Max-Forwards" header.
MaxForwardsHeader maxForwardsHeader = this.headerFactory
.createMaxForwardsHeader(70);
// The "Call-Id" header.
CallIdHeader callIdHeader = this.sipProvider.getNewCallId();
// The "CSeq" header.
CSeqHeader cSeqHeader = this.headerFactory.createCSeqHeader(cseq,
"INVITE");
Address fromAddress = addressFactory.createAddress("sip:"
+ username + '@' + server);
Address toAddress = addressFactory.createAddress("sip:"+this.toPrefix+this.toNumber+'@'+this.toUri);
FromHeader fromHeader = this.headerFactory.createFromHeader(
fromAddress, String.valueOf(this.tag));
// The "To" header.
ToHeader toHeader = this.headerFactory.createToHeader(toAddress,
null);
ContentLengthHeader contentLength = this.headerFactory.createContentLengthHeader(300);
ContentTypeHeader contentType = this.headerFactory.createContentTypeHeader("application", "sdp");
String sdpData = "v=0\n" +
"o=user1 392867480 292042336 IN IP4 192.168.10.31\n" +
"s=-\n" +
"c=IN IP4 192.168.10.31\n" +
"t=0 0\n" +
"m=audio 8000 RTP/AVP 0 8 101\n" +
"a=rtpmap:0 PCMU/8000\n" +
"a=rtpmap:8 PCMA/8000\n" +
"a=rtpmap:101 telephone-event/8000\n" +
"a=sendrecv";
byte[] contents = sdpData.getBytes();
// this.contactHeader = this.headerFactory
// .createContactHeader(contactAddress);
request = this.messageFactory.createRequest("sip:"+this.toPrefix+this.toNumber+'@'
+ this.toUri + " SIP/2.0\r\n\r\n");
request.addHeader(viaHeader);
request.addHeader(maxForwardsHeader);
request.addHeader(toHeader);
request.addHeader(fromHeader);
request.addHeader(callIdHeader);
request.addHeader(cSeqHeader);
request.addHeader(contactHeader);
request.addHeader(contentLength);
request.addHeader(contentType);
if (response != null) {
retry = true;
System.out.println("DEBUG: Response: "+response);
}
inviteTid = sipProvider.getNewClientTransaction(request);
// send the request out.
inviteTid.sendRequest();
this.dialog = inviteTid.getDialog();
// Send the request statelessly through the SIP provider.
// this.sipProvider.sendRequest(request);
// Display the message in the text area.
logger.debug("Request sent:\n" + request.toString() + "\n\n");
} catch (Exception e) {
// If an error occurred, display the error.
e.printStackTrace();
logger.debug("Request sent failed: " + e.getMessage() + "\n");
}
}
注意:IP地址是经过审查的
提前谢谢你
事实上,它根本没有返回任何响应,在沉默一段时间后(没有返回任何内容),控制台会显示“事务超时”。知道为什么会发生这种情况吗?我猜您的问题是: 您的联系人标题显示私人地址。请尝试在此处使用可公开路由的地址。(你可以使用STUN来发现你的公共广播或其他方式。)如果你正在通过B2BUA(又名会话边界控制器),它会为你重写这些。SIP中的防火墙和NAT穿越非常重要
此外,您的邀请中有内容长度,但您有内容吗?您忘记设置SDP内容了吗?事务超时对应于sip超时,应该是32秒。您得到这个408答案是因为您没有收到答案。这是由堆栈本身生成的自动应答,而不是由远程方生成的应答 你检查防火墙设置了吗?如果您的操作系统防火墙没有问题,您是否检查了家庭网关 注册和邀请请求是否发送到同一ip地址?你可以用它来检查
yohann与其与低级别的SIP打交道,不如尝试一种更高级别的框架,比如SIP servlet,它让您能够专注于核心业务逻辑?你甚至可以试试亚马逊AMI我已经编辑了我的主要帖子,以回应你的回答,请看一看!谢谢!:)嘿,约汉!谢谢你的回复。即使注册请求成功,防火墙是否可能阻止了某些内容?你知道我应该在防火墙设置中查找什么吗?对于Linux,wireshark还有其他选择吗?遗憾的是,Wireshark没有提供该程序的Linux版本。再次感谢你,尤汉!谢谢。编辑:Linux上有wireshark,我真蠢。我将检查请求发送到的IP并向您报告。对于防火墙问题,我同意。但是您应该检查REGISTER和INVITE请求是否发送到相同的实际ip地址。Wireshark可用于linux。如果您喜欢旧的工具,也可以使用tcpdump,但wireshark更方便用户。您应该使用linux分发包管理器安装新软件。在互联网上搜索更多关于这个的细节。我已经和Wireshark联系过了,由于某些原因,他们没有发送到相同的IP地址。知道他们为什么这么做吗?我必须更改哪个参数才能正确地将请求发送到IP?也许您应该尝试调用sip:6281386725319@sip.dialnow.com代替sip:6281386725319@dialnow.com
@Override
public void processResponse(ResponseEvent responseEvent) {
System.out.println(responseEvent.getResponse());
int statusCode = responseEvent.getResponse().getStatusCode();
if (statusCode > 400 && statusCode < 410) {
if(statusCode == 401 && current_process.contains("REGISTER")) {
register(responseEvent.getResponse());
}
else if(statusCode == 401 && current_process.contains("INVITE")) {
System.out.println("Invite 401");
}
else if(statusCode == 200) {
System.out.println("Registered");
call(null);
}
else {
System.out.println("Other code: "+ statusCode);
}
}
DEBUG - Request sent:
REGISTER sip:sip.dialnow.com SIP/2.0
Via: SIP/2.0/UDP 192.168.10.31:5060;branch=z9hG4bK-343133-c591d8f797a179ed25a2114311df1854
Max-Forwards: 70
To: <sip:Frax01@sip.dialnow.com>
From: <sip:Frax01@sip.dialnow.com>;tag=706572717
Call-ID: 6e49a1b2631c4b107199a8b7d9c5ee52@192.168.10.31
CSeq: 1 REGISTER
Contact: <sip:Frax01@192.168.10.31:5060;transport=UDP>
Expires: 120
Content-Length: 0
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 192.168.10.31:5060;branch=z9hG4bK-343133-c591d8f797a179ed25a2114311df1854
From: <sip:Frax01@sip.dialnow.com>;tag=706572717
To: <sip:Frax01@sip.dialnow.com>
Contact: <sip:77.72.169.129:5060>
Call-ID: 6e49a1b2631c4b107199a8b7d9c5ee52@192.168.10.31
CSeq: 1 REGISTER
Server: (Very nice Sip Registrar/Proxy Server)
Allow: ACK,BYE,CANCEL,INVITE,REGISTER,OPTIONS,INFO,MESSAGE
WWW-Authenticate: Digest realm="sip.dialnow.com",nonce="2849852658",algorithm=MD5
Content-Length: 0
12d2ad0d764601c0573be88a3d94a2d8
8b3a241c08615fba24fb161a2a344cc9
40810f9cf3d19138dc0875dea15e3970
DEBUG - Request sent:
REGISTER sip:sip.dialnow.com SIP/2.0
Via: SIP/2.0/UDP 192.168.10.31:5060;branch=z9hG4bK-343133-3ccb8a78b8614638665f0af2a998a686
Max-Forwards: 70
To: <sip:Frax01@sip.dialnow.com>
From: <sip:Frax01@sip.dialnow.com>;tag=706572717
Call-ID: 50baef7c3a407e50d4d539a1e35cff41@192.168.10.31
CSeq: 2 REGISTER
Contact: <sip:Frax01@192.168.10.31:5060;transport=UDP>
Expires: 120
Authorization: Digest realm="sip.dialnow.com",nonce="2849852658",username="Frax01",uri="sip:sip.dialnow.com",algorithm=MD5,response="40810f9cf3d19138dc0875dea15e3970"
Content-Length: 0
SIP/2.0 100 Trying
Via: SIP/2.0/UDP 192.168.10.31:5060;branch=z9hG4bK-343133-3ccb8a78b8614638665f0af2a998a686
From: <sip:Frax01@sip.dialnow.com>;tag=706572717
To: <sip:Frax01@sip.dialnow.com>
Contact: <sip:77.72.169.129:5060>
Call-ID: 50baef7c3a407e50d4d539a1e35cff41@192.168.10.31
CSeq: 2 REGISTER
Server: (Very nice Sip Registrar/Proxy Server)
Allow: ACK,BYE,CANCEL,INVITE,REGISTER,OPTIONS,INFO,MESSAGE
Content-Length: 0
Other code: 100
SIP/2.0 200 Ok
Via: SIP/2.0/UDP 192.168.10.31:5060;branch=z9hG4bK-343133-3ccb8a78b8614638665f0af2a998a686
From: <sip:Frax01@sip.dialnow.com>;tag=706572717
To: <sip:Frax01@sip.dialnow.com>
Contact: <sip:Frax01@192.168.10.31:5060;transport=udp>;expires=120
Call-ID: 50baef7c3a407e50d4d539a1e35cff41@192.168.10.31
CSeq: 2 REGISTER
Server: (Very nice Sip Registrar/Proxy Server)
Allow: ACK,BYE,CANCEL,INVITE,REGISTER,OPTIONS,INFO,MESSAGE
Content-Length: 0
Registered
DEBUG - Request sent:
INVITE sip:6281386725319@dialnow.com SIP/2.0
Via: SIP/2.0/UDP 192.168.10.31:5060;branch=z9hG4bK-343133-e18f3eca8f76bd0a4378a12dd6e7a0d7
Max-Forwards: 70
To: <sip:6281386725319@dialnow.com>
From: <sip:Frax01@sip.dialnow.com>;tag=706572717
Call-ID: 66341e5e43e50e106a7fbf2866c0a1d3@192.168.10.31
CSeq: 3 INVITE
Contact: <sip:Frax01@192.168.10.31:5060;transport=UDP>
Content-Type: application/sdp
Content-Length: 300
ContentTypeHeader contentType = this.headerFactory.createContentTypeHeader("application", "sdp");
String sdpData = "v=0\n" +
"o=user1 392867480 292042336 IN IP4 *my IP*\n" +
"s=-\n" +
"c=IN IP4 *my IP*\n" +
"t=0 0\n" +
"m=audio 8000 RTP/AVP 0 8 101\n" +
"a=rtpmap:0 PCMU/8000\n" +
"a=rtpmap:8 PCMA/8000\n" +
"a=rtpmap:101 telephone-event/8000\n" +
"a=sendrecv";
byte[] contents = sdpData.getBytes();
request.setContent(contents, contentType);