From e78dd0eea0b5566ea573bd00930195538fc58bf0 Mon Sep 17 00:00:00 2001 From: htjcAdmin Date: Tue, 30 Dec 2025 09:51:15 +0800 Subject: [PATCH] =?UTF-8?q?/*SIP=E5=8D=8F=E8=AE=AExml=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9*/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tcpserver/sip/items/DeviceInfoItem.java | 21 +++++++++++++++ .../sip/registry/SipEventRegistry.java | 1 + .../sip/service/SipClientService.java | 10 ++++--- .../tcpserver/sip/utils/SipXmlParser.java | 26 +++++++++++++++++-- 4 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/inspect/tcpserver/sip/items/DeviceInfoItem.java diff --git a/src/main/java/com/inspect/tcpserver/sip/items/DeviceInfoItem.java b/src/main/java/com/inspect/tcpserver/sip/items/DeviceInfoItem.java new file mode 100644 index 0000000..119741b --- /dev/null +++ b/src/main/java/com/inspect/tcpserver/sip/items/DeviceInfoItem.java @@ -0,0 +1,21 @@ +package com.inspect.tcpserver.sip.items; + +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import lombok.Getter; +import lombok.Setter; + +/** + * 图片抓拍请求信令 + */ +@Getter +@Setter +public class DeviceInfoItem { + @JacksonXmlProperty(isAttribute = true, localName = "CmdType") + private String cmdType; + + @JacksonXmlProperty(isAttribute = true, localName = "sn") + private String sn; + + @JacksonXmlProperty(isAttribute = true, localName = "DeviceID") + private String deviceID; +} diff --git a/src/main/java/com/inspect/tcpserver/sip/registry/SipEventRegistry.java b/src/main/java/com/inspect/tcpserver/sip/registry/SipEventRegistry.java index 6516c2c..b3a0f82 100644 --- a/src/main/java/com/inspect/tcpserver/sip/registry/SipEventRegistry.java +++ b/src/main/java/com/inspect/tcpserver/sip/registry/SipEventRegistry.java @@ -9,6 +9,7 @@ public class SipEventRegistry { private static final Map> EVENT_MAP = new HashMap<>(); static { + EVENT_MAP.put("Device_Info", DeviceInfoItem.class); EVENT_MAP.put("Request_Resource", RequestResourceItem.class); EVENT_MAP.put("Request_History_Alarm", RequestHistoryAlarmItem.class); EVENT_MAP.put("Request_History_Video", RequestHistoryVideoItem.class); diff --git a/src/main/java/com/inspect/tcpserver/sip/service/SipClientService.java b/src/main/java/com/inspect/tcpserver/sip/service/SipClientService.java index e701286..7bd0139 100644 --- a/src/main/java/com/inspect/tcpserver/sip/service/SipClientService.java +++ b/src/main/java/com/inspect/tcpserver/sip/service/SipClientService.java @@ -541,7 +541,8 @@ public class SipClientService implements SipListener { }, delay * 1000L); //sendNotify(username, domain, port, testXml); - sendSubscribe(username, domain, port, "Push_Resource"); + // 向SIP服务器订阅消息不符合SIP/GB28181标准 + //sendSubscribe(username, domain, port, "Push_Resource"); } else { log.warn("REGISTER response: {}", status); } @@ -754,9 +755,11 @@ public class SipClientService implements SipListener { log.info("Received SIP request: {}", method); try { if (Request.MESSAGE.equalsIgnoreCase(method)) { - log.info("Processing MESSAGE request from {}", ((FromHeader) request.getHeader(FromHeader.NAME)).getAddress()); - ContentTypeHeader contentTypeHeader = (ContentTypeHeader) request.getHeader(ContentTypeHeader.NAME); + log.info("Processing MESSAGE request from {}, contentType: {}, contentSubType: {}", + ((FromHeader) request.getHeader(FromHeader.NAME)).getAddress(), + contentTypeHeader != null ? contentTypeHeader.getContentType() : "null", + contentTypeHeader != null ? contentTypeHeader.getContentSubType() : "null"); if (contentTypeHeader != null && "application".equalsIgnoreCase(contentTypeHeader.getContentType()) && "xml".equalsIgnoreCase(contentTypeHeader.getContentSubType())) { @@ -803,6 +806,7 @@ public class SipClientService implements SipListener { log.info("Received SUBSCRIBE expires: {}, XML:\n{}", expires, xml); ServerTransaction transaction = sipProvider.getNewServerTransaction(request); Response response = messageFactory.createResponse(Response.OK, request); + response.setExpires(expiresHeader); transaction.sendResponse(response); if (expires > 0) { diff --git a/src/main/java/com/inspect/tcpserver/sip/utils/SipXmlParser.java b/src/main/java/com/inspect/tcpserver/sip/utils/SipXmlParser.java index fd13301..d85d22c 100644 --- a/src/main/java/com/inspect/tcpserver/sip/utils/SipXmlParser.java +++ b/src/main/java/com/inspect/tcpserver/sip/utils/SipXmlParser.java @@ -1,6 +1,10 @@ package com.inspect.tcpserver.sip.utils; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import lombok.Getter; +import lombok.Setter; import lombok.extern.slf4j.Slf4j; @Slf4j @@ -17,12 +21,30 @@ public class SipXmlParser { XML_MAPPER.getTypeFactory().constructParametricType(SipXmlEnvelope.class, itemClass)); } + @Setter + @Getter + @JacksonXmlRootElement(localName = "SIP_XML") + @JsonIgnoreProperties(ignoreUnknown = true) public static class EventTypeOnly { @com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty(isAttribute = true, localName = "EventType") private String eventType; - public String getEventType() { return eventType; } - public void setEventType(String eventType) { this.eventType = eventType; } + } + + public static void main(String[] args) { + try { + String xml = "\n" + + "\n" + + " \n" + + ""; + + //String xml = "";//ok + //String xml = ""; + String eventType = SipXmlParser.peekEventType(xml); + System.out.println(eventType); + } catch (Exception e) { + e.printStackTrace(); + } } }