|  |  |  | 
|---|
|  |  |  | import javax.sip.header.ViaHeader; | 
|---|
|  |  |  | import javax.sip.message.Response; | 
|---|
|  |  |  | import java.text.ParseException; | 
|---|
|  |  |  | import java.util.Calendar; | 
|---|
|  |  |  | import java.util.Date; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Component | 
|---|
|  |  |  | public class KeepaliveNotifyMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler { | 
|---|
|  |  |  | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // 判断RPort是否改变,改变则说明路由nat信息变化,修改设备信息 | 
|---|
|  |  |  | // 获取到通信地址等信息 | 
|---|
|  |  |  | ViaHeader viaHeader = (ViaHeader) evt.getRequest().getHeader(ViaHeader.NAME); | 
|---|
|  |  |  | String received = viaHeader.getReceived(); | 
|---|
|  |  |  | int rPort = viaHeader.getRPort(); | 
|---|
|  |  |  | // 解析本地地址替代 | 
|---|
|  |  |  | if (StringUtils.isEmpty(received) || rPort == -1) { | 
|---|
|  |  |  | received = viaHeader.getHost(); | 
|---|
|  |  |  | rPort = viaHeader.getPort(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (device.getPort() != rPort) { | 
|---|
|  |  |  | device.setPort(rPort); | 
|---|
|  |  |  | device.setHostAddress(received.concat(":").concat(String.valueOf(rPort))); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | device.setKeepaliveTime(DateUtil.getNow()); | 
|---|
|  |  |  | // 回复200 OK | 
|---|
|  |  |  | responseAck(evt, Response.OK); | 
|---|
|  |  |  | if (device.getOnline() == 1) { | 
|---|
|  |  |  | // 回复200 OK | 
|---|
|  |  |  | responseAck(evt, Response.OK); | 
|---|
|  |  |  | deviceService.updateDevice(device); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | // 对于已经离线的设备判断他的注册是否已经过期 | 
|---|
|  |  |  | if (!deviceService.expire(device)){ | 
|---|
|  |  |  | device.setKeepaliveTime(DateUtil.getNow()); | 
|---|
|  |  |  | // 判断RPort是否改变,改变则说明路由nat信息变化,修改设备信息 | 
|---|
|  |  |  | // 获取到通信地址等信息 | 
|---|
|  |  |  | ViaHeader viaHeader = (ViaHeader) evt.getRequest().getHeader(ViaHeader.NAME); | 
|---|
|  |  |  | String received = viaHeader.getReceived(); | 
|---|
|  |  |  | int rPort = viaHeader.getRPort(); | 
|---|
|  |  |  | // 解析本地地址替代 | 
|---|
|  |  |  | if (StringUtils.isEmpty(received) || rPort == -1) { | 
|---|
|  |  |  | received = viaHeader.getHost(); | 
|---|
|  |  |  | rPort = viaHeader.getPort(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (device.getPort() != rPort) { | 
|---|
|  |  |  | device.setPort(rPort); | 
|---|
|  |  |  | device.setHostAddress(received.concat(":").concat(String.valueOf(rPort))); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | device.setKeepaliveTime(DateUtil.getNow()); | 
|---|
|  |  |  | deviceService.online(device); | 
|---|
|  |  |  | // 回复200 OK | 
|---|
|  |  |  | responseAck(evt, Response.OK); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (SipException e) { | 
|---|