Commit 74714711aa87dcd1259f5aebe55d362be732ffa2

Authored by 648540858
1 parent 1beb220b

优化sip消息构建,去除ServerTransaction的使用

Showing 34 changed files with 458 additions and 481 deletions
src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeInfo.java
@@ -3,15 +3,13 @@ package com.genersoft.iot.vmp.gb28181.bean; @@ -3,15 +3,13 @@ package com.genersoft.iot.vmp.gb28181.bean;
3 import gov.nist.javax.sip.message.SIPRequest; 3 import gov.nist.javax.sip.message.SIPRequest;
4 import gov.nist.javax.sip.message.SIPResponse; 4 import gov.nist.javax.sip.message.SIPResponse;
5 5
6 -import javax.sip.ServerTransaction;  
7 import javax.sip.header.*; 6 import javax.sip.header.*;
8 7
9 public class SubscribeInfo { 8 public class SubscribeInfo {
10 9
11 10
12 - public SubscribeInfo(ServerTransaction serverTransaction, String id) { 11 + public SubscribeInfo(SIPRequest request, String id) {
13 this.id = id; 12 this.id = id;
14 - SIPRequest request = (SIPRequest)serverTransaction.getRequest();  
15 this.request = request; 13 this.request = request;
16 this.expires = request.getExpires().getExpires(); 14 this.expires = request.getExpires().getExpires();
17 EventHeader eventHeader = (EventHeader)request.getHeader(EventHeader.NAME); 15 EventHeader eventHeader = (EventHeader)request.getHeader(EventHeader.NAME);
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPSender.java 0 → 100644
  1 +package com.genersoft.iot.vmp.gb28181.transmit;
  2 +
  3 +import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
  4 +import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
  5 +import com.genersoft.iot.vmp.utils.GitUtil;
  6 +import gov.nist.javax.sip.SipProviderImpl;
  7 +import org.slf4j.Logger;
  8 +import org.slf4j.LoggerFactory;
  9 +import org.springframework.beans.factory.annotation.Autowired;
  10 +import org.springframework.beans.factory.annotation.Qualifier;
  11 +import org.springframework.stereotype.Component;
  12 +
  13 +import javax.sip.SipException;
  14 +import javax.sip.SipFactory;
  15 +import javax.sip.header.CallIdHeader;
  16 +import javax.sip.header.UserAgentHeader;
  17 +import javax.sip.header.ViaHeader;
  18 +import javax.sip.message.Message;
  19 +import javax.sip.message.Request;
  20 +import javax.sip.message.Response;
  21 +import java.text.ParseException;
  22 +
  23 +@Component
  24 +public class SIPSender {
  25 +
  26 + private final Logger logger = LoggerFactory.getLogger(SIPSender.class);
  27 +
  28 + @Autowired
  29 + @Qualifier(value = "tcpSipProvider")
  30 + private SipProviderImpl tcpSipProvider;
  31 +
  32 + @Autowired
  33 + @Qualifier(value = "udpSipProvider")
  34 + private SipProviderImpl udpSipProvider;
  35 +
  36 + @Autowired
  37 + private SipFactory sipFactory;
  38 +
  39 + @Autowired
  40 + private GitUtil gitUtil;
  41 +
  42 + @Autowired
  43 + private SipSubscribe sipSubscribe;
  44 +
  45 + public void transmitRequest(Message message) throws SipException, ParseException {
  46 + transmitRequest(message, null, null);
  47 + }
  48 +
  49 + public void transmitRequest(Message message, SipSubscribe.Event errorEvent) throws SipException, ParseException {
  50 + transmitRequest(message, errorEvent, null);
  51 + }
  52 +
  53 + public void transmitRequest(Message message, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws SipException, ParseException {
  54 + ViaHeader viaHeader = (ViaHeader)message.getHeader(ViaHeader.NAME);
  55 + String transport = "UDP";
  56 + if (viaHeader == null) {
  57 + logger.warn("[消息头缺失]: ViaHeader");
  58 + }else {
  59 + transport = viaHeader.getTransport();
  60 + }
  61 + if (message.getHeader(UserAgentHeader.NAME) == null) {
  62 + try {
  63 + message.addHeader(SipUtils.createUserAgentHeader(sipFactory, gitUtil));
  64 + } catch (ParseException e) {
  65 + logger.error("添加UserAgentHeader失败", e);
  66 + }
  67 + }
  68 +
  69 + CallIdHeader callIdHeader = (CallIdHeader) message.getHeader(CallIdHeader.NAME);
  70 + // 添加错误订阅
  71 + if (errorEvent != null) {
  72 + sipSubscribe.addErrorSubscribe(callIdHeader.getCallId(), (eventResult -> {
  73 + errorEvent.response(eventResult);
  74 + sipSubscribe.removeErrorSubscribe(eventResult.callId);
  75 + sipSubscribe.removeOkSubscribe(eventResult.callId);
  76 + }));
  77 + }
  78 + // 添加订阅
  79 + if (okEvent != null) {
  80 + sipSubscribe.addOkSubscribe(callIdHeader.getCallId(), eventResult -> {
  81 + okEvent.response(eventResult);
  82 + sipSubscribe.removeOkSubscribe(eventResult.callId);
  83 + sipSubscribe.removeErrorSubscribe(eventResult.callId);
  84 + });
  85 + }
  86 + if ("TCP".equals(transport)) {
  87 + if (message instanceof Request) {
  88 + tcpSipProvider.sendRequest((Request)message);
  89 + }else if (message instanceof Response) {
  90 + tcpSipProvider.sendResponse((Response)message);
  91 + }
  92 +
  93 + } else if ("UDP".equals(transport)) {
  94 + if (message instanceof Request) {
  95 + udpSipProvider.sendRequest((Request)message);
  96 + }else if (message instanceof Response) {
  97 + udpSipProvider.sendResponse((Response)message);
  98 + }
  99 + }
  100 + }
  101 +
  102 + public CallIdHeader getNewCallIdHeader(String transport){
  103 + return transport.equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
  104 + : udpSipProvider.getNewCallId();
  105 + }
  106 +}
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
@@ -13,6 +13,7 @@ import javax.sip.Dialog; @@ -13,6 +13,7 @@ import javax.sip.Dialog;
13 import javax.sip.InvalidArgumentException; 13 import javax.sip.InvalidArgumentException;
14 import javax.sip.PeerUnavailableException; 14 import javax.sip.PeerUnavailableException;
15 import javax.sip.SipException; 15 import javax.sip.SipException;
  16 +import javax.sip.message.Message;
16 import javax.sip.message.Request; 17 import javax.sip.message.Request;
17 import java.text.ParseException; 18 import java.text.ParseException;
18 19
@@ -362,9 +363,4 @@ public interface ISIPCommander { @@ -362,9 +363,4 @@ public interface ISIPCommander {
362 */ 363 */
363 void sendAlarmMessage(Device device, DeviceAlarm deviceAlarm) throws InvalidArgumentException, SipException, ParseException; 364 void sendAlarmMessage(Device device, DeviceAlarm deviceAlarm) throws InvalidArgumentException, SipException, ParseException;
364 365
365 - void transmitRequest(String transport, Request request) throws SipException, ParseException ;  
366 -  
367 - void transmitRequest(String transport, Request request, SipSubscribe.Event errorEvent) throws SipException, ParseException;  
368 -  
369 - void transmitRequest(String transport, Request request, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) throws SipException, ParseException;  
370 } 366 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException; @@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException;
9 import com.genersoft.iot.vmp.gb28181.bean.*; 9 import com.genersoft.iot.vmp.gb28181.bean.*;
10 import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; 10 import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
11 import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; 11 import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
  12 +import com.genersoft.iot.vmp.gb28181.transmit.SIPSender;
12 import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander; 13 import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
13 import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderProvider; 14 import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderProvider;
14 import com.genersoft.iot.vmp.gb28181.utils.SipUtils; 15 import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
@@ -44,6 +45,7 @@ import javax.sip.*; @@ -44,6 +45,7 @@ import javax.sip.*;
44 import javax.sip.address.Address; 45 import javax.sip.address.Address;
45 import javax.sip.address.SipURI; 46 import javax.sip.address.SipURI;
46 import javax.sip.header.*; 47 import javax.sip.header.*;
  48 +import javax.sip.message.Message;
47 import javax.sip.message.Request; 49 import javax.sip.message.Request;
48 import javax.sip.message.Response; 50 import javax.sip.message.Response;
49 import java.lang.reflect.Field; 51 import java.lang.reflect.Field;
@@ -68,16 +70,8 @@ public class SIPCommander implements ISIPCommander { @@ -68,16 +70,8 @@ public class SIPCommander implements ISIPCommander {
68 private SipFactory sipFactory; 70 private SipFactory sipFactory;
69 71
70 @Autowired 72 @Autowired
71 - private GitUtil gitUtil;  
72 -  
73 - @Autowired  
74 - @Qualifier(value = "tcpSipProvider")  
75 - private SipProviderImpl tcpSipProvider;  
76 -  
77 - @Autowired  
78 - @Qualifier(value = "udpSipProvider")  
79 - private SipProviderImpl udpSipProvider;  
80 - 73 + private SIPSender sipSender;
  74 +
81 @Autowired 75 @Autowired
82 private SIPRequestHeaderProvider headerProvider; 76 private SIPRequestHeaderProvider headerProvider;
83 77
@@ -90,8 +84,7 @@ public class SIPCommander implements ISIPCommander { @@ -90,8 +84,7 @@ public class SIPCommander implements ISIPCommander {
90 @Autowired 84 @Autowired
91 private ZlmHttpHookSubscribe subscribe; 85 private ZlmHttpHookSubscribe subscribe;
92 86
93 - @Autowired  
94 - private SipSubscribe sipSubscribe; 87 +
95 88
96 @Autowired 89 @Autowired
97 private IMediaServerService mediaServerService; 90 private IMediaServerService mediaServerService;
@@ -202,13 +195,10 @@ public class SIPCommander implements ISIPCommander { @@ -202,13 +195,10 @@ public class SIPCommander implements ISIPCommander {
202 ptzXml.append("<ControlPriority>5</ControlPriority>\r\n"); 195 ptzXml.append("<ControlPriority>5</ControlPriority>\r\n");
203 ptzXml.append("</Info>\r\n"); 196 ptzXml.append("</Info>\r\n");
204 ptzXml.append("</Control>\r\n"); 197 ptzXml.append("</Control>\r\n");
  198 +
  199 + Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, sipSender.getNewCallIdHeader(device.getTransport()));
205 200
206 - CallIdHeader callIdHeader = device.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()  
207 - : udpSipProvider.getNewCallId();  
208 -  
209 - Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);  
210 -  
211 - transmitRequest(device.getTransport(), request); 201 + sipSender.transmitRequest( request);
212 } 202 }
213 203
214 /** 204 /**
@@ -239,11 +229,10 @@ public class SIPCommander implements ISIPCommander { @@ -239,11 +229,10 @@ public class SIPCommander implements ISIPCommander {
239 ptzXml.append("</Control>\r\n"); 229 ptzXml.append("</Control>\r\n");
240 230
241 231
242 - CallIdHeader callIdHeader = device.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()  
243 - : udpSipProvider.getNewCallId();  
244 232
245 - SIPRequest request = (SIPRequest) headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);  
246 - transmitRequest(device.getTransport(), request); 233 +
  234 + SIPRequest request = (SIPRequest) headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
  235 + sipSender.transmitRequest(request);
247 236
248 } 237 }
249 238
@@ -269,13 +258,10 @@ public class SIPCommander implements ISIPCommander { @@ -269,13 +258,10 @@ public class SIPCommander implements ISIPCommander {
269 ptzXml.append("<ControlPriority>5</ControlPriority>\r\n"); 258 ptzXml.append("<ControlPriority>5</ControlPriority>\r\n");
270 ptzXml.append("</Info>\r\n"); 259 ptzXml.append("</Info>\r\n");
271 ptzXml.append("</Control>\r\n"); 260 ptzXml.append("</Control>\r\n");
272 -  
273 -  
274 - CallIdHeader callIdHeader = device.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()  
275 - : udpSipProvider.getNewCallId();  
276 -  
277 - Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);  
278 - transmitRequest(device.getTransport(), request, errorEvent, okEvent); 261 +
  262 +
  263 + Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
  264 + sipSender.transmitRequest(request, errorEvent, okEvent);
279 265
280 } 266 }
281 267
@@ -362,11 +348,10 @@ public class SIPCommander implements ISIPCommander { @@ -362,11 +348,10 @@ public class SIPCommander implements ISIPCommander {
362 // f字段:f= v/编码格式/分辨率/帧率/码率类型/码率大小a/编码格式/码率大小/采样率 348 // f字段:f= v/编码格式/分辨率/帧率/码率类型/码率大小a/编码格式/码率大小/采样率
363 // content.append("f=v/2/5/25/1/4000a/1/8/1" + "\r\n"); // 未发现支持此特性的设备 349 // content.append("f=v/2/5/25/1/4000a/1/8/1" + "\r\n"); // 未发现支持此特性的设备
364 350
365 - CallIdHeader callIdHeader = device.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()  
366 - : udpSipProvider.getNewCallId();  
367 351
368 - Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, ssrcInfo.getSsrc(), callIdHeader);  
369 - transmitRequest(device.getTransport(), request, (e -> { 352 +
  353 + Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, ssrcInfo.getSsrc(),sipSender.getNewCallIdHeader(device.getTransport()));
  354 + sipSender.transmitRequest( request, (e -> {
370 streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream()); 355 streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
371 mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); 356 mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
372 errorEvent.response(e); 357 errorEvent.response(e);
@@ -454,27 +439,25 @@ public class SIPCommander implements ISIPCommander { @@ -454,27 +439,25 @@ public class SIPCommander implements ISIPCommander {
454 439
455 content.append("y=" + ssrcInfo.getSsrc() + "\r\n");//ssrc 440 content.append("y=" + ssrcInfo.getSsrc() + "\r\n");//ssrc
456 441
457 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
458 - : udpSipProvider.getNewCallId();  
459 HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, "rtsp", mediaServerItem.getId()); 442 HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, "rtsp", mediaServerItem.getId());
460 // 添加订阅 443 // 添加订阅
461 subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject json) -> { 444 subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject json) -> {
462 if (hookEvent != null) { 445 if (hookEvent != null) {
463 - InviteStreamInfo inviteStreamInfo = new InviteStreamInfo(mediaServerItemInUse, json, callIdHeader.getCallId(), "rtp", ssrcInfo.getStream()); 446 + InviteStreamInfo inviteStreamInfo = new InviteStreamInfo(mediaServerItemInUse, json,sipSender.getNewCallIdHeader(device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream());
464 hookEvent.call(inviteStreamInfo); 447 hookEvent.call(inviteStreamInfo);
465 } 448 }
466 subscribe.removeSubscribe(hookSubscribe); 449 subscribe.removeSubscribe(hookSubscribe);
467 }); 450 });
468 - Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader, ssrcInfo.getSsrc()); 451 + Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()), ssrcInfo.getSsrc());
469 452
470 - transmitRequest(device.getTransport(), request, errorEvent, event -> { 453 + sipSender.transmitRequest( request, errorEvent, event -> {
471 ResponseEvent responseEvent = (ResponseEvent) event.event; 454 ResponseEvent responseEvent = (ResponseEvent) event.event;
472 SIPResponse response = (SIPResponse) responseEvent.getResponse(); 455 SIPResponse response = (SIPResponse) responseEvent.getResponse();
473 - streamSession.put(device.getDeviceId(), channelId, callIdHeader.getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.playback); 456 + streamSession.put(device.getDeviceId(), channelId,sipSender.getNewCallIdHeader(device.getTransport()).getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.playback);
474 okEvent.response(event); 457 okEvent.response(event);
475 }); 458 });
476 if (inviteStreamCallback != null) { 459 if (inviteStreamCallback != null) {
477 - inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null, callIdHeader.getCallId(), "rtp", ssrcInfo.getStream())); 460 + inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null,sipSender.getNewCallIdHeader(device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream()));
478 } 461 }
479 } 462 }
480 463
@@ -554,14 +537,11 @@ public class SIPCommander implements ISIPCommander { @@ -554,14 +537,11 @@ public class SIPCommander implements ISIPCommander {
554 content.append("a=downloadspeed:" + downloadSpeed + "\r\n"); 537 content.append("a=downloadspeed:" + downloadSpeed + "\r\n");
555 538
556 content.append("y=" + ssrcInfo.getSsrc() + "\r\n");//ssrc 539 content.append("y=" + ssrcInfo.getSsrc() + "\r\n");//ssrc
557 -  
558 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
559 - : udpSipProvider.getNewCallId();  
560 - 540 +
561 HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, null, mediaServerItem.getId()); 541 HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, null, mediaServerItem.getId());
562 // 添加订阅 542 // 添加订阅
563 subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject json) -> { 543 subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject json) -> {
564 - hookEvent.call(new InviteStreamInfo(mediaServerItem, json, callIdHeader.getCallId(), "rtp", ssrcInfo.getStream())); 544 + hookEvent.call(new InviteStreamInfo(mediaServerItem, json,sipSender.getNewCallIdHeader(device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream()));
565 subscribe.removeSubscribe(hookSubscribe); 545 subscribe.removeSubscribe(hookSubscribe);
566 hookSubscribe.getContent().put("regist", false); 546 hookSubscribe.getContent().put("regist", false);
567 hookSubscribe.getContent().put("schema", "rtsp"); 547 hookSubscribe.getContent().put("schema", "rtsp");
@@ -570,7 +550,7 @@ public class SIPCommander implements ISIPCommander { @@ -570,7 +550,7 @@ public class SIPCommander implements ISIPCommander {
570 (MediaServerItem mediaServerItemForEnd, JSONObject jsonForEnd) -> { 550 (MediaServerItem mediaServerItemForEnd, JSONObject jsonForEnd) -> {
571 logger.info("[录像]下载结束, 发送BYE"); 551 logger.info("[录像]下载结束, 发送BYE");
572 try { 552 try {
573 - streamByeCmd(device, channelId, ssrcInfo.getStream(), callIdHeader.getCallId()); 553 + streamByeCmd(device, channelId, ssrcInfo.getStream(),sipSender.getNewCallIdHeader(device.getTransport()).getCallId());
574 } catch (InvalidArgumentException | ParseException | SipException | 554 } catch (InvalidArgumentException | ParseException | SipException |
575 SsrcTransactionNotFoundException e) { 555 SsrcTransactionNotFoundException e) {
576 logger.error("[录像]下载结束, 发送BYE失败 {}", e.getMessage()); 556 logger.error("[录像]下载结束, 发送BYE失败 {}", e.getMessage());
@@ -578,14 +558,14 @@ public class SIPCommander implements ISIPCommander { @@ -578,14 +558,14 @@ public class SIPCommander implements ISIPCommander {
578 }); 558 });
579 }); 559 });
580 560
581 - Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader, ssrcInfo.getSsrc()); 561 + Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()), ssrcInfo.getSsrc());
582 if (inviteStreamCallback != null) { 562 if (inviteStreamCallback != null) {
583 - inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null, callIdHeader.getCallId(), "rtp", ssrcInfo.getStream())); 563 + inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null,sipSender.getNewCallIdHeader(device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream()));
584 } 564 }
585 - transmitRequest(device.getTransport(), request, errorEvent, okEvent -> { 565 + sipSender.transmitRequest( request, errorEvent, okEvent -> {
586 ResponseEvent responseEvent = (ResponseEvent) okEvent.event; 566 ResponseEvent responseEvent = (ResponseEvent) okEvent.event;
587 SIPResponse response = (SIPResponse) responseEvent.getResponse(); 567 SIPResponse response = (SIPResponse) responseEvent.getResponse();
588 - streamSession.put(device.getDeviceId(), channelId, callIdHeader.getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.download); 568 + streamSession.put(device.getDeviceId(), channelId,sipSender.getNewCallIdHeader(device.getTransport()).getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.download);
589 }); 569 });
590 } 570 }
591 571
@@ -612,7 +592,7 @@ public class SIPCommander implements ISIPCommander { @@ -612,7 +592,7 @@ public class SIPCommander implements ISIPCommander {
612 streamSession.remove(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream()); 592 streamSession.remove(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream());
613 593
614 Request byteRequest = headerProvider.createByteRequest(device, channelId, ssrcTransaction.getSipTransactionInfo()); 594 Request byteRequest = headerProvider.createByteRequest(device, channelId, ssrcTransaction.getSipTransactionInfo());
615 - transmitRequest(device.getTransport(), byteRequest, null, okEvent); 595 + sipSender.transmitRequest( byteRequest, null, okEvent);
616 } 596 }
617 597
618 /** 598 /**
@@ -643,11 +623,10 @@ public class SIPCommander implements ISIPCommander { @@ -643,11 +623,10 @@ public class SIPCommander implements ISIPCommander {
643 broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n"); 623 broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n");
644 broadcastXml.append("</Notify>\r\n"); 624 broadcastXml.append("</Notify>\r\n");
645 625
646 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
647 - : udpSipProvider.getNewCallId(); 626 +
648 627
649 - Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);  
650 - transmitRequest(device.getTransport(), request); 628 + Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
  629 + sipSender.transmitRequest( request);
651 630
652 } 631 }
653 632
@@ -664,11 +643,10 @@ public class SIPCommander implements ISIPCommander { @@ -664,11 +643,10 @@ public class SIPCommander implements ISIPCommander {
664 broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n"); 643 broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n");
665 broadcastXml.append("</Notify>\r\n"); 644 broadcastXml.append("</Notify>\r\n");
666 645
667 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
668 - : udpSipProvider.getNewCallId(); 646 +
669 647
670 - Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);  
671 - transmitRequest(device.getTransport(), request, errorEvent); 648 + Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
  649 + sipSender.transmitRequest( request, errorEvent);
672 650
673 } 651 }
674 652
@@ -696,11 +674,10 @@ public class SIPCommander implements ISIPCommander { @@ -696,11 +674,10 @@ public class SIPCommander implements ISIPCommander {
696 cmdXml.append("<RecordCmd>" + recordCmdStr + "</RecordCmd>\r\n"); 674 cmdXml.append("<RecordCmd>" + recordCmdStr + "</RecordCmd>\r\n");
697 cmdXml.append("</Control>\r\n"); 675 cmdXml.append("</Control>\r\n");
698 676
699 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
700 - : udpSipProvider.getNewCallId(); 677 +
701 678
702 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);  
703 - transmitRequest(device.getTransport(), request, errorEvent); 679 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
  680 + sipSender.transmitRequest( request, errorEvent);
704 } 681 }
705 682
706 /** 683 /**
@@ -721,11 +698,10 @@ public class SIPCommander implements ISIPCommander { @@ -721,11 +698,10 @@ public class SIPCommander implements ISIPCommander {
721 cmdXml.append("<TeleBoot>Boot</TeleBoot>\r\n"); 698 cmdXml.append("<TeleBoot>Boot</TeleBoot>\r\n");
722 cmdXml.append("</Control>\r\n"); 699 cmdXml.append("</Control>\r\n");
723 700
724 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
725 - : udpSipProvider.getNewCallId(); 701 +
726 702
727 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);  
728 - transmitRequest(device.getTransport(), request); 703 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
  704 + sipSender.transmitRequest( request);
729 } 705 }
730 706
731 /** 707 /**
@@ -747,11 +723,10 @@ public class SIPCommander implements ISIPCommander { @@ -747,11 +723,10 @@ public class SIPCommander implements ISIPCommander {
747 cmdXml.append("<GuardCmd>" + guardCmdStr + "</GuardCmd>\r\n"); 723 cmdXml.append("<GuardCmd>" + guardCmdStr + "</GuardCmd>\r\n");
748 cmdXml.append("</Control>\r\n"); 724 cmdXml.append("</Control>\r\n");
749 725
750 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
751 - : udpSipProvider.getNewCallId(); 726 +
752 727
753 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);  
754 - transmitRequest(device.getTransport(), request, errorEvent); 728 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
  729 + sipSender.transmitRequest( request, errorEvent);
755 } 730 }
756 731
757 /** 732 /**
@@ -784,11 +759,10 @@ public class SIPCommander implements ISIPCommander { @@ -784,11 +759,10 @@ public class SIPCommander implements ISIPCommander {
784 } 759 }
785 cmdXml.append("</Control>\r\n"); 760 cmdXml.append("</Control>\r\n");
786 761
787 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
788 - : udpSipProvider.getNewCallId(); 762 +
789 763
790 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);  
791 - transmitRequest(device.getTransport(), request, errorEvent); 764 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
  765 + sipSender.transmitRequest( request, errorEvent);
792 } 766 }
793 767
794 /** 768 /**
@@ -814,11 +788,10 @@ public class SIPCommander implements ISIPCommander { @@ -814,11 +788,10 @@ public class SIPCommander implements ISIPCommander {
814 cmdXml.append("<IFameCmd>Send</IFameCmd>\r\n"); 788 cmdXml.append("<IFameCmd>Send</IFameCmd>\r\n");
815 cmdXml.append("</Control>\r\n"); 789 cmdXml.append("</Control>\r\n");
816 790
817 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
818 - : udpSipProvider.getNewCallId(); 791 +
819 792
820 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);  
821 - transmitRequest(device.getTransport(), request); 793 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
  794 + sipSender.transmitRequest( request);
822 } 795 }
823 796
824 /** 797 /**
@@ -862,11 +835,10 @@ public class SIPCommander implements ISIPCommander { @@ -862,11 +835,10 @@ public class SIPCommander implements ISIPCommander {
862 cmdXml.append("</HomePosition>\r\n"); 835 cmdXml.append("</HomePosition>\r\n");
863 cmdXml.append("</Control>\r\n"); 836 cmdXml.append("</Control>\r\n");
864 837
865 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
866 - : udpSipProvider.getNewCallId(); 838 +
867 839
868 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);  
869 - transmitRequest(device.getTransport(), request, errorEvent); 840 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
  841 + sipSender.transmitRequest( request, errorEvent);
870 } 842 }
871 843
872 /** 844 /**
@@ -926,11 +898,10 @@ public class SIPCommander implements ISIPCommander { @@ -926,11 +898,10 @@ public class SIPCommander implements ISIPCommander {
926 cmdXml.append("</BasicParam>\r\n"); 898 cmdXml.append("</BasicParam>\r\n");
927 cmdXml.append("</Control>\r\n"); 899 cmdXml.append("</Control>\r\n");
928 900
929 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
930 - : udpSipProvider.getNewCallId(); 901 +
931 902
932 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);  
933 - transmitRequest(device.getTransport(), request, errorEvent); 903 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
  904 + sipSender.transmitRequest( request, errorEvent);
934 } 905 }
935 906
936 /** 907 /**
@@ -950,12 +921,11 @@ public class SIPCommander implements ISIPCommander { @@ -950,12 +921,11 @@ public class SIPCommander implements ISIPCommander {
950 catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n"); 921 catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
951 catalogXml.append("</Query>\r\n"); 922 catalogXml.append("</Query>\r\n");
952 923
953 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
954 - : udpSipProvider.getNewCallId(); 924 +
955 925
956 - Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader); 926 + Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
957 927
958 - transmitRequest(device.getTransport(), request, errorEvent); 928 + sipSender.transmitRequest( request, errorEvent);
959 } 929 }
960 930
961 /** 931 /**
@@ -975,12 +945,11 @@ public class SIPCommander implements ISIPCommander { @@ -975,12 +945,11 @@ public class SIPCommander implements ISIPCommander {
975 catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n"); 945 catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
976 catalogXml.append("</Query>\r\n"); 946 catalogXml.append("</Query>\r\n");
977 947
978 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
979 - : udpSipProvider.getNewCallId(); 948 +
980 949
981 - Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader); 950 + Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
982 951
983 - transmitRequest(device.getTransport(), request); 952 + sipSender.transmitRequest( request);
984 953
985 } 954 }
986 955
@@ -1001,12 +970,11 @@ public class SIPCommander implements ISIPCommander { @@ -1001,12 +970,11 @@ public class SIPCommander implements ISIPCommander {
1001 catalogXml.append(" <DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n"); 970 catalogXml.append(" <DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
1002 catalogXml.append("</Query>\r\n"); 971 catalogXml.append("</Query>\r\n");
1003 972
1004 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
1005 - : udpSipProvider.getNewCallId(); 973 +
1006 974
1007 - Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader); 975 + Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
1008 976
1009 - transmitRequest(device.getTransport(), request, errorEvent); 977 + sipSender.transmitRequest( request, errorEvent);
1010 } 978 }
1011 979
1012 /** 980 /**
@@ -1047,13 +1015,12 @@ public class SIPCommander implements ISIPCommander { @@ -1047,13 +1015,12 @@ public class SIPCommander implements ISIPCommander {
1047 } 1015 }
1048 recordInfoXml.append("</Query>\r\n"); 1016 recordInfoXml.append("</Query>\r\n");
1049 1017
1050 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
1051 - : udpSipProvider.getNewCallId(); 1018 +
1052 1019
1053 Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(), 1020 Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(),
1054 - SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader); 1021 + SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
1055 1022
1056 - transmitRequest(device.getTransport(), request, errorEvent, okEvent); 1023 + sipSender.transmitRequest( request, errorEvent, okEvent);
1057 } 1024 }
1058 1025
1059 /** 1026 /**
@@ -1099,11 +1066,10 @@ public class SIPCommander implements ISIPCommander { @@ -1099,11 +1066,10 @@ public class SIPCommander implements ISIPCommander {
1099 } 1066 }
1100 cmdXml.append("</Query>\r\n"); 1067 cmdXml.append("</Query>\r\n");
1101 1068
1102 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
1103 - : udpSipProvider.getNewCallId(); 1069 +
1104 1070
1105 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);  
1106 - transmitRequest(device.getTransport(), request, errorEvent); 1071 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
  1072 + sipSender.transmitRequest( request, errorEvent);
1107 } 1073 }
1108 1074
1109 /** 1075 /**
@@ -1130,11 +1096,10 @@ public class SIPCommander implements ISIPCommander { @@ -1130,11 +1096,10 @@ public class SIPCommander implements ISIPCommander {
1130 cmdXml.append("<ConfigType>" + configType + "</ConfigType>\r\n"); 1096 cmdXml.append("<ConfigType>" + configType + "</ConfigType>\r\n");
1131 cmdXml.append("</Query>\r\n"); 1097 cmdXml.append("</Query>\r\n");
1132 1098
1133 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
1134 - : udpSipProvider.getNewCallId(); 1099 +
1135 1100
1136 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);  
1137 - transmitRequest(device.getTransport(), request, errorEvent); 1101 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
  1102 + sipSender.transmitRequest( request, errorEvent);
1138 } 1103 }
1139 1104
1140 /** 1105 /**
@@ -1158,11 +1123,10 @@ public class SIPCommander implements ISIPCommander { @@ -1158,11 +1123,10 @@ public class SIPCommander implements ISIPCommander {
1158 } 1123 }
1159 cmdXml.append("</Query>\r\n"); 1124 cmdXml.append("</Query>\r\n");
1160 1125
1161 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
1162 - : udpSipProvider.getNewCallId(); 1126 +
1163 1127
1164 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);  
1165 - transmitRequest(device.getTransport(), request, errorEvent); 1128 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
  1129 + sipSender.transmitRequest( request, errorEvent);
1166 } 1130 }
1167 1131
1168 /** 1132 /**
@@ -1183,12 +1147,11 @@ public class SIPCommander implements ISIPCommander { @@ -1183,12 +1147,11 @@ public class SIPCommander implements ISIPCommander {
1183 mobilePostitionXml.append("<Interval>60</Interval>\r\n"); 1147 mobilePostitionXml.append("<Interval>60</Interval>\r\n");
1184 mobilePostitionXml.append("</Query>\r\n"); 1148 mobilePostitionXml.append("</Query>\r\n");
1185 1149
1186 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
1187 - : udpSipProvider.getNewCallId(); 1150 +
1188 1151
1189 - Request request = headerProvider.createMessageRequest(device, mobilePostitionXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader); 1152 + Request request = headerProvider.createMessageRequest(device, mobilePostitionXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
1190 1153
1191 - transmitRequest(device.getTransport(), request, errorEvent); 1154 + sipSender.transmitRequest( request, errorEvent);
1192 1155
1193 } 1156 }
1194 1157
@@ -1218,12 +1181,11 @@ public class SIPCommander implements ISIPCommander { @@ -1218,12 +1181,11 @@ public class SIPCommander implements ISIPCommander {
1218 if (requestOld != null) { 1181 if (requestOld != null) {
1219 callIdHeader = sipFactory.createHeaderFactory().createCallIdHeader(requestOld.getCallIdHeader().getCallId()); 1182 callIdHeader = sipFactory.createHeaderFactory().createCallIdHeader(requestOld.getCallIdHeader().getCallId());
1220 } else { 1183 } else {
1221 - callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
1222 - : udpSipProvider.getNewCallId(); 1184 + callIdHeader = sipSender.getNewCallIdHeader(device.getTransport());
1223 } 1185 }
1224 - SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, subscribePostitionXml.toString(), requestOld, device.getSubscribeCycleForMobilePosition(), "presence", callIdHeader); //Position;id=" + tm.substring(tm.length() - 4)); 1186 + SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, subscribePostitionXml.toString(), requestOld, device.getSubscribeCycleForMobilePosition(), "presence",callIdHeader); //Position;id=" + tm.substring(tm.length() - 4));
1225 1187
1226 - transmitRequest(device.getTransport(), request, errorEvent, okEvent); 1188 + sipSender.transmitRequest( request, errorEvent, okEvent);
1227 return request; 1189 return request;
1228 } 1190 }
1229 1191
@@ -1270,11 +1232,10 @@ public class SIPCommander implements ISIPCommander { @@ -1270,11 +1232,10 @@ public class SIPCommander implements ISIPCommander {
1270 } 1232 }
1271 cmdXml.append("</Query>\r\n"); 1233 cmdXml.append("</Query>\r\n");
1272 1234
1273 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
1274 - : udpSipProvider.getNewCallId(); 1235 +
1275 1236
1276 - Request request = headerProvider.createSubscribeRequest(device, cmdXml.toString(), null, expires, "presence", callIdHeader);  
1277 - transmitRequest(device.getTransport(), request); 1237 + Request request = headerProvider.createSubscribeRequest(device, cmdXml.toString(), null, expires, "presence",sipSender.getNewCallIdHeader(device.getTransport()));
  1238 + sipSender.transmitRequest( request);
1278 1239
1279 } 1240 }
1280 1241
@@ -1295,14 +1256,13 @@ public class SIPCommander implements ISIPCommander { @@ -1295,14 +1256,13 @@ public class SIPCommander implements ISIPCommander {
1295 if (requestOld != null) { 1256 if (requestOld != null) {
1296 callIdHeader = sipFactory.createHeaderFactory().createCallIdHeader(requestOld.getCallIdHeader().getCallId()); 1257 callIdHeader = sipFactory.createHeaderFactory().createCallIdHeader(requestOld.getCallIdHeader().getCallId());
1297 } else { 1258 } else {
1298 - callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
1299 - : udpSipProvider.getNewCallId(); 1259 + callIdHeader = sipSender.getNewCallIdHeader(device.getTransport());
1300 } 1260 }
1301 1261
1302 // 有效时间默认为60秒以上 1262 // 有效时间默认为60秒以上
1303 SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, cmdXml.toString(), requestOld, device.getSubscribeCycleForCatalog(), "Catalog", 1263 SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, cmdXml.toString(), requestOld, device.getSubscribeCycleForCatalog(), "Catalog",
1304 callIdHeader); 1264 callIdHeader);
1305 - transmitRequest(device.getTransport(), request, errorEvent, okEvent); 1265 + sipSender.transmitRequest( request, errorEvent, okEvent);
1306 return request; 1266 return request;
1307 } 1267 }
1308 1268
@@ -1322,59 +1282,14 @@ public class SIPCommander implements ISIPCommander { @@ -1322,59 +1282,14 @@ public class SIPCommander implements ISIPCommander {
1322 } 1282 }
1323 dragXml.append(cmdString); 1283 dragXml.append(cmdString);
1324 dragXml.append("</Control>\r\n"); 1284 dragXml.append("</Control>\r\n");
1325 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
1326 - : udpSipProvider.getNewCallId();  
1327 - Request request = headerProvider.createMessageRequest(device, dragXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader); 1285 +
  1286 + Request request = headerProvider.createMessageRequest(device, dragXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
1328 logger.debug("拉框信令: " + request.toString()); 1287 logger.debug("拉框信令: " + request.toString());
1329 - transmitRequest(device.getTransport(), request); 1288 + sipSender.transmitRequest(request);
1330 } 1289 }
1331 1290
1332 1291
1333 - @Override  
1334 - public void transmitRequest(String transport, Request request) throws SipException, ParseException {  
1335 - transmitRequest(transport, request, null, null);  
1336 - }  
1337 -  
1338 - @Override  
1339 - public void transmitRequest(String transport, Request request, SipSubscribe.Event errorEvent) throws SipException, ParseException {  
1340 - transmitRequest(transport, request, errorEvent, null);  
1341 - }  
1342 -  
1343 - @Override  
1344 - public void transmitRequest(String transport, Request request, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws SipException, ParseException {  
1345 -  
1346 - if (request.getHeader(UserAgentHeader.NAME) == null) {  
1347 - try {  
1348 - request.addHeader(SipUtils.createUserAgentHeader(sipFactory, gitUtil));  
1349 - } catch (ParseException e) {  
1350 - logger.error("添加UserAgentHeader失败", e);  
1351 - }  
1352 - }  
1353 -  
1354 - CallIdHeader callIdHeader = (CallIdHeader) request.getHeader(CallIdHeader.NAME);  
1355 - // 添加错误订阅  
1356 - if (errorEvent != null) {  
1357 - sipSubscribe.addErrorSubscribe(callIdHeader.getCallId(), (eventResult -> {  
1358 - errorEvent.response(eventResult);  
1359 - sipSubscribe.removeErrorSubscribe(eventResult.callId);  
1360 - sipSubscribe.removeOkSubscribe(eventResult.callId);  
1361 - }));  
1362 - }  
1363 - // 添加订阅  
1364 - if (okEvent != null) {  
1365 - sipSubscribe.addOkSubscribe(callIdHeader.getCallId(), eventResult -> {  
1366 - okEvent.response(eventResult);  
1367 - sipSubscribe.removeOkSubscribe(eventResult.callId);  
1368 - sipSubscribe.removeErrorSubscribe(eventResult.callId);  
1369 - });  
1370 - }  
1371 - if ("TCP".equals(transport)) {  
1372 - tcpSipProvider.sendRequest(request);  
1373 - } else if ("UDP".equals(transport)) {  
1374 - udpSipProvider.sendRequest(request);  
1375 - }  
1376 -  
1377 - } 1292 +
1378 1293
1379 1294
1380 /** 1295 /**
@@ -1449,7 +1364,7 @@ public class SIPCommander implements ISIPCommander { @@ -1449,7 +1364,7 @@ public class SIPCommander implements ISIPCommander {
1449 return; 1364 return;
1450 } 1365 }
1451 1366
1452 - transmitRequest(device.getTransport(), request, errorEvent, okEvent); 1367 + sipSender.transmitRequest( request, errorEvent, okEvent);
1453 } 1368 }
1454 1369
1455 @Override 1370 @Override
@@ -1478,10 +1393,9 @@ public class SIPCommander implements ISIPCommander { @@ -1478,10 +1393,9 @@ public class SIPCommander implements ISIPCommander {
1478 deviceStatusXml.append("</info>\r\n"); 1393 deviceStatusXml.append("</info>\r\n");
1479 deviceStatusXml.append("</Notify>\r\n"); 1394 deviceStatusXml.append("</Notify>\r\n");
1480 1395
1481 - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()  
1482 - : udpSipProvider.getNewCallId();  
1483 - Request request = headerProvider.createMessageRequest(device, deviceStatusXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);  
1484 - transmitRequest(device.getTransport(), request); 1396 +
  1397 + Request request = headerProvider.createMessageRequest(device, deviceStatusXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
  1398 + sipSender.transmitRequest(request);
1485 1399
1486 1400
1487 } 1401 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java
1 package com.genersoft.iot.vmp.gb28181.transmit.event.request; 1 package com.genersoft.iot.vmp.gb28181.transmit.event.request;
2 2
3 import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; 3 import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
  4 +import com.genersoft.iot.vmp.gb28181.transmit.SIPSender;
4 import com.genersoft.iot.vmp.gb28181.utils.SipUtils; 5 import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
5 import gov.nist.javax.sip.SipProviderImpl; 6 import gov.nist.javax.sip.SipProviderImpl;
6 -import gov.nist.javax.sip.SipStackImpl;  
7 import gov.nist.javax.sip.message.SIPRequest; 7 import gov.nist.javax.sip.message.SIPRequest;
8 import gov.nist.javax.sip.message.SIPResponse; 8 import gov.nist.javax.sip.message.SIPResponse;
9 -import gov.nist.javax.sip.stack.SIPServerTransaction;  
10 -import gov.nist.javax.sip.stack.SIPServerTransactionImpl;  
11 import org.apache.commons.lang3.ArrayUtils; 9 import org.apache.commons.lang3.ArrayUtils;
12 import org.dom4j.Document; 10 import org.dom4j.Document;
13 import org.dom4j.DocumentException; 11 import org.dom4j.DocumentException;
@@ -51,48 +49,9 @@ public abstract class SIPRequestProcessorParent { @@ -51,48 +49,9 @@ public abstract class SIPRequestProcessorParent {
51 @Qualifier(value="udpSipProvider") 49 @Qualifier(value="udpSipProvider")
52 private SipProviderImpl udpSipProvider; 50 private SipProviderImpl udpSipProvider;
53 51
54 - /**  
55 - * 根据 RequestEvent 获取 ServerTransaction  
56 - * @param evt  
57 - * @return  
58 - */  
59 - public ServerTransaction getServerTransaction(RequestEvent evt) {  
60 - Request request = evt.getRequest();  
61 - SIPServerTransactionImpl serverTransaction = (SIPServerTransactionImpl)evt.getServerTransaction();  
62 - // 判断TCP还是UDP  
63 - boolean isTcp = false;  
64 - ViaHeader reqViaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);  
65 - String transport = reqViaHeader.getTransport();  
66 - if (transport.equalsIgnoreCase("TCP")) {  
67 - isTcp = true;  
68 - }  
69 - if (serverTransaction != null && serverTransaction.getOriginalRequest() == null) {  
70 - serverTransaction.setOriginalRequest((SIPRequest) evt.getRequest());  
71 - }  
72 - if (serverTransaction == null) {  
73 - try {  
74 - if (isTcp) {  
75 - SipStackImpl stack = (SipStackImpl)tcpSipProvider.getSipStack();  
76 - serverTransaction = (SIPServerTransactionImpl) stack.findTransaction((SIPRequest)request, true);  
77 - if (serverTransaction == null) {  
78 - serverTransaction = (SIPServerTransactionImpl)tcpSipProvider.getNewServerTransaction(request);  
79 - }  
80 - } else {  
81 - SipStackImpl stack = (SipStackImpl)udpSipProvider.getSipStack();  
82 - serverTransaction = (SIPServerTransactionImpl) stack.findTransaction((SIPRequest)request, true);  
83 - if (serverTransaction == null) {  
84 - serverTransaction = (SIPServerTransactionImpl)udpSipProvider.getNewServerTransaction(request);  
85 - }  
86 - }  
87 - } catch (TransactionAlreadyExistsException e) {  
88 - logger.error(e.getMessage());  
89 - } catch (TransactionUnavailableException e) {  
90 - logger.error(e.getMessage());  
91 - }  
92 - }  
93 - return serverTransaction;  
94 - }  
95 - 52 + @Autowired
  53 + private SIPSender sipSender;
  54 +
96 public AddressFactory getAddressFactory() { 55 public AddressFactory getAddressFactory() {
97 try { 56 try {
98 return SipFactory.getInstance().createAddressFactory(); 57 return SipFactory.getInstance().createAddressFactory();
@@ -134,25 +93,73 @@ public abstract class SIPRequestProcessorParent { @@ -134,25 +93,73 @@ public abstract class SIPRequestProcessorParent {
134 * 400 93 * 400
135 * 404 94 * 404
136 */ 95 */
137 - public SIPResponse responseAck(ServerTransaction serverTransaction, int statusCode) throws SipException, InvalidArgumentException, ParseException {  
138 - return responseAck(serverTransaction, statusCode, null); 96 + public SIPResponse responseAck(SIPRequest sipRequest, int statusCode) throws SipException, InvalidArgumentException, ParseException {
  97 + return responseAck(sipRequest, statusCode, null);
139 } 98 }
140 99
141 - public SIPResponse responseAck(ServerTransaction serverTransaction, int statusCode, String msg) throws SipException, InvalidArgumentException, ParseException {  
142 - return responseAck(serverTransaction, statusCode, msg, null); 100 + public SIPResponse responseAck(SIPRequest sipRequest, int statusCode, String msg) throws SipException, InvalidArgumentException, ParseException {
  101 + return responseAck(sipRequest, statusCode, msg, null);
143 } 102 }
144 103
145 - public SIPResponse responseAck(ServerTransaction serverTransaction, int statusCode, String msg, ResponseAckExtraParam responseAckExtraParam) throws SipException, InvalidArgumentException, ParseException {  
146 - ToHeader toHeader = (ToHeader) serverTransaction.getRequest().getHeader(ToHeader.NAME);  
147 - if (toHeader.getTag() == null) {  
148 - toHeader.setTag(SipUtils.getNewTag()); 104 +// public SIPResponse responseAck(ServerTransaction serverTransaction, int statusCode, String msg, ResponseAckExtraParam responseAckExtraParam) throws SipException, InvalidArgumentException, ParseException {
  105 +// if (serverTransaction == null) {
  106 +// logger.warn("[回复消息] ServerTransaction 为null");
  107 +// return null;
  108 +// }
  109 +// ToHeader toHeader = (ToHeader) serverTransaction.getRequest().getHeader(ToHeader.NAME);
  110 +// if (toHeader.getTag() == null) {
  111 +// toHeader.setTag(SipUtils.getNewTag());
  112 +// }
  113 +// SIPResponse response = (SIPResponse)getMessageFactory().createResponse(statusCode, serverTransaction.getRequest());
  114 +// if (msg != null) {
  115 +// response.setReasonPhrase(msg);
  116 +// }
  117 +// if (responseAckExtraParam != null) {
  118 +// if (responseAckExtraParam.sipURI != null && serverTransaction.getRequest().getMethod().equals(Request.INVITE)) {
  119 +// logger.debug("responseSdpAck SipURI: {}:{}", responseAckExtraParam.sipURI.getHost(), responseAckExtraParam.sipURI.getPort());
  120 +// Address concatAddress = SipFactory.getInstance().createAddressFactory().createAddress(
  121 +// SipFactory.getInstance().createAddressFactory().createSipURI(responseAckExtraParam.sipURI.getUser(), responseAckExtraParam.sipURI.getHost()+":"+responseAckExtraParam.sipURI.getPort()
  122 +// ));
  123 +// response.addHeader(SipFactory.getInstance().createHeaderFactory().createContactHeader(concatAddress));
  124 +// }
  125 +// if (responseAckExtraParam.contentTypeHeader != null) {
  126 +// response.setContent(responseAckExtraParam.content, responseAckExtraParam.contentTypeHeader);
  127 +// }
  128 +//
  129 +// if (serverTransaction.getRequest().getMethod().equals(Request.SUBSCRIBE)) {
  130 +// if (responseAckExtraParam.expires == -1) {
  131 +// logger.error("[参数不全] 2xx的SUBSCRIBE回复,必须设置Expires header");
  132 +// }else {
  133 +// ExpiresHeader expiresHeader = SipFactory.getInstance().createHeaderFactory().createExpiresHeader(responseAckExtraParam.expires);
  134 +// response.addHeader(expiresHeader);
  135 +// }
  136 +// }
  137 +// }else {
  138 +// if (serverTransaction.getRequest().getMethod().equals(Request.SUBSCRIBE)) {
  139 +// logger.error("[参数不全] 2xx的SUBSCRIBE回复,必须设置Expires header");
  140 +// }
  141 +// }
  142 +// serverTransaction.sendResponse(response);
  143 +// if (statusCode >= 200 && !"NOTIFY".equalsIgnoreCase(serverTransaction.getRequest().getMethod())) {
  144 +// if (serverTransaction.getDialog() != null) {
  145 +// serverTransaction.getDialog().delete();
  146 +// }
  147 +// }
  148 +// return response;
  149 +// }
  150 +
  151 + public SIPResponse responseAck(SIPRequest sipRequest, int statusCode, String msg, ResponseAckExtraParam responseAckExtraParam) throws SipException, InvalidArgumentException, ParseException {
  152 + if (sipRequest.getToHeader().getTag() == null) {
  153 + sipRequest.getToHeader().setTag(SipUtils.getNewTag());
149 } 154 }
150 - SIPResponse response = (SIPResponse)getMessageFactory().createResponse(statusCode, serverTransaction.getRequest()); 155 + SIPResponse response = (SIPResponse)getMessageFactory().createResponse(statusCode, sipRequest);
  156 + response.setStatusCode(statusCode);
151 if (msg != null) { 157 if (msg != null) {
152 response.setReasonPhrase(msg); 158 response.setReasonPhrase(msg);
153 } 159 }
  160 +
154 if (responseAckExtraParam != null) { 161 if (responseAckExtraParam != null) {
155 - if (responseAckExtraParam.sipURI != null && serverTransaction.getRequest().getMethod().equals(Request.INVITE)) { 162 + if (responseAckExtraParam.sipURI != null && sipRequest.getMethod().equals(Request.INVITE)) {
156 logger.debug("responseSdpAck SipURI: {}:{}", responseAckExtraParam.sipURI.getHost(), responseAckExtraParam.sipURI.getPort()); 163 logger.debug("responseSdpAck SipURI: {}:{}", responseAckExtraParam.sipURI.getHost(), responseAckExtraParam.sipURI.getPort());
157 Address concatAddress = SipFactory.getInstance().createAddressFactory().createAddress( 164 Address concatAddress = SipFactory.getInstance().createAddressFactory().createAddress(
158 SipFactory.getInstance().createAddressFactory().createSipURI(responseAckExtraParam.sipURI.getUser(), responseAckExtraParam.sipURI.getHost()+":"+responseAckExtraParam.sipURI.getPort() 165 SipFactory.getInstance().createAddressFactory().createSipURI(responseAckExtraParam.sipURI.getUser(), responseAckExtraParam.sipURI.getHost()+":"+responseAckExtraParam.sipURI.getPort()
@@ -163,7 +170,7 @@ public abstract class SIPRequestProcessorParent { @@ -163,7 +170,7 @@ public abstract class SIPRequestProcessorParent {
163 response.setContent(responseAckExtraParam.content, responseAckExtraParam.contentTypeHeader); 170 response.setContent(responseAckExtraParam.content, responseAckExtraParam.contentTypeHeader);
164 } 171 }
165 172
166 - if (serverTransaction.getRequest().getMethod().equals(Request.SUBSCRIBE)) { 173 + if (sipRequest.getMethod().equals(Request.SUBSCRIBE)) {
167 if (responseAckExtraParam.expires == -1) { 174 if (responseAckExtraParam.expires == -1) {
168 logger.error("[参数不全] 2xx的SUBSCRIBE回复,必须设置Expires header"); 175 logger.error("[参数不全] 2xx的SUBSCRIBE回复,必须设置Expires header");
169 }else { 176 }else {
@@ -172,28 +179,26 @@ public abstract class SIPRequestProcessorParent { @@ -172,28 +179,26 @@ public abstract class SIPRequestProcessorParent {
172 } 179 }
173 } 180 }
174 }else { 181 }else {
175 - if (serverTransaction.getRequest().getMethod().equals(Request.SUBSCRIBE)) { 182 + if (sipRequest.getMethod().equals(Request.SUBSCRIBE)) {
176 logger.error("[参数不全] 2xx的SUBSCRIBE回复,必须设置Expires header"); 183 logger.error("[参数不全] 2xx的SUBSCRIBE回复,必须设置Expires header");
177 } 184 }
178 } 185 }
179 - serverTransaction.sendResponse(response);  
180 - if (statusCode >= 200 && !"NOTIFY".equalsIgnoreCase(serverTransaction.getRequest().getMethod())) {  
181 - if (serverTransaction.getDialog() != null) {  
182 - serverTransaction.getDialog().delete();  
183 - }  
184 - } 186 +
  187 + // 发送response
  188 + sipSender.transmitRequest(response);
  189 +
185 return response; 190 return response;
186 } 191 }
187 192
188 /** 193 /**
189 * 回复带sdp的200 194 * 回复带sdp的200
190 */ 195 */
191 - public SIPResponse responseSdpAck(ServerTransaction serverTransaction, String sdp, ParentPlatform platform) throws SipException, InvalidArgumentException, ParseException { 196 + public SIPResponse responseSdpAck(SIPRequest request, String sdp, ParentPlatform platform) throws SipException, InvalidArgumentException, ParseException {
192 197
193 ContentTypeHeader contentTypeHeader = SipFactory.getInstance().createHeaderFactory().createContentTypeHeader("APPLICATION", "SDP"); 198 ContentTypeHeader contentTypeHeader = SipFactory.getInstance().createHeaderFactory().createContentTypeHeader("APPLICATION", "SDP");
194 199
195 // 兼容国标中的使用编码@域名作为RequestURI的情况 200 // 兼容国标中的使用编码@域名作为RequestURI的情况
196 - SipURI sipURI = (SipURI)serverTransaction.getRequest().getRequestURI(); 201 + SipURI sipURI = (SipURI)request.getRequestURI();
197 if (sipURI.getPort() == -1) { 202 if (sipURI.getPort() == -1) {
198 sipURI = SipFactory.getInstance().createAddressFactory().createSipURI(platform.getServerGBId(), platform.getServerIP()+":"+platform.getServerPort()); 203 sipURI = SipFactory.getInstance().createAddressFactory().createSipURI(platform.getServerGBId(), platform.getServerIP()+":"+platform.getServerPort());
199 } 204 }
@@ -202,16 +207,16 @@ public abstract class SIPRequestProcessorParent { @@ -202,16 +207,16 @@ public abstract class SIPRequestProcessorParent {
202 responseAckExtraParam.content = sdp; 207 responseAckExtraParam.content = sdp;
203 responseAckExtraParam.sipURI = sipURI; 208 responseAckExtraParam.sipURI = sipURI;
204 209
205 - return responseAck(serverTransaction, Response.OK, null, responseAckExtraParam); 210 + return responseAck(request, Response.OK, null, responseAckExtraParam);
206 } 211 }
207 212
208 /** 213 /**
209 * 回复带xml的200 214 * 回复带xml的200
210 */ 215 */
211 - public SIPResponse responseXmlAck(ServerTransaction serverTransaction, String xml, ParentPlatform platform, Integer expires) throws SipException, InvalidArgumentException, ParseException { 216 + public SIPResponse responseXmlAck(SIPRequest request, String xml, ParentPlatform platform, Integer expires) throws SipException, InvalidArgumentException, ParseException {
212 ContentTypeHeader contentTypeHeader = SipFactory.getInstance().createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml"); 217 ContentTypeHeader contentTypeHeader = SipFactory.getInstance().createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
213 218
214 - SipURI sipURI = (SipURI)serverTransaction.getRequest().getRequestURI(); 219 + SipURI sipURI = (SipURI)request.getRequestURI();
215 if (sipURI.getPort() == -1) { 220 if (sipURI.getPort() == -1) {
216 sipURI = SipFactory.getInstance().createAddressFactory().createSipURI(platform.getServerGBId(), platform.getServerIP()+":"+platform.getServerPort()); 221 sipURI = SipFactory.getInstance().createAddressFactory().createSipURI(platform.getServerGBId(), platform.getServerIP()+":"+platform.getServerPort());
217 } 222 }
@@ -220,7 +225,7 @@ public abstract class SIPRequestProcessorParent { @@ -220,7 +225,7 @@ public abstract class SIPRequestProcessorParent {
220 responseAckExtraParam.content = xml; 225 responseAckExtraParam.content = xml;
221 responseAckExtraParam.sipURI = sipURI; 226 responseAckExtraParam.sipURI = sipURI;
222 responseAckExtraParam.expires = expires; 227 responseAckExtraParam.expires = expires;
223 - return responseAck(serverTransaction, Response.OK, null, responseAckExtraParam); 228 + return responseAck(request, Response.OK, null, responseAckExtraParam);
224 } 229 }
225 230
226 public Element getRootElement(RequestEvent evt) throws DocumentException { 231 public Element getRootElement(RequestEvent evt) throws DocumentException {
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java
@@ -18,6 +18,7 @@ import com.genersoft.iot.vmp.service.IMediaServerService; @@ -18,6 +18,7 @@ import com.genersoft.iot.vmp.service.IMediaServerService;
18 import com.genersoft.iot.vmp.service.bean.MessageForPushChannel; 18 import com.genersoft.iot.vmp.service.bean.MessageForPushChannel;
19 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 19 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
20 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 20 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
  21 +import gov.nist.javax.sip.message.SIPRequest;
21 import org.slf4j.Logger; 22 import org.slf4j.Logger;
22 import org.slf4j.LoggerFactory; 23 import org.slf4j.LoggerFactory;
23 import org.springframework.beans.factory.InitializingBean; 24 import org.springframework.beans.factory.InitializingBean;
@@ -82,7 +83,7 @@ public class ByeRequestProcessor extends SIPRequestProcessorParent implements In @@ -82,7 +83,7 @@ public class ByeRequestProcessor extends SIPRequestProcessorParent implements In
82 public void process(RequestEvent evt) { 83 public void process(RequestEvent evt) {
83 84
84 try { 85 try {
85 - responseAck(getServerTransaction(evt), Response.OK); 86 + responseAck((SIPRequest) evt.getRequest(), Response.OK);
86 } catch (SipException | InvalidArgumentException | ParseException e) { 87 } catch (SipException | InvalidArgumentException | ParseException e) {
87 logger.error("[回复BYE信息失败],{}", e.getMessage()); 88 logger.error("[回复BYE信息失败],{}", e.getMessage());
88 } 89 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
@@ -7,6 +7,7 @@ import com.genersoft.iot.vmp.gb28181.bean.*; @@ -7,6 +7,7 @@ import com.genersoft.iot.vmp.gb28181.bean.*;
7 import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; 7 import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
8 import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; 8 import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
9 import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver; 9 import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
  10 +import com.genersoft.iot.vmp.gb28181.transmit.SIPSender;
10 import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander; 11 import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
11 import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform; 12 import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
12 import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor; 13 import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
@@ -81,7 +82,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -81,7 +82,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
81 private IPlayService playService; 82 private IPlayService playService;
82 83
83 @Autowired 84 @Autowired
84 - private ISIPCommander commander; 85 + private SIPSender sipSender;
85 86
86 @Autowired 87 @Autowired
87 private ZLMRTPServerFactory zlmrtpServerFactory; 88 private ZLMRTPServerFactory zlmrtpServerFactory;
@@ -124,16 +125,15 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -124,16 +125,15 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
124 public void process(RequestEvent evt) { 125 public void process(RequestEvent evt) {
125 // Invite Request消息实现,此消息一般为级联消息,上级给下级发送请求视频指令 126 // Invite Request消息实现,此消息一般为级联消息,上级给下级发送请求视频指令
126 try { 127 try {
127 - Request request = evt.getRequest(); 128 + SIPRequest request = (SIPRequest)evt.getRequest();
128 String channelId = SipUtils.getChannelIdFromRequest(request); 129 String channelId = SipUtils.getChannelIdFromRequest(request);
129 String requesterId = SipUtils.getUserIdFromFromHeader(request); 130 String requesterId = SipUtils.getUserIdFromFromHeader(request);
130 CallIdHeader callIdHeader = (CallIdHeader) request.getHeader(CallIdHeader.NAME); 131 CallIdHeader callIdHeader = (CallIdHeader) request.getHeader(CallIdHeader.NAME);
131 - ServerTransaction serverTransaction = getServerTransaction(evt);  
132 if (requesterId == null || channelId == null) { 132 if (requesterId == null || channelId == null) {
133 logger.info("无法从FromHeader的Address中获取到平台id,返回400"); 133 logger.info("无法从FromHeader的Address中获取到平台id,返回400");
134 // 参数不全, 发400,请求错误 134 // 参数不全, 发400,请求错误
135 try { 135 try {
136 - responseAck(serverTransaction, Response.BAD_REQUEST); 136 + responseAck(request, Response.BAD_REQUEST);
137 } catch (SipException | InvalidArgumentException | ParseException e) { 137 } catch (SipException | InvalidArgumentException | ParseException e) {
138 logger.error("[命令发送失败] invite BAD_REQUEST: {}", e.getMessage()); 138 logger.error("[命令发送失败] invite BAD_REQUEST: {}", e.getMessage());
139 } 139 }
@@ -144,7 +144,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -144,7 +144,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
144 // 查询请求是否来自上级平台\设备 144 // 查询请求是否来自上级平台\设备
145 ParentPlatform platform = storager.queryParentPlatByServerGBId(requesterId); 145 ParentPlatform platform = storager.queryParentPlatByServerGBId(requesterId);
146 if (platform == null) { 146 if (platform == null) {
147 - inviteFromDeviceHandle(serverTransaction, requesterId); 147 + inviteFromDeviceHandle(request, requesterId);
148 148
149 } else { 149 } else {
150 // 查询平台下是否有该通道 150 // 查询平台下是否有该通道
@@ -159,12 +159,12 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -159,12 +159,12 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
159 if (channel != null && gbStream == null) { 159 if (channel != null && gbStream == null) {
160 // if (channel.getStatus() == 0) { 160 // if (channel.getStatus() == 0) {
161 // logger.info("通道离线,返回400"); 161 // logger.info("通道离线,返回400");
162 -// responseAck(serverTransaction, Response.BAD_REQUEST, "channel [" + channel.getChannelId() + "] offline"); 162 +// responseAck(request, Response.BAD_REQUEST, "channel [" + channel.getChannelId() + "] offline");
163 // return; 163 // return;
164 // } 164 // }
165 // 通道存在,发100,TRYING 165 // 通道存在,发100,TRYING
166 try { 166 try {
167 - responseAck(serverTransaction, Response.TRYING); 167 + responseAck(request, Response.TRYING);
168 } catch (SipException | InvalidArgumentException | ParseException e) { 168 } catch (SipException | InvalidArgumentException | ParseException e) {
169 logger.error("[命令发送失败] invite TRYING: {}", e.getMessage()); 169 logger.error("[命令发送失败] invite TRYING: {}", e.getMessage());
170 } 170 }
@@ -176,7 +176,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -176,7 +176,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
176 if ("proxy".equals(gbStream.getStreamType())) { 176 if ("proxy".equals(gbStream.getStreamType())) {
177 logger.info("[ app={}, stream={} ]找不到zlm {},返回410", gbStream.getApp(), gbStream.getStream(), mediaServerId); 177 logger.info("[ app={}, stream={} ]找不到zlm {},返回410", gbStream.getApp(), gbStream.getStream(), mediaServerId);
178 try { 178 try {
179 - responseAck(serverTransaction, Response.GONE); 179 + responseAck(request, Response.GONE);
180 } catch (SipException | InvalidArgumentException | ParseException e) { 180 } catch (SipException | InvalidArgumentException | ParseException e) {
181 logger.error("[命令发送失败] invite GONE: {}", e.getMessage()); 181 logger.error("[命令发送失败] invite GONE: {}", e.getMessage());
182 } 182 }
@@ -186,7 +186,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -186,7 +186,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
186 if (streamPushItem == null || streamPushItem.getServerId().equals(userSetting.getServerId())) { 186 if (streamPushItem == null || streamPushItem.getServerId().equals(userSetting.getServerId())) {
187 logger.info("[ app={}, stream={} ]找不到zlm {},返回410", gbStream.getApp(), gbStream.getStream(), mediaServerId); 187 logger.info("[ app={}, stream={} ]找不到zlm {},返回410", gbStream.getApp(), gbStream.getStream(), mediaServerId);
188 try { 188 try {
189 - responseAck(serverTransaction, Response.GONE); 189 + responseAck(request, Response.GONE);
190 } catch (SipException | InvalidArgumentException | ParseException e) { 190 } catch (SipException | InvalidArgumentException | ParseException e) {
191 logger.error("[命令发送失败] invite GONE: {}", e.getMessage()); 191 logger.error("[命令发送失败] invite GONE: {}", e.getMessage());
192 } 192 }
@@ -199,7 +199,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -199,7 +199,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
199 if (streamPushItem == null) { 199 if (streamPushItem == null) {
200 logger.info("[ app={}, stream={} ]找不到zlm {},返回410", gbStream.getApp(), gbStream.getStream(), mediaServerId); 200 logger.info("[ app={}, stream={} ]找不到zlm {},返回410", gbStream.getApp(), gbStream.getStream(), mediaServerId);
201 try { 201 try {
202 - responseAck(serverTransaction, Response.GONE); 202 + responseAck(request, Response.GONE);
203 } catch (SipException | InvalidArgumentException | ParseException e) { 203 } catch (SipException | InvalidArgumentException | ParseException e) {
204 logger.error("[命令发送失败] invite GONE: {}", e.getMessage()); 204 logger.error("[命令发送失败] invite GONE: {}", e.getMessage());
205 } 205 }
@@ -210,7 +210,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -210,7 +210,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
210 if (proxyByAppAndStream == null) { 210 if (proxyByAppAndStream == null) {
211 logger.info("[ app={}, stream={} ]找不到zlm {},返回410", gbStream.getApp(), gbStream.getStream(), mediaServerId); 211 logger.info("[ app={}, stream={} ]找不到zlm {},返回410", gbStream.getApp(), gbStream.getStream(), mediaServerId);
212 try { 212 try {
213 - responseAck(serverTransaction, Response.GONE); 213 + responseAck(request, Response.GONE);
214 } catch (SipException | InvalidArgumentException | ParseException e) { 214 } catch (SipException | InvalidArgumentException | ParseException e) {
215 logger.error("[命令发送失败] invite GONE: {}", e.getMessage()); 215 logger.error("[命令发送失败] invite GONE: {}", e.getMessage());
216 } 216 }
@@ -219,14 +219,14 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -219,14 +219,14 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
219 } 219 }
220 } 220 }
221 try { 221 try {
222 - responseAck(serverTransaction, Response.CALL_IS_BEING_FORWARDED); 222 + responseAck(request, Response.CALL_IS_BEING_FORWARDED);
223 } catch (SipException | InvalidArgumentException | ParseException e) { 223 } catch (SipException | InvalidArgumentException | ParseException e) {
224 logger.error("[命令发送失败] invite CALL_IS_BEING_FORWARDED: {}", e.getMessage()); 224 logger.error("[命令发送失败] invite CALL_IS_BEING_FORWARDED: {}", e.getMessage());
225 } 225 }
226 } else if (catalog != null) { 226 } else if (catalog != null) {
227 try { 227 try {
228 // 目录不支持点播 228 // 目录不支持点播
229 - responseAck(serverTransaction, Response.BAD_REQUEST, "catalog channel can not play"); 229 + responseAck(request, Response.BAD_REQUEST, "catalog channel can not play");
230 } catch (SipException | InvalidArgumentException | ParseException e) { 230 } catch (SipException | InvalidArgumentException | ParseException e) {
231 logger.error("[命令发送失败] invite 目录不支持点播: {}", e.getMessage()); 231 logger.error("[命令发送失败] invite 目录不支持点播: {}", e.getMessage());
232 } 232 }
@@ -235,7 +235,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -235,7 +235,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
235 logger.info("通道不存在,返回404"); 235 logger.info("通道不存在,返回404");
236 try { 236 try {
237 // 通道不存在,发404,资源不存在 237 // 通道不存在,发404,资源不存在
238 - responseAck(serverTransaction, Response.NOT_FOUND); 238 + responseAck(request, Response.NOT_FOUND);
239 } catch (SipException | InvalidArgumentException | ParseException e) { 239 } catch (SipException | InvalidArgumentException | ParseException e) {
240 logger.error("[命令发送失败] invite 通道不存在: {}", e.getMessage()); 240 logger.error("[命令发送失败] invite 通道不存在: {}", e.getMessage());
241 } 241 }
@@ -311,7 +311,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -311,7 +311,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
311 // 回复不支持的格式 311 // 回复不支持的格式
312 try { 312 try {
313 // 不支持的格式,发415 313 // 不支持的格式,发415
314 - responseAck(serverTransaction, Response.UNSUPPORTED_MEDIA_TYPE); 314 + responseAck(request, Response.UNSUPPORTED_MEDIA_TYPE);
315 } catch (SipException | InvalidArgumentException | ParseException e) { 315 } catch (SipException | InvalidArgumentException | ParseException e) {
316 logger.error("[命令发送失败] invite 不支持的格式: {}", e.getMessage()); 316 logger.error("[命令发送失败] invite 不支持的格式: {}", e.getMessage());
317 } 317 }
@@ -328,7 +328,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -328,7 +328,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
328 if (device == null) { 328 if (device == null) {
329 logger.warn("点播平台{}的通道{}时未找到设备信息", requesterId, channel); 329 logger.warn("点播平台{}的通道{}时未找到设备信息", requesterId, channel);
330 try { 330 try {
331 - responseAck(serverTransaction, Response.SERVER_INTERNAL_ERROR); 331 + responseAck(request, Response.SERVER_INTERNAL_ERROR);
332 } catch (SipException | InvalidArgumentException | ParseException e) { 332 } catch (SipException | InvalidArgumentException | ParseException e) {
333 logger.error("[命令发送失败] invite 未找到设备信息: {}", e.getMessage()); 333 logger.error("[命令发送失败] invite 未找到设备信息: {}", e.getMessage());
334 } 334 }
@@ -338,7 +338,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -338,7 +338,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
338 if (mediaServerItem == null) { 338 if (mediaServerItem == null) {
339 logger.warn("未找到可用的zlm"); 339 logger.warn("未找到可用的zlm");
340 try { 340 try {
341 - responseAck(serverTransaction, Response.BUSY_HERE); 341 + responseAck(request, Response.BUSY_HERE);
342 } catch (SipException | InvalidArgumentException | ParseException e) { 342 } catch (SipException | InvalidArgumentException | ParseException e) {
343 logger.error("[命令发送失败] invite BUSY_HERE: {}", e.getMessage()); 343 logger.error("[命令发送失败] invite BUSY_HERE: {}", e.getMessage());
344 } 344 }
@@ -354,7 +354,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -354,7 +354,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
354 if (sendRtpItem == null) { 354 if (sendRtpItem == null) {
355 logger.warn("服务器端口资源不足"); 355 logger.warn("服务器端口资源不足");
356 try { 356 try {
357 - responseAck(serverTransaction, Response.BUSY_HERE); 357 + responseAck(request, Response.BUSY_HERE);
358 } catch (SipException | InvalidArgumentException | ParseException e) { 358 } catch (SipException | InvalidArgumentException | ParseException e) {
359 logger.error("[命令发送失败] invite 服务器端口资源不足: {}", e.getMessage()); 359 logger.error("[命令发送失败] invite 服务器端口资源不足: {}", e.getMessage());
360 } 360 }
@@ -403,7 +403,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -403,7 +403,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
403 logger.error("[命令发送失败] 国标级联 发送BYE: {}", e.getMessage()); 403 logger.error("[命令发送失败] 国标级联 发送BYE: {}", e.getMessage());
404 } 404 }
405 }, 60 * 1000); 405 }, 60 * 1000);
406 - responseSdpAck(serverTransaction, content.toString(), platform); 406 + responseSdpAck(request, content.toString(), platform);
407 407
408 } catch (SipException e) { 408 } catch (SipException e) {
409 e.printStackTrace(); 409 e.printStackTrace();
@@ -415,15 +415,10 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -415,15 +415,10 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
415 }; 415 };
416 SipSubscribe.Event errorEvent = ((event) -> { 416 SipSubscribe.Event errorEvent = ((event) -> {
417 // 未知错误。直接转发设备点播的错误 417 // 未知错误。直接转发设备点播的错误
418 - Response response = null;  
419 try { 418 try {
420 - response = getMessageFactory().createResponse(event.statusCode, evt.getRequest());  
421 - serverTransaction.sendResponse(response);  
422 - System.out.println("未知错误。直接转发设备点播的错误");  
423 - if (serverTransaction.getDialog() != null) {  
424 - serverTransaction.getDialog().delete();  
425 - }  
426 - } catch (ParseException | SipException | InvalidArgumentException e) { 419 + Response response = getMessageFactory().createResponse(event.statusCode, evt.getRequest());
  420 + sipSender.transmitRequest(response);
  421 + } catch (ParseException | SipException e) {
427 e.printStackTrace(); 422 e.printStackTrace();
428 } 423 }
429 }); 424 });
@@ -443,7 +438,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -443,7 +438,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
443 } 438 }
444 redisCatchStorage.deleteSendRTPServer(platform.getServerGBId(), channelId, callIdHeader.getCallId(), null); 439 redisCatchStorage.deleteSendRTPServer(platform.getServerGBId(), channelId, callIdHeader.getCallId(), null);
445 try { 440 try {
446 - responseAck(serverTransaction, Response.REQUEST_TIMEOUT); 441 + responseAck(request, Response.REQUEST_TIMEOUT);
447 } catch (SipException e) { 442 } catch (SipException e) {
448 e.printStackTrace(); 443 e.printStackTrace();
449 } catch (InvalidArgumentException e) { 444 } catch (InvalidArgumentException e) {
@@ -503,26 +498,26 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -503,26 +498,26 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
503 if("push".equals(gbStream.getStreamType())) { 498 if("push".equals(gbStream.getStreamType())) {
504 if (streamPushItem != null && streamPushItem.isPushIng()) { 499 if (streamPushItem != null && streamPushItem.isPushIng()) {
505 // 推流状态 500 // 推流状态
506 - pushStream(evt, serverTransaction, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive, 501 + pushStream(evt, request, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
507 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId); 502 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
508 } else { 503 } else {
509 // 未推流 拉起 504 // 未推流 拉起
510 - notifyStreamOnline(evt, serverTransaction,gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive, 505 + notifyStreamOnline(evt, request,gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
511 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId); 506 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
512 } 507 }
513 }else if ("proxy".equals(gbStream.getStreamType())){ 508 }else if ("proxy".equals(gbStream.getStreamType())){
514 if(null != proxyByAppAndStream &&proxyByAppAndStream.isStatus()){ 509 if(null != proxyByAppAndStream &&proxyByAppAndStream.isStatus()){
515 - pushProxyStream(evt, serverTransaction, gbStream, platform, callIdHeader, mediaServerItem, port, tcpActive, 510 + pushProxyStream(evt, request, gbStream, platform, callIdHeader, mediaServerItem, port, tcpActive,
516 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId); 511 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
517 }else{ 512 }else{
518 //开启代理拉流 513 //开启代理拉流
519 boolean start1 = streamProxyService.start(gbStream.getApp(), gbStream.getStream()); 514 boolean start1 = streamProxyService.start(gbStream.getApp(), gbStream.getStream());
520 if(start1) { 515 if(start1) {
521 - pushProxyStream(evt, serverTransaction, gbStream, platform, callIdHeader, mediaServerItem, port, tcpActive, 516 + pushProxyStream(evt, request, gbStream, platform, callIdHeader, mediaServerItem, port, tcpActive,
522 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId); 517 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
523 }else{ 518 }else{
524 //失败后通知 519 //失败后通知
525 - notifyStreamOnline(evt, serverTransaction,gbStream, null, platform, callIdHeader, mediaServerItem, port, tcpActive, 520 + notifyStreamOnline(evt, request,gbStream, null, platform, callIdHeader, mediaServerItem, port, tcpActive,
526 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId); 521 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
527 } 522 }
528 } 523 }
@@ -540,7 +535,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -540,7 +535,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
540 /** 535 /**
541 * 安排推流 536 * 安排推流
542 */ 537 */
543 - private void pushProxyStream(RequestEvent evt, ServerTransaction serverTransaction, GbStream gbStream, ParentPlatform platform, 538 + private void pushProxyStream(RequestEvent evt, SIPRequest request, GbStream gbStream, ParentPlatform platform,
544 CallIdHeader callIdHeader, MediaServerItem mediaServerItem, 539 CallIdHeader callIdHeader, MediaServerItem mediaServerItem,
545 int port, Boolean tcpActive, boolean mediaTransmissionTCP, 540 int port, Boolean tcpActive, boolean mediaTransmissionTCP,
546 String channelId, String addressStr, String ssrc, String requesterId) { 541 String channelId, String addressStr, String ssrc, String requesterId) {
@@ -554,7 +549,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -554,7 +549,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
554 if (sendRtpItem == null) { 549 if (sendRtpItem == null) {
555 logger.warn("服务器端口资源不足"); 550 logger.warn("服务器端口资源不足");
556 try { 551 try {
557 - responseAck(serverTransaction, Response.BUSY_HERE); 552 + responseAck(request, Response.BUSY_HERE);
558 } catch (SipException | InvalidArgumentException | ParseException e) { 553 } catch (SipException | InvalidArgumentException | ParseException e) {
559 logger.error("[命令发送失败] invite 服务器端口资源不足: {}", e.getMessage()); 554 logger.error("[命令发送失败] invite 服务器端口资源不足: {}", e.getMessage());
560 } 555 }
@@ -567,10 +562,9 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -567,10 +562,9 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
567 // 写入redis, 超时时回复 562 // 写入redis, 超时时回复
568 sendRtpItem.setStatus(1); 563 sendRtpItem.setStatus(1);
569 sendRtpItem.setCallId(callIdHeader.getCallId()); 564 sendRtpItem.setCallId(callIdHeader.getCallId());
570 - SIPRequest request = (SIPRequest) evt.getRequest();  
571 sendRtpItem.setFromTag(request.getFromTag()); 565 sendRtpItem.setFromTag(request.getFromTag());
572 566
573 - SIPResponse response = sendStreamAck(mediaServerItem, serverTransaction, sendRtpItem, platform, evt); 567 + SIPResponse response = sendStreamAck(mediaServerItem, request, sendRtpItem, platform, evt);
574 if (response != null) { 568 if (response != null) {
575 sendRtpItem.setToTag(response.getToTag()); 569 sendRtpItem.setToTag(response.getToTag());
576 } 570 }
@@ -579,7 +573,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -579,7 +573,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
579 } 573 }
580 574
581 } 575 }
582 - private void pushStream(RequestEvent evt, ServerTransaction serverTransaction, GbStream gbStream, StreamPushItem streamPushItem, ParentPlatform platform, 576 + private void pushStream(RequestEvent evt, SIPRequest request, GbStream gbStream, StreamPushItem streamPushItem, ParentPlatform platform,
583 CallIdHeader callIdHeader, MediaServerItem mediaServerItem, 577 CallIdHeader callIdHeader, MediaServerItem mediaServerItem,
584 int port, Boolean tcpActive, boolean mediaTransmissionTCP, 578 int port, Boolean tcpActive, boolean mediaTransmissionTCP,
585 String channelId, String addressStr, String ssrc, String requesterId) { 579 String channelId, String addressStr, String ssrc, String requesterId) {
@@ -595,7 +589,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -595,7 +589,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
595 if (sendRtpItem == null) { 589 if (sendRtpItem == null) {
596 logger.warn("服务器端口资源不足"); 590 logger.warn("服务器端口资源不足");
597 try { 591 try {
598 - responseAck(serverTransaction, Response.BUSY_HERE); 592 + responseAck(request, Response.BUSY_HERE);
599 } catch (SipException | InvalidArgumentException | ParseException e) { 593 } catch (SipException | InvalidArgumentException | ParseException e) {
600 logger.error("[命令发送失败] invite 服务器端口资源不足: {}", e.getMessage()); 594 logger.error("[命令发送失败] invite 服务器端口资源不足: {}", e.getMessage());
601 } 595 }
@@ -609,9 +603,8 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -609,9 +603,8 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
609 sendRtpItem.setStatus(1); 603 sendRtpItem.setStatus(1);
610 sendRtpItem.setCallId(callIdHeader.getCallId()); 604 sendRtpItem.setCallId(callIdHeader.getCallId());
611 605
612 - SIPRequest request = (SIPRequest) evt.getRequest();  
613 sendRtpItem.setFromTag(request.getFromTag()); 606 sendRtpItem.setFromTag(request.getFromTag());
614 - SIPResponse response = sendStreamAck(mediaServerItem, serverTransaction, sendRtpItem, platform, evt); 607 + SIPResponse response = sendStreamAck(mediaServerItem, request, sendRtpItem, platform, evt);
615 if (response != null) { 608 if (response != null) {
616 sendRtpItem.setToTag(response.getToTag()); 609 sendRtpItem.setToTag(response.getToTag());
617 } 610 }
@@ -620,20 +613,20 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -620,20 +613,20 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
620 613
621 } else { 614 } else {
622 // 不在线 拉起 615 // 不在线 拉起
623 - notifyStreamOnline(evt, serverTransaction,gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive, 616 + notifyStreamOnline(evt, request,gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
624 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId); 617 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
625 } 618 }
626 619
627 } else { 620 } else {
628 // 其他平台内容 621 // 其他平台内容
629 - otherWvpPushStream(evt, serverTransaction, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive, 622 + otherWvpPushStream(evt, request, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
630 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId); 623 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
631 } 624 }
632 } 625 }
633 /** 626 /**
634 * 通知流上线 627 * 通知流上线
635 */ 628 */
636 - private void notifyStreamOnline(RequestEvent evt, ServerTransaction serverTransaction, GbStream gbStream, StreamPushItem streamPushItem, ParentPlatform platform, 629 + private void notifyStreamOnline(RequestEvent evt, SIPRequest request, GbStream gbStream, StreamPushItem streamPushItem, ParentPlatform platform,
637 CallIdHeader callIdHeader, MediaServerItem mediaServerItem, 630 CallIdHeader callIdHeader, MediaServerItem mediaServerItem,
638 int port, Boolean tcpActive, boolean mediaTransmissionTCP, 631 int port, Boolean tcpActive, boolean mediaTransmissionTCP,
639 String channelId, String addressStr, String ssrc, String requesterId) { 632 String channelId, String addressStr, String ssrc, String requesterId) {
@@ -641,7 +634,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -641,7 +634,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
641 // TODO 控制启用以使设备上线 634 // TODO 控制启用以使设备上线
642 logger.info("[ app={}, stream={} ]通道未推流,启用流后开始推流", gbStream.getApp(), gbStream.getStream()); 635 logger.info("[ app={}, stream={} ]通道未推流,启用流后开始推流", gbStream.getApp(), gbStream.getStream());
643 try { 636 try {
644 - responseAck(serverTransaction, Response.BAD_REQUEST, "channel [" + gbStream.getGbId() + "] offline"); 637 + responseAck(request, Response.BAD_REQUEST, "channel [" + gbStream.getGbId() + "] offline");
645 } catch (SipException | InvalidArgumentException | ParseException e) { 638 } catch (SipException | InvalidArgumentException | ParseException e) {
646 logger.error("[命令发送失败] invite 通道未推流: {}", e.getMessage()); 639 logger.error("[命令发送失败] invite 通道未推流: {}", e.getMessage());
647 } 640 }
@@ -649,7 +642,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -649,7 +642,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
649 if (!platform.isStartOfflinePush()) { 642 if (!platform.isStartOfflinePush()) {
650 // 平台设置中关闭了拉起离线的推流则直接回复 643 // 平台设置中关闭了拉起离线的推流则直接回复
651 try { 644 try {
652 - responseAck(serverTransaction, Response.TEMPORARILY_UNAVAILABLE, "channel stream not pushing"); 645 + responseAck(request, Response.TEMPORARILY_UNAVAILABLE, "channel stream not pushing");
653 } catch (SipException | InvalidArgumentException | ParseException e) { 646 } catch (SipException | InvalidArgumentException | ParseException e) {
654 logger.error("[命令发送失败] invite 通道未推流: {}", e.getMessage()); 647 logger.error("[命令发送失败] invite 通道未推流: {}", e.getMessage());
655 } 648 }
@@ -667,7 +660,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -667,7 +660,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
667 logger.info("[ app={}, stream={} ] 等待设备开始推流超时", gbStream.getApp(), gbStream.getStream()); 660 logger.info("[ app={}, stream={} ] 等待设备开始推流超时", gbStream.getApp(), gbStream.getStream());
668 try { 661 try {
669 mediaListManager.removedChannelOnlineEventLister(gbStream.getApp(), gbStream.getStream()); 662 mediaListManager.removedChannelOnlineEventLister(gbStream.getApp(), gbStream.getStream());
670 - responseAck(serverTransaction, Response.REQUEST_TIMEOUT); // 超时 663 + responseAck(request, Response.REQUEST_TIMEOUT); // 超时
671 } catch (SipException e) { 664 } catch (SipException e) {
672 e.printStackTrace(); 665 e.printStackTrace();
673 } catch (InvalidArgumentException e) { 666 } catch (InvalidArgumentException e) {
@@ -690,7 +683,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -690,7 +683,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
690 if (sendRtpItem == null) { 683 if (sendRtpItem == null) {
691 logger.warn("上级点时创建sendRTPItem失败,可能是服务器端口资源不足"); 684 logger.warn("上级点时创建sendRTPItem失败,可能是服务器端口资源不足");
692 try { 685 try {
693 - responseAck(serverTransaction, Response.BUSY_HERE); 686 + responseAck(request, Response.BUSY_HERE);
694 } catch (SipException e) { 687 } catch (SipException e) {
695 e.printStackTrace(); 688 e.printStackTrace();
696 } catch (InvalidArgumentException e) { 689 } catch (InvalidArgumentException e) {
@@ -708,16 +701,15 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -708,16 +701,15 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
708 sendRtpItem.setStatus(1); 701 sendRtpItem.setStatus(1);
709 sendRtpItem.setCallId(callIdHeader.getCallId()); 702 sendRtpItem.setCallId(callIdHeader.getCallId());
710 703
711 - SIPRequest request = (SIPRequest) evt.getRequest();  
712 sendRtpItem.setFromTag(request.getFromTag()); 704 sendRtpItem.setFromTag(request.getFromTag());
713 - SIPResponse response = sendStreamAck(mediaServerItem, serverTransaction, sendRtpItem, platform, evt); 705 + SIPResponse response = sendStreamAck(mediaServerItem, request, sendRtpItem, platform, evt);
714 if (response != null) { 706 if (response != null) {
715 sendRtpItem.setToTag(response.getToTag()); 707 sendRtpItem.setToTag(response.getToTag());
716 } 708 }
717 redisCatchStorage.updateSendRTPSever(sendRtpItem); 709 redisCatchStorage.updateSendRTPSever(sendRtpItem);
718 } else { 710 } else {
719 // 其他平台内容 711 // 其他平台内容
720 - otherWvpPushStream(evt, serverTransaction, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive, 712 + otherWvpPushStream(evt, request, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
721 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId); 713 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
722 } 714 }
723 }); 715 });
@@ -728,7 +720,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -728,7 +720,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
728 dynamicTask.stop(callIdHeader.getCallId()); 720 dynamicTask.stop(callIdHeader.getCallId());
729 mediaListManager.removedChannelOnlineEventLister(gbStream.getApp(), gbStream.getStream()); 721 mediaListManager.removedChannelOnlineEventLister(gbStream.getApp(), gbStream.getStream());
730 try { 722 try {
731 - responseAck(serverTransaction, Response.TEMPORARILY_UNAVAILABLE, response.getMsg()); 723 + responseAck(request, Response.TEMPORARILY_UNAVAILABLE, response.getMsg());
732 } catch (SipException | InvalidArgumentException | ParseException e) { 724 } catch (SipException | InvalidArgumentException | ParseException e) {
733 logger.error("[命令发送失败] 国标级联 点播回复: {}", e.getMessage()); 725 logger.error("[命令发送失败] 国标级联 点播回复: {}", e.getMessage());
734 } 726 }
@@ -740,7 +732,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -740,7 +732,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
740 /** 732 /**
741 * 来自其他wvp的推流 733 * 来自其他wvp的推流
742 */ 734 */
743 - private void otherWvpPushStream(RequestEvent evt, ServerTransaction serverTransaction, GbStream gbStream, StreamPushItem streamPushItem, ParentPlatform platform, 735 + private void otherWvpPushStream(RequestEvent evt, SIPRequest request, GbStream gbStream, StreamPushItem streamPushItem, ParentPlatform platform,
744 CallIdHeader callIdHeader, MediaServerItem mediaServerItem, 736 CallIdHeader callIdHeader, MediaServerItem mediaServerItem,
745 int port, Boolean tcpActive, boolean mediaTransmissionTCP, 737 int port, Boolean tcpActive, boolean mediaTransmissionTCP,
746 String channelId, String addressStr, String ssrc, String requesterId) { 738 String channelId, String addressStr, String ssrc, String requesterId) {
@@ -753,7 +745,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -753,7 +745,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
753 if (sendRtpItem == null || responseSendItemMsg.getMediaServerItem() == null) { 745 if (sendRtpItem == null || responseSendItemMsg.getMediaServerItem() == null) {
754 logger.warn("服务器端口资源不足"); 746 logger.warn("服务器端口资源不足");
755 try { 747 try {
756 - responseAck(serverTransaction, Response.BUSY_HERE); 748 + responseAck(request, Response.BUSY_HERE);
757 } catch (SipException e) { 749 } catch (SipException e) {
758 e.printStackTrace(); 750 e.printStackTrace();
759 } catch (InvalidArgumentException e) { 751 } catch (InvalidArgumentException e) {
@@ -772,9 +764,8 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -772,9 +764,8 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
772 sendRtpItem.setStatus(1); 764 sendRtpItem.setStatus(1);
773 sendRtpItem.setCallId(callIdHeader.getCallId()); 765 sendRtpItem.setCallId(callIdHeader.getCallId());
774 766
775 - SIPRequest request = (SIPRequest) evt.getRequest();  
776 sendRtpItem.setFromTag(request.getFromTag()); 767 sendRtpItem.setFromTag(request.getFromTag());
777 - SIPResponse response = sendStreamAck(responseSendItemMsg.getMediaServerItem(), serverTransaction,sendRtpItem, platform, evt); 768 + SIPResponse response = sendStreamAck(responseSendItemMsg.getMediaServerItem(), request,sendRtpItem, platform, evt);
778 if (response != null) { 769 if (response != null) {
779 sendRtpItem.setToTag(response.getToTag()); 770 sendRtpItem.setToTag(response.getToTag());
780 } 771 }
@@ -788,24 +779,24 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -788,24 +779,24 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
788 StreamPushItem currentStreamPushItem = streamPushService.getPush(streamPushItem.getApp(), streamPushItem.getStream()); 779 StreamPushItem currentStreamPushItem = streamPushService.getPush(streamPushItem.getApp(), streamPushItem.getStream());
789 if (currentStreamPushItem.isPushIng()) { 780 if (currentStreamPushItem.isPushIng()) {
790 // 在线状态 781 // 在线状态
791 - pushStream(evt, serverTransaction, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive, 782 + pushStream(evt, request, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
792 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId); 783 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
793 784
794 } else { 785 } else {
795 // 不在线 拉起 786 // 不在线 拉起
796 - notifyStreamOnline(evt, serverTransaction, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive, 787 + notifyStreamOnline(evt, request, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
797 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId); 788 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
798 } 789 }
799 } 790 }
800 try { 791 try {
801 - responseAck(serverTransaction, Response.BUSY_HERE); 792 + responseAck(request, Response.BUSY_HERE);
802 } catch (InvalidArgumentException | ParseException | SipException e) { 793 } catch (InvalidArgumentException | ParseException | SipException e) {
803 logger.error("[命令发送失败] 国标级联 点播回复 BUSY_HERE: {}", e.getMessage()); 794 logger.error("[命令发送失败] 国标级联 点播回复 BUSY_HERE: {}", e.getMessage());
804 } 795 }
805 }); 796 });
806 } 797 }
807 798
808 - public SIPResponse sendStreamAck(MediaServerItem mediaServerItem, ServerTransaction serverTransaction, SendRtpItem sendRtpItem, ParentPlatform platform, RequestEvent evt) { 799 + public SIPResponse sendStreamAck(MediaServerItem mediaServerItem, SIPRequest request, SendRtpItem sendRtpItem, ParentPlatform platform, RequestEvent evt) {
809 800
810 StringBuffer content = new StringBuffer(200); 801 StringBuffer content = new StringBuffer(200);
811 content.append("v=0\r\n"); 802 content.append("v=0\r\n");
@@ -828,7 +819,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -828,7 +819,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
828 content.append("f=\r\n"); 819 content.append("f=\r\n");
829 820
830 try { 821 try {
831 - return responseSdpAck(serverTransaction, content.toString(), platform); 822 + return responseSdpAck(request, content.toString(), platform);
832 } catch (SipException e) { 823 } catch (SipException e) {
833 e.printStackTrace(); 824 e.printStackTrace();
834 } catch (InvalidArgumentException e) { 825 } catch (InvalidArgumentException e) {
@@ -839,18 +830,18 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -839,18 +830,18 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
839 return null; 830 return null;
840 } 831 }
841 832
842 - public void inviteFromDeviceHandle(ServerTransaction serverTransaction, String requesterId) { 833 + public void inviteFromDeviceHandle(SIPRequest request, String requesterId) {
843 834
844 // 非上级平台请求,查询是否设备请求(通常为接收语音广播的设备) 835 // 非上级平台请求,查询是否设备请求(通常为接收语音广播的设备)
845 Device device = redisCatchStorage.getDevice(requesterId); 836 Device device = redisCatchStorage.getDevice(requesterId);
846 if (device != null) { 837 if (device != null) {
847 logger.info("收到设备" + requesterId + "的语音广播Invite请求"); 838 logger.info("收到设备" + requesterId + "的语音广播Invite请求");
848 try { 839 try {
849 - responseAck(serverTransaction, Response.TRYING); 840 + responseAck(request, Response.TRYING);
850 } catch (SipException | InvalidArgumentException | ParseException e) { 841 } catch (SipException | InvalidArgumentException | ParseException e) {
851 logger.error("[命令发送失败] invite BAD_REQUEST: {}", e.getMessage()); 842 logger.error("[命令发送失败] invite BAD_REQUEST: {}", e.getMessage());
852 } 843 }
853 - String contentString = new String(serverTransaction.getRequest().getRawContent()); 844 + String contentString = new String(request.getRawContent());
854 // jainSip不支持y=字段, 移除移除以解析。 845 // jainSip不支持y=字段, 移除移除以解析。
855 String substring = contentString; 846 String substring = contentString;
856 String ssrc = "0000000404"; 847 String ssrc = "0000000404";
@@ -900,7 +891,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -900,7 +891,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
900 logger.info("不支持的媒体格式,返回415"); 891 logger.info("不支持的媒体格式,返回415");
901 // 回复不支持的格式 892 // 回复不支持的格式
902 try { 893 try {
903 - responseAck(serverTransaction, Response.UNSUPPORTED_MEDIA_TYPE); // 不支持的格式,发415 894 + responseAck(request, Response.UNSUPPORTED_MEDIA_TYPE); // 不支持的格式,发415
904 } catch (SipException | InvalidArgumentException | ParseException e) { 895 } catch (SipException | InvalidArgumentException | ParseException e) {
905 logger.error("[命令发送失败] invite 不支持的媒体格式,返回415, {}", e.getMessage()); 896 logger.error("[命令发送失败] invite 不支持的媒体格式,返回415, {}", e.getMessage());
906 } 897 }
@@ -918,7 +909,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -918,7 +909,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
918 } else { 909 } else {
919 logger.warn("来自无效设备/平台的请求"); 910 logger.warn("来自无效设备/平台的请求");
920 try { 911 try {
921 - responseAck(serverTransaction, Response.BAD_REQUEST);; // 不支持的格式,发415 912 + responseAck(request, Response.BAD_REQUEST);; // 不支持的格式,发415
922 } catch (SipException | InvalidArgumentException | ParseException e) { 913 } catch (SipException | InvalidArgumentException | ParseException e) {
923 logger.error("[命令发送失败] invite 来自无效设备/平台的请求, {}", e.getMessage()); 914 logger.error("[命令发送失败] invite 来自无效设备/平台的请求, {}", e.getMessage());
924 } 915 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
@@ -20,6 +20,7 @@ import com.genersoft.iot.vmp.storager.IRedisCatchStorage; @@ -20,6 +20,7 @@ import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
20 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 20 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
21 import com.genersoft.iot.vmp.utils.DateUtil; 21 import com.genersoft.iot.vmp.utils.DateUtil;
22 import com.genersoft.iot.vmp.utils.redis.RedisUtil; 22 import com.genersoft.iot.vmp.utils.redis.RedisUtil;
  23 +import gov.nist.javax.sip.message.SIPRequest;
23 import org.dom4j.DocumentException; 24 import org.dom4j.DocumentException;
24 import org.dom4j.Element; 25 import org.dom4j.Element;
25 import org.slf4j.Logger; 26 import org.slf4j.Logger;
@@ -34,7 +35,6 @@ import org.springframework.util.StringUtils; @@ -34,7 +35,6 @@ import org.springframework.util.StringUtils;
34 35
35 import javax.sip.InvalidArgumentException; 36 import javax.sip.InvalidArgumentException;
36 import javax.sip.RequestEvent; 37 import javax.sip.RequestEvent;
37 -import javax.sip.ServerTransaction;  
38 import javax.sip.SipException; 38 import javax.sip.SipException;
39 import javax.sip.header.FromHeader; 39 import javax.sip.header.FromHeader;
40 import javax.sip.message.Response; 40 import javax.sip.message.Response;
@@ -93,9 +93,8 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements @@ -93,9 +93,8 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements
93 93
94 @Override 94 @Override
95 public void process(RequestEvent evt) { 95 public void process(RequestEvent evt) {
96 - ServerTransaction serverTransaction = getServerTransaction(evt);  
97 try { 96 try {
98 - responseAck(serverTransaction, Response.OK); 97 + responseAck((SIPRequest) evt.getRequest(), Response.OK, null, null);
99 }catch (SipException | InvalidArgumentException | ParseException e) { 98 }catch (SipException | InvalidArgumentException | ParseException e) {
100 e.printStackTrace(); 99 e.printStackTrace();
101 } 100 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
@@ -4,6 +4,7 @@ import com.genersoft.iot.vmp.conf.SipConfig; @@ -4,6 +4,7 @@ import com.genersoft.iot.vmp.conf.SipConfig;
4 import com.genersoft.iot.vmp.gb28181.bean.Device; 4 import com.genersoft.iot.vmp.gb28181.bean.Device;
5 import com.genersoft.iot.vmp.gb28181.bean.WvpSipDate; 5 import com.genersoft.iot.vmp.gb28181.bean.WvpSipDate;
6 import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver; 6 import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
  7 +import com.genersoft.iot.vmp.gb28181.transmit.SIPSender;
7 import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor; 8 import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
8 import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; 9 import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
9 import com.genersoft.iot.vmp.gb28181.auth.DigestServerAuthenticationHelper; 10 import com.genersoft.iot.vmp.gb28181.auth.DigestServerAuthenticationHelper;
@@ -22,9 +23,7 @@ import org.springframework.stereotype.Component; @@ -22,9 +23,7 @@ import org.springframework.stereotype.Component;
22 import org.springframework.util.ObjectUtils; 23 import org.springframework.util.ObjectUtils;
23 import org.springframework.util.StringUtils; 24 import org.springframework.util.StringUtils;
24 25
25 -import javax.sip.InvalidArgumentException;  
26 import javax.sip.RequestEvent; 26 import javax.sip.RequestEvent;
27 -import javax.sip.ServerTransaction;  
28 import javax.sip.SipException; 27 import javax.sip.SipException;
29 import javax.sip.header.*; 28 import javax.sip.header.*;
30 import javax.sip.message.Request; 29 import javax.sip.message.Request;
@@ -53,6 +52,9 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen @@ -53,6 +52,9 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen
53 @Autowired 52 @Autowired
54 private IDeviceService deviceService; 53 private IDeviceService deviceService;
55 54
  55 + @Autowired
  56 + private SIPSender sipSender;
  57 +
56 @Override 58 @Override
57 public void afterPropertiesSet() throws Exception { 59 public void afterPropertiesSet() throws Exception {
58 // 添加消息处理的订阅 60 // 添加消息处理的订阅
@@ -86,7 +88,7 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen @@ -86,7 +88,7 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen
86 logger.info("[注册请求] 未携带授权头 回复401: {}", requestAddress); 88 logger.info("[注册请求] 未携带授权头 回复401: {}", requestAddress);
87 response = getMessageFactory().createResponse(Response.UNAUTHORIZED, request); 89 response = getMessageFactory().createResponse(Response.UNAUTHORIZED, request);
88 new DigestServerAuthenticationHelper().generateChallenge(getHeaderFactory(), response, sipConfig.getDomain()); 90 new DigestServerAuthenticationHelper().generateChallenge(getHeaderFactory(), response, sipConfig.getDomain());
89 - sendResponse(evt, response); 91 + sipSender.transmitRequest(response);
90 return; 92 return;
91 } 93 }
92 94
@@ -99,7 +101,7 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen @@ -99,7 +101,7 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen
99 response = getMessageFactory().createResponse(Response.FORBIDDEN, request); 101 response = getMessageFactory().createResponse(Response.FORBIDDEN, request);
100 response.setReasonPhrase("wrong password"); 102 response.setReasonPhrase("wrong password");
101 logger.info("[注册请求] 密码/SIP服务器ID错误, 回复403: {}", requestAddress); 103 logger.info("[注册请求] 密码/SIP服务器ID错误, 回复403: {}", requestAddress);
102 - sendResponse(evt, response); 104 + sipSender.transmitRequest(response);
103 return; 105 return;
104 } 106 }
105 107
@@ -116,11 +118,7 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen @@ -116,11 +118,7 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen
116 118
117 if (expiresHeader == null) { 119 if (expiresHeader == null) {
118 response = getMessageFactory().createResponse(Response.BAD_REQUEST, request); 120 response = getMessageFactory().createResponse(Response.BAD_REQUEST, request);
119 - ServerTransaction serverTransaction = getServerTransaction(evt);  
120 - serverTransaction.sendResponse(response);  
121 - if (serverTransaction.getDialog() != null) {  
122 - serverTransaction.getDialog().delete();  
123 - } 121 + sipSender.transmitRequest(response);
124 return; 122 return;
125 } 123 }
126 // 添加Contact头 124 // 添加Contact头
@@ -162,7 +160,7 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen @@ -162,7 +160,7 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen
162 device.setTransport("TCP".equalsIgnoreCase(transport) ? "TCP" : "UDP"); 160 device.setTransport("TCP".equalsIgnoreCase(transport) ? "TCP" : "UDP");
163 } 161 }
164 162
165 - sendResponse(evt, response); 163 + sipSender.transmitRequest(response);
166 // 注册成功 164 // 注册成功
167 // 保存到redis 165 // 保存到redis
168 if (registerFlag) { 166 if (registerFlag) {
@@ -173,22 +171,8 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen @@ -173,22 +171,8 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen
173 logger.info("[注销成功] deviceId: {}->{}" ,deviceId, requestAddress); 171 logger.info("[注销成功] deviceId: {}->{}" ,deviceId, requestAddress);
174 deviceService.offline(deviceId); 172 deviceService.offline(deviceId);
175 } 173 }
176 - } catch (SipException | InvalidArgumentException | NoSuchAlgorithmException | ParseException e) { 174 + } catch (SipException | NoSuchAlgorithmException | ParseException e) {
177 e.printStackTrace(); 175 e.printStackTrace();
178 } 176 }
179 -  
180 - }  
181 -  
182 - private void sendResponse(RequestEvent evt, Response response) throws InvalidArgumentException, SipException {  
183 - ServerTransaction serverTransaction = getServerTransaction(evt);  
184 - if (serverTransaction == null) {  
185 - logger.warn("[回复失败]:{}", response);  
186 - return;  
187 - }  
188 - serverTransaction.sendResponse(response);  
189 - if (serverTransaction.getDialog() != null) {  
190 - serverTransaction.getDialog().delete();  
191 - }  
192 } 177 }
193 -  
194 } 178 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
@@ -9,6 +9,8 @@ import com.genersoft.iot.vmp.gb28181.bean.SubscribeHolder; @@ -9,6 +9,8 @@ import com.genersoft.iot.vmp.gb28181.bean.SubscribeHolder;
9 import com.genersoft.iot.vmp.gb28181.bean.SubscribeInfo; 9 import com.genersoft.iot.vmp.gb28181.bean.SubscribeInfo;
10 import com.genersoft.iot.vmp.gb28181.task.impl.MobilePositionSubscribeHandlerTask; 10 import com.genersoft.iot.vmp.gb28181.task.impl.MobilePositionSubscribeHandlerTask;
11 import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver; 11 import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
  12 +import com.genersoft.iot.vmp.gb28181.transmit.SIPSender;
  13 +import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
12 import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; 14 import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
13 import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor; 15 import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
14 import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; 16 import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
@@ -19,23 +21,16 @@ import com.genersoft.iot.vmp.storager.IVideoManagerStorage; @@ -19,23 +21,16 @@ import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
19 import gov.nist.javax.sip.SipProviderImpl; 21 import gov.nist.javax.sip.SipProviderImpl;
20 import gov.nist.javax.sip.message.SIPRequest; 22 import gov.nist.javax.sip.message.SIPRequest;
21 import gov.nist.javax.sip.message.SIPResponse; 23 import gov.nist.javax.sip.message.SIPResponse;
22 -import gov.nist.javax.sip.stack.SIPClientTransaction;  
23 -import gov.nist.javax.sip.stack.SIPDialog;  
24 -import gov.nist.javax.sip.stack.SIPServerTransaction;  
25 -import gov.nist.javax.sip.stack.SIPServerTransactionImpl;  
26 import org.dom4j.DocumentException; 24 import org.dom4j.DocumentException;
27 import org.dom4j.Element; 25 import org.dom4j.Element;
28 import org.slf4j.Logger; 26 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory; 27 import org.slf4j.LoggerFactory;
30 import org.springframework.beans.factory.InitializingBean; 28 import org.springframework.beans.factory.InitializingBean;
31 import org.springframework.beans.factory.annotation.Autowired; 29 import org.springframework.beans.factory.annotation.Autowired;
32 -import org.springframework.beans.factory.annotation.Qualifier;  
33 -import org.springframework.context.annotation.Lazy;  
34 import org.springframework.stereotype.Component; 30 import org.springframework.stereotype.Component;
35 31
36 import javax.sip.*; 32 import javax.sip.*;
37 import javax.sip.header.ExpiresHeader; 33 import javax.sip.header.ExpiresHeader;
38 -import javax.sip.message.Request;  
39 import javax.sip.message.Response; 34 import javax.sip.message.Response;
40 import java.text.ParseException; 35 import java.text.ParseException;
41 36
@@ -58,6 +53,9 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme @@ -58,6 +53,9 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme
58 @Autowired 53 @Autowired
59 private SubscribeHolder subscribeHolder; 54 private SubscribeHolder subscribeHolder;
60 55
  56 + @Autowired
  57 + private SIPSender sipSender;
  58 +
61 @Override 59 @Override
62 public void afterPropertiesSet() throws Exception { 60 public void afterPropertiesSet() throws Exception {
63 // 添加消息处理的订阅 61 // 添加消息处理的订阅
@@ -71,8 +69,7 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme @@ -71,8 +69,7 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme
71 */ 69 */
72 @Override 70 @Override
73 public void process(RequestEvent evt) { 71 public void process(RequestEvent evt) {
74 - ServerTransaction serverTransaction = getServerTransaction(evt);  
75 - Request request = evt.getRequest(); 72 + SIPRequest request = (SIPRequest) evt.getRequest();
76 try { 73 try {
77 Element rootElement = getRootElement(evt); 74 Element rootElement = getRootElement(evt);
78 if (rootElement == null) { 75 if (rootElement == null) {
@@ -81,12 +78,12 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme @@ -81,12 +78,12 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme
81 } 78 }
82 String cmd = XmlUtil.getText(rootElement, "CmdType"); 79 String cmd = XmlUtil.getText(rootElement, "CmdType");
83 if (CmdType.MOBILE_POSITION.equals(cmd)) { 80 if (CmdType.MOBILE_POSITION.equals(cmd)) {
84 - processNotifyMobilePosition(serverTransaction, rootElement); 81 + processNotifyMobilePosition(request, rootElement);
85 // } else if (CmdType.ALARM.equals(cmd)) { 82 // } else if (CmdType.ALARM.equals(cmd)) {
86 // logger.info("接收到Alarm订阅"); 83 // logger.info("接收到Alarm订阅");
87 // processNotifyAlarm(serverTransaction, rootElement); 84 // processNotifyAlarm(serverTransaction, rootElement);
88 } else if (CmdType.CATALOG.equals(cmd)) { 85 } else if (CmdType.CATALOG.equals(cmd)) {
89 - processNotifyCatalogList(serverTransaction, rootElement); 86 + processNotifyCatalogList(request, rootElement);
90 } else { 87 } else {
91 logger.info("接收到消息:" + cmd); 88 logger.info("接收到消息:" + cmd);
92 89
@@ -96,13 +93,7 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme @@ -96,13 +93,7 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme
96 response.setExpires(expireHeader); 93 response.setExpires(expireHeader);
97 } 94 }
98 logger.info("response : " + response); 95 logger.info("response : " + response);
99 - ServerTransaction transaction = getServerTransaction(evt);  
100 - if (transaction != null) {  
101 - transaction.sendResponse(response);  
102 - transaction.terminate();  
103 - } else {  
104 - logger.info("processRequest serverTransactionId is null.");  
105 - } 96 + sipSender.transmitRequest(response);
106 } 97 }
107 } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) { 98 } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
108 e.printStackTrace(); 99 e.printStackTrace();
@@ -113,14 +104,14 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme @@ -113,14 +104,14 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme
113 /** 104 /**
114 * 处理移动位置订阅消息 105 * 处理移动位置订阅消息
115 */ 106 */
116 - private void processNotifyMobilePosition(ServerTransaction serverTransaction, Element rootElement) throws SipException {  
117 - if (serverTransaction == null) { 107 + private void processNotifyMobilePosition(SIPRequest request, Element rootElement) throws SipException {
  108 + if (request == null) {
118 return; 109 return;
119 } 110 }
120 - String platformId = SipUtils.getUserIdFromFromHeader(serverTransaction.getRequest()); 111 + String platformId = SipUtils.getUserIdFromFromHeader(request);
121 String deviceId = XmlUtil.getText(rootElement, "DeviceID"); 112 String deviceId = XmlUtil.getText(rootElement, "DeviceID");
122 ParentPlatform platform = storager.queryParentPlatByServerGBId(platformId); 113 ParentPlatform platform = storager.queryParentPlatByServerGBId(platformId);
123 - SubscribeInfo subscribeInfo = new SubscribeInfo(serverTransaction, platformId); 114 + SubscribeInfo subscribeInfo = new SubscribeInfo(request, platformId);
124 if (platform == null) { 115 if (platform == null) {
125 return; 116 return;
126 } 117 }
@@ -149,7 +140,7 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme @@ -149,7 +140,7 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme
149 140
150 try { 141 try {
151 ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(platformId); 142 ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(platformId);
152 - SIPResponse response = responseXmlAck(serverTransaction, resultXml.toString(), parentPlatform, subscribeInfo.getExpires()); 143 + SIPResponse response = responseXmlAck(request, resultXml.toString(), parentPlatform, subscribeInfo.getExpires());
153 if (subscribeInfo.getExpires() == 0) { 144 if (subscribeInfo.getExpires() == 0) {
154 subscribeHolder.removeMobilePositionSubscribe(platformId); 145 subscribeHolder.removeMobilePositionSubscribe(platformId);
155 }else { 146 }else {
@@ -166,17 +157,17 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme @@ -166,17 +157,17 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme
166 157
167 } 158 }
168 159
169 - private void processNotifyCatalogList(ServerTransaction serverTransaction, Element rootElement) throws SipException {  
170 - if (serverTransaction == null) { 160 + private void processNotifyCatalogList(SIPRequest request, Element rootElement) throws SipException {
  161 + if (request == null) {
171 return; 162 return;
172 } 163 }
173 - String platformId = SipUtils.getUserIdFromFromHeader(serverTransaction.getRequest()); 164 + String platformId = SipUtils.getUserIdFromFromHeader(request);
174 String deviceId = XmlUtil.getText(rootElement, "DeviceID"); 165 String deviceId = XmlUtil.getText(rootElement, "DeviceID");
175 ParentPlatform platform = storager.queryParentPlatByServerGBId(platformId); 166 ParentPlatform platform = storager.queryParentPlatByServerGBId(platformId);
176 if (platform == null){ 167 if (platform == null){
177 return; 168 return;
178 } 169 }
179 - SubscribeInfo subscribeInfo = new SubscribeInfo(serverTransaction, platformId); 170 + SubscribeInfo subscribeInfo = new SubscribeInfo(request, platformId);
180 171
181 String sn = XmlUtil.getText(rootElement, "SN"); 172 String sn = XmlUtil.getText(rootElement, "SN");
182 logger.info("[回复上级的目录订阅请求]: {}/{}", platformId, deviceId); 173 logger.info("[回复上级的目录订阅请求]: {}/{}", platformId, deviceId);
@@ -196,7 +187,7 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme @@ -196,7 +187,7 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme
196 } 187 }
197 try { 188 try {
198 ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(platformId); 189 ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(platformId);
199 - SIPResponse response = responseXmlAck(serverTransaction, resultXml.toString(), parentPlatform, subscribeInfo.getExpires()); 190 + SIPResponse response = responseXmlAck(request, resultXml.toString(), parentPlatform, subscribeInfo.getExpires());
200 if (subscribeInfo.getExpires() == 0) { 191 if (subscribeInfo.getExpires() == 0) {
201 subscribeHolder.removeCatalogSubscribe(platformId); 192 subscribeHolder.removeCatalogSubscribe(platformId);
202 }else { 193 }else {
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/info/InfoRequestProcessor.java
@@ -19,7 +19,6 @@ import org.springframework.beans.factory.annotation.Autowired; @@ -19,7 +19,6 @@ import org.springframework.beans.factory.annotation.Autowired;
19 import org.springframework.stereotype.Component; 19 import org.springframework.stereotype.Component;
20 import javax.sip.InvalidArgumentException; 20 import javax.sip.InvalidArgumentException;
21 import javax.sip.RequestEvent; 21 import javax.sip.RequestEvent;
22 -import javax.sip.ServerTransaction;  
23 import javax.sip.SipException; 22 import javax.sip.SipException;
24 import javax.sip.header.*; 23 import javax.sip.header.*;
25 import javax.sip.message.Response; 24 import javax.sip.message.Response;
@@ -62,8 +61,9 @@ public class InfoRequestProcessor extends SIPRequestProcessorParent implements I @@ -62,8 +61,9 @@ public class InfoRequestProcessor extends SIPRequestProcessorParent implements I
62 @Override 61 @Override
63 public void process(RequestEvent evt) { 62 public void process(RequestEvent evt) {
64 logger.debug("接收到消息:" + evt.getRequest()); 63 logger.debug("接收到消息:" + evt.getRequest());
65 - String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest());  
66 - CallIdHeader callIdHeader = (CallIdHeader)evt.getRequest().getHeader(CallIdHeader.NAME); 64 + SIPRequest request = (SIPRequest) evt.getRequest();
  65 + String deviceId = SipUtils.getUserIdFromFromHeader(request);
  66 + CallIdHeader callIdHeader = request.getCallIdHeader();
67 // 先从会话内查找 67 // 先从会话内查找
68 SsrcTransaction ssrcTransaction = sessionManager.getSsrcTransaction(null, null, callIdHeader.getCallId(), null); 68 SsrcTransaction ssrcTransaction = sessionManager.getSsrcTransaction(null, null, callIdHeader.getCallId(), null);
69 69
@@ -71,7 +71,6 @@ public class InfoRequestProcessor extends SIPRequestProcessorParent implements I @@ -71,7 +71,6 @@ public class InfoRequestProcessor extends SIPRequestProcessorParent implements I
71 if (ssrcTransaction != null) { 71 if (ssrcTransaction != null) {
72 deviceId = ssrcTransaction.getDeviceId(); 72 deviceId = ssrcTransaction.getDeviceId();
73 } 73 }
74 - ServerTransaction serverTransaction = getServerTransaction(evt);  
75 // 查询设备是否存在 74 // 查询设备是否存在
76 Device device = redisCatchStorage.getDevice(deviceId); 75 Device device = redisCatchStorage.getDevice(deviceId);
77 // 查询上级平台是否存在 76 // 查询上级平台是否存在
@@ -79,7 +78,6 @@ public class InfoRequestProcessor extends SIPRequestProcessorParent implements I @@ -79,7 +78,6 @@ public class InfoRequestProcessor extends SIPRequestProcessorParent implements I
79 try { 78 try {
80 if (device != null && parentPlatform != null) { 79 if (device != null && parentPlatform != null) {
81 logger.warn("[重复]平台与设备编号重复:{}", deviceId); 80 logger.warn("[重复]平台与设备编号重复:{}", deviceId);
82 - SIPRequest request = (SIPRequest) evt.getRequest();  
83 String hostAddress = request.getRemoteAddress().getHostAddress(); 81 String hostAddress = request.getRemoteAddress().getHostAddress();
84 int remotePort = request.getRemotePort(); 82 int remotePort = request.getRemotePort();
85 if (device.getHostAddress().equals(hostAddress + ":" + remotePort)) { 83 if (device.getHostAddress().equals(hostAddress + ":" + remotePort)) {
@@ -90,7 +88,7 @@ public class InfoRequestProcessor extends SIPRequestProcessorParent implements I @@ -90,7 +88,7 @@ public class InfoRequestProcessor extends SIPRequestProcessorParent implements I
90 } 88 }
91 if (device == null && parentPlatform == null) { 89 if (device == null && parentPlatform == null) {
92 // 不存在则回复404 90 // 不存在则回复404
93 - responseAck(serverTransaction, Response.NOT_FOUND, "device "+ deviceId +" not found"); 91 + responseAck(request, Response.NOT_FOUND, "device "+ deviceId +" not found");
94 logger.warn("[设备未找到 ]: {}", deviceId); 92 logger.warn("[设备未找到 ]: {}", deviceId);
95 if (sipSubscribe.getErrorSubscribe(callIdHeader.getCallId()) != null){ 93 if (sipSubscribe.getErrorSubscribe(callIdHeader.getCallId()) != null){
96 DeviceNotFoundEvent deviceNotFoundEvent = new DeviceNotFoundEvent(evt.getDialog()); 94 DeviceNotFoundEvent deviceNotFoundEvent = new DeviceNotFoundEvent(evt.getDialog());
@@ -107,21 +105,21 @@ public class InfoRequestProcessor extends SIPRequestProcessorParent implements I @@ -107,21 +105,21 @@ public class InfoRequestProcessor extends SIPRequestProcessorParent implements I
107 String streamId = sendRtpItem.getStreamId(); 105 String streamId = sendRtpItem.getStreamId();
108 StreamInfo streamInfo = redisCatchStorage.queryPlayback(null, null, streamId, null); 106 StreamInfo streamInfo = redisCatchStorage.queryPlayback(null, null, streamId, null);
109 if (null == streamInfo) { 107 if (null == streamInfo) {
110 - responseAck(serverTransaction, Response.NOT_FOUND, "stream " + streamId + " not found"); 108 + responseAck(request, Response.NOT_FOUND, "stream " + streamId + " not found");
111 return; 109 return;
112 } 110 }
113 Device device1 = storager.queryVideoDevice(streamInfo.getDeviceID()); 111 Device device1 = storager.queryVideoDevice(streamInfo.getDeviceID());
114 cmder.playbackControlCmd(device1,streamInfo,new String(evt.getRequest().getRawContent()),eventResult -> { 112 cmder.playbackControlCmd(device1,streamInfo,new String(evt.getRequest().getRawContent()),eventResult -> {
115 // 失败的回复 113 // 失败的回复
116 try { 114 try {
117 - responseAck(serverTransaction, eventResult.statusCode, eventResult.msg); 115 + responseAck(request, eventResult.statusCode, eventResult.msg);
118 } catch (SipException | InvalidArgumentException | ParseException e) { 116 } catch (SipException | InvalidArgumentException | ParseException e) {
119 logger.error("[命令发送失败] 国标级联 录像控制: {}", e.getMessage()); 117 logger.error("[命令发送失败] 国标级联 录像控制: {}", e.getMessage());
120 } 118 }
121 }, eventResult -> { 119 }, eventResult -> {
122 // 成功的回复 120 // 成功的回复
123 try { 121 try {
124 - responseAck(serverTransaction, eventResult.statusCode); 122 + responseAck(request, eventResult.statusCode);
125 } catch (SipException | InvalidArgumentException | ParseException e) { 123 } catch (SipException | InvalidArgumentException | ParseException e) {
126 logger.error("[命令发送失败] 国标级联 录像控制: {}", e.getMessage()); 124 logger.error("[命令发送失败] 国标级联 录像控制: {}", e.getMessage());
127 } 125 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java
@@ -23,12 +23,8 @@ import org.springframework.stereotype.Component; @@ -23,12 +23,8 @@ import org.springframework.stereotype.Component;
23 23
24 import javax.sip.InvalidArgumentException; 24 import javax.sip.InvalidArgumentException;
25 import javax.sip.RequestEvent; 25 import javax.sip.RequestEvent;
26 -import javax.sip.ServerTransaction;  
27 import javax.sip.SipException; 26 import javax.sip.SipException;
28 -import javax.sip.address.SipURI;  
29 -import javax.sip.header.CSeqHeader;  
30 import javax.sip.header.CallIdHeader; 27 import javax.sip.header.CallIdHeader;
31 -import javax.sip.message.Request;  
32 import javax.sip.message.Response; 28 import javax.sip.message.Response;
33 import java.text.ParseException; 29 import java.text.ParseException;
34 import java.util.Map; 30 import java.util.Map;
@@ -80,16 +76,13 @@ public class MessageRequestProcessor extends SIPRequestProcessorParent implement @@ -80,16 +76,13 @@ public class MessageRequestProcessor extends SIPRequestProcessorParent implement
80 if (ssrcTransaction != null) { 76 if (ssrcTransaction != null) {
81 deviceId = ssrcTransaction.getDeviceId(); 77 deviceId = ssrcTransaction.getDeviceId();
82 } 78 }
83 -  
84 - ServerTransaction serverTransaction = getServerTransaction(evt);  
85 - 79 + SIPRequest request = (SIPRequest) evt.getRequest();
86 // 查询设备是否存在 80 // 查询设备是否存在
87 Device device = redisCatchStorage.getDevice(deviceId); 81 Device device = redisCatchStorage.getDevice(deviceId);
88 // 查询上级平台是否存在 82 // 查询上级平台是否存在
89 ParentPlatform parentPlatform = storage.queryParentPlatByServerGBId(deviceId); 83 ParentPlatform parentPlatform = storage.queryParentPlatByServerGBId(deviceId);
90 try { 84 try {
91 if (device != null && parentPlatform != null) { 85 if (device != null && parentPlatform != null) {
92 - SIPRequest request = (SIPRequest) evt.getRequest();  
93 String hostAddress = request.getRemoteAddress().getHostAddress(); 86 String hostAddress = request.getRemoteAddress().getHostAddress();
94 int remotePort = request.getRemotePort(); 87 int remotePort = request.getRemotePort();
95 if (device.getHostAddress().equals(hostAddress + ":" + remotePort)) { 88 if (device.getHostAddress().equals(hostAddress + ":" + remotePort)) {
@@ -100,7 +93,7 @@ public class MessageRequestProcessor extends SIPRequestProcessorParent implement @@ -100,7 +93,7 @@ public class MessageRequestProcessor extends SIPRequestProcessorParent implement
100 } 93 }
101 if (device == null && parentPlatform == null) { 94 if (device == null && parentPlatform == null) {
102 // 不存在则回复404 95 // 不存在则回复404
103 - responseAck(serverTransaction, Response.NOT_FOUND, "device "+ deviceId +" not found"); 96 + responseAck(request, Response.NOT_FOUND, "device "+ deviceId +" not found");
104 logger.warn("[设备未找到 ]: {}", deviceId); 97 logger.warn("[设备未找到 ]: {}", deviceId);
105 if (sipSubscribe.getErrorSubscribe(callIdHeader.getCallId()) != null){ 98 if (sipSubscribe.getErrorSubscribe(callIdHeader.getCallId()) != null){
106 DeviceNotFoundEvent deviceNotFoundEvent = new DeviceNotFoundEvent(evt.getDialog()); 99 DeviceNotFoundEvent deviceNotFoundEvent = new DeviceNotFoundEvent(evt.getDialog());
@@ -114,13 +107,13 @@ public class MessageRequestProcessor extends SIPRequestProcessorParent implement @@ -114,13 +107,13 @@ public class MessageRequestProcessor extends SIPRequestProcessorParent implement
114 rootElement = getRootElement(evt); 107 rootElement = getRootElement(evt);
115 if (rootElement == null) { 108 if (rootElement == null) {
116 logger.error("处理MESSAGE请求 未获取到消息体{}", evt.getRequest()); 109 logger.error("处理MESSAGE请求 未获取到消息体{}", evt.getRequest());
117 - responseAck(serverTransaction, Response.BAD_REQUEST, "content is null"); 110 + responseAck(request, Response.BAD_REQUEST, "content is null");
118 return; 111 return;
119 } 112 }
120 } catch (DocumentException e) { 113 } catch (DocumentException e) {
121 logger.warn("解析XML消息内容异常", e); 114 logger.warn("解析XML消息内容异常", e);
122 // 不存在则回复404 115 // 不存在则回复404
123 - responseAck(serverTransaction, Response.BAD_REQUEST, e.getMessage()); 116 + responseAck(request, Response.BAD_REQUEST, e.getMessage());
124 } 117 }
125 String name = rootElement.getName(); 118 String name = rootElement.getName();
126 IMessageHandler messageHandler = messageHandlerMap.get(name); 119 IMessageHandler messageHandler = messageHandlerMap.get(name);
@@ -133,7 +126,7 @@ public class MessageRequestProcessor extends SIPRequestProcessorParent implement @@ -133,7 +126,7 @@ public class MessageRequestProcessor extends SIPRequestProcessorParent implement
133 }else { 126 }else {
134 // 不支持的message 127 // 不支持的message
135 // 不存在则回复415 128 // 不存在则回复415
136 - responseAck(serverTransaction, Response.UNSUPPORTED_MEDIA_TYPE, "Unsupported message type, must Control/Notify/Query/Response"); 129 + responseAck(request, Response.UNSUPPORTED_MEDIA_TYPE, "Unsupported message type, must Control/Notify/Query/Response");
137 } 130 }
138 } 131 }
139 } catch (SipException e) { 132 } catch (SipException e) {
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java
@@ -11,6 +11,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.control @@ -11,6 +11,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.control
11 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 11 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
12 import com.genersoft.iot.vmp.utils.SpringBeanFactory; 12 import com.genersoft.iot.vmp.utils.SpringBeanFactory;
13 import gov.nist.javax.sip.SipStackImpl; 13 import gov.nist.javax.sip.SipStackImpl;
  14 +import gov.nist.javax.sip.message.SIPRequest;
14 import org.dom4j.Element; 15 import org.dom4j.Element;
15 import org.slf4j.Logger; 16 import org.slf4j.Logger;
16 import org.slf4j.LoggerFactory; 17 import org.slf4j.LoggerFactory;
@@ -67,10 +68,10 @@ public class DeviceControlQueryMessageHandler extends SIPRequestProcessorParent @@ -67,10 +68,10 @@ public class DeviceControlQueryMessageHandler extends SIPRequestProcessorParent
67 @Override 68 @Override
68 public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) { 69 public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) {
69 70
70 - ServerTransaction serverTransaction = getServerTransaction(evt); 71 + SIPRequest request = (SIPRequest) evt.getRequest();
71 72
72 // 此处是上级发出的DeviceControl指令 73 // 此处是上级发出的DeviceControl指令
73 - String targetGBId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(ToHeader.NAME)).getAddress().getURI()).getUser(); 74 + String targetGBId = ((SipURI) request.getToHeader().getAddress().getURI()).getUser();
74 String channelId = getText(rootElement, "DeviceID"); 75 String channelId = getText(rootElement, "DeviceID");
75 // 远程启动功能 76 // 远程启动功能
76 if (!ObjectUtils.isEmpty(getText(rootElement, "TeleBoot"))) { 77 if (!ObjectUtils.isEmpty(getText(rootElement, "TeleBoot"))) {
@@ -111,7 +112,7 @@ public class DeviceControlQueryMessageHandler extends SIPRequestProcessorParent @@ -111,7 +112,7 @@ public class DeviceControlQueryMessageHandler extends SIPRequestProcessorParent
111 Device deviceForPlatform = storager.queryVideoDeviceByPlatformIdAndChannelId(parentPlatform.getServerGBId(), channelId); 112 Device deviceForPlatform = storager.queryVideoDeviceByPlatformIdAndChannelId(parentPlatform.getServerGBId(), channelId);
112 if (deviceForPlatform == null) { 113 if (deviceForPlatform == null) {
113 try { 114 try {
114 - responseAck(serverTransaction, Response.NOT_FOUND); 115 + responseAck(request, Response.NOT_FOUND);
115 } catch (SipException | InvalidArgumentException | ParseException e) { 116 } catch (SipException | InvalidArgumentException | ParseException e) {
116 logger.error("[命令发送失败] 错误信息: {}", e.getMessage()); 117 logger.error("[命令发送失败] 错误信息: {}", e.getMessage());
117 } 118 }
@@ -121,14 +122,14 @@ public class DeviceControlQueryMessageHandler extends SIPRequestProcessorParent @@ -121,14 +122,14 @@ public class DeviceControlQueryMessageHandler extends SIPRequestProcessorParent
121 cmder.fronEndCmd(deviceForPlatform, channelId, cmdString, eventResult -> { 122 cmder.fronEndCmd(deviceForPlatform, channelId, cmdString, eventResult -> {
122 // 失败的回复 123 // 失败的回复
123 try { 124 try {
124 - responseAck(serverTransaction, eventResult.statusCode, eventResult.msg); 125 + responseAck(request, eventResult.statusCode, eventResult.msg);
125 } catch (SipException | InvalidArgumentException | ParseException e) { 126 } catch (SipException | InvalidArgumentException | ParseException e) {
126 logger.error("[命令发送失败] 云台/前端回复: {}", e.getMessage()); 127 logger.error("[命令发送失败] 云台/前端回复: {}", e.getMessage());
127 } 128 }
128 }, eventResult -> { 129 }, eventResult -> {
129 // 成功的回复 130 // 成功的回复
130 try { 131 try {
131 - responseAck(serverTransaction, eventResult.statusCode); 132 + responseAck(request, eventResult.statusCode);
132 } catch (SipException | InvalidArgumentException | ParseException e) { 133 } catch (SipException | InvalidArgumentException | ParseException e) {
133 logger.error("[命令发送失败] 云台/前端回复: {}", e.getMessage()); 134 logger.error("[命令发送失败] 云台/前端回复: {}", e.getMessage());
134 } 135 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java
@@ -16,6 +16,7 @@ import com.genersoft.iot.vmp.service.IDeviceChannelService; @@ -16,6 +16,7 @@ import com.genersoft.iot.vmp.service.IDeviceChannelService;
16 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 16 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
17 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 17 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
18 import com.genersoft.iot.vmp.utils.DateUtil; 18 import com.genersoft.iot.vmp.utils.DateUtil;
  19 +import gov.nist.javax.sip.message.SIPRequest;
19 import org.dom4j.Element; 20 import org.dom4j.Element;
20 import org.slf4j.Logger; 21 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory; 22 import org.slf4j.LoggerFactory;
@@ -97,7 +98,7 @@ public class AlarmNotifyMessageHandler extends SIPRequestProcessorParent impleme @@ -97,7 +98,7 @@ public class AlarmNotifyMessageHandler extends SIPRequestProcessorParent impleme
97 SipMsgInfo sipMsgInfo = taskQueue.poll(); 98 SipMsgInfo sipMsgInfo = taskQueue.poll();
98 // 回复200 OK 99 // 回复200 OK
99 try { 100 try {
100 - responseAck(getServerTransaction(sipMsgInfo.getEvt()), Response.OK); 101 + responseAck((SIPRequest) sipMsgInfo.getEvt().getRequest(), Response.OK);
101 } catch (SipException | InvalidArgumentException | ParseException e) { 102 } catch (SipException | InvalidArgumentException | ParseException e) {
102 logger.error("[处理报警通知], 回复200OK失败", e); 103 logger.error("[处理报警通知], 回复200OK失败", e);
103 } 104 }
@@ -216,7 +217,7 @@ public class AlarmNotifyMessageHandler extends SIPRequestProcessorParent impleme @@ -216,7 +217,7 @@ public class AlarmNotifyMessageHandler extends SIPRequestProcessorParent impleme
216 logger.info("收到来自平台[{}]的报警通知", parentPlatform.getServerGBId()); 217 logger.info("收到来自平台[{}]的报警通知", parentPlatform.getServerGBId());
217 // 回复200 OK 218 // 回复200 OK
218 try { 219 try {
219 - responseAck(getServerTransaction(evt), Response.OK); 220 + responseAck((SIPRequest) evt.getRequest(), Response.OK);
220 } catch (SipException | InvalidArgumentException | ParseException e) { 221 } catch (SipException | InvalidArgumentException | ParseException e) {
221 logger.error("[命令发送失败] 国标级联 报警通知回复: {}", e.getMessage()); 222 logger.error("[命令发送失败] 国标级联 报警通知回复: {}", e.getMessage());
222 } 223 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java
@@ -10,6 +10,7 @@ import com.genersoft.iot.vmp.service.IDeviceService; @@ -10,6 +10,7 @@ import com.genersoft.iot.vmp.service.IDeviceService;
10 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 10 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
11 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 11 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
12 import com.genersoft.iot.vmp.utils.DateUtil; 12 import com.genersoft.iot.vmp.utils.DateUtil;
  13 +import gov.nist.javax.sip.message.SIPRequest;
13 import org.dom4j.Element; 14 import org.dom4j.Element;
14 import org.slf4j.Logger; 15 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory; 16 import org.slf4j.LoggerFactory;
@@ -54,7 +55,7 @@ public class KeepaliveNotifyMessageHandler extends SIPRequestProcessorParent imp @@ -54,7 +55,7 @@ public class KeepaliveNotifyMessageHandler extends SIPRequestProcessorParent imp
54 } 55 }
55 // 回复200 OK 56 // 回复200 OK
56 try { 57 try {
57 - responseAck(getServerTransaction(evt), Response.OK); 58 + responseAck((SIPRequest) evt.getRequest(), Response.OK);
58 } catch (SipException | InvalidArgumentException | ParseException e) { 59 } catch (SipException | InvalidArgumentException | ParseException e) {
59 logger.error("[命令发送失败] 国标级联 心跳回复: {}", e.getMessage()); 60 logger.error("[命令发送失败] 国标级联 心跳回复: {}", e.getMessage());
60 } 61 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/MediaStatusNotifyMessageHandler.java
@@ -14,6 +14,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessag @@ -14,6 +14,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessag
14 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.NotifyMessageHandler; 14 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.NotifyMessageHandler;
15 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 15 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
16 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 16 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
  17 +import gov.nist.javax.sip.message.SIPRequest;
17 import org.dom4j.Element; 18 import org.dom4j.Element;
18 import org.slf4j.Logger; 19 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory; 20 import org.slf4j.LoggerFactory;
@@ -67,7 +68,7 @@ public class MediaStatusNotifyMessageHandler extends SIPRequestProcessorParent i @@ -67,7 +68,7 @@ public class MediaStatusNotifyMessageHandler extends SIPRequestProcessorParent i
67 68
68 // 回复200 OK 69 // 回复200 OK
69 try { 70 try {
70 - responseAck(getServerTransaction(evt), Response.OK); 71 + responseAck((SIPRequest) evt.getRequest(), Response.OK);
71 } catch (SipException | InvalidArgumentException | ParseException e) { 72 } catch (SipException | InvalidArgumentException | ParseException e) {
72 logger.error("[命令发送失败] 国标级联 录像流推送完毕,回复200OK: {}", e.getMessage()); 73 logger.error("[命令发送失败] 国标级联 录像流推送完毕,回复200OK: {}", e.getMessage());
73 } 74 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/MobilePositionNotifyMessageHandler.java
@@ -11,6 +11,7 @@ import com.genersoft.iot.vmp.service.IDeviceChannelService; @@ -11,6 +11,7 @@ import com.genersoft.iot.vmp.service.IDeviceChannelService;
11 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 11 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
12 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 12 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
13 import com.genersoft.iot.vmp.utils.DateUtil; 13 import com.genersoft.iot.vmp.utils.DateUtil;
  14 +import gov.nist.javax.sip.message.SIPRequest;
14 import org.dom4j.DocumentException; 15 import org.dom4j.DocumentException;
15 import org.dom4j.Element; 16 import org.dom4j.Element;
16 import org.slf4j.Logger; 17 import org.slf4j.Logger;
@@ -83,7 +84,7 @@ public class MobilePositionNotifyMessageHandler extends SIPRequestProcessorParen @@ -83,7 +84,7 @@ public class MobilePositionNotifyMessageHandler extends SIPRequestProcessorParen
83 if (rootElementAfterCharset == null) { 84 if (rootElementAfterCharset == null) {
84 try { 85 try {
85 logger.warn("[ 移动设备位置数据通知 ] content cannot be null, {}", sipMsgInfo.getEvt().getRequest()); 86 logger.warn("[ 移动设备位置数据通知 ] content cannot be null, {}", sipMsgInfo.getEvt().getRequest());
86 - responseAck(getServerTransaction(sipMsgInfo.getEvt()), Response.BAD_REQUEST); 87 + responseAck((SIPRequest) sipMsgInfo.getEvt().getRequest(), Response.BAD_REQUEST);
87 } catch (SipException | InvalidArgumentException | ParseException e) { 88 } catch (SipException | InvalidArgumentException | ParseException e) {
88 logger.error("[命令发送失败] 移动设备位置数据通知 内容为空: {}", e.getMessage()); 89 logger.error("[命令发送失败] 移动设备位置数据通知 内容为空: {}", e.getMessage());
89 } 90 }
@@ -138,7 +139,7 @@ public class MobilePositionNotifyMessageHandler extends SIPRequestProcessorParen @@ -138,7 +139,7 @@ public class MobilePositionNotifyMessageHandler extends SIPRequestProcessorParen
138 storager.updateChannelPosition(deviceChannel); 139 storager.updateChannelPosition(deviceChannel);
139 //回复 200 OK 140 //回复 200 OK
140 try { 141 try {
141 - responseAck(getServerTransaction(sipMsgInfo.getEvt()), Response.OK); 142 + responseAck((SIPRequest) sipMsgInfo.getEvt().getRequest(), Response.OK);
142 } catch (SipException | InvalidArgumentException | ParseException e) { 143 } catch (SipException | InvalidArgumentException | ParseException e) {
143 logger.error("[命令发送失败] 移动设备位置数据回复200: {}", e.getMessage()); 144 logger.error("[命令发送失败] 移动设备位置数据回复200: {}", e.getMessage());
144 } 145 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/AlarmQueryMessageHandler.java
@@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorP @@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorP
9 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler; 9 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
10 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.QueryMessageHandler; 10 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.QueryMessageHandler;
11 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 11 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
  12 +import gov.nist.javax.sip.message.SIPRequest;
12 import org.dom4j.Element; 13 import org.dom4j.Element;
13 import org.slf4j.Logger; 14 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory; 15 import org.slf4j.LoggerFactory;
@@ -58,7 +59,7 @@ public class AlarmQueryMessageHandler extends SIPRequestProcessorParent implemen @@ -58,7 +59,7 @@ public class AlarmQueryMessageHandler extends SIPRequestProcessorParent implemen
58 59
59 logger.info("不支持alarm查询"); 60 logger.info("不支持alarm查询");
60 try { 61 try {
61 - responseAck(getServerTransaction(evt), Response.NOT_FOUND, "not support alarm query"); 62 + responseAck((SIPRequest) evt.getRequest(), Response.NOT_FOUND, "not support alarm query");
62 } catch (SipException | InvalidArgumentException | ParseException e) { 63 } catch (SipException | InvalidArgumentException | ParseException e) {
63 logger.error("[命令发送失败] 国标级联 alarm查询回复200OK: {}", e.getMessage()); 64 logger.error("[命令发送失败] 国标级联 alarm查询回复200OK: {}", e.getMessage());
64 } 65 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/CatalogQueryMessageHandler.java
@@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorP @@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorP
9 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler; 9 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
10 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.QueryMessageHandler; 10 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.QueryMessageHandler;
11 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 11 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
  12 +import gov.nist.javax.sip.message.SIPRequest;
12 import org.dom4j.Element; 13 import org.dom4j.Element;
13 import org.slf4j.Logger; 14 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory; 15 import org.slf4j.LoggerFactory;
@@ -66,7 +67,7 @@ public class CatalogQueryMessageHandler extends SIPRequestProcessorParent implem @@ -66,7 +67,7 @@ public class CatalogQueryMessageHandler extends SIPRequestProcessorParent implem
66 FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME); 67 FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
67 try { 68 try {
68 // 回复200 OK 69 // 回复200 OK
69 - responseAck(getServerTransaction(evt), Response.OK); 70 + responseAck((SIPRequest) evt.getRequest(), Response.OK);
70 } catch (SipException | InvalidArgumentException | ParseException e) { 71 } catch (SipException | InvalidArgumentException | ParseException e) {
71 logger.error("[命令发送失败] 国标级联 目录查询回复200OK: {}", e.getMessage()); 72 logger.error("[命令发送失败] 国标级联 目录查询回复200OK: {}", e.getMessage());
72 } 73 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceInfoQueryMessageHandler.java
@@ -6,6 +6,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform; @@ -6,6 +6,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
6 import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; 6 import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
7 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler; 7 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
8 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.QueryMessageHandler; 8 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.QueryMessageHandler;
  9 +import gov.nist.javax.sip.message.SIPRequest;
9 import org.dom4j.Element; 10 import org.dom4j.Element;
10 import org.slf4j.Logger; 11 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory; 12 import org.slf4j.LoggerFactory;
@@ -48,7 +49,7 @@ public class DeviceInfoQueryMessageHandler extends SIPRequestProcessorParent imp @@ -48,7 +49,7 @@ public class DeviceInfoQueryMessageHandler extends SIPRequestProcessorParent imp
48 FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME); 49 FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
49 try { 50 try {
50 // 回复200 OK 51 // 回复200 OK
51 - responseAck(getServerTransaction(evt), Response.OK); 52 + responseAck((SIPRequest) evt.getRequest(), Response.OK);
52 } catch (SipException | InvalidArgumentException | ParseException e) { 53 } catch (SipException | InvalidArgumentException | ParseException e) {
53 logger.error("[命令发送失败] DeviceInfo查询回复: {}", e.getMessage()); 54 logger.error("[命令发送失败] DeviceInfo查询回复: {}", e.getMessage());
54 } 55 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceStatusQueryMessageHandler.java
@@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorP @@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorP
9 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler; 9 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
10 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.QueryMessageHandler; 10 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.QueryMessageHandler;
11 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 11 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
  12 +import gov.nist.javax.sip.message.SIPRequest;
12 import org.dom4j.Element; 13 import org.dom4j.Element;
13 import org.slf4j.Logger; 14 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory; 15 import org.slf4j.LoggerFactory;
@@ -61,7 +62,7 @@ public class DeviceStatusQueryMessageHandler extends SIPRequestProcessorParent i @@ -61,7 +62,7 @@ public class DeviceStatusQueryMessageHandler extends SIPRequestProcessorParent i
61 FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME); 62 FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
62 // 回复200 OK 63 // 回复200 OK
63 try { 64 try {
64 - responseAck(getServerTransaction(evt), Response.OK); 65 + responseAck((SIPRequest) evt.getRequest(), Response.OK);
65 } catch (SipException | InvalidArgumentException | ParseException e) { 66 } catch (SipException | InvalidArgumentException | ParseException e) {
66 logger.error("[命令发送失败] 国标级联 DeviceStatus查询回复200OK: {}", e.getMessage()); 67 logger.error("[命令发送失败] 国标级联 DeviceStatus查询回复200OK: {}", e.getMessage());
67 } 68 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/RecordInfoQueryMessageHandler.java
@@ -12,6 +12,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.Q @@ -12,6 +12,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.Q
12 import com.genersoft.iot.vmp.utils.DateUtil; 12 import com.genersoft.iot.vmp.utils.DateUtil;
13 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 13 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
14 import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo; 14 import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo;
  15 +import gov.nist.javax.sip.message.SIPRequest;
15 import org.dom4j.Element; 16 import org.dom4j.Element;
16 import org.slf4j.Logger; 17 import org.slf4j.Logger;
17 import org.slf4j.LoggerFactory; 18 import org.slf4j.LoggerFactory;
@@ -21,9 +22,7 @@ import org.springframework.stereotype.Component; @@ -21,9 +22,7 @@ import org.springframework.stereotype.Component;
21 22
22 import javax.sip.InvalidArgumentException; 23 import javax.sip.InvalidArgumentException;
23 import javax.sip.RequestEvent; 24 import javax.sip.RequestEvent;
24 -import javax.sip.ServerTransaction;  
25 import javax.sip.SipException; 25 import javax.sip.SipException;
26 -import javax.sip.header.FromHeader;  
27 import javax.sip.message.Response; 26 import javax.sip.message.Response;
28 import java.text.ParseException; 27 import java.text.ParseException;
29 import java.util.List; 28 import java.util.List;
@@ -68,8 +67,7 @@ public class RecordInfoQueryMessageHandler extends SIPRequestProcessorParent imp @@ -68,8 +67,7 @@ public class RecordInfoQueryMessageHandler extends SIPRequestProcessorParent imp
68 @Override 67 @Override
69 public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) { 68 public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) {
70 69
71 - FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);  
72 - ServerTransaction serverTransaction = getServerTransaction(evt); 70 + SIPRequest request = (SIPRequest) evt.getRequest();
73 Element snElement = rootElement.element("SN"); 71 Element snElement = rootElement.element("SN");
74 int sn = Integer.parseInt(snElement.getText()); 72 int sn = Integer.parseInt(snElement.getText());
75 Element deviceIDElement = rootElement.element("DeviceID"); 73 Element deviceIDElement = rootElement.element("DeviceID");
@@ -104,7 +102,7 @@ public class RecordInfoQueryMessageHandler extends SIPRequestProcessorParent imp @@ -104,7 +102,7 @@ public class RecordInfoQueryMessageHandler extends SIPRequestProcessorParent imp
104 // 接收录像数据 102 // 接收录像数据
105 recordEndEventListener.addEndEventHandler(deviceChannel.getDeviceId(), channelId, (recordInfo)->{ 103 recordEndEventListener.addEndEventHandler(deviceChannel.getDeviceId(), channelId, (recordInfo)->{
106 try { 104 try {
107 - cmderFroPlatform.recordInfo(deviceChannel, parentPlatform, fromHeader.getTag(), recordInfo); 105 + cmderFroPlatform.recordInfo(deviceChannel, parentPlatform, request.getFromTag(), recordInfo);
108 } catch (SipException | InvalidArgumentException | ParseException e) { 106 } catch (SipException | InvalidArgumentException | ParseException e) {
109 logger.error("[命令发送失败] 国标级联 回复录像数据: {}", e.getMessage()); 107 logger.error("[命令发送失败] 国标级联 回复录像数据: {}", e.getMessage());
110 } 108 }
@@ -114,14 +112,14 @@ public class RecordInfoQueryMessageHandler extends SIPRequestProcessorParent imp @@ -114,14 +112,14 @@ public class RecordInfoQueryMessageHandler extends SIPRequestProcessorParent imp
114 DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(endTime), sn, secrecy, type, (eventResult -> { 112 DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(endTime), sn, secrecy, type, (eventResult -> {
115 // 回复200 OK 113 // 回复200 OK
116 try { 114 try {
117 - responseAck(serverTransaction, Response.OK); 115 + responseAck(request, Response.OK);
118 } catch (SipException | InvalidArgumentException | ParseException e) { 116 } catch (SipException | InvalidArgumentException | ParseException e) {
119 logger.error("[命令发送失败] 录像查询回复: {}", e.getMessage()); 117 logger.error("[命令发送失败] 录像查询回复: {}", e.getMessage());
120 } 118 }
121 }),(eventResult -> { 119 }),(eventResult -> {
122 // 查询失败 120 // 查询失败
123 try { 121 try {
124 - responseAck(serverTransaction, eventResult.statusCode, eventResult.msg); 122 + responseAck(request, eventResult.statusCode, eventResult.msg);
125 } catch (SipException | InvalidArgumentException | ParseException e) { 123 } catch (SipException | InvalidArgumentException | ParseException e) {
126 logger.error("[命令发送失败] 录像查询回复: {}", e.getMessage()); 124 logger.error("[命令发送失败] 录像查询回复: {}", e.getMessage());
127 } 125 }
@@ -133,13 +131,13 @@ public class RecordInfoQueryMessageHandler extends SIPRequestProcessorParent imp @@ -133,13 +131,13 @@ public class RecordInfoQueryMessageHandler extends SIPRequestProcessorParent imp
133 }else if (channelSources.get(1).getCount() > 0) { // 直播流 131 }else if (channelSources.get(1).getCount() > 0) { // 直播流
134 // TODO 132 // TODO
135 try { 133 try {
136 - responseAck(serverTransaction, Response.NOT_IMPLEMENTED); // 回复未实现 134 + responseAck(request, Response.NOT_IMPLEMENTED); // 回复未实现
137 } catch (SipException | InvalidArgumentException | ParseException e) { 135 } catch (SipException | InvalidArgumentException | ParseException e) {
138 logger.error("[命令发送失败] 录像查询: {}", e.getMessage()); 136 logger.error("[命令发送失败] 录像查询: {}", e.getMessage());
139 } 137 }
140 }else { // 错误的请求 138 }else { // 错误的请求
141 try { 139 try {
142 - responseAck(serverTransaction, Response.BAD_REQUEST); 140 + responseAck(request, Response.BAD_REQUEST);
143 } catch (SipException | InvalidArgumentException | ParseException e) { 141 } catch (SipException | InvalidArgumentException | ParseException e) {
144 logger.error("[命令发送失败] 录像查询: {}", e.getMessage()); 142 logger.error("[命令发送失败] 录像查询: {}", e.getMessage());
145 } 143 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/BroadcastResponseMessageHandler.java
@@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorP @@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorP
9 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler; 9 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
10 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler; 10 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
11 import com.genersoft.iot.vmp.gb28181.utils.XmlUtil; 11 import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
  12 +import gov.nist.javax.sip.message.SIPRequest;
12 import org.dom4j.Element; 13 import org.dom4j.Element;
13 import org.slf4j.Logger; 14 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory; 15 import org.slf4j.LoggerFactory;
@@ -18,7 +19,6 @@ import org.springframework.stereotype.Component; @@ -18,7 +19,6 @@ import org.springframework.stereotype.Component;
18 19
19 import javax.sip.InvalidArgumentException; 20 import javax.sip.InvalidArgumentException;
20 import javax.sip.RequestEvent; 21 import javax.sip.RequestEvent;
21 -import javax.sip.ServerTransaction;  
22 import javax.sip.SipException; 22 import javax.sip.SipException;
23 import javax.sip.message.Response; 23 import javax.sip.message.Response;
24 import java.text.ParseException; 24 import java.text.ParseException;
@@ -47,9 +47,8 @@ public class BroadcastResponseMessageHandler extends SIPRequestProcessorParent i @@ -47,9 +47,8 @@ public class BroadcastResponseMessageHandler extends SIPRequestProcessorParent i
47 try { 47 try {
48 String channelId = getText(rootElement, "DeviceID"); 48 String channelId = getText(rootElement, "DeviceID");
49 String key = DeferredResultHolder.CALLBACK_CMD_BROADCAST + device.getDeviceId() + channelId; 49 String key = DeferredResultHolder.CALLBACK_CMD_BROADCAST + device.getDeviceId() + channelId;
50 - ServerTransaction serverTransaction = getServerTransaction(evt);  
51 // 回复200 OK 50 // 回复200 OK
52 - responseAck(serverTransaction, Response.OK); 51 + responseAck((SIPRequest) evt.getRequest(), Response.OK);
53 // 此处是对本平台发出Broadcast指令的应答 52 // 此处是对本平台发出Broadcast指令的应答
54 JSONObject json = new JSONObject(); 53 JSONObject json = new JSONObject();
55 XmlUtil.node2Json(rootElement, json); 54 XmlUtil.node2Json(rootElement, json);
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java
@@ -14,6 +14,7 @@ import com.genersoft.iot.vmp.gb28181.utils.NumericUtil; @@ -14,6 +14,7 @@ import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
14 import com.genersoft.iot.vmp.gb28181.utils.XmlUtil; 14 import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
15 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 15 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
16 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 16 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
  17 +import gov.nist.javax.sip.message.SIPRequest;
17 import org.dom4j.DocumentException; 18 import org.dom4j.DocumentException;
18 import org.dom4j.Element; 19 import org.dom4j.Element;
19 import org.slf4j.Logger; 20 import org.slf4j.Logger;
@@ -27,7 +28,6 @@ import org.springframework.util.StringUtils; @@ -27,7 +28,6 @@ import org.springframework.util.StringUtils;
27 28
28 import javax.sip.InvalidArgumentException; 29 import javax.sip.InvalidArgumentException;
29 import javax.sip.RequestEvent; 30 import javax.sip.RequestEvent;
30 -import javax.sip.ServerTransaction;  
31 import javax.sip.SipException; 31 import javax.sip.SipException;
32 import javax.sip.message.Response; 32 import javax.sip.message.Response;
33 import java.text.ParseException; 33 import java.text.ParseException;
@@ -71,9 +71,8 @@ public class CatalogResponseMessageHandler extends SIPRequestProcessorParent imp @@ -71,9 +71,8 @@ public class CatalogResponseMessageHandler extends SIPRequestProcessorParent imp
71 public void handForDevice(RequestEvent evt, Device device, Element element) { 71 public void handForDevice(RequestEvent evt, Device device, Element element) {
72 taskQueue.offer(new HandlerCatchData(evt, device, element)); 72 taskQueue.offer(new HandlerCatchData(evt, device, element));
73 // 回复200 OK 73 // 回复200 OK
74 - ServerTransaction serverTransaction = getServerTransaction(evt);  
75 try { 74 try {
76 - responseAck(serverTransaction, Response.OK); 75 + responseAck((SIPRequest) evt.getRequest(), Response.OK);
77 } catch (SipException | InvalidArgumentException | ParseException e) { 76 } catch (SipException | InvalidArgumentException | ParseException e) {
78 logger.error("[命令发送失败] 目录查询回复: {}", e.getMessage()); 77 logger.error("[命令发送失败] 目录查询回复: {}", e.getMessage());
79 } 78 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/ConfigDownloadResponseMessageHandler.java
@@ -10,6 +10,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorP @@ -10,6 +10,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorP
10 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler; 10 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
11 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler; 11 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
12 import com.genersoft.iot.vmp.gb28181.utils.XmlUtil; 12 import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
  13 +import gov.nist.javax.sip.message.SIPRequest;
13 import org.dom4j.Element; 14 import org.dom4j.Element;
14 import org.slf4j.Logger; 15 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory; 16 import org.slf4j.LoggerFactory;
@@ -52,7 +53,7 @@ public class ConfigDownloadResponseMessageHandler extends SIPRequestProcessorPar @@ -52,7 +53,7 @@ public class ConfigDownloadResponseMessageHandler extends SIPRequestProcessorPar
52 String key = DeferredResultHolder.CALLBACK_CMD_CONFIGDOWNLOAD + device.getDeviceId() + channelId; 53 String key = DeferredResultHolder.CALLBACK_CMD_CONFIGDOWNLOAD + device.getDeviceId() + channelId;
53 try { 54 try {
54 // 回复200 OK 55 // 回复200 OK
55 - responseAck(getServerTransaction(evt), Response.OK); 56 + responseAck((SIPRequest) evt.getRequest(), Response.OK);
56 } catch (SipException | InvalidArgumentException | ParseException e) { 57 } catch (SipException | InvalidArgumentException | ParseException e) {
57 logger.error("[命令发送失败] 设备配置查询: {}", e.getMessage()); 58 logger.error("[命令发送失败] 设备配置查询: {}", e.getMessage());
58 } 59 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceControlResponseMessageHandler.java
@@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorP @@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorP
9 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler; 9 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
10 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler; 10 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
11 import com.genersoft.iot.vmp.gb28181.utils.XmlUtil; 11 import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
  12 +import gov.nist.javax.sip.message.SIPRequest;
12 import org.dom4j.Element; 13 import org.dom4j.Element;
13 import org.slf4j.Logger; 14 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory; 15 import org.slf4j.LoggerFactory;
@@ -46,7 +47,7 @@ public class DeviceControlResponseMessageHandler extends SIPRequestProcessorPare @@ -46,7 +47,7 @@ public class DeviceControlResponseMessageHandler extends SIPRequestProcessorPare
46 public void handForDevice(RequestEvent evt, Device device, Element element) { 47 public void handForDevice(RequestEvent evt, Device device, Element element) {
47 // 此处是对本平台发出DeviceControl指令的应答 48 // 此处是对本平台发出DeviceControl指令的应答
48 try { 49 try {
49 - responseAck(getServerTransaction(evt), Response.OK); 50 + responseAck((SIPRequest) evt.getRequest(), Response.OK);
50 } catch (SipException | InvalidArgumentException | ParseException e) { 51 } catch (SipException | InvalidArgumentException | ParseException e) {
51 logger.error("[命令发送失败] 国标级联 设备控制: {}", e.getMessage()); 52 logger.error("[命令发送失败] 国标级联 设备控制: {}", e.getMessage());
52 } 53 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceInfoResponseMessageHandler.java
@@ -13,6 +13,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.respons @@ -13,6 +13,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.respons
13 import com.genersoft.iot.vmp.service.IDeviceService; 13 import com.genersoft.iot.vmp.service.IDeviceService;
14 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 14 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
15 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 15 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
  16 +import gov.nist.javax.sip.message.SIPRequest;
16 import org.dom4j.DocumentException; 17 import org.dom4j.DocumentException;
17 import org.dom4j.Element; 18 import org.dom4j.Element;
18 import org.slf4j.Logger; 19 import org.slf4j.Logger;
@@ -21,11 +22,9 @@ import org.springframework.beans.factory.InitializingBean; @@ -21,11 +22,9 @@ import org.springframework.beans.factory.InitializingBean;
21 import org.springframework.beans.factory.annotation.Autowired; 22 import org.springframework.beans.factory.annotation.Autowired;
22 import org.springframework.stereotype.Component; 23 import org.springframework.stereotype.Component;
23 import org.springframework.util.ObjectUtils; 24 import org.springframework.util.ObjectUtils;
24 -import org.springframework.util.StringUtils;  
25 25
26 import javax.sip.InvalidArgumentException; 26 import javax.sip.InvalidArgumentException;
27 import javax.sip.RequestEvent; 27 import javax.sip.RequestEvent;
28 -import javax.sip.ServerTransaction;  
29 import javax.sip.SipException; 28 import javax.sip.SipException;
30 import javax.sip.message.Response; 29 import javax.sip.message.Response;
31 import java.text.ParseException; 30 import java.text.ParseException;
@@ -75,14 +74,14 @@ public class DeviceInfoResponseMessageHandler extends SIPRequestProcessorParent @@ -75,14 +74,14 @@ public class DeviceInfoResponseMessageHandler extends SIPRequestProcessorParent
75 logger.warn("[接收到DeviceInfo应答消息,但是设备已经离线]:" + (device != null ? device.getDeviceId():"" )); 74 logger.warn("[接收到DeviceInfo应答消息,但是设备已经离线]:" + (device != null ? device.getDeviceId():"" ));
76 return; 75 return;
77 } 76 }
78 - ServerTransaction serverTransaction = getServerTransaction(evt); 77 + SIPRequest request = (SIPRequest) evt.getRequest();
79 try { 78 try {
80 rootElement = getRootElement(evt, device.getCharset()); 79 rootElement = getRootElement(evt, device.getCharset());
81 80
82 - if (rootElement == null) { 81 + if (rootElement == null) {
83 logger.warn("[ 接收到DeviceInfo应答消息 ] content cannot be null, {}", evt.getRequest()); 82 logger.warn("[ 接收到DeviceInfo应答消息 ] content cannot be null, {}", evt.getRequest());
84 try { 83 try {
85 - responseAck(serverTransaction, Response.BAD_REQUEST); 84 + responseAck((SIPRequest) evt.getRequest(), Response.BAD_REQUEST);
86 } catch (SipException | InvalidArgumentException | ParseException e) { 85 } catch (SipException | InvalidArgumentException | ParseException e) {
87 logger.error("[命令发送失败] DeviceInfo应答消息 BAD_REQUEST: {}", e.getMessage()); 86 logger.error("[命令发送失败] DeviceInfo应答消息 BAD_REQUEST: {}", e.getMessage());
88 } 87 }
@@ -110,7 +109,7 @@ public class DeviceInfoResponseMessageHandler extends SIPRequestProcessorParent @@ -110,7 +109,7 @@ public class DeviceInfoResponseMessageHandler extends SIPRequestProcessorParent
110 } 109 }
111 try { 110 try {
112 // 回复200 OK 111 // 回复200 OK
113 - responseAck(serverTransaction, Response.OK); 112 + responseAck(request, Response.OK);
114 } catch (SipException | InvalidArgumentException | ParseException e) { 113 } catch (SipException | InvalidArgumentException | ParseException e) {
115 logger.error("[命令发送失败] DeviceInfo应答消息 200: {}", e.getMessage()); 114 logger.error("[命令发送失败] DeviceInfo应答消息 200: {}", e.getMessage());
116 } 115 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceStatusResponseMessageHandler.java
@@ -13,6 +13,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.respons @@ -13,6 +13,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.respons
13 import com.genersoft.iot.vmp.gb28181.utils.XmlUtil; 13 import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
14 import com.genersoft.iot.vmp.service.IDeviceService; 14 import com.genersoft.iot.vmp.service.IDeviceService;
15 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 15 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
  16 +import gov.nist.javax.sip.message.SIPRequest;
16 import org.dom4j.Element; 17 import org.dom4j.Element;
17 import org.slf4j.Logger; 18 import org.slf4j.Logger;
18 import org.slf4j.LoggerFactory; 19 import org.slf4j.LoggerFactory;
@@ -59,7 +60,7 @@ public class DeviceStatusResponseMessageHandler extends SIPRequestProcessorParen @@ -59,7 +60,7 @@ public class DeviceStatusResponseMessageHandler extends SIPRequestProcessorParen
59 } 60 }
60 // 回复200 OK 61 // 回复200 OK
61 try { 62 try {
62 - responseAck(getServerTransaction(evt), Response.OK); 63 + responseAck((SIPRequest) evt.getRequest(), Response.OK);
63 } catch (SipException | InvalidArgumentException | ParseException e) { 64 } catch (SipException | InvalidArgumentException | ParseException e) {
64 logger.error("[命令发送失败] 国标级联 设备状态应答回复200OK: {}", e.getMessage()); 65 logger.error("[命令发送失败] 国标级联 设备状态应答回复200OK: {}", e.getMessage());
65 } 66 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/MobilePositionResponseMessageHandler.java
@@ -13,6 +13,7 @@ import com.genersoft.iot.vmp.storager.IRedisCatchStorage; @@ -13,6 +13,7 @@ import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
13 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 13 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
14 import com.genersoft.iot.vmp.utils.DateUtil; 14 import com.genersoft.iot.vmp.utils.DateUtil;
15 import com.genersoft.iot.vmp.utils.GpsUtil; 15 import com.genersoft.iot.vmp.utils.GpsUtil;
  16 +import gov.nist.javax.sip.message.SIPRequest;
16 import org.dom4j.DocumentException; 17 import org.dom4j.DocumentException;
17 import org.dom4j.Element; 18 import org.dom4j.Element;
18 import org.slf4j.Logger; 19 import org.slf4j.Logger;
@@ -21,11 +22,9 @@ import org.springframework.beans.factory.InitializingBean; @@ -21,11 +22,9 @@ import org.springframework.beans.factory.InitializingBean;
21 import org.springframework.beans.factory.annotation.Autowired; 22 import org.springframework.beans.factory.annotation.Autowired;
22 import org.springframework.stereotype.Component; 23 import org.springframework.stereotype.Component;
23 import org.springframework.util.ObjectUtils; 24 import org.springframework.util.ObjectUtils;
24 -import org.springframework.util.StringUtils;  
25 25
26 import javax.sip.InvalidArgumentException; 26 import javax.sip.InvalidArgumentException;
27 import javax.sip.RequestEvent; 27 import javax.sip.RequestEvent;
28 -import javax.sip.ServerTransaction;  
29 import javax.sip.SipException; 28 import javax.sip.SipException;
30 import javax.sip.message.Response; 29 import javax.sip.message.Response;
31 import java.text.ParseException; 30 import java.text.ParseException;
@@ -64,15 +63,14 @@ public class MobilePositionResponseMessageHandler extends SIPRequestProcessorPar @@ -64,15 +63,14 @@ public class MobilePositionResponseMessageHandler extends SIPRequestProcessorPar
64 63
65 @Override 64 @Override
66 public void handForDevice(RequestEvent evt, Device device, Element rootElement) { 65 public void handForDevice(RequestEvent evt, Device device, Element rootElement) {
67 -  
68 - ServerTransaction serverTransaction = getServerTransaction(evt); 66 + SIPRequest request = (SIPRequest) evt.getRequest();
69 67
70 try { 68 try {
71 rootElement = getRootElement(evt, device.getCharset()); 69 rootElement = getRootElement(evt, device.getCharset());
72 if (rootElement == null) { 70 if (rootElement == null) {
73 logger.warn("[ 移动设备位置数据查询回复 ] content cannot be null, {}", evt.getRequest()); 71 logger.warn("[ 移动设备位置数据查询回复 ] content cannot be null, {}", evt.getRequest());
74 try { 72 try {
75 - responseAck(serverTransaction, Response.BAD_REQUEST); 73 + responseAck(request, Response.BAD_REQUEST);
76 } catch (SipException | InvalidArgumentException | ParseException e) { 74 } catch (SipException | InvalidArgumentException | ParseException e) {
77 logger.error("[命令发送失败] 移动设备位置数据查询 BAD_REQUEST: {}", e.getMessage()); 75 logger.error("[命令发送失败] 移动设备位置数据查询 BAD_REQUEST: {}", e.getMessage());
78 } 76 }
@@ -138,7 +136,7 @@ public class MobilePositionResponseMessageHandler extends SIPRequestProcessorPar @@ -138,7 +136,7 @@ public class MobilePositionResponseMessageHandler extends SIPRequestProcessorPar
138 redisCatchStorage.sendMobilePositionMsg(jsonObject); 136 redisCatchStorage.sendMobilePositionMsg(jsonObject);
139 //回复 200 OK 137 //回复 200 OK
140 try { 138 try {
141 - responseAck(serverTransaction, Response.OK); 139 + responseAck(request, Response.OK);
142 } catch (SipException | InvalidArgumentException | ParseException e) { 140 } catch (SipException | InvalidArgumentException | ParseException e) {
143 logger.error("[命令发送失败] 移动设备位置数据查询 200: {}", e.getMessage()); 141 logger.error("[命令发送失败] 移动设备位置数据查询 200: {}", e.getMessage());
144 } 142 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/PresetQueryResponseMessageHandler.java
@@ -7,6 +7,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; @@ -7,6 +7,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
7 import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; 7 import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
8 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler; 8 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
9 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler; 9 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
  10 +import gov.nist.javax.sip.message.SIPRequest;
10 import org.dom4j.DocumentException; 11 import org.dom4j.DocumentException;
11 import org.dom4j.Element; 12 import org.dom4j.Element;
12 import org.slf4j.Logger; 13 import org.slf4j.Logger;
@@ -17,7 +18,6 @@ import org.springframework.stereotype.Component; @@ -17,7 +18,6 @@ import org.springframework.stereotype.Component;
17 18
18 import javax.sip.InvalidArgumentException; 19 import javax.sip.InvalidArgumentException;
19 import javax.sip.RequestEvent; 20 import javax.sip.RequestEvent;
20 -import javax.sip.ServerTransaction;  
21 import javax.sip.SipException; 21 import javax.sip.SipException;
22 import javax.sip.message.Response; 22 import javax.sip.message.Response;
23 import java.text.ParseException; 23 import java.text.ParseException;
@@ -51,7 +51,7 @@ public class PresetQueryResponseMessageHandler extends SIPRequestProcessorParent @@ -51,7 +51,7 @@ public class PresetQueryResponseMessageHandler extends SIPRequestProcessorParent
51 @Override 51 @Override
52 public void handForDevice(RequestEvent evt, Device device, Element element) { 52 public void handForDevice(RequestEvent evt, Device device, Element element) {
53 53
54 - ServerTransaction serverTransaction = getServerTransaction(evt); 54 + SIPRequest request = (SIPRequest) evt.getRequest();
55 55
56 try { 56 try {
57 Element rootElement = getRootElement(evt, device.getCharset()); 57 Element rootElement = getRootElement(evt, device.getCharset());
@@ -59,7 +59,7 @@ public class PresetQueryResponseMessageHandler extends SIPRequestProcessorParent @@ -59,7 +59,7 @@ public class PresetQueryResponseMessageHandler extends SIPRequestProcessorParent
59 if (rootElement == null) { 59 if (rootElement == null) {
60 logger.warn("[ 设备预置位查询应答 ] content cannot be null, {}", evt.getRequest()); 60 logger.warn("[ 设备预置位查询应答 ] content cannot be null, {}", evt.getRequest());
61 try { 61 try {
62 - responseAck(serverTransaction, Response.BAD_REQUEST); 62 + responseAck(request, Response.BAD_REQUEST);
63 } catch (InvalidArgumentException | ParseException | SipException e) { 63 } catch (InvalidArgumentException | ParseException | SipException e) {
64 logger.error("[命令发送失败] 设备预置位查询应答处理: {}", e.getMessage()); 64 logger.error("[命令发送失败] 设备预置位查询应答处理: {}", e.getMessage());
65 } 65 }
@@ -72,7 +72,7 @@ public class PresetQueryResponseMessageHandler extends SIPRequestProcessorParent @@ -72,7 +72,7 @@ public class PresetQueryResponseMessageHandler extends SIPRequestProcessorParent
72 String key = DeferredResultHolder.CALLBACK_CMD_PRESETQUERY + deviceId; 72 String key = DeferredResultHolder.CALLBACK_CMD_PRESETQUERY + deviceId;
73 if (snElement == null || presetListNumElement == null) { 73 if (snElement == null || presetListNumElement == null) {
74 try { 74 try {
75 - responseAck(serverTransaction, Response.BAD_REQUEST, "xml error"); 75 + responseAck(request, Response.BAD_REQUEST, "xml error");
76 } catch (InvalidArgumentException | ParseException | SipException e) { 76 } catch (InvalidArgumentException | ParseException | SipException e) {
77 logger.error("[命令发送失败] 设备预置位查询应答处理: {}", e.getMessage()); 77 logger.error("[命令发送失败] 设备预置位查询应答处理: {}", e.getMessage());
78 } 78 }
@@ -103,7 +103,7 @@ public class PresetQueryResponseMessageHandler extends SIPRequestProcessorParent @@ -103,7 +103,7 @@ public class PresetQueryResponseMessageHandler extends SIPRequestProcessorParent
103 requestMessage.setData(presetQuerySipReqList); 103 requestMessage.setData(presetQuerySipReqList);
104 deferredResultHolder.invokeAllResult(requestMessage); 104 deferredResultHolder.invokeAllResult(requestMessage);
105 try { 105 try {
106 - responseAck(serverTransaction, Response.OK); 106 + responseAck(request, Response.OK);
107 } catch (InvalidArgumentException | ParseException | SipException e) { 107 } catch (InvalidArgumentException | ParseException | SipException e) {
108 logger.error("[命令发送失败] 设备预置位查询应答处理: {}", e.getMessage()); 108 logger.error("[命令发送失败] 设备预置位查询应答处理: {}", e.getMessage());
109 } 109 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/RecordInfoResponseMessageHandler.java
@@ -10,6 +10,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessag @@ -10,6 +10,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessag
10 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler; 10 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
11 import com.genersoft.iot.vmp.utils.DateUtil; 11 import com.genersoft.iot.vmp.utils.DateUtil;
12 import com.genersoft.iot.vmp.vmanager.bean.WVPResult; 12 import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
  13 +import gov.nist.javax.sip.message.SIPRequest;
13 import org.dom4j.DocumentException; 14 import org.dom4j.DocumentException;
14 import org.dom4j.Element; 15 import org.dom4j.Element;
15 import org.slf4j.Logger; 16 import org.slf4j.Logger;
@@ -71,7 +72,7 @@ public class RecordInfoResponseMessageHandler extends SIPRequestProcessorParent @@ -71,7 +72,7 @@ public class RecordInfoResponseMessageHandler extends SIPRequestProcessorParent
71 public void handForDevice(RequestEvent evt, Device device, Element rootElement) { 72 public void handForDevice(RequestEvent evt, Device device, Element rootElement) {
72 try { 73 try {
73 // 回复200 OK 74 // 回复200 OK
74 - responseAck(getServerTransaction(evt), Response.OK); 75 + responseAck((SIPRequest) evt.getRequest(), Response.OK);
75 }catch (SipException | InvalidArgumentException | ParseException e) { 76 }catch (SipException | InvalidArgumentException | ParseException e) {
76 logger.error("[命令发送失败] 国标级联 国标录像: {}", e.getMessage()); 77 logger.error("[命令发送失败] 国标级联 国标录像: {}", e.getMessage());
77 } 78 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/InviteResponseProcessor.java
@@ -5,6 +5,7 @@ import com.genersoft.iot.vmp.gb28181.bean.Device; @@ -5,6 +5,7 @@ import com.genersoft.iot.vmp.gb28181.bean.Device;
5 import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction; 5 import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
6 import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; 6 import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
7 import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver; 7 import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
  8 +import com.genersoft.iot.vmp.gb28181.transmit.SIPSender;
8 import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander; 9 import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
9 import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderProvider; 10 import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderProvider;
10 import com.genersoft.iot.vmp.gb28181.transmit.event.response.SIPResponseProcessorAbstract; 11 import com.genersoft.iot.vmp.gb28181.transmit.event.response.SIPResponseProcessorAbstract;
@@ -49,25 +50,14 @@ public class InviteResponseProcessor extends SIPResponseProcessorAbstract { @@ -49,25 +50,14 @@ public class InviteResponseProcessor extends SIPResponseProcessorAbstract {
49 private final String method = "INVITE"; 50 private final String method = "INVITE";
50 51
51 @Autowired 52 @Autowired
52 - private VideoStreamSessionManager streamSession;  
53 -  
54 - @Autowired  
55 private SIPProcessorObserver sipProcessorObserver; 53 private SIPProcessorObserver sipProcessorObserver;
56 54
57 - @Autowired  
58 - private SipConfig sipConfig;  
59 55
60 @Autowired 56 @Autowired
61 private SipFactory sipFactory; 57 private SipFactory sipFactory;
62 58
63 @Autowired 59 @Autowired
64 - private GitUtil gitUtil;  
65 -  
66 - @Autowired  
67 - private ISIPCommander commander;  
68 -  
69 - @Autowired  
70 - private IDeviceService deviceService; 60 + private SIPSender sipSender;
71 61
72 @Autowired 62 @Autowired
73 private SIPRequestHeaderProvider headerProvider; 63 private SIPRequestHeaderProvider headerProvider;
@@ -121,8 +111,7 @@ public class InviteResponseProcessor extends SIPResponseProcessorAbstract { @@ -121,8 +111,7 @@ public class InviteResponseProcessor extends SIPResponseProcessorAbstract {
121 Request reqAck = headerProvider.createAckRequest(requestUri, response); 111 Request reqAck = headerProvider.createAckRequest(requestUri, response);
122 112
123 logger.info("[回复ack] {}-> {}:{} ", sdp.getOrigin().getUsername(), event.getRemoteIpAddress(), event.getRemotePort()); 113 logger.info("[回复ack] {}-> {}:{} ", sdp.getOrigin().getUsername(), event.getRemoteIpAddress(), event.getRemotePort());
124 - commander.transmitRequest(response.getTopmostViaHeader().getTransport(), reqAck, null, null);  
125 - 114 + sipSender.transmitRequest(reqAck);
126 } 115 }
127 } catch (InvalidArgumentException | ParseException | SipException | SdpParseException e) { 116 } catch (InvalidArgumentException | ParseException | SipException | SdpParseException e) {
128 logger.info("[点播回复ACK],异常:", e ); 117 logger.info("[点播回复ACK],异常:", e );
src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java
@@ -4,6 +4,7 @@ import com.genersoft.iot.vmp.utils.GitUtil; @@ -4,6 +4,7 @@ import com.genersoft.iot.vmp.utils.GitUtil;
4 import gov.nist.javax.sip.address.AddressImpl; 4 import gov.nist.javax.sip.address.AddressImpl;
5 import gov.nist.javax.sip.address.SipUri; 5 import gov.nist.javax.sip.address.SipUri;
6 import gov.nist.javax.sip.header.Subject; 6 import gov.nist.javax.sip.header.Subject;
  7 +import org.springframework.util.ObjectUtils;
7 8
8 import javax.sip.PeerUnavailableException; 9 import javax.sip.PeerUnavailableException;
9 import javax.sip.SipFactory; 10 import javax.sip.SipFactory;
@@ -52,10 +53,15 @@ public class SipUtils { @@ -52,10 +53,15 @@ public class SipUtils {
52 53
53 public static UserAgentHeader createUserAgentHeader(SipFactory sipFactory, GitUtil gitUtil) throws PeerUnavailableException, ParseException { 54 public static UserAgentHeader createUserAgentHeader(SipFactory sipFactory, GitUtil gitUtil) throws PeerUnavailableException, ParseException {
54 List<String> agentParam = new ArrayList<>(); 55 List<String> agentParam = new ArrayList<>();
55 - agentParam.add("WVP-Pro v");  
56 - if (gitUtil != null && gitUtil.getCommitTime() != null) {  
57 - agentParam.add(gitUtil.getBuildVersion() + ".");  
58 - agentParam.add(gitUtil.getCommitTime()); 56 + agentParam.add("WVP-Pro ");
  57 + if (gitUtil != null ) {
  58 + if (!ObjectUtils.isEmpty(gitUtil.getBuildVersion())) {
  59 + agentParam.add("v");
  60 + agentParam.add(gitUtil.getBuildVersion() + ".");
  61 + }
  62 + if (!ObjectUtils.isEmpty(gitUtil.getCommitTime())) {
  63 + agentParam.add(gitUtil.getCommitTime());
  64 + }
59 } 65 }
60 return sipFactory.createHeaderFactory().createUserAgentHeader(agentParam); 66 return sipFactory.createHeaderFactory().createUserAgentHeader(agentParam);
61 } 67 }
src/main/java/com/genersoft/iot/vmp/utils/GitUtil.java
@@ -11,22 +11,22 @@ import org.springframework.stereotype.Component; @@ -11,22 +11,22 @@ import org.springframework.stereotype.Component;
11 @PropertySource(value = {"classpath:git.properties" }, ignoreResourceNotFound = true) 11 @PropertySource(value = {"classpath:git.properties" }, ignoreResourceNotFound = true)
12 public class GitUtil { 12 public class GitUtil {
13 13
14 - @Value("${git.branch:null}") 14 + @Value("${git.branch:}")
15 private String branch; 15 private String branch;
16 - @Value("${git.commit.id:null}") 16 + @Value("${git.commit.id:}")
17 private String gitCommitId; 17 private String gitCommitId;
18 - @Value("${git.remote.origin.url:null}") 18 + @Value("${git.remote.origin.url:}")
19 private String gitUrl; 19 private String gitUrl;
20 - @Value("${git.build.time:null}") 20 + @Value("${git.build.time:}")
21 private String buildDate; 21 private String buildDate;
22 22
23 - @Value("${git.build.version:null}") 23 + @Value("${git.build.version:}")
24 private String buildVersion; 24 private String buildVersion;
25 25
26 - @Value("${git.commit.id.abbrev:null}") 26 + @Value("${git.commit.id.abbrev:}")
27 private String commitIdShort; 27 private String commitIdShort;
28 28
29 - @Value("${git.commit.time:null}") 29 + @Value("${git.commit.time:}")
30 private String commitTime; 30 private String commitTime;
31 31
32 public String getGitCommitId() { 32 public String getGitCommitId() {