From 70564219ae079cadf95997e3cfb49a1c8277db52 Mon Sep 17 00:00:00 2001 From: Lawrence <1934378145@qq.com> Date: 星期三, 27 一月 2021 15:54:14 +0800 Subject: [PATCH] 增加SSE跨域支持 --- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | 83 ++++++++++++++++++++++++++++++++++++----- 1 files changed, 72 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java index 31fd728..b661c5e 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java @@ -235,7 +235,8 @@ ptzXml.append("</Info>\r\n"); ptzXml.append("</Control>\r\n"); - Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "ViaPtzBranch", "FromPtzTag", null); + String tm = Long.toString(System.currentTimeMillis()); + Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "ViaPtzBranch", "FromPtz" + tm, null); transmitRequest(device, request); return true; @@ -271,7 +272,8 @@ ptzXml.append("</Info>\r\n"); ptzXml.append("</Control>\r\n"); - Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "ViaPtzBranch", "FromPtzTag", null); + String tm = Long.toString(System.currentTimeMillis()); + Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "ViaPtzBranch", "FromPtz" + tm, null); transmitRequest(device, request); return true; } catch (SipException | ParseException | InvalidArgumentException e) { @@ -383,7 +385,8 @@ content.append("y="+ssrc+"\r\n");//ssrc - Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), null, "live", null, ssrc); + String tm = Long.toString(System.currentTimeMillis()); + Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), null, "FromInvt" + tm, null, ssrc); ClientTransaction transaction = transmitRequest(device, request, errorEvent); streamSession.put(streamId, transaction); @@ -482,7 +485,8 @@ content.append("y="+ssrc+"\r\n");//ssrc - Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "playback", null); + String tm = Long.toString(System.currentTimeMillis()); + Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "fromplybck" + tm, null); ClientTransaction transaction = transmitRequest(device, request, errorEvent); streamSession.put(streamId, transaction); @@ -526,7 +530,10 @@ Pattern p = Pattern.compile("(\\d+\\.\\d+\\.\\d+\\.\\d+)\\:(\\d+)"); Matcher matcher = p.matcher(vh); if (matcher.find()) { - byeURI.setHost(matcher.group(1)); + String ip = matcher.group(1); + byeURI.setHost(ip); + String port = matcher.group(2); + byeURI.setPort(Integer.parseInt(port)); } ViaHeader viaHeader = (ViaHeader) byeRequest.getHeader(ViaHeader.NAME); String protocol = viaHeader.getTransport().toUpperCase(); @@ -662,7 +669,8 @@ catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n"); catalogXml.append("</Query>\r\n"); - Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaDeviceInfoBranch", "FromDeviceInfoTag", null); + String tm = Long.toString(System.currentTimeMillis()); + Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaDeviceInfoBranch", "FromDev" + tm, null); transmitRequest(device, request); @@ -691,7 +699,8 @@ catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n"); catalogXml.append("</Query>\r\n"); - Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaCatalogBranch", "FromCatalogTag", null); + String tm = Long.toString(System.currentTimeMillis()); + Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaCatalogBranch", "FromCat" + tm, null); transmitRequest(device, request, errorEvent); } catch (SipException | ParseException | InvalidArgumentException e) { @@ -725,7 +734,8 @@ recordInfoXml.append("<Type>all</Type>\r\n"); recordInfoXml.append("</Query>\r\n"); - Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(), "ViaRecordInfoBranch", "FromRecordInfoTag", null); + String tm = Long.toString(System.currentTimeMillis()); + Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(), "ViaRecordInfoBranch", "fromRec" + tm, null); transmitRequest(device, request); } catch (SipException | ParseException | InvalidArgumentException e) { @@ -774,11 +784,62 @@ * @param device 瑙嗛璁惧 */ @Override - public boolean mobilePostitionQuery(Device device) { - // TODO Auto-generated method stub - return false; + public boolean mobilePostitionQuery(Device device, SipSubscribe.Event errorEvent) { + try { + StringBuffer mobilePostitionXml = new StringBuffer(200); + mobilePostitionXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n"); + mobilePostitionXml.append("<Query>\r\n"); + mobilePostitionXml.append("<CmdType>MobilePosition</CmdType>\r\n"); + mobilePostitionXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n"); + mobilePostitionXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n"); + mobilePostitionXml.append("<Interval>60</Interval>\r\n"); + mobilePostitionXml.append("</Query>\r\n"); + + String tm = Long.toString(System.currentTimeMillis()); + Request request = headerProvider.createMessageRequest(device, mobilePostitionXml.toString(), "viaTagPos" + tm, "fromTagPos" + tm, null); + + transmitRequest(device, request, errorEvent); + + } catch (SipException | ParseException | InvalidArgumentException e) { + e.printStackTrace(); + return false; + } + return true; } + /** + * 璁㈤槄銆佸彇娑堣闃呯Щ鍔ㄤ綅缃� + * + * @param device 瑙嗛璁惧 + * @param expires 璁㈤槄瓒呮椂鏃堕棿 + * @param interval 涓婃姤鏃堕棿闂撮殧 + */ + public boolean mobilePositionSubscribe(Device device, int expires, int interval) { + try { + StringBuffer subscribePostitionXml = new StringBuffer(200); + subscribePostitionXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n"); + subscribePostitionXml.append("<Query>\r\n"); + subscribePostitionXml.append("<CmdType>MobilePosition</CmdType>\r\n"); + subscribePostitionXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n"); + subscribePostitionXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n"); + if (expires > 0) { + subscribePostitionXml.append("<Interval>" + String.valueOf(interval) + "</Interval>\r\n"); + } + subscribePostitionXml.append("</Query>\r\n"); + + String tm = Long.toString(System.currentTimeMillis()); + Request request = headerProvider.createSubscribeRequest(device, subscribePostitionXml.toString(), "viaTagPos" + tm, "fromTagPos" + tm, null, expires, "Position;id=" + tm.substring(tm.length() - 4)); + transmitRequest(device, request); + + return true; + + } catch ( NumberFormatException | ParseException | InvalidArgumentException | SipException e) { + e.printStackTrace(); + return false; + } + } + + private ClientTransaction transmitRequest(Device device, Request request) throws SipException { return transmitRequest(device, request, null, null); } -- Gitblit v1.8.0