Commit d3e815bf16541884cf998bda9ae7bcd5b29b87e2

Authored by 648540858
1 parent 5df95ba8

修复订阅超时

src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -32,7 +32,9 @@ import org.springframework.stereotype.Component; @@ -32,7 +32,9 @@ import org.springframework.stereotype.Component;
32 import org.springframework.util.StringUtils; 32 import org.springframework.util.StringUtils;
33 33
34 import javax.sip.*; 34 import javax.sip.*;
  35 +import javax.sip.address.Address;
35 import javax.sip.address.SipURI; 36 import javax.sip.address.SipURI;
  37 +import javax.sip.address.URI;
36 import javax.sip.header.*; 38 import javax.sip.header.*;
37 import javax.sip.message.Request; 39 import javax.sip.message.Request;
38 import java.lang.reflect.Field; 40 import java.lang.reflect.Field;
@@ -1487,11 +1489,20 @@ public class SIPCommander implements ISIPCommander { @@ -1487,11 +1489,20 @@ public class SIPCommander implements ISIPCommander {
1487 1489
1488 Request request; 1490 Request request;
1489 if (dialog != null) { 1491 if (dialog != null) {
  1492 + SipURI requestURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
1490 request = dialog.createRequest(Request.SUBSCRIBE); 1493 request = dialog.createRequest(Request.SUBSCRIBE);
  1494 + ExpiresHeader expiresHeader = sipFactory.createHeaderFactory().createExpiresHeader(device.getSubscribeCycleForCatalog());
  1495 + request.setExpires(expiresHeader);
  1496 +
  1497 + request.setRequestURI(requestURI);
  1498 +
1491 ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml"); 1499 ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
1492 request.setContent(subscribePostitionXml.toString(), contentTypeHeader); 1500 request.setContent(subscribePostitionXml.toString(), contentTypeHeader);
1493 - ExpiresHeader expireHeader = sipFactory.createHeaderFactory().createExpiresHeader(device.getSubscribeCycleForMobilePosition());  
1494 - request.addHeader(expireHeader); 1501 +
  1502 + CSeqHeader cSeqHeader = (CSeqHeader)request.getHeader(CSeqHeader.NAME);
  1503 + cSeqHeader.setSeqNumber(redisCatchStorage.getCSEQ(Request.SUBSCRIBE));
  1504 + request.removeHeader(CSeqHeader.NAME);
  1505 + request.addHeader(cSeqHeader);
1495 }else { 1506 }else {
1496 String tm = Long.toString(System.currentTimeMillis()); 1507 String tm = Long.toString(System.currentTimeMillis());
1497 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId() 1508 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
@@ -1582,12 +1593,21 @@ public class SIPCommander implements ISIPCommander { @@ -1582,12 +1593,21 @@ public class SIPCommander implements ISIPCommander {
1582 1593
1583 Request request; 1594 Request request;
1584 if (dialog != null) { 1595 if (dialog != null) {
  1596 + SipURI requestURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
1585 request = dialog.createRequest(Request.SUBSCRIBE); 1597 request = dialog.createRequest(Request.SUBSCRIBE);
1586 ExpiresHeader expiresHeader = sipFactory.createHeaderFactory().createExpiresHeader(device.getSubscribeCycleForCatalog()); 1598 ExpiresHeader expiresHeader = sipFactory.createHeaderFactory().createExpiresHeader(device.getSubscribeCycleForCatalog());
1587 request.setExpires(expiresHeader); 1599 request.setExpires(expiresHeader);
1588 1600
  1601 + request.setRequestURI(requestURI);
  1602 +
1589 ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml"); 1603 ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
1590 request.setContent(cmdXml.toString(), contentTypeHeader); 1604 request.setContent(cmdXml.toString(), contentTypeHeader);
  1605 +
  1606 + CSeqHeader cSeqHeader = (CSeqHeader)request.getHeader(CSeqHeader.NAME);
  1607 + cSeqHeader.setSeqNumber(redisCatchStorage.getCSEQ(Request.SUBSCRIBE));
  1608 + request.removeHeader(CSeqHeader.NAME);
  1609 + request.addHeader(cSeqHeader);
  1610 +
1591 }else { 1611 }else {
1592 String tm = Long.toString(System.currentTimeMillis()); 1612 String tm = Long.toString(System.currentTimeMillis());
1593 1613
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
@@ -82,7 +82,7 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme @@ -82,7 +82,7 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme
82 @Override 82 @Override
83 public void process(RequestEvent evt) { 83 public void process(RequestEvent evt) {
84 Request request = evt.getRequest(); 84 Request request = evt.getRequest();
85 - 85 + System.out.println("收到订阅");
86 try { 86 try {
87 Element rootElement = getRootElement(evt); 87 Element rootElement = getRootElement(evt);
88 String cmd = XmlUtil.getText(rootElement, "CmdType"); 88 String cmd = XmlUtil.getText(rootElement, "CmdType");
@@ -176,6 +176,8 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme @@ -176,6 +176,8 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme
176 } 176 }
177 177
178 private void processNotifyCatalogList(RequestEvent evt, Element rootElement) throws SipException { 178 private void processNotifyCatalogList(RequestEvent evt, Element rootElement) throws SipException {
  179 +
  180 + System.out.println(evt.getRequest().toString());
179 String platformId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); 181 String platformId = SipUtils.getUserIdFromFromHeader(evt.getRequest());
180 String deviceId = XmlUtil.getText(rootElement, "DeviceID"); 182 String deviceId = XmlUtil.getText(rootElement, "DeviceID");
181 ParentPlatform platform = storager.queryParentPlatByServerGBId(platformId); 183 ParentPlatform platform = storager.queryParentPlatByServerGBId(platformId);