Browse Source

/*SIP协议xml解析异常问题修改*/

master
htjcAdmin 1 month ago
parent
commit
e78dd0eea0
4 changed files with 53 additions and 5 deletions
  1. +21
    -0
      src/main/java/com/inspect/tcpserver/sip/items/DeviceInfoItem.java
  2. +1
    -0
      src/main/java/com/inspect/tcpserver/sip/registry/SipEventRegistry.java
  3. +7
    -3
      src/main/java/com/inspect/tcpserver/sip/service/SipClientService.java
  4. +24
    -2
      src/main/java/com/inspect/tcpserver/sip/utils/SipXmlParser.java

+ 21
- 0
src/main/java/com/inspect/tcpserver/sip/items/DeviceInfoItem.java View File

@ -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;
}

+ 1
- 0
src/main/java/com/inspect/tcpserver/sip/registry/SipEventRegistry.java View File

@ -9,6 +9,7 @@ public class SipEventRegistry {
private static final Map<String, Class<?>> EVENT_MAP = new HashMap<>(); private static final Map<String, Class<?>> EVENT_MAP = new HashMap<>();
static { static {
EVENT_MAP.put("Device_Info", DeviceInfoItem.class);
EVENT_MAP.put("Request_Resource", RequestResourceItem.class); EVENT_MAP.put("Request_Resource", RequestResourceItem.class);
EVENT_MAP.put("Request_History_Alarm", RequestHistoryAlarmItem.class); EVENT_MAP.put("Request_History_Alarm", RequestHistoryAlarmItem.class);
EVENT_MAP.put("Request_History_Video", RequestHistoryVideoItem.class); EVENT_MAP.put("Request_History_Video", RequestHistoryVideoItem.class);


+ 7
- 3
src/main/java/com/inspect/tcpserver/sip/service/SipClientService.java View File

@ -541,7 +541,8 @@ public class SipClientService implements SipListener {
}, delay * 1000L); }, delay * 1000L);
//sendNotify(username, domain, port, testXml); //sendNotify(username, domain, port, testXml);
sendSubscribe(username, domain, port, "Push_Resource");
// 向SIP服务器订阅消息不符合SIP/GB28181标准
//sendSubscribe(username, domain, port, "Push_Resource");
} else { } else {
log.warn("REGISTER response: {}", status); log.warn("REGISTER response: {}", status);
} }
@ -754,9 +755,11 @@ public class SipClientService implements SipListener {
log.info("Received SIP request: {}", method); log.info("Received SIP request: {}", method);
try { try {
if (Request.MESSAGE.equalsIgnoreCase(method)) { if (Request.MESSAGE.equalsIgnoreCase(method)) {
log.info("Processing MESSAGE request from {}", ((FromHeader) request.getHeader(FromHeader.NAME)).getAddress());
ContentTypeHeader contentTypeHeader = (ContentTypeHeader) request.getHeader(ContentTypeHeader.NAME); 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 && if (contentTypeHeader != null &&
"application".equalsIgnoreCase(contentTypeHeader.getContentType()) && "application".equalsIgnoreCase(contentTypeHeader.getContentType()) &&
"xml".equalsIgnoreCase(contentTypeHeader.getContentSubType())) { "xml".equalsIgnoreCase(contentTypeHeader.getContentSubType())) {
@ -803,6 +806,7 @@ public class SipClientService implements SipListener {
log.info("Received SUBSCRIBE expires: {}, XML:\n{}", expires, xml); log.info("Received SUBSCRIBE expires: {}, XML:\n{}", expires, xml);
ServerTransaction transaction = sipProvider.getNewServerTransaction(request); ServerTransaction transaction = sipProvider.getNewServerTransaction(request);
Response response = messageFactory.createResponse(Response.OK, request); Response response = messageFactory.createResponse(Response.OK, request);
response.setExpires(expiresHeader);
transaction.sendResponse(response); transaction.sendResponse(response);
if (expires > 0) { if (expires > 0) {


+ 24
- 2
src/main/java/com/inspect/tcpserver/sip/utils/SipXmlParser.java View File

@ -1,6 +1,10 @@
package com.inspect.tcpserver.sip.utils; 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.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@ -17,12 +21,30 @@ public class SipXmlParser {
XML_MAPPER.getTypeFactory().constructParametricType(SipXmlEnvelope.class, itemClass)); XML_MAPPER.getTypeFactory().constructParametricType(SipXmlEnvelope.class, itemClass));
} }
@Setter
@Getter
@JacksonXmlRootElement(localName = "SIP_XML")
@JsonIgnoreProperties(ignoreUnknown = true)
public static class EventTypeOnly { public static class EventTypeOnly {
@com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty(isAttribute = true, localName = "EventType") @com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty(isAttribute = true, localName = "EventType")
private String 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 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<SIP_XML EventType=\"Device_Info\">\n" +
" <Item CmdType=\"DeviceInfo\" sn=\"255152\" DeviceID=\"290010021201070000\" />\n" +
"</SIP_XML>";
//String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SIP_XML EventType=\"Device_Info\"></SIP_XML>";//ok
//String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SIP_XML EventType=\"Device_Info\"><Item /></SIP_XML>";
String eventType = SipXmlParser.peekEventType(xml);
System.out.println(eventType);
} catch (Exception e) {
e.printStackTrace();
}
} }
} }


Loading…
Cancel
Save