Commit 2142b7ffcd34c547819512cd809b77fcc3d4d9b1

Authored by 648540858
Committed by GitHub
2 parents b5655236 bea63f67

Merge pull request #379 from MeBetterMan/wvp-28181-2.0

级联场景,invite消息中获取channelid。以前从invite的第一行读取,现在从subject header读取。
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
... ... @@ -29,6 +29,7 @@ import gov.nist.javax.sdp.TimeDescriptionImpl;
29 29 import gov.nist.javax.sdp.fields.TimeField;
30 30 import gov.nist.javax.sip.address.AddressImpl;
31 31 import gov.nist.javax.sip.address.SipUri;
  32 +import gov.nist.javax.sip.header.Subject;
32 33 import org.slf4j.Logger;
33 34 import org.slf4j.LoggerFactory;
34 35 import org.springframework.beans.factory.InitializingBean;
... ... @@ -43,6 +44,7 @@ import javax.sip.SipException;
43 44 import javax.sip.address.SipURI;
44 45 import javax.sip.header.CallIdHeader;
45 46 import javax.sip.header.FromHeader;
  47 +import javax.sip.header.Header;
46 48 import javax.sip.message.Request;
47 49 import javax.sip.message.Response;
48 50 import java.text.ParseException;
... ... @@ -114,7 +116,9 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
114 116 try {
115 117 Request request = evt.getRequest();
116 118 SipURI sipURI = (SipURI) request.getRequestURI();
117   - String channelId = sipURI.getUser();
  119 + //从subject读取channelId,不再从request-line读取。 有些平台request-line是平台国标编码,不是设备国标编码。
  120 + //String channelId = sipURI.getUser();
  121 + String channelId = SipUtils.getChannelIdFromHeader(request);
118 122 String requesterId = SipUtils.getUserIdFromFromHeader(request);
119 123 CallIdHeader callIdHeader = (CallIdHeader)request.getHeader(CallIdHeader.NAME);
120 124 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 2  
3 3 import gov.nist.javax.sip.address.AddressImpl;
4 4 import gov.nist.javax.sip.address.SipUri;
  5 +import gov.nist.javax.sip.header.Subject;
5 6  
6 7 import javax.sip.header.FromHeader;
  8 +import javax.sip.header.Header;
7 9 import javax.sip.message.Request;
8 10  
9 11 /**
... ... @@ -18,6 +20,13 @@ public class SipUtils {
18 20 FromHeader fromHeader = (FromHeader)request.getHeader(FromHeader.NAME);
19 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 31 public static String getUserIdFromFromHeader(FromHeader fromHeader) {
23 32 AddressImpl address = (AddressImpl)fromHeader.getAddress();
... ...