Commit 74714711aa87dcd1259f5aebe55d362be732ffa2
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() { |