Commit 335916f1f15eb9d0b34dea38cacee2300eac0606

Authored by 李防
1 parent cbea5f64

InviteRequestProcessor类中,channelid从invite消息的header subject获取,不再从第一行request line获…

…取。原因是和第三方平台对接时,发送的invite消息第一行为国标平台编码而不是设备通道编码,导致报错通道不存在,返回404。
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
@@ -26,6 +26,7 @@ import gov.nist.javax.sdp.TimeDescriptionImpl; @@ -26,6 +26,7 @@ import gov.nist.javax.sdp.TimeDescriptionImpl;
26 import gov.nist.javax.sdp.fields.TimeField; 26 import gov.nist.javax.sdp.fields.TimeField;
27 import gov.nist.javax.sip.address.AddressImpl; 27 import gov.nist.javax.sip.address.AddressImpl;
28 import gov.nist.javax.sip.address.SipUri; 28 import gov.nist.javax.sip.address.SipUri;
  29 +import gov.nist.javax.sip.header.Subject;
29 import org.slf4j.Logger; 30 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory; 31 import org.slf4j.LoggerFactory;
31 import org.springframework.beans.factory.InitializingBean; 32 import org.springframework.beans.factory.InitializingBean;
@@ -40,6 +41,7 @@ import javax.sip.SipException; @@ -40,6 +41,7 @@ import javax.sip.SipException;
40 import javax.sip.address.SipURI; 41 import javax.sip.address.SipURI;
41 import javax.sip.header.CallIdHeader; 42 import javax.sip.header.CallIdHeader;
42 import javax.sip.header.FromHeader; 43 import javax.sip.header.FromHeader;
  44 +import javax.sip.header.Header;
43 import javax.sip.message.Request; 45 import javax.sip.message.Request;
44 import javax.sip.message.Response; 46 import javax.sip.message.Response;
45 import java.text.ParseException; 47 import java.text.ParseException;
@@ -105,7 +107,9 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -105,7 +107,9 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
105 try { 107 try {
106 Request request = evt.getRequest(); 108 Request request = evt.getRequest();
107 SipURI sipURI = (SipURI) request.getRequestURI(); 109 SipURI sipURI = (SipURI) request.getRequestURI();
108 - String channelId = sipURI.getUser(); 110 + //从subject读取channelId,不再从request-line读取。 有些平台request-line是平台国标编码,不是设备国标编码。
  111 + //String channelId = sipURI.getUser();
  112 + String channelId = SipUtils.getChannelIdFromHeader(request);
109 String requesterId = SipUtils.getUserIdFromFromHeader(request); 113 String requesterId = SipUtils.getUserIdFromFromHeader(request);
110 CallIdHeader callIdHeader = (CallIdHeader)request.getHeader(CallIdHeader.NAME); 114 CallIdHeader callIdHeader = (CallIdHeader)request.getHeader(CallIdHeader.NAME);
111 if (requesterId == null || channelId == null) { 115 if (requesterId == null || channelId == null) {
src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java
@@ -2,8 +2,10 @@ package com.genersoft.iot.vmp.gb28181.utils; @@ -2,8 +2,10 @@ package com.genersoft.iot.vmp.gb28181.utils;
2 2
3 import gov.nist.javax.sip.address.AddressImpl; 3 import gov.nist.javax.sip.address.AddressImpl;
4 import gov.nist.javax.sip.address.SipUri; 4 import gov.nist.javax.sip.address.SipUri;
  5 +import gov.nist.javax.sip.header.Subject;
5 6
6 import javax.sip.header.FromHeader; 7 import javax.sip.header.FromHeader;
  8 +import javax.sip.header.Header;
7 import javax.sip.message.Request; 9 import javax.sip.message.Request;
8 10
9 /** 11 /**
@@ -18,6 +20,13 @@ public class SipUtils { @@ -18,6 +20,13 @@ public class SipUtils {
18 FromHeader fromHeader = (FromHeader)request.getHeader(FromHeader.NAME); 20 FromHeader fromHeader = (FromHeader)request.getHeader(FromHeader.NAME);
19 return getUserIdFromFromHeader(fromHeader); 21 return getUserIdFromFromHeader(fromHeader);
20 } 22 }
  23 + /**
  24 + * 从subject读取channelId
  25 + * */
  26 + public static String getChannelIdFromHeader(Request request) {
  27 + Header subject = request.getHeader("subject");
  28 + return ((Subject) subject).getSubject().split(":")[0];
  29 + }
21 30
22 public static String getUserIdFromFromHeader(FromHeader fromHeader) { 31 public static String getUserIdFromFromHeader(FromHeader fromHeader) {
23 AddressImpl address = (AddressImpl)fromHeader.getAddress(); 32 AddressImpl address = (AddressImpl)fromHeader.getAddress();