Commit 335916f1f15eb9d0b34dea38cacee2300eac0606
1 parent
cbea5f64
InviteRequestProcessor类中,channelid从invite消息的header subject获取,不再从第一行request line获…
…取。原因是和第三方平台对接时,发送的invite消息第一行为国标平台编码而不是设备通道编码,导致报错通道不存在,返回404。
Showing
2 changed files
with
14 additions
and
1 deletions
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(); |