Commit d3e815bf16541884cf998bda9ae7bcd5b29b87e2
1 parent
5df95ba8
修复订阅超时
Showing
2 changed files
with
25 additions
and
3 deletions
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); |