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 | 26 | import gov.nist.javax.sdp.fields.TimeField; |
| 27 | 27 | import gov.nist.javax.sip.address.AddressImpl; |
| 28 | 28 | import gov.nist.javax.sip.address.SipUri; |
| 29 | +import gov.nist.javax.sip.header.Subject; | |
| 29 | 30 | import org.slf4j.Logger; |
| 30 | 31 | import org.slf4j.LoggerFactory; |
| 31 | 32 | import org.springframework.beans.factory.InitializingBean; |
| ... | ... | @@ -40,6 +41,7 @@ import javax.sip.SipException; |
| 40 | 41 | import javax.sip.address.SipURI; |
| 41 | 42 | import javax.sip.header.CallIdHeader; |
| 42 | 43 | import javax.sip.header.FromHeader; |
| 44 | +import javax.sip.header.Header; | |
| 43 | 45 | import javax.sip.message.Request; |
| 44 | 46 | import javax.sip.message.Response; |
| 45 | 47 | import java.text.ParseException; |
| ... | ... | @@ -105,7 +107,9 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements |
| 105 | 107 | try { |
| 106 | 108 | Request request = evt.getRequest(); |
| 107 | 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 | 113 | String requesterId = SipUtils.getUserIdFromFromHeader(request); |
| 110 | 114 | CallIdHeader callIdHeader = (CallIdHeader)request.getHeader(CallIdHeader.NAME); |
| 111 | 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 | 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(); | ... | ... |