Merge branch 'master' into dev/springBoot3

This commit is contained in:
lin
2025-10-24 17:13:57 +08:00
6 changed files with 38 additions and 68 deletions

View File

@@ -3,6 +3,8 @@ package com.genersoft.iot.vmp.gb28181.bean;
import gov.nist.javax.sip.message.SIPResponse;
import lombok.Data;
import javax.sip.header.EventHeader;
@Data
public class SipTransactionInfo {
@@ -12,6 +14,7 @@ public class SipTransactionInfo {
private String viaBranch;
private int expires;
private String user;
private String eventId;
// 自己是否媒体流发送者
private boolean asSender;
@@ -22,6 +25,10 @@ public class SipTransactionInfo {
this.toTag = response.getToTag();
this.viaBranch = response.getTopmostViaHeader().getBranch();
this.asSender = asSender;
EventHeader header = (EventHeader)response.getHeader(EventHeader.NAME);
if (header != null) {
this.eventId = header.getEventId();
}
}
public SipTransactionInfo(SIPResponse response) {
@@ -30,6 +37,10 @@ public class SipTransactionInfo {
this.toTag = response.getToTag();
this.viaBranch = response.getTopmostViaHeader().getBranch();
this.asSender = false;
EventHeader header = (EventHeader)response.getHeader(EventHeader.NAME);
if (header != null) {
this.eventId = header.getEventId();
}
}
public SipTransactionInfo() {

View File

@@ -269,12 +269,15 @@ public class SIPRequestHeaderProvider {
ExpiresHeader expireHeader = SipFactory.getInstance().createHeaderFactory().createExpiresHeader(expires);
request.addHeader(expireHeader);
// Event
EventHeader eventHeader = SipFactory.getInstance().createHeaderFactory().createEventHeader(event);
int random = (int) Math.floor(Math.random() * 10000);
eventHeader.setEventId(random + "");
request.addHeader(eventHeader);
// Event
EventHeader eventHeader = SipFactory.getInstance().createHeaderFactory().createEventHeader(event);
if (sipTransactionInfo != null && sipTransactionInfo.getEventId() != null) {
eventHeader.setEventId(sipTransactionInfo.getEventId());
}else {
int random = (int) Math.floor(Math.random() * 10000);
eventHeader.setEventId(random + "");
}
request.addHeader(eventHeader);
ContentTypeHeader contentTypeHeader = SipFactory.getInstance().createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
request.setContent(content, contentTypeHeader);

View File

@@ -1203,7 +1203,13 @@ public class SIPCommander implements ISIPCommander {
} else {
callIdHeader = sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport());
}
SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, subscribePostitionXml.toString(), sipTransactionInfo, device.getSubscribeCycleForMobilePosition(), "presence",callIdHeader); //Position;id=" + tm.substring(tm.length() - 4));
int subscribeCycleForMobilePosition = device.getSubscribeCycleForMobilePosition();
if (subscribeCycleForMobilePosition > 0) {
// 移动位置订阅有效期不小于 30 秒
subscribeCycleForMobilePosition = Math.max(subscribeCycleForMobilePosition, 30);
}
SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, subscribePostitionXml.toString(), sipTransactionInfo, subscribeCycleForMobilePosition, "presence",callIdHeader); //Position;id=" + tm.substring(tm.length() - 4));
sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent);
return request;
@@ -1275,8 +1281,13 @@ public class SIPCommander implements ISIPCommander {
callIdHeader = sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport());
}
int subscribeCycleForCatalog = device.getSubscribeCycleForCatalog();
if (subscribeCycleForCatalog > 0) {
// 目录订阅有效期不小于 30 秒
subscribeCycleForCatalog = Math.max(subscribeCycleForCatalog, 30);
}
// 有效时间默认为60秒以上
SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, cmdXml.toString(), sipTransactionInfo, device.getSubscribeCycleForCatalog(), "Catalog",
SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, cmdXml.toString(), sipTransactionInfo, subscribeCycleForCatalog, "Catalog",
callIdHeader);
sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent);
return request;