From ca5139929b8b5853229ca3d63e2bca1ce82fa0ab Mon Sep 17 00:00:00 2001 From: songww <songww@inspur.com> Date: 星期三, 13 五月 2020 14:55:06 +0800 Subject: [PATCH] 尝试修复catalog获取失败。服务重启后设备未注册仍上报keeplive处理 --- src/main/java/com/genersoft/iot/vmp/gb28181/event/DeviceOffLineDetector.java | 24 ++++++ src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java | 49 +++++++++++- src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java | 2 src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEvent.java | 6 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | 19 ++-- src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java | 10 +- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java | 68 ++++++++++++----- src/main/java/com/genersoft/iot/vmp/vmanager/playback/PlaybackController.java | 7 + src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java | 2 src/main/resources/application.yml | 2 src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java | 4 11 files changed, 145 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/DeviceOffLineDetector.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/DeviceOffLineDetector.java new file mode 100644 index 0000000..437e7de --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/DeviceOffLineDetector.java @@ -0,0 +1,24 @@ +package com.genersoft.iot.vmp.gb28181.event; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.genersoft.iot.vmp.common.VideoManagerConstants; +import com.genersoft.iot.vmp.utils.redis.RedisUtil; + +/** + * @Description:璁惧绂诲湪绾跨姸鎬佹娴嬪櫒锛岀敤浜庢娴嬭澶囩姸鎬� + * @author: songww + * @date: 2020骞�5鏈�13鏃� 涓嬪崍2:40:29 + */ +@Component +public class DeviceOffLineDetector { + + @Autowired + private RedisUtil redis; + + public boolean isOnline(String deviceId) { + String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + deviceId; + return redis.hasKey(key); + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java index de0dbc4..c6f5d44 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java @@ -4,8 +4,8 @@ import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Component; +import com.genersoft.iot.vmp.gb28181.event.offline.OfflineEvent; import com.genersoft.iot.vmp.gb28181.event.online.OnlineEvent; -import com.genersoft.iot.vmp.gb28181.event.outline.OutlineEvent; /** * @Description:Event浜嬩欢閫氱煡鎺ㄩ�佸櫒锛屾敮鎸佹帹閫佸湪绾夸簨浠躲�佺绾夸簨浠� @@ -26,7 +26,7 @@ } public void outlineEventPublish(String deviceId, String from){ - OutlineEvent outEvent = new OutlineEvent(this); + OfflineEvent outEvent = new OfflineEvent(this); outEvent.setDeviceId(deviceId); outEvent.setFrom(from); applicationEventPublisher.publishEvent(outEvent); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/outline/KeepliveTimeoutListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java similarity index 96% rename from src/main/java/com/genersoft/iot/vmp/gb28181/event/outline/KeepliveTimeoutListener.java rename to src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java index 7f427e7..9f53d64 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/outline/KeepliveTimeoutListener.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java @@ -1,4 +1,4 @@ -package com.genersoft.iot.vmp.gb28181.event.outline; +package com.genersoft.iot.vmp.gb28181.event.offline; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.connection.Message; diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/outline/OutlineEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEvent.java similarity index 82% rename from src/main/java/com/genersoft/iot/vmp/gb28181/event/outline/OutlineEvent.java rename to src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEvent.java index 7e72936..d2f612a 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/outline/OutlineEvent.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEvent.java @@ -1,4 +1,4 @@ -package com.genersoft.iot.vmp.gb28181.event.outline; +package com.genersoft.iot.vmp.gb28181.event.offline; import org.springframework.context.ApplicationEvent; @@ -7,7 +7,7 @@ * @author: songww * @date: 2020骞�5鏈�6鏃� 涓婂崍11:33:13 */ -public class OutlineEvent extends ApplicationEvent { +public class OfflineEvent extends ApplicationEvent { /** * @Title: OutlineEvent @@ -15,7 +15,7 @@ * @param: @param source * @throws */ - public OutlineEvent(Object source) { + public OfflineEvent(Object source) { super(source); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/outline/OutlineEventListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java similarity index 82% rename from src/main/java/com/genersoft/iot/vmp/gb28181/event/outline/OutlineEventListener.java rename to src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java index a87b42e..faa89fa 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/outline/OutlineEventListener.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java @@ -1,4 +1,4 @@ -package com.genersoft.iot.vmp.gb28181.event.outline; +package com.genersoft.iot.vmp.gb28181.event.offline; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,14 +13,14 @@ /** * @Description: 绂荤嚎浜嬩欢鐩戝惉鍣紝鐩戝惉鍒扮绾垮悗锛屼慨鏀硅澶囩鍦ㄧ嚎鐘舵�併�� 璁惧绂荤嚎鏈変袱涓潵婧愶細 * 1銆佽澶囦富鍔ㄦ敞閿�锛屽彂閫佹敞閿�鎸囦护锛寋@link com.genersoft.iot.vmp.gb28181.transmit.request.impl.RegisterRequestProcessor} - * 2銆佽澶囨湭鐭ュ師鍥犵绾匡紝蹇冭烦瓒呮椂,{@link com.genersoft.iot.vmp.gb28181.event.outline.OutlineEventListener} + * 2銆佽澶囨湭鐭ュ師鍥犵绾匡紝蹇冭烦瓒呮椂,{@link com.genersoft.iot.vmp.gb28181.event.offline.OfflineEventListener} * @author: songww * @date: 2020骞�5鏈�6鏃� 涓嬪崍1:51:23 */ @Component -public class OutlineEventListener implements ApplicationListener<OutlineEvent> { +public class OfflineEventListener implements ApplicationListener<OfflineEvent> { - private final static Logger logger = LoggerFactory.getLogger(OutlineEventListener.class); + private final static Logger logger = LoggerFactory.getLogger(OfflineEventListener.class); @Autowired private IVideoManagerStorager storager; @@ -29,7 +29,7 @@ private RedisUtil redis; @Override - public void onApplicationEvent(OutlineEvent event) { + public void onApplicationEvent(OfflineEvent event) { if (logger.isDebugEnabled()) { logger.debug("璁惧绂荤嚎浜嬩欢瑙﹀彂锛宒eviceId锛�" + event.getDeviceId() + ",from:" + event.getFrom()); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java index b0fa6cd..1039a35 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java @@ -79,7 +79,7 @@ * @param startTime 寮�濮嬫椂闂�,鏍煎紡瑕佹眰锛歽yyy-MM-dd HH:mm:ss * @param endTime 缁撴潫鏃堕棿,鏍煎紡瑕佹眰锛歽yyy-MM-dd HH:mm:ss */ - public String playbackStreamCmd(Device device,String channelId, String recordId, String startTime, String endTime); + public String playbackStreamCmd(Device device,String channelId, String startTime, String endTime); /** * 璇煶骞挎挱 diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java index b012f9a..a6b512f 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java @@ -1,14 +1,13 @@ package com.genersoft.iot.vmp.gb28181.transmit.cmd.impl; import java.text.ParseException; -import java.util.Random; +import javax.sip.ClientTransaction; import javax.sip.InvalidArgumentException; import javax.sip.SipException; import javax.sip.message.Request; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Component; import com.genersoft.iot.vmp.conf.SipConfig; @@ -18,8 +17,6 @@ import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderProvider; import com.genersoft.iot.vmp.gb28181.utils.DateUtil; import com.genersoft.iot.vmp.gb28181.utils.SsrcUtil; - -import tk.mybatis.mapper.util.StringUtil; /** * @Description:璁惧鑳藉姏鎺ュ彛锛岀敤浜庡畾涔夎澶囩殑鎺у埗銆佹煡璇㈣兘鍔� @@ -181,16 +178,16 @@ * @param endTime 缁撴潫鏃堕棿,鏍煎紡瑕佹眰锛歽yyy-MM-dd HH:mm:ss */ @Override - public String playbackStreamCmd(Device device, String channelId, String recordId, String startTime, String endTime) { + public String playbackStreamCmd(Device device, String channelId, String startTime, String endTime) { try { String ssrc = SsrcUtil.getPlayBackSsrc(); // StringBuffer content = new StringBuffer(200); content.append("v=0\r\n"); - content.append("o="+channelId+" 0 0 IN IP4 "+sipConfig.getSipIp()+"\r\n"); + content.append("o="+device.getDeviceId()+" 0 0 IN IP4 "+sipConfig.getSipIp()+"\r\n"); content.append("s=Playback\r\n"); - content.append("u="+recordId+":3\r\n"); + content.append("u="+channelId+":3\r\n"); content.append("c=IN IP4 "+sipConfig.getMediaIp()+"\r\n"); content.append("t="+DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(startTime)+" "+DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(endTime) +"\r\n"); if(device.getTransport().equals("TCP")) { @@ -439,11 +436,15 @@ } private void transmitRequest(Device device, Request request) throws SipException { + ClientTransaction clientTransaction = null; if(device.getTransport().equals("TCP")) { - sipLayer.getTcpSipProvider().sendRequest(request); + clientTransaction = sipLayer.getTcpSipProvider().getNewClientTransaction(request); + //sipLayer.getTcpSipProvider().sendRequest(request); } else if(device.getTransport().equals("UDP")) { - sipLayer.getUdpSipProvider().sendRequest(request); + clientTransaction = sipLayer.getUdpSipProvider().getNewClientTransaction(request); + //sipLayer.getUdpSipProvider().sendRequest(request); } + clientTransaction.sendRequest(); } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java index 9a39d5c..8a7c6cf 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java @@ -30,6 +30,7 @@ import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.bean.RecordInfo; import com.genersoft.iot.vmp.gb28181.bean.RecordItem; +import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; @@ -69,7 +70,20 @@ @Autowired private DeferredResultHolder deferredResultHolder; + @Autowired + private DeviceOffLineDetector offLineDetector; + private final static String CACHE_RECORDINFO_KEY = "CACHE_RECORDINFO_"; + + private static final String MESSAGE_CATALOG = "Catalog"; + private static final String MESSAGE_DEVICE_INFO = "DeviceInfo"; + private static final String MESSAGE_KEEP_ALIVE = "Keepalive"; + private static final String MESSAGE_ALARM = "Alarm"; + private static final String MESSAGE_RECORD_INFO = "RecordInfo"; +// private static final String MESSAGE_BROADCAST = "Broadcast"; +// private static final String MESSAGE_DEVICE_STATUS = "DeviceStatus"; +// private static final String MESSAGE_MOBILE_POSITION = "MobilePosition"; +// private static final String MESSAGE_MOBILE_POSITION_INTERVAL = "Interval"; /** * 澶勭悊MESSAGE璇锋眰 @@ -85,22 +99,31 @@ this.transaction = transaction; Request request = evt.getRequest(); - - if (new String(request.getRawContent()).contains("<CmdType>Keepalive</CmdType>")) { - logger.info("鎺ユ敹鍒癒eepAlive娑堟伅"); - processMessageKeepAlive(evt); - } else if (new String(request.getRawContent()).contains("<CmdType>Catalog</CmdType>")) { - logger.info("鎺ユ敹鍒癈atalog娑堟伅"); - processMessageCatalogList(evt); - } else if (new String(request.getRawContent()).contains("<CmdType>DeviceInfo</CmdType>")) { - logger.info("鎺ユ敹鍒癉eviceInfo娑堟伅"); - processMessageDeviceInfo(evt); - } else if (new String(request.getRawContent()).contains("<CmdType>Alarm</CmdType>")) { - logger.info("鎺ユ敹鍒癆larm娑堟伅"); - processMessageAlarm(evt); - } else if (new String(request.getRawContent()).contains("<CmdType>RecordInfo</CmdType>")) { - logger.info("鎺ユ敹鍒癛ecordInfo娑堟伅"); - processMessageRecordInfo(evt); + SAXReader reader = new SAXReader(); + Document xml; + try { + xml = reader.read(new ByteArrayInputStream(request.getRawContent())); + Element rootElement = xml.getRootElement(); + String cmd = rootElement.element("CmdType").getStringValue(); + + if (MESSAGE_KEEP_ALIVE.equals(cmd)) { + logger.info("鎺ユ敹鍒癒eepAlive娑堟伅"); + processMessageKeepAlive(evt); + } else if (MESSAGE_CATALOG.equals(cmd)) { + logger.info("鎺ユ敹鍒癈atalog娑堟伅"); + processMessageCatalogList(evt); + } else if (MESSAGE_DEVICE_INFO.equals(cmd)) { + logger.info("鎺ユ敹鍒癉eviceInfo娑堟伅"); + processMessageDeviceInfo(evt); + } else if (MESSAGE_ALARM.equals(cmd)) { + logger.info("鎺ユ敹鍒癆larm娑堟伅"); + processMessageAlarm(evt); + } else if (MESSAGE_RECORD_INFO.equals(cmd)) { + logger.info("鎺ユ敹鍒癛ecordInfo娑堟伅"); + processMessageRecordInfo(evt); + } + } catch (DocumentException e) { + e.printStackTrace(); } } @@ -247,12 +270,17 @@ */ private void processMessageKeepAlive(RequestEvent evt){ try { - Request request = evt.getRequest(); - Response response = layer.getMessageFactory().createResponse(Response.OK,request); Element rootElement = getRootElement(evt); - Element deviceIdElement = rootElement.element("DeviceID"); + String deviceId = XmlUtil.getText(rootElement,"DeviceID"); + Request request = evt.getRequest(); + Response response = null; + if (offLineDetector.isOnline(deviceId)) { + response = layer.getMessageFactory().createResponse(Response.OK,request); + publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE); + } else { + response = layer.getMessageFactory().createResponse(Response.BAD_REQUEST,request); + } transaction.sendResponse(response); - publisher.onlineEventPublish(deviceIdElement.getText(), VideoManagerConstants.EVENT_ONLINE_KEEPLIVE); } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) { e.printStackTrace(); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java index 4204ce7..f825584 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java @@ -1,15 +1,25 @@ package com.genersoft.iot.vmp.gb28181.transmit.response.impl; +import java.text.ParseException; + +import javax.sip.ClientTransaction; import javax.sip.Dialog; import javax.sip.InvalidArgumentException; import javax.sip.ResponseEvent; import javax.sip.SipException; +import javax.sip.address.SipURI; +import javax.sip.header.CSeqHeader; +import javax.sip.header.ViaHeader; import javax.sip.message.Request; +import javax.sip.message.Response; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.gb28181.SipLayer; +import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorFactory; import com.genersoft.iot.vmp.gb28181.transmit.response.ISIPResponseProcessor; /** @@ -20,20 +30,51 @@ @Component public class InviteResponseProcessor implements ISIPResponseProcessor { + private final static Logger logger = LoggerFactory.getLogger(SIPProcessorFactory.class); + /** * 澶勭悊invite鍝嶅簲 * - * @param request + * @param evt * 鍝嶅簲娑堟伅 */ @Override public void process(ResponseEvent evt, SipLayer layer, SipConfig config) { try { - Dialog dialog = evt.getDialog(); - Request reqAck =dialog.createAck(1L); - dialog.sendAck(reqAck); + Response response = evt.getResponse(); + int statusCode = response.getStatusCode(); + //trying涓嶄細鍥炲 + if(statusCode == Response.TRYING){ + + } + //鎴愬姛鍝嶅簲 + //涓嬪彂ack + if(statusCode == Response.OK){ + ClientTransaction clientTransaction = evt.getClientTransaction(); + if(clientTransaction == null){ + logger.error("鍥炲ACK鏃讹紝clientTransaction涓簄ull >>> {}",response); + return; + } + Dialog clientDialog = clientTransaction.getDialog(); + + CSeqHeader clientCSeqHeader = (CSeqHeader) response.getHeader(CSeqHeader.NAME); + long cseqId = clientCSeqHeader.getSeqNumber(); + /* + createAck鍑芥暟锛屽垱寤虹殑ackRequest锛屼細閲囩敤Invite鍝嶅簲鐨�200OK锛屼腑鐨刢ontact瀛楁涓殑鍦板潃锛屼綔涓虹洰鏍囧湴鍧�銆� + 鏈夌殑缁堢浼犱笂鏉ョ殑鍙兘杩樻槸鍐呯綉鍦板潃锛屼細閫犳垚ack鍙戦�佷笉鍑哄幓銆傛帴鍙椾笉鍒伴煶瑙嗛娴� + 鎵�浠ュ湪姝ゅ缁熶竴鏇挎崲鍦板潃銆傚拰鍝嶅簲娑堟伅鐨刅ia澶翠腑鐨勫湴鍧�淇濇寔涓�鑷淬�� + */ + Request ackRequest = clientDialog.createAck(cseqId); + SipURI requestURI = (SipURI) ackRequest.getRequestURI(); + ViaHeader viaHeader = (ViaHeader) response.getHeader(ViaHeader.NAME); + requestURI.setHost(viaHeader.getHost()); + requestURI.setPort(viaHeader.getPort()); + clientDialog.sendAck(ackRequest); + } } catch (InvalidArgumentException | SipException e) { e.printStackTrace(); + } catch (ParseException e) { + e.printStackTrace(); } } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/playback/PlaybackController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/playback/PlaybackController.java index 4be6110..20078a7 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/playback/PlaybackController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/playback/PlaybackController.java @@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; @@ -30,7 +31,7 @@ public ResponseEntity<String> play(@PathVariable String deviceId,@PathVariable String channelId, String startTime, String endTime){ Device device = storager.queryVideoDevice(deviceId); - String ssrc = cmder.playStreamCmd(device, channelId); + String ssrc = cmder.playbackStreamCmd(device, channelId, startTime, endTime); if (logger.isDebugEnabled()) { logger.debug(String.format("璁惧棰勮 API璋冪敤锛宒eviceId锛�%s 锛宑hannelId锛�%s",deviceId, channelId)); @@ -38,7 +39,9 @@ } if(ssrc!=null) { - return new ResponseEntity<String>(ssrc,HttpStatus.OK); + JSONObject json = new JSONObject(); + json.put("ssrc", ssrc); + return new ResponseEntity<String>(json.toString(),HttpStatus.OK); } else { logger.warn("璁惧棰勮API璋冪敤澶辫触锛�"); return new ResponseEntity<String>(HttpStatus.INTERNAL_SERVER_ERROR); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 4ec320e..02dc489 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -26,7 +26,7 @@ server: port: 8080 sip: - ip: 10.200.64.63 + ip: 127.0.0.1 port: 5060 # 鏍规嵁鍥芥爣6.1.2涓瀹氾紝domain瀹滈噰鐢↖D缁熶竴缂栫爜鐨勫墠鍗佷綅缂栫爜銆傚浗鏍囬檮褰旸涓畾涔夊墠8浣嶄负涓績缂栫爜锛堢敱鐪佺骇銆佸競绾с�佸尯绾с�佸熀灞傜紪鍙风粍鎴愶紝鍙傜収GB/T 2260-2007锛� # 鍚庝袱浣嶄负琛屼笟缂栫爜锛屽畾涔夊弬鐓ч檮褰旸.3 -- Gitblit v1.8.0