Compare commits

..

1 Commits

Author SHA1 Message Date
WangXuewen
60fa063c00
Pre Merge pull request !34 from WangXuewen/master 2025-05-10 15:23:13 +00:00
6 changed files with 47 additions and 72 deletions

View File

@ -1,16 +1,27 @@
package com.genersoft.iot.vmp.gb28181.bean; package com.genersoft.iot.vmp.gb28181.bean;
import lombok.Data;
import javax.sip.Dialog; import javax.sip.Dialog;
import java.util.EventObject; import java.util.EventObject;
@Data public class DeviceNotFoundEvent extends EventObject {
public class DeviceNotFoundEvent {
private String callId; private String callId;
public DeviceNotFoundEvent(String callId) { /**
* Constructs a prototypical Event.
*
* @param dialog
* @throws IllegalArgumentException if source is null.
*/
public DeviceNotFoundEvent(Dialog dialog) {
super(dialog);
}
public String getCallId() {
return callId;
}
public void setCallId(String callId) {
this.callId = callId; this.callId = callId;
} }
} }

View File

@ -1,19 +0,0 @@
package com.genersoft.iot.vmp.gb28181.bean;
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
import lombok.Data;
@Data
public class SipSendFailEvent extends SipSubscribe.EventResult<String> {
private String callId;
private String msg;
public static SipSendFailEvent getInstance(String callId, String msg){
SipSendFailEvent sipSendFailEvent = new SipSendFailEvent();
sipSendFailEvent.setMsg(msg);
sipSendFailEvent.setCallId(callId);
return sipSendFailEvent;
}
}

View File

@ -1,7 +1,6 @@
package com.genersoft.iot.vmp.gb28181.event; package com.genersoft.iot.vmp.gb28181.event;
import com.genersoft.iot.vmp.gb28181.bean.DeviceNotFoundEvent; import com.genersoft.iot.vmp.gb28181.bean.DeviceNotFoundEvent;
import com.genersoft.iot.vmp.gb28181.bean.SipSendFailEvent;
import com.genersoft.iot.vmp.gb28181.event.sip.SipEvent; import com.genersoft.iot.vmp.gb28181.event.sip.SipEvent;
import gov.nist.javax.sip.message.SIPRequest; import gov.nist.javax.sip.message.SIPRequest;
import gov.nist.javax.sip.message.SIPResponse; import gov.nist.javax.sip.message.SIPResponse;
@ -84,17 +83,17 @@ public class SipSubscribe {
failedResult failedResult
} }
public static class EventResult<T>{ public static class EventResult<EventObject>{
public int statusCode; public int statusCode;
public EventResultType type; public EventResultType type;
public String msg; public String msg;
public String callId; public String callId;
public T event; public EventObject event;
public EventResult() { public EventResult() {
} }
public EventResult(T event) { public EventResult(EventObject event) {
this.event = event; this.event = event;
if (event instanceof ResponseEvent) { if (event instanceof ResponseEvent) {
ResponseEvent responseEvent = (ResponseEvent)event; ResponseEvent responseEvent = (ResponseEvent)event;
@ -150,12 +149,6 @@ public class SipSubscribe {
this.msg = "设备未找到"; this.msg = "设备未找到";
this.statusCode = -1024; this.statusCode = -1024;
this.callId = ((DeviceNotFoundEvent) event).getCallId(); this.callId = ((DeviceNotFoundEvent) event).getCallId();
}else if (event instanceof SipSendFailEvent) {
SipSendFailEvent sipSendFailEvent = (SipSendFailEvent) event;
this.type = EventResultType.deviceNotFoundEvent;
this.msg = sipSendFailEvent.getMsg();
this.statusCode = -1024;
this.callId = ((SipSendFailEvent) event).getCallId();
} }
} }
} }

View File

@ -293,7 +293,7 @@ public class DeviceServiceImpl implements IDeviceService {
} }
} }
}else { }else {
log.info("[移除目录订阅订阅]失败,设备已经离线 : {}", device.getDeviceId()); log.info("[移除移动位置订阅]失败,设备已经离线 : {}", device.getDeviceId());
if (callback != null) { if (callback != null) {
callback.run(false); callback.run(false);
} }

View File

@ -2,7 +2,6 @@ package com.genersoft.iot.vmp.gb28181.transmit;
import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.conf.SipConfig;
import com.genersoft.iot.vmp.gb28181.SipLayer; import com.genersoft.iot.vmp.gb28181.SipLayer;
import com.genersoft.iot.vmp.gb28181.bean.SipSendFailEvent;
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
import com.genersoft.iot.vmp.gb28181.event.sip.SipEvent; import com.genersoft.iot.vmp.gb28181.event.sip.SipEvent;
import com.genersoft.iot.vmp.gb28181.utils.SipUtils; import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
@ -13,7 +12,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import javax.sip.ResponseEvent;
import javax.sip.SipException; import javax.sip.SipException;
import javax.sip.header.CSeqHeader; import javax.sip.header.CSeqHeader;
import javax.sip.header.CallIdHeader; import javax.sip.header.CallIdHeader;
@ -72,10 +70,10 @@ public class SIPSender {
} }
} }
CallIdHeader callIdHeader = (CallIdHeader) message.getHeader(CallIdHeader.NAME);
CSeqHeader cSeqHeader = (CSeqHeader) message.getHeader(CSeqHeader.NAME);
String key = callIdHeader.getCallId() + cSeqHeader.getSeqNumber();
if (okEvent != null || errorEvent != null) { if (okEvent != null || errorEvent != null) {
CallIdHeader callIdHeader = (CallIdHeader) message.getHeader(CallIdHeader.NAME);
CSeqHeader cSeqHeader = (CSeqHeader) message.getHeader(CSeqHeader.NAME);
String key = callIdHeader.getCallId() + cSeqHeader.getSeqNumber();
SipEvent sipEvent = SipEvent.getInstance(key, eventResult -> { SipEvent sipEvent = SipEvent.getInstance(key, eventResult -> {
sipSubscribe.removeSubscribe(key); sipSubscribe.removeSubscribe(key);
if(okEvent != null) { if(okEvent != null) {
@ -89,40 +87,31 @@ public class SIPSender {
}), timeout == null ? sipConfig.getTimeout() : timeout); }), timeout == null ? sipConfig.getTimeout() : timeout);
sipSubscribe.addSubscribe(key, sipEvent); sipSubscribe.addSubscribe(key, sipEvent);
} }
try {
if ("TCP".equals(transport)) {
SipProviderImpl tcpSipProvider = sipLayer.getTcpSipProvider(ip);
if (tcpSipProvider == null) {
log.error("[发送信息失败] 未找到tcp://{}的监听信息", ip);
return;
}
if (message instanceof Request) {
tcpSipProvider.sendRequest((Request) message);
} else if (message instanceof Response) {
tcpSipProvider.sendResponse((Response) message);
}
} else if ("UDP".equals(transport)) { if ("TCP".equals(transport)) {
SipProviderImpl sipProvider = sipLayer.getUdpSipProvider(ip); SipProviderImpl tcpSipProvider = sipLayer.getTcpSipProvider(ip);
if (sipProvider == null) { if (tcpSipProvider == null) {
log.error("[发送信息失败] 未找到udp://{}的监听信息", ip); log.error("[发送信息失败] 未找到tcp://{}的监听信息", ip);
return; return;
} }
if (message instanceof Request) { if (message instanceof Request) {
sipProvider.sendRequest((Request) message); tcpSipProvider.sendRequest((Request) message);
} else if (message instanceof Response) { } else if (message instanceof Response) {
sipProvider.sendResponse((Response) message); tcpSipProvider.sendResponse((Response) message);
}
} }
}catch (SipException e) {
log.error("[发送信息失败] ", e);
SipSendFailEvent sipSendFailEvent = SipSendFailEvent.getInstance(callIdHeader.getCallId(), e.getMessage());
SipSubscribe.EventResult<SipSendFailEvent> eventResult = new SipSubscribe.EventResult<>(sipSendFailEvent);
SipEvent subscribe = sipSubscribe.getSubscribe(key);
subscribe.getErrorEvent().response(eventResult);
sipSubscribe.removeSubscribe(key);
}
} else if ("UDP".equals(transport)) {
SipProviderImpl sipProvider = sipLayer.getUdpSipProvider(ip);
if (sipProvider == null) {
log.error("[发送信息失败] 未找到udp://{}的监听信息", ip);
return;
}
if (message instanceof Request) {
sipProvider.sendRequest((Request) message);
} else if (message instanceof Response) {
sipProvider.sendResponse((Response) message);
}
}
} }
public CallIdHeader getNewCallIdHeader(String ip, String transport) { public CallIdHeader getNewCallIdHeader(String ip, String transport) {

View File

@ -98,7 +98,8 @@ public class MessageRequestProcessor extends SIPRequestProcessorParent implement
log.warn("[设备未找到 ]deviceId: {}, callId: {}", deviceId, callIdHeader.getCallId()); log.warn("[设备未找到 ]deviceId: {}, callId: {}", deviceId, callIdHeader.getCallId());
SipEvent sipEvent = sipSubscribe.getSubscribe(callIdHeader.getCallId() + cSeqHeader.getSeqNumber()); SipEvent sipEvent = sipSubscribe.getSubscribe(callIdHeader.getCallId() + cSeqHeader.getSeqNumber());
if (sipEvent != null && sipEvent.getErrorEvent() != null){ if (sipEvent != null && sipEvent.getErrorEvent() != null){
DeviceNotFoundEvent deviceNotFoundEvent = new DeviceNotFoundEvent(callIdHeader.getCallId()); DeviceNotFoundEvent deviceNotFoundEvent = new DeviceNotFoundEvent(evt.getDialog());
deviceNotFoundEvent.setCallId(callIdHeader.getCallId());
SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(deviceNotFoundEvent); SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(deviceNotFoundEvent);
sipEvent.getErrorEvent().response(eventResult); sipEvent.getErrorEvent().response(eventResult);
} }