Zimo 1 هفته پیش
والد
کامیت
f4ff2dc7c0

+ 1 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/yanfan/sip/handler/req/InviteReqHandler.java

@@ -20,7 +20,7 @@ public class InviteReqHandler extends ReqAbstractHandler implements Initializing
 
     @Override
     public void processMsg(RequestEvent evt) {
-        log.info("接收到INVITE信息");
+//        log.info("接收到INVITE信息");
         try {
             responseAck(evt);
         } catch (SipException | InvalidArgumentException | ParseException e) {

+ 22 - 10
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/yanfan/sip/handler/req/RegisterReqHandler.java

@@ -91,6 +91,18 @@ public class RegisterReqHandler extends ReqAbstractHandler implements Initializi
             try {
                 log.info("收到注册请求,开始处理");
                 Request request = evt.getRequest();
+
+                ViaHeader viaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);
+                String received = viaHeader.getReceived(); // 优先取received(实际接入的IP)
+                int rPort = viaHeader.getRPort();
+
+                // 本地模拟设备兼容(received为空/rPort=-1时,用ViaHeader的host/port替代)
+                if (StringUtils.isEmpty(received) || rPort == -1) {
+                    log.warn("本地地址替代! received:{},rPort:{} [{}:{}]", received, rPort, viaHeader.getHost(), viaHeader.getPort());
+                    received = viaHeader.getHost(); // 兜底取ViaHeader中的host作为IP
+                    rPort = viaHeader.getPort();
+                }
+
                 Response response;
                 // 注册标志  0:未携带授权头或者密码错误  1:注册成功   2:注销成功
                 int registerFlag;
@@ -142,16 +154,16 @@ public class RegisterReqHandler extends ReqAbstractHandler implements Initializi
                     response.addHeader(request.getHeader(ContactHeader.NAME));
                     // 添加Expires头
                     response.addHeader(request.getExpires());
-                    ViaHeader viaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);
-                    String received = viaHeader.getReceived();
-                    int rPort = viaHeader.getRPort();
-                    // 本地模拟设备 received 为空 rPort 为 -1
-                    // 解析本地地址替代
-                    if (StringUtils.isEmpty(received) || rPort == -1) {
-                        log.warn("本地地址替代! received:{},rPort:{} [{}:{}]", received, rPort, viaHeader.getHost(), viaHeader.getPort());
-                        received = viaHeader.getHost();
-                        rPort = viaHeader.getPort();
-                    }
+//                    ViaHeader viaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);
+//                    String received = viaHeader.getReceived();
+//                    int rPort = viaHeader.getRPort();
+//                    // 本地模拟设备 received 为空 rPort 为 -1
+//                    // 解析本地地址替代
+//                    if (StringUtils.isEmpty(received) || rPort == -1) {
+//                        log.warn("本地地址替代! received:{},rPort:{} [{}:{}]", received, rPort, viaHeader.getHost(), viaHeader.getPort());
+//                        received = viaHeader.getHost();
+//                        rPort = viaHeader.getPort();
+//                    }
                     YfSipDeviceDO device = new YfSipDeviceDO();
                     ;
                     device.setStreamMode("UDP");