|  | @@ -7,8 +7,11 @@ import java.util.*;
 | 
	
		
			
				|  |  |  import javax.sip.header.FromHeader;
 | 
	
		
			
				|  |  |  import javax.sip.header.HeaderAddress;
 | 
	
		
			
				|  |  |  import javax.sip.InvalidArgumentException;
 | 
	
		
			
				|  |  | +import javax.sip.ListeningPoint;
 | 
	
		
			
				|  |  | +import javax.sip.ObjectInUseException;
 | 
	
		
			
				|  |  |  import javax.sip.RequestEvent;
 | 
	
		
			
				|  |  |  import javax.sip.SipException;
 | 
	
		
			
				|  |  | +import javax.sip.SipProvider;
 | 
	
		
			
				|  |  |  import javax.sip.message.Request;
 | 
	
		
			
				|  |  |  import javax.sip.message.Response;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -36,6 +39,7 @@ import com.genersoft.iot.vmp.utils.SpringBeanFactory;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.utils.redis.RedisUtil;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.vmanager.platform.bean.ChannelReduce;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import gov.nist.javax.sip.SipStackImpl;
 | 
	
		
			
				|  |  |  import gov.nist.javax.sip.address.AddressImpl;
 | 
	
		
			
				|  |  |  import gov.nist.javax.sip.address.SipUri;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -286,7 +290,7 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor {
 | 
	
		
			
				|  |  |  				deferredResultHolder.invokeResult(msg);
 | 
	
		
			
				|  |  |  			} else {
 | 
	
		
			
				|  |  |  				// 此处是上级发出的DeviceControl指令
 | 
	
		
			
				|  |  | -				if (XmlUtil.getText(rootElement, "TeleBoot").equals("Boot") && false) {	// 远程启动功能:需要在重新启动程序后先对SipStack解绑
 | 
	
		
			
				|  |  | +				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);
 | 
	
	
		
			
				|  | @@ -296,12 +300,26 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor {
 | 
	
		
			
				|  |  |  						@Override
 | 
	
		
			
				|  |  |  						public void run() {
 | 
	
		
			
				|  |  |  							try {
 | 
	
		
			
				|  |  | -								Thread.sleep(1000);
 | 
	
		
			
				|  |  | +								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();
 | 
	
		
			
				|  |  |  							}
 | 
	
		
			
				|  |  |  						}
 | 
	
		
			
				|  |  |  					});
 | 
	
		
			
				|  |  | +		
 | 
	
		
			
				|  |  |  					restartThread.setDaemon(false);
 | 
	
		
			
				|  |  |  					restartThread.start();
 | 
	
		
			
				|  |  |  				}
 |