|
|
@ -211,6 +211,11 @@ public class SipClientService implements SipListener { |
|
|
Properties properties = new Properties(); |
|
|
Properties properties = new Properties(); |
|
|
properties.setProperty("javax.sip.STACK_NAME", "spring-boot-sip-stack"); |
|
|
properties.setProperty("javax.sip.STACK_NAME", "spring-boot-sip-stack"); |
|
|
properties.setProperty("gov.nist.javax.sip.IP_ADDRESS", localIp); |
|
|
properties.setProperty("gov.nist.javax.sip.IP_ADDRESS", localIp); |
|
|
|
|
|
// 新增这些(JAIN-SIP RI 支持的 NAT 参数) |
|
|
|
|
|
properties.setProperty("gov.nist.javax.sip.OUTBOUND_PROXY", domain + ":" + port + ";" + transport); // 可选:强制出站代理 |
|
|
|
|
|
properties.setProperty("gov.nist.javax.sip.AUTOMATIC_NAT_SUPPORT", "true"); // 如果版本支持 |
|
|
|
|
|
properties.setProperty("gov.nist.javax.sip.USE_RPORT_AS_OUTBOUND", "true"); // 使用 rport 作为出站 |
|
|
|
|
|
properties.setProperty("gov.nist.javax.sip.FIX_CONTACT_HEADER", "true"); // 修复 Contact |
|
|
properties.setProperty("gov.nist.javax.sip.DEBUG_LOG", "sipdebug.txt"); |
|
|
properties.setProperty("gov.nist.javax.sip.DEBUG_LOG", "sipdebug.txt"); |
|
|
properties.setProperty("gov.nist.javax.sip.SERVER_LOG", "sipserverlog.txt"); |
|
|
properties.setProperty("gov.nist.javax.sip.SERVER_LOG", "sipserverlog.txt"); |
|
|
|
|
|
|
|
|
@ -267,7 +272,7 @@ public class SipClientService implements SipListener { |
|
|
|
|
|
|
|
|
public void sendRegister(AuthorizationHeader authHeader) throws Exception { |
|
|
public void sendRegister(AuthorizationHeader authHeader) throws Exception { |
|
|
SipURI requestUri = addressFactory.createSipURI(null, domain); |
|
|
SipURI requestUri = addressFactory.createSipURI(null, domain); |
|
|
// requestUri.setTransportParam(transport.toUpperCase()); |
|
|
|
|
|
|
|
|
requestUri.setTransportParam(transport.toUpperCase()); |
|
|
requestUri.setPort(port); |
|
|
requestUri.setPort(port); |
|
|
|
|
|
|
|
|
Address fromAddress = addressFactory.createAddress(username, addressFactory.createSipURI(username, domain)); |
|
|
Address fromAddress = addressFactory.createAddress(username, addressFactory.createSipURI(username, domain)); |
|
|
@ -279,11 +284,18 @@ public class SipClientService implements SipListener { |
|
|
CSeqHeader cSeq = headerFactory.createCSeqHeader(1L, Request.REGISTER); |
|
|
CSeqHeader cSeq = headerFactory.createCSeqHeader(1L, Request.REGISTER); |
|
|
MaxForwardsHeader maxForwards = headerFactory.createMaxForwardsHeader(70); |
|
|
MaxForwardsHeader maxForwards = headerFactory.createMaxForwardsHeader(70); |
|
|
|
|
|
|
|
|
|
|
|
//String natIp = "172.19.1.1"; // 避免硬编码:用环境变量注入 |
|
|
|
|
|
//int natPort = localPort; // 通常保持本地端口,或映射后端口 |
|
|
|
|
|
String natIp = System.getenv("SIP_NAT_IP") != null ? System.getenv("SIP_NAT_IP") : localIp; |
|
|
|
|
|
int natPort = System.getenv("SIP_NAT_PORT") != null ? Integer.parseInt(System.getenv("SIP_NAT_PORT")) : localPort; |
|
|
|
|
|
log.info("SEND_REGISTER NAT_IP: {}, NAT_PORT: {}", natIp, natPort); |
|
|
// 创建带自定义deviceid参数的Contact URI |
|
|
// 创建带自定义deviceid参数的Contact URI |
|
|
SipURI contactUri = addressFactory.createSipURI(username, localIp); |
|
|
|
|
|
contactUri.setPort(localPort); |
|
|
|
|
|
|
|
|
//SipURI contactUri = addressFactory.createSipURI(username, localIp); |
|
|
|
|
|
SipURI contactUri = addressFactory.createSipURI(username, natIp); |
|
|
|
|
|
//contactUri.setPort(localPort); |
|
|
|
|
|
contactUri.setPort(natPort); |
|
|
contactUri.setTransportParam(transport.toUpperCase()); |
|
|
contactUri.setTransportParam(transport.toUpperCase()); |
|
|
// contactUri.setParameter("deviceid", "123456"); |
|
|
|
|
|
|
|
|
contactUri.setParameter("deviceid", "123456"); |
|
|
|
|
|
|
|
|
Address contactAddress = addressFactory.createAddress(contactUri); |
|
|
Address contactAddress = addressFactory.createAddress(contactUri); |
|
|
ContactHeader contactHeader = headerFactory.createContactHeader(contactAddress); |
|
|
ContactHeader contactHeader = headerFactory.createContactHeader(contactAddress); |
|
|
@ -291,6 +303,7 @@ public class SipClientService implements SipListener { |
|
|
|
|
|
|
|
|
List<ViaHeader> viaHeaders = new ArrayList<>(); |
|
|
List<ViaHeader> viaHeaders = new ArrayList<>(); |
|
|
ViaHeader viaHeader = headerFactory.createViaHeader(localIp, localPort, transport.toUpperCase(), null); |
|
|
ViaHeader viaHeader = headerFactory.createViaHeader(localIp, localPort, transport.toUpperCase(), null); |
|
|
|
|
|
viaHeader.setRPort(); |
|
|
viaHeaders.add(viaHeader); |
|
|
viaHeaders.add(viaHeader); |
|
|
|
|
|
|
|
|
Request request = messageFactory.createRequest( |
|
|
Request request = messageFactory.createRequest( |
|
|
|