فهرست منبع

临时修改解决内网Ack问题

Lawrence 4 سال پیش
والد
کامیت
e56fcc48e1

+ 5 - 1
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java

@@ -84,7 +84,11 @@ public class SIPRequestHeaderProvider {
 		SipURI requestLine = sipFactory.createAddressFactory().createSipURI(channelId, host.getAddress());
 		//via
 		ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
-		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getSipIp(), sipConfig.getSipPort(), device.getTransport(), viaTag);
+		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(device.getHost().getIp(), device.getHost().getPort(), device.getTransport(), viaTag);
+		viaHeader.setRPort();
+		viaHeaders.add(viaHeader);
+
+		viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getSipIp(), sipConfig.getSipPort(), device.getTransport(), viaTag);
 		viaHeader.setRPort();
 		viaHeaders.add(viaHeader);
 		//from

+ 7 - 1
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java

@@ -53,8 +53,14 @@ public class InviteResponseProcessor implements ISIPResponseProcessor {
 				Dialog dialog = evt.getDialog();
 				CSeqHeader cseq = (CSeqHeader) response.getHeader(CSeqHeader.NAME);
 				Request reqAck = dialog.createAck(cseq.getSeqNumber());
-				dialog.sendAck(reqAck);
 
+				SipURI requestURI = (SipURI) reqAck.getRequestURI();
+				ViaHeader viaHeader = (ViaHeader) response.getHeader(ViaHeader.NAME);
+				requestURI.setHost(viaHeader.getHost());
+				requestURI.setPort(viaHeader.getPort());
+				reqAck.setRequestURI(requestURI);
+
+				dialog.sendAck(reqAck);
 			}
 		} catch (InvalidArgumentException | SipException e) {
 			e.printStackTrace();