|  | @@ -4,8 +4,11 @@ import java.io.ByteArrayInputStream;
 | 
	
		
			
				|  |  |  import java.text.ParseException;
 | 
	
		
			
				|  |  |  import java.util.*;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import javax.sip.address.SipURI;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  import javax.sip.header.FromHeader;
 | 
	
		
			
				|  |  |  import javax.sip.header.HeaderAddress;
 | 
	
		
			
				|  |  | +import javax.sip.header.ToHeader;
 | 
	
		
			
				|  |  |  import javax.sip.InvalidArgumentException;
 | 
	
		
			
				|  |  |  import javax.sip.ListeningPoint;
 | 
	
		
			
				|  |  |  import javax.sip.ObjectInUseException;
 | 
	
	
		
			
				|  | @@ -290,38 +293,50 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor {
 | 
	
		
			
				|  |  |  				deferredResultHolder.invokeResult(msg);
 | 
	
		
			
				|  |  |  			} else {
 | 
	
		
			
				|  |  |  				// 此处是上级发出的DeviceControl指令
 | 
	
		
			
				|  |  | -				if (XmlUtil.getText(rootElement, "TeleBoot").equals("Boot") ) {	// 远程启动功能:需要在重新启动程序后先对SipStack解绑
 | 
	
		
			
				|  |  | -					String platformId = ((SipUri) ((HeaderAddress) evt.getRequest().getHeader(FromHeader.NAME)).getAddress().getURI()).getUser();
 | 
	
		
			
				|  |  | -					logger.info("执行远程启动命令");
 | 
	
		
			
				|  |  | -					ParentPlatform parentPlatform = storager.queryParentPlatById(platformId);
 | 
	
		
			
				|  |  | -					cmderFroPlatform.unregister(parentPlatform, null, null);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -					Thread restartThread = new Thread(new Runnable() {
 | 
	
		
			
				|  |  | -						@Override
 | 
	
		
			
				|  |  | -						public void run() {
 | 
	
		
			
				|  |  | -							try {
 | 
	
		
			
				|  |  | -								Thread.sleep(3000);
 | 
	
		
			
				|  |  | -								SipProvider up = (SipProvider) SpringBeanFactory.getBean("udpSipProvider");
 | 
	
		
			
				|  |  | -								SipStackImpl stack = (SipStackImpl)up.getSipStack();
 | 
	
		
			
				|  |  | -								stack.stop();
 | 
	
		
			
				|  |  | -								Iterator listener = stack.getListeningPoints();
 | 
	
		
			
				|  |  | -								while (listener.hasNext()) {
 | 
	
		
			
				|  |  | -									stack.deleteListeningPoint((ListeningPoint) listener.next());
 | 
	
		
			
				|  |  | -								}
 | 
	
		
			
				|  |  | -								Iterator providers = stack.getSipProviders();
 | 
	
		
			
				|  |  | -								while (providers.hasNext()) {
 | 
	
		
			
				|  |  | -									stack.deleteSipProvider((SipProvider) providers.next());
 | 
	
		
			
				|  |  | +				String platformId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(FromHeader.NAME)).getAddress().getURI()).getUser();
 | 
	
		
			
				|  |  | +				String targetGBId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(ToHeader.NAME)).getAddress().getURI()).getUser();
 | 
	
		
			
				|  |  | +				// 远程启动功能
 | 
	
		
			
				|  |  | +				if (!XmlUtil.isEmpty(XmlUtil.getText(rootElement, "TeleBoot"))) {
 | 
	
		
			
				|  |  | +					if (deviceId.equals(targetGBId)) {
 | 
	
		
			
				|  |  | +						// 远程启动功能:需要在重新启动程序后先对SipStack解绑
 | 
	
		
			
				|  |  | +						logger.info("执行远程启动本平台命令");
 | 
	
		
			
				|  |  | +						ParentPlatform parentPlatform = storager.queryParentPlatById(platformId);
 | 
	
		
			
				|  |  | +						cmderFroPlatform.unregister(parentPlatform, null, null);
 | 
	
		
			
				|  |  | +	
 | 
	
		
			
				|  |  | +						Thread restartThread = new Thread(new Runnable() {
 | 
	
		
			
				|  |  | +							@Override
 | 
	
		
			
				|  |  | +							public void run() {
 | 
	
		
			
				|  |  | +								try {
 | 
	
		
			
				|  |  | +									Thread.sleep(3000);
 | 
	
		
			
				|  |  | +									SipProvider up = (SipProvider) SpringBeanFactory.getBean("udpSipProvider");
 | 
	
		
			
				|  |  | +									SipStackImpl stack = (SipStackImpl)up.getSipStack();
 | 
	
		
			
				|  |  | +									stack.stop();
 | 
	
		
			
				|  |  | +									Iterator listener = stack.getListeningPoints();
 | 
	
		
			
				|  |  | +									while (listener.hasNext()) {
 | 
	
		
			
				|  |  | +										stack.deleteListeningPoint((ListeningPoint) listener.next());
 | 
	
		
			
				|  |  | +									}
 | 
	
		
			
				|  |  | +									Iterator providers = stack.getSipProviders();
 | 
	
		
			
				|  |  | +									while (providers.hasNext()) {
 | 
	
		
			
				|  |  | +										stack.deleteSipProvider((SipProvider) providers.next());
 | 
	
		
			
				|  |  | +									}
 | 
	
		
			
				|  |  | +									VManageBootstrap.restart();
 | 
	
		
			
				|  |  | +								} catch (InterruptedException ignored) {
 | 
	
		
			
				|  |  | +								} catch (ObjectInUseException e) {
 | 
	
		
			
				|  |  | +									e.printStackTrace();
 | 
	
		
			
				|  |  |  								}
 | 
	
		
			
				|  |  | -								VManageBootstrap.restart();
 | 
	
		
			
				|  |  | -							} catch (InterruptedException ignored) {
 | 
	
		
			
				|  |  | -							} catch (ObjectInUseException e) {
 | 
	
		
			
				|  |  | -								e.printStackTrace();
 | 
	
		
			
				|  |  |  							}
 | 
	
		
			
				|  |  | -						}
 | 
	
		
			
				|  |  | -					});
 | 
	
		
			
				|  |  | -		
 | 
	
		
			
				|  |  | -					restartThread.setDaemon(false);
 | 
	
		
			
				|  |  | -					restartThread.start();
 | 
	
		
			
				|  |  | +						});
 | 
	
		
			
				|  |  | +			
 | 
	
		
			
				|  |  | +						restartThread.setDaemon(false);
 | 
	
		
			
				|  |  | +						restartThread.start();
 | 
	
		
			
				|  |  | +					} else {
 | 
	
		
			
				|  |  | +						// 远程启动指定设备
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				if (!XmlUtil.isEmpty(XmlUtil.getText(rootElement,"PTZCmd")) && !deviceId.equals(targetGBId)) {
 | 
	
		
			
				|  |  | +					String cmdString = XmlUtil.getText(rootElement,"PTZCmd");
 | 
	
		
			
				|  |  | +					Device device = storager.queryVideoDeviceByPlatformIdAndChannelId(platformId, deviceId);
 | 
	
		
			
				|  |  | +					cmder.fronEndCmd(device, deviceId, cmdString);
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		} catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
 |