Commit 151699137259a9a92463b36795a5f935c62349c6
1 parent
5606bce8
回滚via获取地址的方式
Showing
1 changed file
with
12 additions
and
4 deletions
src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java
| @@ -13,6 +13,7 @@ import javax.sip.SipFactory; | @@ -13,6 +13,7 @@ import javax.sip.SipFactory; | ||
| 13 | import javax.sip.header.FromHeader; | 13 | import javax.sip.header.FromHeader; |
| 14 | import javax.sip.header.Header; | 14 | import javax.sip.header.Header; |
| 15 | import javax.sip.header.UserAgentHeader; | 15 | import javax.sip.header.UserAgentHeader; |
| 16 | +import javax.sip.header.ViaHeader; | ||
| 16 | import javax.sip.message.Request; | 17 | import javax.sip.message.Request; |
| 17 | import java.text.ParseException; | 18 | import java.text.ParseException; |
| 18 | import java.util.ArrayList; | 19 | import java.util.ArrayList; |
| @@ -121,6 +122,12 @@ public class SipUtils { | @@ -121,6 +122,12 @@ public class SipUtils { | ||
| 121 | return builder.toString(); | 122 | return builder.toString(); |
| 122 | } | 123 | } |
| 123 | 124 | ||
| 125 | + /** | ||
| 126 | + * 从请求中获取设备ip地址和端口号 | ||
| 127 | + * @param request 请求 | ||
| 128 | + * @param sipUseSourceIpAsRemoteAddress false 从via中获取地址, true 直接获取远程地址 | ||
| 129 | + * @return 地址信息 | ||
| 130 | + */ | ||
| 124 | public static RemoteAddressInfo getRemoteAddressFromRequest(SIPRequest request, boolean sipUseSourceIpAsRemoteAddress) { | 131 | public static RemoteAddressInfo getRemoteAddressFromRequest(SIPRequest request, boolean sipUseSourceIpAsRemoteAddress) { |
| 125 | 132 | ||
| 126 | String remoteAddress; | 133 | String remoteAddress; |
| @@ -131,12 +138,13 @@ public class SipUtils { | @@ -131,12 +138,13 @@ public class SipUtils { | ||
| 131 | }else { | 138 | }else { |
| 132 | // 判断RPort是否改变,改变则说明路由nat信息变化,修改设备信息 | 139 | // 判断RPort是否改变,改变则说明路由nat信息变化,修改设备信息 |
| 133 | // 获取到通信地址等信息 | 140 | // 获取到通信地址等信息 |
| 134 | - remoteAddress = request.getTopmostViaHeader().getReceived(); | ||
| 135 | - remotePort = request.getTopmostViaHeader().getPort(); | 141 | + ViaHeader viaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME); |
| 142 | + remoteAddress = viaHeader.getReceived(); | ||
| 143 | + remotePort = viaHeader.getRPort(); | ||
| 136 | // 解析本地地址替代 | 144 | // 解析本地地址替代 |
| 137 | if (ObjectUtils.isEmpty(remoteAddress) || remotePort == -1) { | 145 | if (ObjectUtils.isEmpty(remoteAddress) || remotePort == -1) { |
| 138 | - remoteAddress = request.getViaHost(); | ||
| 139 | - remotePort = request.getViaPort(); | 146 | + remoteAddress = viaHeader.getHost(); |
| 147 | + remotePort = viaHeader.getPort(); | ||
| 140 | } | 148 | } |
| 141 | } | 149 | } |
| 142 | 150 |