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 32 import org.springframework.util.StringUtils;
33 33  
34 34 import javax.sip.*;
  35 +import javax.sip.address.Address;
35 36 import javax.sip.address.SipURI;
  37 +import javax.sip.address.URI;
36 38 import javax.sip.header.*;
37 39 import javax.sip.message.Request;
38 40 import java.lang.reflect.Field;
... ... @@ -1487,11 +1489,20 @@ public class SIPCommander implements ISIPCommander {
1487 1489  
1488 1490 Request request;
1489 1491 if (dialog != null) {
  1492 + SipURI requestURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
1490 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 1499 ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
1492 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 1506 }else {
1496 1507 String tm = Long.toString(System.currentTimeMillis());
1497 1508 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
... ... @@ -1582,12 +1593,21 @@ public class SIPCommander implements ISIPCommander {
1582 1593  
1583 1594 Request request;
1584 1595 if (dialog != null) {
  1596 + SipURI requestURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
1585 1597 request = dialog.createRequest(Request.SUBSCRIBE);
1586 1598 ExpiresHeader expiresHeader = sipFactory.createHeaderFactory().createExpiresHeader(device.getSubscribeCycleForCatalog());
1587 1599 request.setExpires(expiresHeader);
1588 1600  
  1601 + request.setRequestURI(requestURI);
  1602 +
1589 1603 ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
1590 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 1611 }else {
1592 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 82 @Override
83 83 public void process(RequestEvent evt) {
84 84 Request request = evt.getRequest();
85   -
  85 + System.out.println("收到订阅");
86 86 try {
87 87 Element rootElement = getRootElement(evt);
88 88 String cmd = XmlUtil.getText(rootElement, "CmdType");
... ... @@ -176,6 +176,8 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme
176 176 }
177 177  
178 178 private void processNotifyCatalogList(RequestEvent evt, Element rootElement) throws SipException {
  179 +
  180 + System.out.println(evt.getRequest().toString());
179 181 String platformId = SipUtils.getUserIdFromFromHeader(evt.getRequest());
180 182 String deviceId = XmlUtil.getText(rootElement, "DeviceID");
181 183 ParentPlatform platform = storager.queryParentPlatByServerGBId(platformId);
... ...