Commit 221f99c764b51c3cd284c6e5a41492c26c5c7ffc

Authored by 648540858
1 parent b5fb8293

优化sip消息

src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
... ... @@ -2,8 +2,7 @@ package com.genersoft.iot.vmp.gb28181.transmit.cmd;
2 2  
3 3 import com.genersoft.iot.vmp.conf.SipConfig;
4 4 import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
5   -import com.genersoft.iot.vmp.gb28181.bean.SubscribeInfo;
6   -import com.genersoft.iot.vmp.gb28181.utils.HeaderUtils;
  5 +import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
7 6 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
8 7 import gov.nist.javax.sip.message.MessageFactoryImpl;
9 8 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -38,44 +37,6 @@ public class SIPRequestHeaderPlarformProvider {
38 37 @Autowired
39 38 private IRedisCatchStorage redisCatchStorage;
40 39  
41   -
42   - public Request createKeetpaliveMessageRequest(ParentPlatform parentPlatform, String content, String viaTag, String fromTag, String toTag, CallIdHeader callIdHeader) throws ParseException, InvalidArgumentException, PeerUnavailableException {
43   - Request request = null;
44   - // sipuri
45   - SipURI requestURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerIP() + ":" + parentPlatform.getServerPort());
46   - // via
47   - ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
48   - ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(),
49   - parentPlatform.getTransport(), viaTag);
50   - viaHeader.setRPort();
51   - viaHeaders.add(viaHeader);
52   - // from
53   - SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getDeviceGBId(),
54   - sipConfig.getIp() + ":" + sipConfig.getPort());
55   - Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
56   - FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag);
57   - // to
58   - SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerIP() + ":" + parentPlatform.getServerPort() );
59   - Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
60   - ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, toTag);
61   -
62   -
63   - // Forwards
64   - MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
65   - // ceq
66   - CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.MESSAGE);
67   -
68   - request = sipFactory.createMessageFactory().createRequest(requestURI, Request.MESSAGE, callIdHeader, cSeqHeader, fromHeader,
69   - toHeader, viaHeaders, maxForwards);
70   -
71   - List<String> agentParam = new ArrayList<>();
72   -
73   - ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
74   - request.setContent(content, contentTypeHeader);
75   - return request;
76   - }
77   -
78   -
79 40 public Request createRegisterRequest(@NotNull ParentPlatform platform, long CSeq, String fromTag, String viaTag, CallIdHeader callIdHeader, boolean isRegister) throws ParseException, InvalidArgumentException, PeerUnavailableException {
80 41 Request request = null;
81 42 String sipAddress = sipConfig.getIp() + ":" + sipConfig.getPort();
... ... @@ -88,16 +49,14 @@ public class SIPRequestHeaderPlarformProvider {
88 49 viaHeader.setRPort();
89 50 viaHeaders.add(viaHeader);
90 51 //from
91   - SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(platform.getDeviceGBId(),sipAddress);
  52 + SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(platform.getDeviceGBId(), sipConfig.getDomain());
92 53 Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
93 54 FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag);
94 55 //to
95   - SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(platform.getDeviceGBId(),sipAddress);
  56 + SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(platform.getDeviceGBId(), sipConfig.getDomain());
96 57 Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
97 58 ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress,null);
98 59  
99   -
100   -
101 60 //Forwards
102 61 MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
103 62  
... ... @@ -113,7 +72,7 @@ public class SIPRequestHeaderPlarformProvider {
113 72 ExpiresHeader expires = sipFactory.createHeaderFactory().createExpiresHeader(isRegister ? platform.getExpires() : 0);
114 73 request.addHeader(expires);
115 74  
116   - UserAgentHeader userAgentHeader = HeaderUtils.createUserAgentHeader(sipFactory);
  75 + UserAgentHeader userAgentHeader = SipUtils.createUserAgentHeader(sipFactory);
117 76 request.addHeader(userAgentHeader);
118 77  
119 78 return request;
... ... @@ -193,23 +152,24 @@ public class SIPRequestHeaderPlarformProvider {
193 152 }
194 153  
195 154  
196   - public Request createMessageRequest(ParentPlatform parentPlatform, String content, String fromTag, CallIdHeader callIdHeader) throws PeerUnavailableException, ParseException, InvalidArgumentException {
  155 + public Request createMessageRequest(ParentPlatform parentPlatform, String content, String fromTag, String viaTag, CallIdHeader callIdHeader) throws PeerUnavailableException, ParseException, InvalidArgumentException {
197 156 Request request = null;
  157 + String serverAddress = parentPlatform.getServerIP()+ ":" + parentPlatform.getServerPort();
198 158 // sipuri
199   - SipURI requestURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerIP()+ ":" + parentPlatform.getServerPort());
  159 + SipURI requestURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), serverAddress);
200 160 // via
201 161 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
202 162 ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(parentPlatform.getDeviceIp(), Integer.parseInt(parentPlatform.getDevicePort()),
203   - parentPlatform.getTransport(), null);
  163 + parentPlatform.getTransport(), viaTag);
204 164 viaHeader.setRPort();
205 165 viaHeaders.add(viaHeader);
206 166 // from
207   - SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getDeviceGBId(),
208   - parentPlatform.getDeviceIp() + ":" + parentPlatform.getDevicePort());
  167 + // SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getDeviceGBId(), parentPlatform.getDeviceIp() + ":" + parentPlatform.getDeviceIp());
  168 + SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getDeviceGBId(), sipConfig.getDomain());
209 169 Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
210 170 FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag);
211 171 // to
212   - SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerGBDomain());
  172 + SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), serverAddress);
213 173 Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
214 174 ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, null);
215 175  
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
... ... @@ -2,7 +2,6 @@ package com.genersoft.iot.vmp.gb28181.transmit.cmd;
2 2  
3 3 import java.text.ParseException;
4 4 import java.util.ArrayList;
5   -import java.util.List;
6 5  
7 6 import javax.sip.*;
8 7 import javax.sip.address.Address;
... ... @@ -12,7 +11,7 @@ import javax.sip.message.Request;
12 11  
13 12 import com.genersoft.iot.vmp.common.StreamInfo;
14 13 import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
15   -import com.genersoft.iot.vmp.gb28181.utils.HeaderUtils;
  14 +import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
16 15 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
17 16 import gov.nist.javax.sip.SipProviderImpl;
18 17 import gov.nist.javax.sip.SipStackImpl;
... ... @@ -62,12 +61,11 @@ public class SIPRequestHeaderProvider {
62 61 viaHeader.setRPort();
63 62 viaHeaders.add(viaHeader);
64 63 // from
65   - SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(),
66   - sipConfig.getIp() + ":" + sipConfig.getPort());
  64 + SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getDomain());
67 65 Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
68 66 FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag);
69 67 // to
70   - SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), sipConfig.getDomain());
  68 + SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
71 69 Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
72 70 ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, toTag);
73 71  
... ... @@ -94,11 +92,11 @@ public class SIPRequestHeaderProvider {
94 92 viaHeaders.add(viaHeader);
95 93  
96 94 //from
97   - SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(),sipConfig.getDomain());
  95 + SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getDomain());
98 96 Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
99 97 FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag); //必须要有标记,否则无法创建会话,无法回应ack
100 98 //to
101   - SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId,sipConfig.getDomain());
  99 + SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId, device.getHostAddress());
102 100 Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
103 101 ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress,null);
104 102  
... ... @@ -130,11 +128,11 @@ public class SIPRequestHeaderProvider {
130 128 viaHeader.setRPort();
131 129 viaHeaders.add(viaHeader);
132 130 //from
133   - SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(),sipConfig.getDomain());
  131 + SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getDomain());
134 132 Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
135 133 FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag); //必须要有标记,否则无法创建会话,无法回应ack
136 134 //to
137   - SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId, sipConfig.getDomain());
  135 + SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId, device.getHostAddress());
138 136 Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
139 137 ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress,null);
140 138  
... ... @@ -170,7 +168,7 @@ public class SIPRequestHeaderProvider {
170 168 Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
171 169 FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag); //必须要有标记,否则无法创建会话,无法回应ack
172 170 //to
173   - SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId,sipConfig.getDomain());
  171 + SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId,device.getHostAddress());
174 172 Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
175 173 ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress,toTag);
176 174  
... ... @@ -198,12 +196,11 @@ public class SIPRequestHeaderProvider {
198 196 viaHeader.setRPort();
199 197 viaHeaders.add(viaHeader);
200 198 // from
201   - SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(),
202   - sipConfig.getIp() + ":" + sipConfig.getPort());
  199 + SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getDomain());
203 200 Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
204 201 FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag);
205 202 // to
206   - SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), sipConfig.getDomain());
  203 + SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
207 204 Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
208 205 ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, toTag);
209 206  
... ... @@ -267,7 +264,7 @@ public class SIPRequestHeaderProvider {
267 264 Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory()
268 265 .createSipURI(sipConfig.getId(), sipConfig.getIp() + ":" + sipConfig.getPort()));
269 266 infoRequest.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
270   - UserAgentHeader userAgentHeader = HeaderUtils.createUserAgentHeader(sipFactory);
  267 + UserAgentHeader userAgentHeader = SipUtils.createUserAgentHeader(sipFactory);
271 268 infoRequest.addHeader(userAgentHeader);
272 269  
273 270 ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application",
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
... ... @@ -10,7 +10,7 @@ import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
10 10 import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
11 11 import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
12 12 import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderProvider;
13   -import com.genersoft.iot.vmp.gb28181.utils.HeaderUtils;
  13 +import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
14 14 import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeFactory;
15 15 import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeForStreamChange;
16 16 import com.genersoft.iot.vmp.utils.DateUtil;
... ... @@ -244,13 +244,11 @@ public class SIPCommander implements ISIPCommander {
244 244 ptzXml.append("<ControlPriority>5</ControlPriority>\r\n");
245 245 ptzXml.append("</Info>\r\n");
246 246 ptzXml.append("</Control>\r\n");
247   -
248   - String tm = Long.toString(System.currentTimeMillis());
249 247  
250 248 CallIdHeader callIdHeader = device.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
251 249 : udpSipProvider.getNewCallId();
252 250  
253   - Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "z9hG4bK-ViaPtz-" + tm, "FromPtz" + tm, null, callIdHeader);
  251 + Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
254 252  
255 253 transmitRequest(device, request);
256 254 return true;
... ... @@ -288,12 +286,11 @@ public class SIPCommander implements ISIPCommander {
288 286 ptzXml.append("</Info>\r\n");
289 287 ptzXml.append("</Control>\r\n");
290 288  
291   - String tm = Long.toString(System.currentTimeMillis());
292 289  
293 290 CallIdHeader callIdHeader = device.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
294 291 : udpSipProvider.getNewCallId();
295 292  
296   - Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "z9hG4bK-ViaPtz-" + tm, "FromPtz" + tm, null, callIdHeader);
  293 + Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
297 294 transmitRequest(device, request);
298 295 return true;
299 296 } catch (SipException | ParseException | InvalidArgumentException e) {
... ... @@ -324,12 +321,11 @@ public class SIPCommander implements ISIPCommander {
324 321 ptzXml.append("</Info>\r\n");
325 322 ptzXml.append("</Control>\r\n");
326 323  
327   - String tm = Long.toString(System.currentTimeMillis());
328 324  
329 325 CallIdHeader callIdHeader = device.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
330 326 : udpSipProvider.getNewCallId();
331 327  
332   - Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "z9hG4bK-ViaPtz-" + tm, "FromPtz" + tm, null, callIdHeader);
  328 + Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
333 329 transmitRequest(device, request, errorEvent, okEvent);
334 330 return true;
335 331 } catch (SipException | ParseException | InvalidArgumentException e) {
... ... @@ -421,12 +417,10 @@ public class SIPCommander implements ISIPCommander {
421 417 // f字段:f= v/编码格式/分辨率/帧率/码率类型/码率大小a/编码格式/码率大小/采样率
422 418 // content.append("f=v/2/5/25/1/4000a/1/8/1" + "\r\n"); // 未发现支持此特性的设备
423 419  
424   - String tm = Long.toString(System.currentTimeMillis());
425   -
426 420 CallIdHeader callIdHeader = device.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
427 421 : udpSipProvider.getNewCallId();
428 422  
429   - Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), null, "FromInvt" + tm, null, ssrcInfo.getSsrc(), callIdHeader);
  423 + Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null, ssrcInfo.getSsrc(), callIdHeader);
430 424  
431 425 transmitRequest(device, request, (e -> {
432 426 streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
... ... @@ -519,8 +513,6 @@ public class SIPCommander implements ISIPCommander {
519 513 }
520 514  
521 515 content.append("y=" + ssrcInfo.getSsrc() + "\r\n");//ssrc
522   -
523   - String tm = Long.toString(System.currentTimeMillis());
524 516  
525 517 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
526 518 : udpSipProvider.getNewCallId();
... ... @@ -533,7 +525,7 @@ public class SIPCommander implements ISIPCommander {
533 525 }
534 526 subscribe.removeSubscribe(hookSubscribe);
535 527 });
536   - Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "fromplybck" + tm, null, callIdHeader, ssrcInfo.getSsrc());
  528 + Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader, ssrcInfo.getSsrc());
537 529  
538 530 transmitRequest(device, request, errorEvent, event -> {
539 531 ResponseEvent responseEvent = (ResponseEvent) event.event;
... ... @@ -625,8 +617,6 @@ public class SIPCommander implements ISIPCommander {
625 617 content.append("a=downloadspeed:" + downloadSpeed + "\r\n");
626 618  
627 619 content.append("y=" + ssrcInfo.getSsrc() + "\r\n");//ssrc
628   -
629   - String tm = Long.toString(System.currentTimeMillis());
630 620  
631 621 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
632 622 : udpSipProvider.getNewCallId();
... ... @@ -649,7 +639,7 @@ public class SIPCommander implements ISIPCommander {
649 639 });
650 640 });
651 641  
652   - Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "fromplybck" + tm, null, callIdHeader, ssrcInfo.getSsrc());
  642 + Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader, ssrcInfo.getSsrc());
653 643 if (inviteStreamCallback != null) {
654 644 inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null, callIdHeader.getCallId(), "rtp", ssrcInfo.getStream()));
655 645 }
... ... @@ -737,7 +727,7 @@ public class SIPCommander implements ISIPCommander {
737 727 // 增加Contact header
738 728 Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort()));
739 729 byeRequest.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
740   - UserAgentHeader userAgentHeader = HeaderUtils.createUserAgentHeader(sipFactory);
  730 + UserAgentHeader userAgentHeader = SipUtils.createUserAgentHeader(sipFactory);
741 731 byeRequest.addHeader(userAgentHeader);
742 732 ClientTransaction clientTransaction = null;
743 733 if("TCP".equals(protocol)) {
... ... @@ -790,13 +780,11 @@ public class SIPCommander implements ISIPCommander {
790 780 broadcastXml.append("<SourceID>" + sipConfig.getId() + "</SourceID>\r\n");
791 781 broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n");
792 782 broadcastXml.append("</Notify>\r\n");
793   -
794   - String tm = Long.toString(System.currentTimeMillis());
795   -
  783 +
796 784 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
797 785 : udpSipProvider.getNewCallId();
798 786  
799   - Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), "z9hG4bK-ViaBcst-" + tm, "FromBcst" + tm, null, callIdHeader);
  787 + Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
800 788 transmitRequest(device, request);
801 789 return true;
802 790 } catch (SipException | ParseException | InvalidArgumentException e) {
... ... @@ -816,13 +804,11 @@ public class SIPCommander implements ISIPCommander {
816 804 broadcastXml.append("<SourceID>" + sipConfig.getId() + "</SourceID>\r\n");
817 805 broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n");
818 806 broadcastXml.append("</Notify>\r\n");
819   -
820   - String tm = Long.toString(System.currentTimeMillis());
821 807  
822 808 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
823 809 : udpSipProvider.getNewCallId();
824 810  
825   - Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), "z9hG4bK-ViaBcst-" + tm, "FromBcst" + tm, null, callIdHeader);
  811 + Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
826 812 transmitRequest(device, request, errorEvent);
827 813 } catch (SipException | ParseException | InvalidArgumentException e) {
828 814 e.printStackTrace();
... ... @@ -853,13 +839,11 @@ public class SIPCommander implements ISIPCommander {
853 839 }
854 840 cmdXml.append("<RecordCmd>" + recordCmdStr + "</RecordCmd>\r\n");
855 841 cmdXml.append("</Control>\r\n");
856   -
857   - String tm = Long.toString(System.currentTimeMillis());
858 842  
859 843 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
860 844 : udpSipProvider.getNewCallId();
861 845  
862   - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromRecord" + tm, null, callIdHeader);
  846 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
863 847 transmitRequest(device, request, errorEvent);
864 848 return true;
865 849 } catch (SipException | ParseException | InvalidArgumentException e) {
... ... @@ -885,13 +869,11 @@ public class SIPCommander implements ISIPCommander {
885 869 cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
886 870 cmdXml.append("<TeleBoot>Boot</TeleBoot>\r\n");
887 871 cmdXml.append("</Control>\r\n");
888   -
889   - String tm = Long.toString(System.currentTimeMillis());
890 872  
891 873 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
892 874 : udpSipProvider.getNewCallId();
893 875  
894   - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromBoot" + tm, null, callIdHeader);
  876 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
895 877 transmitRequest(device, request);
896 878 return true;
897 879 } catch (SipException | ParseException | InvalidArgumentException e) {
... ... @@ -918,13 +900,11 @@ public class SIPCommander implements ISIPCommander {
918 900 cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
919 901 cmdXml.append("<GuardCmd>" + guardCmdStr + "</GuardCmd>\r\n");
920 902 cmdXml.append("</Control>\r\n");
921   -
922   - String tm = Long.toString(System.currentTimeMillis());
923 903  
924 904 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
925 905 : udpSipProvider.getNewCallId();
926 906  
927   - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromGuard" + tm, null, callIdHeader);
  907 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
928 908 transmitRequest(device, request, errorEvent);
929 909 return true;
930 910 } catch (SipException | ParseException | InvalidArgumentException e) {
... ... @@ -962,13 +942,11 @@ public class SIPCommander implements ISIPCommander {
962 942 cmdXml.append("</Info>\r\n");
963 943 }
964 944 cmdXml.append("</Control>\r\n");
965   -
966   - String tm = Long.toString(System.currentTimeMillis());
967 945  
968 946 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
969 947 : udpSipProvider.getNewCallId();
970 948  
971   - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromAlarm" + tm, null, callIdHeader);
  949 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
972 950 transmitRequest(device, request, errorEvent);
973 951 return true;
974 952 } catch (SipException | ParseException | InvalidArgumentException e) {
... ... @@ -999,13 +977,11 @@ public class SIPCommander implements ISIPCommander {
999 977 }
1000 978 cmdXml.append("<IFameCmd>Send</IFameCmd>\r\n");
1001 979 cmdXml.append("</Control>\r\n");
1002   -
1003   - String tm = Long.toString(System.currentTimeMillis());
1004 980  
1005 981 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
1006 982 : udpSipProvider.getNewCallId();
1007 983  
1008   - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromBoot" + tm, null, callIdHeader);
  984 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
1009 985 transmitRequest(device, request);
1010 986 return true;
1011 987 } catch (SipException | ParseException | InvalidArgumentException e) {
... ... @@ -1054,13 +1030,11 @@ public class SIPCommander implements ISIPCommander {
1054 1030 }
1055 1031 cmdXml.append("</HomePosition>\r\n");
1056 1032 cmdXml.append("</Control>\r\n");
1057   -
1058   - String tm = Long.toString(System.currentTimeMillis());
1059 1033  
1060 1034 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
1061 1035 : udpSipProvider.getNewCallId();
1062 1036  
1063   - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromGuard" + tm, null, callIdHeader);
  1037 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
1064 1038 transmitRequest(device, request, errorEvent);
1065 1039 return true;
1066 1040 } catch (SipException | ParseException | InvalidArgumentException e) {
... ... @@ -1126,13 +1100,11 @@ public class SIPCommander implements ISIPCommander {
1126 1100 }
1127 1101 cmdXml.append("</BasicParam>\r\n");
1128 1102 cmdXml.append("</Control>\r\n");
1129   -
1130   - String tm = Long.toString(System.currentTimeMillis());
1131 1103  
1132 1104 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
1133 1105 : udpSipProvider.getNewCallId();
1134 1106  
1135   - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromConfig" + tm, null, callIdHeader);
  1107 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
1136 1108 transmitRequest(device, request, errorEvent);
1137 1109 return true;
1138 1110 } catch (SipException | ParseException | InvalidArgumentException e) {
... ... @@ -1157,13 +1129,11 @@ public class SIPCommander implements ISIPCommander {
1157 1129 catalogXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
1158 1130 catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
1159 1131 catalogXml.append("</Query>\r\n");
1160   -
1161   - String tm = Long.toString(System.currentTimeMillis());
1162 1132  
1163 1133 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
1164 1134 : udpSipProvider.getNewCallId();
1165 1135  
1166   - Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), null, "FromStatus" + tm, null, callIdHeader);
  1136 + Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
1167 1137  
1168 1138 transmitRequest(device, request, errorEvent);
1169 1139 return true;
... ... @@ -1190,13 +1160,11 @@ public class SIPCommander implements ISIPCommander {
1190 1160 catalogXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
1191 1161 catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
1192 1162 catalogXml.append("</Query>\r\n");
1193   -
1194   - String tm = Long.toString(System.currentTimeMillis());
1195 1163  
1196 1164 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
1197 1165 : udpSipProvider.getNewCallId();
1198 1166  
1199   - Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "z9hG4bK-ViaDeviceInfo-" + tm, "FromDev" + tm, null, callIdHeader);
  1167 + Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
1200 1168  
1201 1169 transmitRequest(device, request);
1202 1170  
... ... @@ -1223,13 +1191,11 @@ public class SIPCommander implements ISIPCommander {
1223 1191 catalogXml.append(" <SN>" + sn + "</SN>\r\n");
1224 1192 catalogXml.append(" <DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
1225 1193 catalogXml.append("</Query>\r\n");
1226   -
1227   - String tm = Long.toString(System.currentTimeMillis());
1228 1194  
1229 1195 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
1230 1196 : udpSipProvider.getNewCallId();
1231 1197  
1232   - Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "z9hG4bK" + tm, tm, null, callIdHeader);
  1198 + Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
1233 1199  
1234 1200 transmitRequest(device, request, errorEvent);
1235 1201 } catch (SipException | ParseException | InvalidArgumentException e) {
... ... @@ -1277,13 +1243,11 @@ public class SIPCommander implements ISIPCommander {
1277 1243 }
1278 1244 recordInfoXml.append("</Query>\r\n");
1279 1245  
1280   - String tm = Long.toString(System.currentTimeMillis());
1281   -
1282 1246 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
1283 1247 : udpSipProvider.getNewCallId();
1284 1248  
1285 1249 Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(),
1286   - "z9hG4bK-ViaRecordInfo-" + tm, "fromRec" + tm, null, callIdHeader);
  1250 + SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
1287 1251  
1288 1252 transmitRequest(device, request, errorEvent, okEvent);
1289 1253 } catch (SipException | ParseException | InvalidArgumentException e) {
... ... @@ -1336,12 +1300,10 @@ public class SIPCommander implements ISIPCommander {
1336 1300 }
1337 1301 cmdXml.append("</Query>\r\n");
1338 1302  
1339   - String tm = Long.toString(System.currentTimeMillis());
1340   -
1341 1303 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
1342 1304 : udpSipProvider.getNewCallId();
1343 1305  
1344   - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromAlarm" + tm, null, callIdHeader);
  1306 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
1345 1307 transmitRequest(device, request, errorEvent);
1346 1308 return true;
1347 1309 } catch (SipException | ParseException | InvalidArgumentException e) {
... ... @@ -1374,12 +1336,10 @@ public class SIPCommander implements ISIPCommander {
1374 1336 cmdXml.append("<ConfigType>" + configType + "</ConfigType>\r\n");
1375 1337 cmdXml.append("</Query>\r\n");
1376 1338  
1377   - String tm = Long.toString(System.currentTimeMillis());
1378   -
1379 1339 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
1380 1340 : udpSipProvider.getNewCallId();
1381 1341  
1382   - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromConfig" + tm, null, callIdHeader);
  1342 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
1383 1343 transmitRequest(device, request, errorEvent);
1384 1344 return true;
1385 1345 } catch (SipException | ParseException | InvalidArgumentException e) {
... ... @@ -1409,12 +1369,10 @@ public class SIPCommander implements ISIPCommander {
1409 1369 }
1410 1370 cmdXml.append("</Query>\r\n");
1411 1371  
1412   - String tm = Long.toString(System.currentTimeMillis());
1413   -
1414 1372 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
1415 1373 : udpSipProvider.getNewCallId();
1416 1374  
1417   - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromConfig" + tm, null, callIdHeader);
  1375 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
1418 1376 transmitRequest(device, request, errorEvent);
1419 1377 return true;
1420 1378 } catch (SipException | ParseException | InvalidArgumentException e) {
... ... @@ -1441,12 +1399,10 @@ public class SIPCommander implements ISIPCommander {
1441 1399 mobilePostitionXml.append("<Interval>60</Interval>\r\n");
1442 1400 mobilePostitionXml.append("</Query>\r\n");
1443 1401  
1444   - String tm = Long.toString(System.currentTimeMillis());
1445   -
1446 1402 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
1447 1403 : udpSipProvider.getNewCallId();
1448 1404  
1449   - Request request = headerProvider.createMessageRequest(device, mobilePostitionXml.toString(), "z9hG4bK-viaPos-" + tm, "fromTagPos" + tm, null, callIdHeader);
  1405 + Request request = headerProvider.createMessageRequest(device, mobilePostitionXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
1450 1406  
1451 1407 transmitRequest(device, request, errorEvent);
1452 1408  
... ... @@ -1495,10 +1451,9 @@ public class SIPCommander implements ISIPCommander {
1495 1451 request.removeHeader(CSeqHeader.NAME);
1496 1452 request.addHeader(cSeqHeader);
1497 1453 }else {
1498   - String tm = Long.toString(System.currentTimeMillis());
1499 1454 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
1500 1455 : udpSipProvider.getNewCallId();
1501   - request = headerProvider.createSubscribeRequest(device, subscribePostitionXml.toString(), "z9hG4bK-viaPos-" + tm, "fromTagPos" + tm, null, device.getSubscribeCycleForMobilePosition(), "presence" ,callIdHeader); //Position;id=" + tm.substring(tm.length() - 4));
  1456 + request = headerProvider.createSubscribeRequest(device, subscribePostitionXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, device.getSubscribeCycleForMobilePosition(), "presence" ,callIdHeader); //Position;id=" + tm.substring(tm.length() - 4));
1502 1457 }
1503 1458 transmitRequest(device, request, errorEvent, okEvent);
1504 1459  
... ... @@ -1553,12 +1508,10 @@ public class SIPCommander implements ISIPCommander {
1553 1508 }
1554 1509 cmdXml.append("</Query>\r\n");
1555 1510  
1556   - String tm = Long.toString(System.currentTimeMillis());
1557   -
1558 1511 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
1559 1512 : udpSipProvider.getNewCallId();
1560 1513  
1561   - Request request = headerProvider.createSubscribeRequest(device, cmdXml.toString(), "z9hG4bK-viaPos-" + tm, "fromTagPos" + tm, null, expires, "presence" , callIdHeader);
  1514 + Request request = headerProvider.createSubscribeRequest(device, cmdXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, expires, "presence" , callIdHeader);
1562 1515 transmitRequest(device, request);
1563 1516  
1564 1517 return true;
... ... @@ -1600,14 +1553,12 @@ public class SIPCommander implements ISIPCommander {
1600 1553 request.addHeader(cSeqHeader);
1601 1554  
1602 1555 }else {
1603   - String tm = Long.toString(System.currentTimeMillis());
1604   -
1605 1556 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
1606 1557 : udpSipProvider.getNewCallId();
1607 1558  
1608 1559 // 有效时间默认为60秒以上
1609   - request = headerProvider.createSubscribeRequest(device, cmdXml.toString(), "z9hG4bK-viaPos-" + tm,
1610   - "fromTagPos" + tm, null, device.getSubscribeCycleForCatalog(), "Catalog" ,
  1560 + request = headerProvider.createSubscribeRequest(device, cmdXml.toString(), SipUtils.getNewViaTag(),
  1561 + SipUtils.getNewFromTag(), null, device.getSubscribeCycleForCatalog(), "Catalog" ,
1611 1562 callIdHeader);
1612 1563  
1613 1564 }
... ... @@ -1636,10 +1587,9 @@ public class SIPCommander implements ISIPCommander {
1636 1587 }
1637 1588 dragXml.append(cmdString);
1638 1589 dragXml.append("</Control>\r\n");
1639   - String tm = Long.toString(System.currentTimeMillis());
1640 1590 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
1641 1591 : udpSipProvider.getNewCallId();
1642   - Request request = headerProvider.createMessageRequest(device, dragXml.toString(), "z9hG4bK-ViaPtz-" + tm, "FromPtz" + tm, null, callIdHeader);
  1592 + Request request = headerProvider.createMessageRequest(device, dragXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
1643 1593 logger.debug("拉框信令: " + request.toString());
1644 1594 transmitRequest(device, request);
1645 1595 return true;
... ... @@ -1668,7 +1618,7 @@ public class SIPCommander implements ISIPCommander {
1668 1618 if (request.getHeader(UserAgentHeader.NAME) == null) {
1669 1619 UserAgentHeader userAgentHeader = null;
1670 1620 try {
1671   - userAgentHeader = HeaderUtils.createUserAgentHeader(sipFactory);
  1621 + userAgentHeader = SipUtils.createUserAgentHeader(sipFactory);
1672 1622 } catch (ParseException e) {
1673 1623 logger.error("添加UserAgentHeader失败", e);
1674 1624 }
... ... @@ -1883,8 +1833,7 @@ public class SIPCommander implements ISIPCommander {
1883 1833  
1884 1834 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
1885 1835 : udpSipProvider.getNewCallId();
1886   - String tm = Long.toString(System.currentTimeMillis());
1887   - Request request = headerProvider.createMessageRequest(device, deviceStatusXml.toString(), "z9hG4bK-ViaPtz-" + tm, "FromPtz" + tm, null, callIdHeader);
  1836 + Request request = headerProvider.createMessageRequest(device, deviceStatusXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
1888 1837 transmitRequest(device, request);
1889 1838  
1890 1839  
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
... ... @@ -4,6 +4,7 @@ import com.genersoft.iot.vmp.gb28181.bean.*;
4 4 import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
5 5 import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
6 6 import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderPlarformProvider;
  7 +import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
7 8 import com.genersoft.iot.vmp.storager.dao.dto.PlatformRegisterInfo;
8 9 import com.genersoft.iot.vmp.utils.DateUtil;
9 10 import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
... ... @@ -26,19 +27,16 @@ import org.springframework.context.annotation.Lazy;
26 27 import org.springframework.lang.Nullable;
27 28 import org.springframework.stereotype.Component;
28 29 import org.springframework.util.ObjectUtils;
29   -import org.springframework.util.StringUtils;
30 30  
31 31 import javax.sip.*;
32 32 import javax.sip.address.SipURI;
33 33 import javax.sip.header.*;
34 34 import javax.sip.message.Request;
35 35 import java.lang.reflect.Field;
36   -import java.net.InetAddress;
37 36 import java.text.ParseException;
38 37 import java.util.ArrayList;
39 38 import java.util.HashSet;
40 39 import java.util.List;
41   -import java.util.UUID;
42 40  
43 41 @Component
44 42 @DependsOn("sipLayer")
... ... @@ -89,7 +87,6 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
89 87 SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent, boolean registerAgain, boolean isRegister) {
90 88 try {
91 89 Request request;
92   - String tm = Long.toString(System.currentTimeMillis());
93 90 if (!registerAgain ) {
94 91 CallIdHeader callIdHeader = null;
95 92 if(parentPlatform.getTransport().equalsIgnoreCase("TCP")) {
... ... @@ -100,8 +97,8 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
100 97 }
101 98  
102 99 request = headerProviderPlarformProvider.createRegisterRequest(parentPlatform,
103   - redisCatchStorage.getCSEQ(), "FromRegister" + tm,
104   - "z9hG4bK-" + UUID.randomUUID().toString().replace("-", ""), callIdHeader, isRegister);
  100 + redisCatchStorage.getCSEQ(), SipUtils.getNewFromTag(),
  101 + SipUtils.getNewViaTag(), callIdHeader, isRegister);
105 102 // 将 callid 写入缓存, 等注册成功可以更新状态
106 103 String callIdFromHeader = callIdHeader.getCallId();
107 104 redisCatchStorage.updatePlatformRegisterInfo(callIdFromHeader, PlatformRegisterInfo.getInstance(parentPlatform.getServerGBId(), isRegister));
... ... @@ -121,7 +118,7 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
121 118 }else {
122 119 CallIdHeader callIdHeader = parentPlatform.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
123 120 : udpSipProvider.getNewCallId();
124   - request = headerProviderPlarformProvider.createRegisterRequest(parentPlatform, "FromRegister" + tm, null, callId, www, callIdHeader, isRegister);
  121 + request = headerProviderPlarformProvider.createRegisterRequest(parentPlatform, SipUtils.getNewFromTag(), null, callId, www, callIdHeader, isRegister);
125 122 }
126 123  
127 124 transmitRequest(parentPlatform, request, null, okEvent);
... ... @@ -155,12 +152,11 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
155 152 CallIdHeader callIdHeader = parentPlatform.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
156 153 : udpSipProvider.getNewCallId();
157 154  
158   - Request request = headerProviderPlarformProvider.createKeetpaliveMessageRequest(
  155 + Request request = headerProviderPlarformProvider.createMessageRequest(
159 156 parentPlatform,
160 157 keepaliveXml.toString(),
161   - "z9hG4bK-" + UUID.randomUUID().toString().replace("-", ""),
162   - UUID.randomUUID().toString().replace("-", ""),
163   - null,
  158 + SipUtils.getNewFromTag(),
  159 + SipUtils.getNewViaTag(),
164 160 callIdHeader);
165 161 transmitRequest(parentPlatform, request, errorEvent, okEvent);
166 162 callId = callIdHeader.getCallId();
... ... @@ -222,7 +218,7 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
222 218 CallIdHeader callIdHeader = parentPlatform.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
223 219 : udpSipProvider.getNewCallId();
224 220  
225   - Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, catalogXml.toString(), fromTag, callIdHeader);
  221 + Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, catalogXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader);
226 222 transmitRequest(parentPlatform, request);
227 223  
228 224 } catch (SipException | ParseException | InvalidArgumentException e) {
... ... @@ -267,13 +263,18 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
267 263 // 虚拟组织增加BusinessGroupID字段
268 264 catalogXml.append("<BusinessGroupID>" + channel.getParentId() + "</BusinessGroupID>\r\n");
269 265 }
270   - catalogXml.append("<Parental>" + channel.getParental() + "</Parental>\r\n");
  266 + if (!channel.getChannelId().equals(parentPlatform.getDeviceGBId())) {
  267 + catalogXml.append("<Parental>" + channel.getParental() + "</Parental>\r\n");
  268 + if (channel.getParental() == 0) {
  269 + catalogXml.append("<Status>" + (channel.getStatus() == 0 ? "OFF" : "ON") + "</Status>\r\n");
  270 + }
  271 +
  272 + }
271 273 if (channel.getParental() == 0) {
272 274 // 通道项
273 275 catalogXml.append("<Manufacturer>" + channel.getManufacture() + "</Manufacturer>\r\n");
274 276 catalogXml.append("<Secrecy>" + channel.getSecrecy() + "</Secrecy>\r\n");
275 277 catalogXml.append("<RegisterWay>" + channel.getRegisterWay() + "</RegisterWay>\r\n");
276   - catalogXml.append("<Status>" + (channel.getStatus() == 0 ? "OFF" : "ON") + "</Status>\r\n");
277 278  
278 279 if (channel.getChannelType() != 2) { // 业务分组/虚拟组织/行政区划 不设置以下属性
279 280 catalogXml.append("<Model>" + channel.getModel() + "</Model>\r\n");
... ... @@ -308,7 +309,7 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
308 309 CallIdHeader callIdHeader = parentPlatform.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
309 310 : udpSipProvider.getNewCallId();
310 311  
311   - Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, catalogXml, fromTag, callIdHeader);
  312 + Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, catalogXml, fromTag, SipUtils.getNewViaTag(), callIdHeader);
312 313 transmitRequest(parentPlatform, request, null, eventResult -> {
313 314 int indexNext = index + parentPlatform.getCatalogGroup();
314 315 sendCatalogResponse(channels, parentPlatform, sn, fromTag, indexNext);
... ... @@ -348,7 +349,7 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
348 349 CallIdHeader callIdHeader = parentPlatform.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
349 350 : udpSipProvider.getNewCallId();
350 351  
351   - Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, deviceInfoXml.toString(), fromTag, callIdHeader);
  352 + Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, deviceInfoXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader);
352 353 transmitRequest(parentPlatform, request);
353 354  
354 355 } catch (SipException | ParseException | InvalidArgumentException e) {
... ... @@ -386,7 +387,7 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
386 387 CallIdHeader callIdHeader = parentPlatform.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
387 388 : udpSipProvider.getNewCallId();
388 389  
389   - Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, deviceStatusXml.toString(), fromTag, callIdHeader);
  390 + Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, deviceStatusXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader);
390 391 transmitRequest(parentPlatform, request);
391 392  
392 393 } catch (SipException | ParseException | InvalidArgumentException e) {
... ... @@ -471,8 +472,7 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
471 472 CallIdHeader callIdHeader = parentPlatform.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
472 473 : udpSipProvider.getNewCallId();
473 474  
474   - String tm = Long.toString(System.currentTimeMillis());
475   - Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, deviceStatusXml.toString(), "FromPtz" + tm, callIdHeader);
  475 + Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, deviceStatusXml.toString(), SipUtils.getNewFromTag(), SipUtils.getNewViaTag(), callIdHeader);
476 476 transmitRequest(parentPlatform, request);
477 477  
478 478 } catch (SipException | ParseException e) {
... ... @@ -750,7 +750,7 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
750 750 // callid
751 751 CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
752 752 : udpSipProvider.getNewCallId();
753   - Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, recordXml.toString(), fromTag, callIdHeader);
  753 + Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, recordXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader);
754 754 transmitRequest(parentPlatform, request);
755 755  
756 756 } catch (SipException | ParseException | InvalidArgumentException e) {
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/CatalogQueryMessageHandler.java
... ... @@ -78,6 +78,11 @@ public class CatalogQueryMessageHandler extends SIPRequestProcessorParent implem
78 78  
79 79 List<DeviceChannel> allChannels = new ArrayList<>();
80 80  
  81 + // 回复平台
  82 + DeviceChannel deviceChannel = getChannelForPlatform(parentPlatform);
  83 + allChannels.add(deviceChannel);
  84 +
  85 + // 回复目录
81 86 if (catalogs.size() > 0) {
82 87 allChannels.addAll(catalogs);
83 88 }
... ... @@ -104,4 +109,19 @@ public class CatalogQueryMessageHandler extends SIPRequestProcessorParent implem
104 109 }
105 110  
106 111 }
  112 +
  113 + private DeviceChannel getChannelForPlatform(ParentPlatform platform) {
  114 + DeviceChannel deviceChannel = new DeviceChannel();
  115 +
  116 + deviceChannel.setChannelId(platform.getDeviceGBId());
  117 + deviceChannel.setName(platform.getName());
  118 + deviceChannel.setManufacture("wvp-pro");
  119 + deviceChannel.setOwner("wvp-pro");
  120 + deviceChannel.setCivilCode(platform.getAdministrativeDivision());
  121 + deviceChannel.setAddress("wvp-pro");
  122 + deviceChannel.setRegisterWay(0);
  123 + deviceChannel.setSecrecy("0");
  124 +
  125 + return deviceChannel;
  126 + }
107 127 }
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/InviteResponseProcessor.java
1 1 package com.genersoft.iot.vmp.gb28181.transmit.event.response.impl;
2 2  
3 3 import com.genersoft.iot.vmp.conf.SipConfig;
4   -import com.genersoft.iot.vmp.gb28181.SipLayer;
5   -import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
6 4 import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
7 5 import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
8 6 import com.genersoft.iot.vmp.gb28181.transmit.event.response.SIPResponseProcessorAbstract;
9   -import com.genersoft.iot.vmp.gb28181.utils.HeaderUtils;
  7 +import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
10 8 import gov.nist.javax.sip.ResponseEventExt;
11   -import gov.nist.javax.sip.message.SIPResponse;
12 9 import gov.nist.javax.sip.stack.SIPDialog;
13 10 import org.slf4j.Logger;
14 11 import org.slf4j.LoggerFactory;
... ... @@ -22,13 +19,10 @@ import javax.sip.*;
22 19 import javax.sip.address.Address;
23 20 import javax.sip.address.SipURI;
24 21 import javax.sip.header.CSeqHeader;
25   -import javax.sip.header.CallIdHeader;
26 22 import javax.sip.header.UserAgentHeader;
27 23 import javax.sip.message.Request;
28 24 import javax.sip.message.Response;
29 25 import java.text.ParseException;
30   -import java.util.ArrayList;
31   -import java.util.List;
32 26  
33 27  
34 28 /**
... ... @@ -104,7 +98,7 @@ public class InviteResponseProcessor extends SIPResponseProcessorAbstract {
104 98 }
105 99 requestURI.setPort(event.getRemotePort());
106 100 reqAck.setRequestURI(requestURI);
107   - UserAgentHeader userAgentHeader = HeaderUtils.createUserAgentHeader(sipFactory);
  101 + UserAgentHeader userAgentHeader = SipUtils.createUserAgentHeader(sipFactory);
108 102 reqAck.addHeader(userAgentHeader);
109 103 Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort()));
110 104 reqAck.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/utils/HeaderUtils.java deleted 100644 → 0
1   -package com.genersoft.iot.vmp.gb28181.utils;
2   -
3   -import javax.sip.PeerUnavailableException;
4   -import javax.sip.SipFactory;
5   -import javax.sip.header.UserAgentHeader;
6   -import java.text.ParseException;
7   -import java.util.ArrayList;
8   -import java.util.List;
9   -
10   -/**
11   - * 生成header的工具类
12   - * @author lin
13   - */
14   -public class HeaderUtils {
15   -
16   - public static UserAgentHeader createUserAgentHeader(SipFactory sipFactory) throws PeerUnavailableException, ParseException {
17   - List<String> agentParam = new ArrayList<>();
18   - agentParam.add("WVP PRO");
19   - // TODO 添加版本信息以及日期
20   - return sipFactory.createHeaderFactory().createUserAgentHeader(agentParam);
21   - }
22   -}
src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java
... ... @@ -4,9 +4,16 @@ import gov.nist.javax.sip.address.AddressImpl;
4 4 import gov.nist.javax.sip.address.SipUri;
5 5 import gov.nist.javax.sip.header.Subject;
6 6  
  7 +import javax.sip.PeerUnavailableException;
  8 +import javax.sip.SipFactory;
7 9 import javax.sip.header.FromHeader;
8 10 import javax.sip.header.Header;
  11 +import javax.sip.header.UserAgentHeader;
9 12 import javax.sip.message.Request;
  13 +import java.text.ParseException;
  14 +import java.util.ArrayList;
  15 +import java.util.List;
  16 +import java.util.UUID;
10 17  
11 18 /**
12 19 * @author panlinlin
... ... @@ -38,4 +45,25 @@ public class SipUtils {
38 45 return uri.getUser();
39 46 }
40 47  
  48 + public static String getNewViaTag() {
  49 + return "z9hG4bK" + System.currentTimeMillis();
  50 + }
  51 +
  52 + public static UserAgentHeader createUserAgentHeader(SipFactory sipFactory) throws PeerUnavailableException, ParseException {
  53 + List<String> agentParam = new ArrayList<>();
  54 + agentParam.add("WVP PRO");
  55 + // TODO 添加版本信息以及日期
  56 + return sipFactory.createHeaderFactory().createUserAgentHeader(agentParam);
  57 + }
  58 +
  59 + public static String getNewFromTag(){
  60 + return UUID.randomUUID().toString().replace("-", "");
  61 +
  62 +// return getNewTag();
  63 + }
  64 +
  65 + public static String getNewTag(){
  66 + return String.valueOf(System.currentTimeMillis());
  67 + }
  68 +
41 69 }
... ...
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
... ... @@ -257,6 +257,7 @@ public class PlayServiceImpl implements IPlayService {
257 257 // 超时处理
258 258 String timeOutTaskKey = UUID.randomUUID().toString();
259 259 SSRCInfo finalSsrcInfo = ssrcInfo;
  260 + System.out.println("设置超时任务: " + timeOutTaskKey);
260 261 dynamicTask.startDelay( timeOutTaskKey,()->{
261 262  
262 263 SIPDialog dialog = streamSession.getDialogByStream(device.getDeviceId(), channelId, finalSsrcInfo.getStream());
... ... @@ -282,6 +283,7 @@ public class PlayServiceImpl implements IPlayService {
282 283 }
283 284 cmder.playStreamCmd(mediaServerItem, ssrcInfo, device, channelId, (MediaServerItem mediaServerItemInuse, JSONObject response) -> {
284 285 logger.info("收到订阅消息: " + response.toJSONString());
  286 + System.out.println("停止超时任务: " + timeOutTaskKey);
285 287 dynamicTask.stop(timeOutTaskKey);
286 288 // hook响应
287 289 onPublishHandlerForPlay(mediaServerItemInuse, response, device.getDeviceId(), channelId, uuid);
... ...
web_src/src/components/channelList.vue
... ... @@ -250,6 +250,7 @@ export default {
250 250 that.loadSnap[deviceId + channelId] = 0;
251 251 that.getSnapErrorEvent(snapId)
252 252 }, 5000)
  253 + itemData.streamId = res.data.data.stream;
253 254 that.$refs.devicePlayer.openDialog("media", deviceId, channelId, {
254 255 streamInfo: res.data.data,
255 256 hasAudio: itemData.hasAudio
... ...