|
@@ -7,6 +7,7 @@ import com.genersoft.iot.vmp.gb28181.bean.*;
|
|
|
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
|
|
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
|
|
|
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
|
|
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
|
|
|
import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
|
|
import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
|
|
|
|
|
+import com.genersoft.iot.vmp.gb28181.transmit.SIPSender;
|
|
|
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
|
|
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
|
|
|
import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
|
|
import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
|
|
|
import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
|
|
import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
|
|
@@ -81,7 +82,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
private IPlayService playService;
|
|
private IPlayService playService;
|
|
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
|
- private ISIPCommander commander;
|
|
|
|
|
|
|
+ private SIPSender sipSender;
|
|
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private ZLMRTPServerFactory zlmrtpServerFactory;
|
|
private ZLMRTPServerFactory zlmrtpServerFactory;
|
|
@@ -124,16 +125,15 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
public void process(RequestEvent evt) {
|
|
public void process(RequestEvent evt) {
|
|
|
// Invite Request消息实现,此消息一般为级联消息,上级给下级发送请求视频指令
|
|
// Invite Request消息实现,此消息一般为级联消息,上级给下级发送请求视频指令
|
|
|
try {
|
|
try {
|
|
|
- Request request = evt.getRequest();
|
|
|
|
|
|
|
+ SIPRequest request = (SIPRequest)evt.getRequest();
|
|
|
String channelId = SipUtils.getChannelIdFromRequest(request);
|
|
String channelId = SipUtils.getChannelIdFromRequest(request);
|
|
|
String requesterId = SipUtils.getUserIdFromFromHeader(request);
|
|
String requesterId = SipUtils.getUserIdFromFromHeader(request);
|
|
|
CallIdHeader callIdHeader = (CallIdHeader) request.getHeader(CallIdHeader.NAME);
|
|
CallIdHeader callIdHeader = (CallIdHeader) request.getHeader(CallIdHeader.NAME);
|
|
|
- ServerTransaction serverTransaction = getServerTransaction(evt);
|
|
|
|
|
if (requesterId == null || channelId == null) {
|
|
if (requesterId == null || channelId == null) {
|
|
|
logger.info("无法从FromHeader的Address中获取到平台id,返回400");
|
|
logger.info("无法从FromHeader的Address中获取到平台id,返回400");
|
|
|
// 参数不全, 发400,请求错误
|
|
// 参数不全, 发400,请求错误
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.BAD_REQUEST);
|
|
|
|
|
|
|
+ responseAck(request, Response.BAD_REQUEST);
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite BAD_REQUEST: {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite BAD_REQUEST: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
@@ -144,7 +144,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
// 查询请求是否来自上级平台\设备
|
|
// 查询请求是否来自上级平台\设备
|
|
|
ParentPlatform platform = storager.queryParentPlatByServerGBId(requesterId);
|
|
ParentPlatform platform = storager.queryParentPlatByServerGBId(requesterId);
|
|
|
if (platform == null) {
|
|
if (platform == null) {
|
|
|
- inviteFromDeviceHandle(serverTransaction, requesterId);
|
|
|
|
|
|
|
+ inviteFromDeviceHandle(request, requesterId);
|
|
|
|
|
|
|
|
} else {
|
|
} else {
|
|
|
// 查询平台下是否有该通道
|
|
// 查询平台下是否有该通道
|
|
@@ -159,12 +159,12 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
if (channel != null && gbStream == null) {
|
|
if (channel != null && gbStream == null) {
|
|
|
// if (channel.getStatus() == 0) {
|
|
// if (channel.getStatus() == 0) {
|
|
|
// logger.info("通道离线,返回400");
|
|
// logger.info("通道离线,返回400");
|
|
|
-// responseAck(serverTransaction, Response.BAD_REQUEST, "channel [" + channel.getChannelId() + "] offline");
|
|
|
|
|
|
|
+// responseAck(request, Response.BAD_REQUEST, "channel [" + channel.getChannelId() + "] offline");
|
|
|
// return;
|
|
// return;
|
|
|
// }
|
|
// }
|
|
|
// 通道存在,发100,TRYING
|
|
// 通道存在,发100,TRYING
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.TRYING);
|
|
|
|
|
|
|
+ responseAck(request, Response.TRYING);
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite TRYING: {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite TRYING: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
@@ -176,7 +176,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
if ("proxy".equals(gbStream.getStreamType())) {
|
|
if ("proxy".equals(gbStream.getStreamType())) {
|
|
|
logger.info("[ app={}, stream={} ]找不到zlm {},返回410", gbStream.getApp(), gbStream.getStream(), mediaServerId);
|
|
logger.info("[ app={}, stream={} ]找不到zlm {},返回410", gbStream.getApp(), gbStream.getStream(), mediaServerId);
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.GONE);
|
|
|
|
|
|
|
+ responseAck(request, Response.GONE);
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite GONE: {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite GONE: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
@@ -186,7 +186,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
if (streamPushItem == null || streamPushItem.getServerId().equals(userSetting.getServerId())) {
|
|
if (streamPushItem == null || streamPushItem.getServerId().equals(userSetting.getServerId())) {
|
|
|
logger.info("[ app={}, stream={} ]找不到zlm {},返回410", gbStream.getApp(), gbStream.getStream(), mediaServerId);
|
|
logger.info("[ app={}, stream={} ]找不到zlm {},返回410", gbStream.getApp(), gbStream.getStream(), mediaServerId);
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.GONE);
|
|
|
|
|
|
|
+ responseAck(request, Response.GONE);
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite GONE: {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite GONE: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
@@ -199,7 +199,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
if (streamPushItem == null) {
|
|
if (streamPushItem == null) {
|
|
|
logger.info("[ app={}, stream={} ]找不到zlm {},返回410", gbStream.getApp(), gbStream.getStream(), mediaServerId);
|
|
logger.info("[ app={}, stream={} ]找不到zlm {},返回410", gbStream.getApp(), gbStream.getStream(), mediaServerId);
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.GONE);
|
|
|
|
|
|
|
+ responseAck(request, Response.GONE);
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite GONE: {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite GONE: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
@@ -210,7 +210,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
if (proxyByAppAndStream == null) {
|
|
if (proxyByAppAndStream == null) {
|
|
|
logger.info("[ app={}, stream={} ]找不到zlm {},返回410", gbStream.getApp(), gbStream.getStream(), mediaServerId);
|
|
logger.info("[ app={}, stream={} ]找不到zlm {},返回410", gbStream.getApp(), gbStream.getStream(), mediaServerId);
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.GONE);
|
|
|
|
|
|
|
+ responseAck(request, Response.GONE);
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite GONE: {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite GONE: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
@@ -219,14 +219,14 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.CALL_IS_BEING_FORWARDED);
|
|
|
|
|
|
|
+ responseAck(request, Response.CALL_IS_BEING_FORWARDED);
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite CALL_IS_BEING_FORWARDED: {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite CALL_IS_BEING_FORWARDED: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
|
} else if (catalog != null) {
|
|
} else if (catalog != null) {
|
|
|
try {
|
|
try {
|
|
|
// 目录不支持点播
|
|
// 目录不支持点播
|
|
|
- responseAck(serverTransaction, Response.BAD_REQUEST, "catalog channel can not play");
|
|
|
|
|
|
|
+ responseAck(request, Response.BAD_REQUEST, "catalog channel can not play");
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite 目录不支持点播: {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite 目录不支持点播: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
@@ -235,7 +235,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
logger.info("通道不存在,返回404");
|
|
logger.info("通道不存在,返回404");
|
|
|
try {
|
|
try {
|
|
|
// 通道不存在,发404,资源不存在
|
|
// 通道不存在,发404,资源不存在
|
|
|
- responseAck(serverTransaction, Response.NOT_FOUND);
|
|
|
|
|
|
|
+ responseAck(request, Response.NOT_FOUND);
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite 通道不存在: {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite 通道不存在: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
@@ -311,7 +311,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
// 回复不支持的格式
|
|
// 回复不支持的格式
|
|
|
try {
|
|
try {
|
|
|
// 不支持的格式,发415
|
|
// 不支持的格式,发415
|
|
|
- responseAck(serverTransaction, Response.UNSUPPORTED_MEDIA_TYPE);
|
|
|
|
|
|
|
+ responseAck(request, Response.UNSUPPORTED_MEDIA_TYPE);
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite 不支持的格式: {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite 不支持的格式: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
@@ -328,7 +328,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
if (device == null) {
|
|
if (device == null) {
|
|
|
logger.warn("点播平台{}的通道{}时未找到设备信息", requesterId, channel);
|
|
logger.warn("点播平台{}的通道{}时未找到设备信息", requesterId, channel);
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.SERVER_INTERNAL_ERROR);
|
|
|
|
|
|
|
+ responseAck(request, Response.SERVER_INTERNAL_ERROR);
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite 未找到设备信息: {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite 未找到设备信息: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
@@ -338,7 +338,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
if (mediaServerItem == null) {
|
|
if (mediaServerItem == null) {
|
|
|
logger.warn("未找到可用的zlm");
|
|
logger.warn("未找到可用的zlm");
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.BUSY_HERE);
|
|
|
|
|
|
|
+ responseAck(request, Response.BUSY_HERE);
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite BUSY_HERE: {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite BUSY_HERE: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
@@ -354,7 +354,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
if (sendRtpItem == null) {
|
|
if (sendRtpItem == null) {
|
|
|
logger.warn("服务器端口资源不足");
|
|
logger.warn("服务器端口资源不足");
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.BUSY_HERE);
|
|
|
|
|
|
|
+ responseAck(request, Response.BUSY_HERE);
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite 服务器端口资源不足: {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite 服务器端口资源不足: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
@@ -403,7 +403,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
logger.error("[命令发送失败] 国标级联 发送BYE: {}", e.getMessage());
|
|
logger.error("[命令发送失败] 国标级联 发送BYE: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
|
}, 60 * 1000);
|
|
}, 60 * 1000);
|
|
|
- responseSdpAck(serverTransaction, content.toString(), platform);
|
|
|
|
|
|
|
+ responseSdpAck(request, content.toString(), platform);
|
|
|
|
|
|
|
|
} catch (SipException e) {
|
|
} catch (SipException e) {
|
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
@@ -415,15 +415,10 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
};
|
|
};
|
|
|
SipSubscribe.Event errorEvent = ((event) -> {
|
|
SipSubscribe.Event errorEvent = ((event) -> {
|
|
|
// 未知错误。直接转发设备点播的错误
|
|
// 未知错误。直接转发设备点播的错误
|
|
|
- Response response = null;
|
|
|
|
|
try {
|
|
try {
|
|
|
- response = getMessageFactory().createResponse(event.statusCode, evt.getRequest());
|
|
|
|
|
- serverTransaction.sendResponse(response);
|
|
|
|
|
- System.out.println("未知错误。直接转发设备点播的错误");
|
|
|
|
|
- if (serverTransaction.getDialog() != null) {
|
|
|
|
|
- serverTransaction.getDialog().delete();
|
|
|
|
|
- }
|
|
|
|
|
- } catch (ParseException | SipException | InvalidArgumentException e) {
|
|
|
|
|
|
|
+ Response response = getMessageFactory().createResponse(event.statusCode, evt.getRequest());
|
|
|
|
|
+ sipSender.transmitRequest(response);
|
|
|
|
|
+ } catch (ParseException | SipException e) {
|
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
@@ -443,7 +438,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
}
|
|
}
|
|
|
redisCatchStorage.deleteSendRTPServer(platform.getServerGBId(), channelId, callIdHeader.getCallId(), null);
|
|
redisCatchStorage.deleteSendRTPServer(platform.getServerGBId(), channelId, callIdHeader.getCallId(), null);
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.REQUEST_TIMEOUT);
|
|
|
|
|
|
|
+ responseAck(request, Response.REQUEST_TIMEOUT);
|
|
|
} catch (SipException e) {
|
|
} catch (SipException e) {
|
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
|
} catch (InvalidArgumentException e) {
|
|
} catch (InvalidArgumentException e) {
|
|
@@ -503,26 +498,26 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
if("push".equals(gbStream.getStreamType())) {
|
|
if("push".equals(gbStream.getStreamType())) {
|
|
|
if (streamPushItem != null && streamPushItem.isPushIng()) {
|
|
if (streamPushItem != null && streamPushItem.isPushIng()) {
|
|
|
// 推流状态
|
|
// 推流状态
|
|
|
- pushStream(evt, serverTransaction, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
|
|
|
|
+ pushStream(evt, request, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
|
} else {
|
|
} else {
|
|
|
// 未推流 拉起
|
|
// 未推流 拉起
|
|
|
- notifyStreamOnline(evt, serverTransaction,gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
|
|
|
|
+ notifyStreamOnline(evt, request,gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
|
}
|
|
}
|
|
|
}else if ("proxy".equals(gbStream.getStreamType())){
|
|
}else if ("proxy".equals(gbStream.getStreamType())){
|
|
|
if(null != proxyByAppAndStream &&proxyByAppAndStream.isStatus()){
|
|
if(null != proxyByAppAndStream &&proxyByAppAndStream.isStatus()){
|
|
|
- pushProxyStream(evt, serverTransaction, gbStream, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
|
|
|
|
+ pushProxyStream(evt, request, gbStream, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
|
}else{
|
|
}else{
|
|
|
//开启代理拉流
|
|
//开启代理拉流
|
|
|
boolean start1 = streamProxyService.start(gbStream.getApp(), gbStream.getStream());
|
|
boolean start1 = streamProxyService.start(gbStream.getApp(), gbStream.getStream());
|
|
|
if(start1) {
|
|
if(start1) {
|
|
|
- pushProxyStream(evt, serverTransaction, gbStream, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
|
|
|
|
+ pushProxyStream(evt, request, gbStream, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
|
}else{
|
|
}else{
|
|
|
//失败后通知
|
|
//失败后通知
|
|
|
- notifyStreamOnline(evt, serverTransaction,gbStream, null, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
|
|
|
|
+ notifyStreamOnline(evt, request,gbStream, null, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -540,7 +535,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
/**
|
|
/**
|
|
|
* 安排推流
|
|
* 安排推流
|
|
|
*/
|
|
*/
|
|
|
- private void pushProxyStream(RequestEvent evt, ServerTransaction serverTransaction, GbStream gbStream, ParentPlatform platform,
|
|
|
|
|
|
|
+ private void pushProxyStream(RequestEvent evt, SIPRequest request, GbStream gbStream, ParentPlatform platform,
|
|
|
CallIdHeader callIdHeader, MediaServerItem mediaServerItem,
|
|
CallIdHeader callIdHeader, MediaServerItem mediaServerItem,
|
|
|
int port, Boolean tcpActive, boolean mediaTransmissionTCP,
|
|
int port, Boolean tcpActive, boolean mediaTransmissionTCP,
|
|
|
String channelId, String addressStr, String ssrc, String requesterId) {
|
|
String channelId, String addressStr, String ssrc, String requesterId) {
|
|
@@ -554,7 +549,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
if (sendRtpItem == null) {
|
|
if (sendRtpItem == null) {
|
|
|
logger.warn("服务器端口资源不足");
|
|
logger.warn("服务器端口资源不足");
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.BUSY_HERE);
|
|
|
|
|
|
|
+ responseAck(request, Response.BUSY_HERE);
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite 服务器端口资源不足: {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite 服务器端口资源不足: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
@@ -567,10 +562,9 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
// 写入redis, 超时时回复
|
|
// 写入redis, 超时时回复
|
|
|
sendRtpItem.setStatus(1);
|
|
sendRtpItem.setStatus(1);
|
|
|
sendRtpItem.setCallId(callIdHeader.getCallId());
|
|
sendRtpItem.setCallId(callIdHeader.getCallId());
|
|
|
- SIPRequest request = (SIPRequest) evt.getRequest();
|
|
|
|
|
sendRtpItem.setFromTag(request.getFromTag());
|
|
sendRtpItem.setFromTag(request.getFromTag());
|
|
|
|
|
|
|
|
- SIPResponse response = sendStreamAck(mediaServerItem, serverTransaction, sendRtpItem, platform, evt);
|
|
|
|
|
|
|
+ SIPResponse response = sendStreamAck(mediaServerItem, request, sendRtpItem, platform, evt);
|
|
|
if (response != null) {
|
|
if (response != null) {
|
|
|
sendRtpItem.setToTag(response.getToTag());
|
|
sendRtpItem.setToTag(response.getToTag());
|
|
|
}
|
|
}
|
|
@@ -579,7 +573,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
- private void pushStream(RequestEvent evt, ServerTransaction serverTransaction, GbStream gbStream, StreamPushItem streamPushItem, ParentPlatform platform,
|
|
|
|
|
|
|
+ private void pushStream(RequestEvent evt, SIPRequest request, GbStream gbStream, StreamPushItem streamPushItem, ParentPlatform platform,
|
|
|
CallIdHeader callIdHeader, MediaServerItem mediaServerItem,
|
|
CallIdHeader callIdHeader, MediaServerItem mediaServerItem,
|
|
|
int port, Boolean tcpActive, boolean mediaTransmissionTCP,
|
|
int port, Boolean tcpActive, boolean mediaTransmissionTCP,
|
|
|
String channelId, String addressStr, String ssrc, String requesterId) {
|
|
String channelId, String addressStr, String ssrc, String requesterId) {
|
|
@@ -595,7 +589,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
if (sendRtpItem == null) {
|
|
if (sendRtpItem == null) {
|
|
|
logger.warn("服务器端口资源不足");
|
|
logger.warn("服务器端口资源不足");
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.BUSY_HERE);
|
|
|
|
|
|
|
+ responseAck(request, Response.BUSY_HERE);
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite 服务器端口资源不足: {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite 服务器端口资源不足: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
@@ -609,9 +603,8 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
sendRtpItem.setStatus(1);
|
|
sendRtpItem.setStatus(1);
|
|
|
sendRtpItem.setCallId(callIdHeader.getCallId());
|
|
sendRtpItem.setCallId(callIdHeader.getCallId());
|
|
|
|
|
|
|
|
- SIPRequest request = (SIPRequest) evt.getRequest();
|
|
|
|
|
sendRtpItem.setFromTag(request.getFromTag());
|
|
sendRtpItem.setFromTag(request.getFromTag());
|
|
|
- SIPResponse response = sendStreamAck(mediaServerItem, serverTransaction, sendRtpItem, platform, evt);
|
|
|
|
|
|
|
+ SIPResponse response = sendStreamAck(mediaServerItem, request, sendRtpItem, platform, evt);
|
|
|
if (response != null) {
|
|
if (response != null) {
|
|
|
sendRtpItem.setToTag(response.getToTag());
|
|
sendRtpItem.setToTag(response.getToTag());
|
|
|
}
|
|
}
|
|
@@ -620,20 +613,20 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
|
|
|
|
|
} else {
|
|
} else {
|
|
|
// 不在线 拉起
|
|
// 不在线 拉起
|
|
|
- notifyStreamOnline(evt, serverTransaction,gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
|
|
|
|
+ notifyStreamOnline(evt, request,gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
} else {
|
|
|
// 其他平台内容
|
|
// 其他平台内容
|
|
|
- otherWvpPushStream(evt, serverTransaction, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
|
|
|
|
+ otherWvpPushStream(evt, request, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
/**
|
|
/**
|
|
|
* 通知流上线
|
|
* 通知流上线
|
|
|
*/
|
|
*/
|
|
|
- private void notifyStreamOnline(RequestEvent evt, ServerTransaction serverTransaction, GbStream gbStream, StreamPushItem streamPushItem, ParentPlatform platform,
|
|
|
|
|
|
|
+ private void notifyStreamOnline(RequestEvent evt, SIPRequest request, GbStream gbStream, StreamPushItem streamPushItem, ParentPlatform platform,
|
|
|
CallIdHeader callIdHeader, MediaServerItem mediaServerItem,
|
|
CallIdHeader callIdHeader, MediaServerItem mediaServerItem,
|
|
|
int port, Boolean tcpActive, boolean mediaTransmissionTCP,
|
|
int port, Boolean tcpActive, boolean mediaTransmissionTCP,
|
|
|
String channelId, String addressStr, String ssrc, String requesterId) {
|
|
String channelId, String addressStr, String ssrc, String requesterId) {
|
|
@@ -641,7 +634,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
// TODO 控制启用以使设备上线
|
|
// TODO 控制启用以使设备上线
|
|
|
logger.info("[ app={}, stream={} ]通道未推流,启用流后开始推流", gbStream.getApp(), gbStream.getStream());
|
|
logger.info("[ app={}, stream={} ]通道未推流,启用流后开始推流", gbStream.getApp(), gbStream.getStream());
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.BAD_REQUEST, "channel [" + gbStream.getGbId() + "] offline");
|
|
|
|
|
|
|
+ responseAck(request, Response.BAD_REQUEST, "channel [" + gbStream.getGbId() + "] offline");
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite 通道未推流: {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite 通道未推流: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
@@ -649,7 +642,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
if (!platform.isStartOfflinePush()) {
|
|
if (!platform.isStartOfflinePush()) {
|
|
|
// 平台设置中关闭了拉起离线的推流则直接回复
|
|
// 平台设置中关闭了拉起离线的推流则直接回复
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.TEMPORARILY_UNAVAILABLE, "channel stream not pushing");
|
|
|
|
|
|
|
+ responseAck(request, Response.TEMPORARILY_UNAVAILABLE, "channel stream not pushing");
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite 通道未推流: {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite 通道未推流: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
@@ -667,7 +660,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
logger.info("[ app={}, stream={} ] 等待设备开始推流超时", gbStream.getApp(), gbStream.getStream());
|
|
logger.info("[ app={}, stream={} ] 等待设备开始推流超时", gbStream.getApp(), gbStream.getStream());
|
|
|
try {
|
|
try {
|
|
|
mediaListManager.removedChannelOnlineEventLister(gbStream.getApp(), gbStream.getStream());
|
|
mediaListManager.removedChannelOnlineEventLister(gbStream.getApp(), gbStream.getStream());
|
|
|
- responseAck(serverTransaction, Response.REQUEST_TIMEOUT); // 超时
|
|
|
|
|
|
|
+ responseAck(request, Response.REQUEST_TIMEOUT); // 超时
|
|
|
} catch (SipException e) {
|
|
} catch (SipException e) {
|
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
|
} catch (InvalidArgumentException e) {
|
|
} catch (InvalidArgumentException e) {
|
|
@@ -690,7 +683,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
if (sendRtpItem == null) {
|
|
if (sendRtpItem == null) {
|
|
|
logger.warn("上级点时创建sendRTPItem失败,可能是服务器端口资源不足");
|
|
logger.warn("上级点时创建sendRTPItem失败,可能是服务器端口资源不足");
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.BUSY_HERE);
|
|
|
|
|
|
|
+ responseAck(request, Response.BUSY_HERE);
|
|
|
} catch (SipException e) {
|
|
} catch (SipException e) {
|
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
|
} catch (InvalidArgumentException e) {
|
|
} catch (InvalidArgumentException e) {
|
|
@@ -708,16 +701,15 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
sendRtpItem.setStatus(1);
|
|
sendRtpItem.setStatus(1);
|
|
|
sendRtpItem.setCallId(callIdHeader.getCallId());
|
|
sendRtpItem.setCallId(callIdHeader.getCallId());
|
|
|
|
|
|
|
|
- SIPRequest request = (SIPRequest) evt.getRequest();
|
|
|
|
|
sendRtpItem.setFromTag(request.getFromTag());
|
|
sendRtpItem.setFromTag(request.getFromTag());
|
|
|
- SIPResponse response = sendStreamAck(mediaServerItem, serverTransaction, sendRtpItem, platform, evt);
|
|
|
|
|
|
|
+ SIPResponse response = sendStreamAck(mediaServerItem, request, sendRtpItem, platform, evt);
|
|
|
if (response != null) {
|
|
if (response != null) {
|
|
|
sendRtpItem.setToTag(response.getToTag());
|
|
sendRtpItem.setToTag(response.getToTag());
|
|
|
}
|
|
}
|
|
|
redisCatchStorage.updateSendRTPSever(sendRtpItem);
|
|
redisCatchStorage.updateSendRTPSever(sendRtpItem);
|
|
|
} else {
|
|
} else {
|
|
|
// 其他平台内容
|
|
// 其他平台内容
|
|
|
- otherWvpPushStream(evt, serverTransaction, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
|
|
|
|
+ otherWvpPushStream(evt, request, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
@@ -728,7 +720,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
dynamicTask.stop(callIdHeader.getCallId());
|
|
dynamicTask.stop(callIdHeader.getCallId());
|
|
|
mediaListManager.removedChannelOnlineEventLister(gbStream.getApp(), gbStream.getStream());
|
|
mediaListManager.removedChannelOnlineEventLister(gbStream.getApp(), gbStream.getStream());
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.TEMPORARILY_UNAVAILABLE, response.getMsg());
|
|
|
|
|
|
|
+ responseAck(request, Response.TEMPORARILY_UNAVAILABLE, response.getMsg());
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] 国标级联 点播回复: {}", e.getMessage());
|
|
logger.error("[命令发送失败] 国标级联 点播回复: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
@@ -740,7 +732,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
/**
|
|
/**
|
|
|
* 来自其他wvp的推流
|
|
* 来自其他wvp的推流
|
|
|
*/
|
|
*/
|
|
|
- private void otherWvpPushStream(RequestEvent evt, ServerTransaction serverTransaction, GbStream gbStream, StreamPushItem streamPushItem, ParentPlatform platform,
|
|
|
|
|
|
|
+ private void otherWvpPushStream(RequestEvent evt, SIPRequest request, GbStream gbStream, StreamPushItem streamPushItem, ParentPlatform platform,
|
|
|
CallIdHeader callIdHeader, MediaServerItem mediaServerItem,
|
|
CallIdHeader callIdHeader, MediaServerItem mediaServerItem,
|
|
|
int port, Boolean tcpActive, boolean mediaTransmissionTCP,
|
|
int port, Boolean tcpActive, boolean mediaTransmissionTCP,
|
|
|
String channelId, String addressStr, String ssrc, String requesterId) {
|
|
String channelId, String addressStr, String ssrc, String requesterId) {
|
|
@@ -753,7 +745,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
if (sendRtpItem == null || responseSendItemMsg.getMediaServerItem() == null) {
|
|
if (sendRtpItem == null || responseSendItemMsg.getMediaServerItem() == null) {
|
|
|
logger.warn("服务器端口资源不足");
|
|
logger.warn("服务器端口资源不足");
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.BUSY_HERE);
|
|
|
|
|
|
|
+ responseAck(request, Response.BUSY_HERE);
|
|
|
} catch (SipException e) {
|
|
} catch (SipException e) {
|
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
|
} catch (InvalidArgumentException e) {
|
|
} catch (InvalidArgumentException e) {
|
|
@@ -772,9 +764,8 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
sendRtpItem.setStatus(1);
|
|
sendRtpItem.setStatus(1);
|
|
|
sendRtpItem.setCallId(callIdHeader.getCallId());
|
|
sendRtpItem.setCallId(callIdHeader.getCallId());
|
|
|
|
|
|
|
|
- SIPRequest request = (SIPRequest) evt.getRequest();
|
|
|
|
|
sendRtpItem.setFromTag(request.getFromTag());
|
|
sendRtpItem.setFromTag(request.getFromTag());
|
|
|
- SIPResponse response = sendStreamAck(responseSendItemMsg.getMediaServerItem(), serverTransaction,sendRtpItem, platform, evt);
|
|
|
|
|
|
|
+ SIPResponse response = sendStreamAck(responseSendItemMsg.getMediaServerItem(), request,sendRtpItem, platform, evt);
|
|
|
if (response != null) {
|
|
if (response != null) {
|
|
|
sendRtpItem.setToTag(response.getToTag());
|
|
sendRtpItem.setToTag(response.getToTag());
|
|
|
}
|
|
}
|
|
@@ -788,24 +779,24 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
StreamPushItem currentStreamPushItem = streamPushService.getPush(streamPushItem.getApp(), streamPushItem.getStream());
|
|
StreamPushItem currentStreamPushItem = streamPushService.getPush(streamPushItem.getApp(), streamPushItem.getStream());
|
|
|
if (currentStreamPushItem.isPushIng()) {
|
|
if (currentStreamPushItem.isPushIng()) {
|
|
|
// 在线状态
|
|
// 在线状态
|
|
|
- pushStream(evt, serverTransaction, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
|
|
|
|
+ pushStream(evt, request, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
|
|
|
|
|
|
} else {
|
|
} else {
|
|
|
// 不在线 拉起
|
|
// 不在线 拉起
|
|
|
- notifyStreamOnline(evt, serverTransaction, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
|
|
|
|
+ notifyStreamOnline(evt, request, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.BUSY_HERE);
|
|
|
|
|
|
|
+ responseAck(request, Response.BUSY_HERE);
|
|
|
} catch (InvalidArgumentException | ParseException | SipException e) {
|
|
} catch (InvalidArgumentException | ParseException | SipException e) {
|
|
|
logger.error("[命令发送失败] 国标级联 点播回复 BUSY_HERE: {}", e.getMessage());
|
|
logger.error("[命令发送失败] 国标级联 点播回复 BUSY_HERE: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public SIPResponse sendStreamAck(MediaServerItem mediaServerItem, ServerTransaction serverTransaction, SendRtpItem sendRtpItem, ParentPlatform platform, RequestEvent evt) {
|
|
|
|
|
|
|
+ public SIPResponse sendStreamAck(MediaServerItem mediaServerItem, SIPRequest request, SendRtpItem sendRtpItem, ParentPlatform platform, RequestEvent evt) {
|
|
|
|
|
|
|
|
StringBuffer content = new StringBuffer(200);
|
|
StringBuffer content = new StringBuffer(200);
|
|
|
content.append("v=0\r\n");
|
|
content.append("v=0\r\n");
|
|
@@ -828,7 +819,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
content.append("f=\r\n");
|
|
content.append("f=\r\n");
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
- return responseSdpAck(serverTransaction, content.toString(), platform);
|
|
|
|
|
|
|
+ return responseSdpAck(request, content.toString(), platform);
|
|
|
} catch (SipException e) {
|
|
} catch (SipException e) {
|
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
|
} catch (InvalidArgumentException e) {
|
|
} catch (InvalidArgumentException e) {
|
|
@@ -839,18 +830,18 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public void inviteFromDeviceHandle(ServerTransaction serverTransaction, String requesterId) {
|
|
|
|
|
|
|
+ public void inviteFromDeviceHandle(SIPRequest request, String requesterId) {
|
|
|
|
|
|
|
|
// 非上级平台请求,查询是否设备请求(通常为接收语音广播的设备)
|
|
// 非上级平台请求,查询是否设备请求(通常为接收语音广播的设备)
|
|
|
Device device = redisCatchStorage.getDevice(requesterId);
|
|
Device device = redisCatchStorage.getDevice(requesterId);
|
|
|
if (device != null) {
|
|
if (device != null) {
|
|
|
logger.info("收到设备" + requesterId + "的语音广播Invite请求");
|
|
logger.info("收到设备" + requesterId + "的语音广播Invite请求");
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.TRYING);
|
|
|
|
|
|
|
+ responseAck(request, Response.TRYING);
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite BAD_REQUEST: {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite BAD_REQUEST: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
|
- String contentString = new String(serverTransaction.getRequest().getRawContent());
|
|
|
|
|
|
|
+ String contentString = new String(request.getRawContent());
|
|
|
// jainSip不支持y=字段, 移除移除以解析。
|
|
// jainSip不支持y=字段, 移除移除以解析。
|
|
|
String substring = contentString;
|
|
String substring = contentString;
|
|
|
String ssrc = "0000000404";
|
|
String ssrc = "0000000404";
|
|
@@ -900,7 +891,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
logger.info("不支持的媒体格式,返回415");
|
|
logger.info("不支持的媒体格式,返回415");
|
|
|
// 回复不支持的格式
|
|
// 回复不支持的格式
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.UNSUPPORTED_MEDIA_TYPE); // 不支持的格式,发415
|
|
|
|
|
|
|
+ responseAck(request, Response.UNSUPPORTED_MEDIA_TYPE); // 不支持的格式,发415
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite 不支持的媒体格式,返回415, {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite 不支持的媒体格式,返回415, {}", e.getMessage());
|
|
|
}
|
|
}
|
|
@@ -918,7 +909,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
} else {
|
|
} else {
|
|
|
logger.warn("来自无效设备/平台的请求");
|
|
logger.warn("来自无效设备/平台的请求");
|
|
|
try {
|
|
try {
|
|
|
- responseAck(serverTransaction, Response.BAD_REQUEST);; // 不支持的格式,发415
|
|
|
|
|
|
|
+ responseAck(request, Response.BAD_REQUEST);; // 不支持的格式,发415
|
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
} catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
logger.error("[命令发送失败] invite 来自无效设备/平台的请求, {}", e.getMessage());
|
|
logger.error("[命令发送失败] invite 来自无效设备/平台的请求, {}", e.getMessage());
|
|
|
}
|
|
}
|