Commit 340a23a9613dae68361e5e4352556fa929911e68

Authored by Lawrence
1 parent 1a746f28

修复部分设备invite后bye无法找到设备地址的问题

src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -7,10 +7,13 @@ import javax.sip.Dialog; @@ -7,10 +7,13 @@ import javax.sip.Dialog;
7 import javax.sip.InvalidArgumentException; 7 import javax.sip.InvalidArgumentException;
8 import javax.sip.SipException; 8 import javax.sip.SipException;
9 import javax.sip.TransactionDoesNotExistException; 9 import javax.sip.TransactionDoesNotExistException;
  10 +import javax.sip.address.Address;
  11 +import javax.sip.address.SipURI;
10 import javax.sip.header.ViaHeader; 12 import javax.sip.header.ViaHeader;
11 import javax.sip.message.Request; 13 import javax.sip.message.Request;
12 14
13 import org.springframework.beans.factory.annotation.Autowired; 15 import org.springframework.beans.factory.annotation.Autowired;
  16 +import org.springframework.boot.autoconfigure.security.SecurityProperties.Headers;
14 import org.springframework.stereotype.Component; 17 import org.springframework.stereotype.Component;
15 18
16 import com.genersoft.iot.vmp.conf.SipConfig; 19 import com.genersoft.iot.vmp.conf.SipConfig;
@@ -21,6 +24,9 @@ import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander; @@ -21,6 +24,9 @@ import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
21 import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderProvider; 24 import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderProvider;
22 import com.genersoft.iot.vmp.gb28181.utils.DateUtil; 25 import com.genersoft.iot.vmp.gb28181.utils.DateUtil;
23 26
  27 +import java.util.regex.Pattern;
  28 +import java.util.regex.Matcher;
  29 +
24 /** 30 /**
25 * @Description:设备能力接口,用于定义设备的控制、查询能力 31 * @Description:设备能力接口,用于定义设备的控制、查询能力
26 * @author: songww 32 * @author: songww
@@ -288,6 +294,13 @@ public class SIPCommander implements ISIPCommander { @@ -288,6 +294,13 @@ public class SIPCommander implements ISIPCommander {
288 return; 294 return;
289 } 295 }
290 Request byeRequest = dialog.createRequest(Request.BYE); 296 Request byeRequest = dialog.createRequest(Request.BYE);
  297 + SipURI byeURI = (SipURI) byeRequest.getRequestURI();
  298 + String vh = transaction.getRequest().getHeader(ViaHeader.NAME).toString();
  299 + Pattern p = Pattern.compile("(\\d+\\.\\d+\\.\\d+\\.\\d+)\\:(\\d+)");
  300 + Matcher matcher = p.matcher(vh);
  301 + if (matcher.find()) {
  302 + byeURI.setHost(matcher.group(1));
  303 + }
291 ViaHeader viaHeader = (ViaHeader) byeRequest.getHeader(ViaHeader.NAME); 304 ViaHeader viaHeader = (ViaHeader) byeRequest.getHeader(ViaHeader.NAME);
292 String protocol = viaHeader.getTransport().toUpperCase(); 305 String protocol = viaHeader.getTransport().toUpperCase();
293 ClientTransaction clientTransaction = null; 306 ClientTransaction clientTransaction = null;
@@ -301,6 +314,8 @@ public class SIPCommander implements ISIPCommander { @@ -301,6 +314,8 @@ public class SIPCommander implements ISIPCommander {
301 e.printStackTrace(); 314 e.printStackTrace();
302 } catch (SipException e) { 315 } catch (SipException e) {
303 e.printStackTrace(); 316 e.printStackTrace();
  317 + } catch (ParseException e) {
  318 + e.printStackTrace();
304 } 319 }
305 } 320 }
306 321