OpenSecurity/bin/vmmanager.pyw
changeset 141 ca6622112caa
parent 135 c9499f5166c7
child 143 36948a118f71
     1.1 --- a/OpenSecurity/bin/vmmanager.pyw	Tue Apr 29 15:40:48 2014 +0100
     1.2 +++ b/OpenSecurity/bin/vmmanager.pyw	Wed Apr 30 15:34:39 2014 +0100
     1.3 @@ -59,6 +59,7 @@
     1.4      _instance = None
     1.5      machineFolder = ''
     1.6      rsdHandler = None
     1.7 +    browsingManager = None
     1.8      status_message = 'Starting up...'
     1.9  
    1.10   
    1.11 @@ -72,6 +73,8 @@
    1.12              self.cleanup()
    1.13              self.rsdHandler = DeviceHandler(self)
    1.14              self.rsdHandler.start()
    1.15 +            self.browsingManager = BrowsingManager(self)
    1.16 +            self.browsingManager.start()
    1.17          else:
    1.18              logger.critical(self.status_message)
    1.19      
    1.20 @@ -451,12 +454,6 @@
    1.21          while vm_name in self.listRunningVMS():
    1.22              time.sleep(1)
    1.23          return
    1.24 -        
    1.25 -    # handles browsing request    
    1.26 -    def handleBrowsingRequest(self):
    1.27 -        handler = BrowsingHandler(self)
    1.28 -        handler.start()
    1.29 -        return 'ok'
    1.30      
    1.31      #Small function to check if the mentioned location is a directory
    1.32      def isDirectory(self, path):
    1.33 @@ -557,6 +554,12 @@
    1.34          )
    1.35          
    1.36          return volumeNameBuffer.value, fileSystemNameBuffer.value
    1.37 +    
    1.38 +    # handles browsing request    
    1.39 +    def handleBrowsingRequest(self):
    1.40 +        handler = BrowsingHandler(self)
    1.41 +        handler.start()
    1.42 +        return 'ok'
    1.43  
    1.44  def checkResult(result):
    1.45      if result[0] != 0:
    1.46 @@ -584,49 +587,88 @@
    1.47               if self.drive not in mappedDrives.keys():
    1.48                   self.running = False
    1.49      
    1.50 -# handles browsing request                    
    1.51 -class BrowsingHandler(threading.Thread):   
    1.52 +
    1.53 +            #browser = '/usr/bin/iceweasel'
    1.54 +            #browser = '/usr/bin/midori'
    1.55 +            #browser = '/usr/bin/chromium '
    1.56 +            #if Cygwin.is_X11_running()==True:
    1.57 +            #result = checkResult(Cygwin.bashExecute('DISPLAY=:0 xhost '+new_ip))
    1.58 +            
    1.59 +            #browser = '\\\"/usr/bin/chromium; pidof dbus-launch | xargs kill\\\"'
    1.60 +            #Cygwin.start_X11()
    1.61 +            #result = checkResult(Cygwin.sshExecuteX11(browser, new_ip, 'osecuser', Cygwin.cygPath(self.vmm.getMachineFolder()) + '/' + new_sdvm + '/dvm_key'))
    1.62 +
    1.63 +#handles browsing session creation 
    1.64 +class BrowsingHandler(threading.Thread):
    1.65      vmm = None
    1.66 -    #Cygwin.start_X11()
    1.67 +    def __init__(self, vmmanager):
    1.68 +         threading.Thread.__init__(self)
    1.69 +         self.vmm = vmmanager
    1.70 +        
    1.71 +    def run(self):
    1.72 +        browser = '\\\"/usr/bin/chromium; pidof dbus-launch | xargs kill\\\"'
    1.73 +        if Cygwin.is_X11_running()==False:
    1.74 +            Cygwin.start_X11()
    1.75 +        try:
    1.76 +            self.vmm.browsingManager.started.wait()          
    1.77 +            result = checkResult(Cygwin.sshExecuteX11(browser, self.vmm.browsingManager.ip_addr, 'osecuser', Cygwin.cygPath(self.vmm.getMachineFolder()) + '/' + self.vmm.browsingManager.vm_name + '/dvm_key'))
    1.78 +        except:
    1.79 +            logger.error("BrowsingHandler closing. Cleaning up")    
    1.80 +        self.vmm.browsingManager.restart.set()
    1.81 +        
    1.82 +            
    1.83 +# handles browsing Vm creation and destruction                    
    1.84 +class BrowsingManager(threading.Thread):   
    1.85 +    vmm = None
    1.86 +    running = True
    1.87 +    restart = None
    1.88 +    ip_addr = None
    1.89 +    vm_name = None
    1.90 +    drive = None
    1.91 +    
    1.92      def __init__(self, vmmanager):
    1.93          threading.Thread.__init__(self)
    1.94          self.vmm = vmmanager
    1.95 +        self.restart = threading.Event()
    1.96 +        self.started = threading.Event()
    1.97 +        
    1.98       
    1.99      def run(self):
   1.100 -        drive = None
   1.101 -        networkPath = None
   1.102 -        try:
   1.103 -            new_sdvm = self.vmm.generateSDVMName()
   1.104 -            self.vmm.createVM(new_sdvm)
   1.105 -            self.vmm.storageAttach(new_sdvm)
   1.106 -            self.vmm.genCertificateISO(new_sdvm)
   1.107 -            self.vmm.attachCertificateISO(new_sdvm)
   1.108 -            self.vmm.startVM(new_sdvm)
   1.109 -            new_ip = self.vmm.waitStartup(new_sdvm)
   1.110 -            drive = self.vmm.genNetworkDrive()
   1.111 -            if new_ip != None:
   1.112 -                networkPath = '\\\\' + new_ip + '\\Download'
   1.113 -                self.vmm.mapNetworkDrive(drive, networkPath, None, None)
   1.114 -            #browser = '/usr/bin/iceweasel'
   1.115 -            #browser = '/usr/bin/midori'
   1.116 -            #browser = '/usr/bin/chromium '
   1.117 -            browser = '\\\"/usr/bin/chromium; pidof dbus-launch | xargs kill\\\"'
   1.118 -            Cygwin.start_X11()
   1.119 -           
   1.120 -            #if Cygwin.is_X11_running()==True:
   1.121 -            #result = checkResult(Cygwin.bashExecute('DISPLAY=:0 xhost '+new_ip))
   1.122 -            result = checkResult(Cygwin.sshExecuteX11(browser, new_ip, 'osecuser', Cygwin.cygPath(self.vmm.getMachineFolder()) + '/' + new_sdvm + '/dvm_key'))
   1.123 -        except:
   1.124 -            logger.error("BrowsingHandler failed. Cleaning up")
   1.125 -        
   1.126 -        if drive != None: # and networkPath != None:    
   1.127 -            #self.vmm.unmapNetworkDrive(drive) #, networkPath)
   1.128 -            driveHandler = UnmapDriveHandler(self.vmm, drive)
   1.129 -            driveHandler.start()
   1.130 -
   1.131 +        while self.running:
   1.132 +            self.restart.clear()
   1.133 +            self.started.clear()
   1.134 +            if self.drive != None:     
   1.135 +                driveHandler = UnmapDriveHandler(self.vmm, self.drive)
   1.136 +                driveHandler.start()
   1.137 +                driveHandler.join()
   1.138 +                self.drive = None
   1.139              
   1.140 -        self.vmm.poweroffVM(new_sdvm)
   1.141 -        self.vmm.removeVM(new_sdvm)
   1.142 +            self.ip_addr = None
   1.143 +            
   1.144 +            if self.vm_name != None:
   1.145 +                self.vmm.poweroffVM(self.vm_name)
   1.146 +                self.vmm.removeVM(self.vm_name)
   1.147 +            
   1.148 +            try:
   1.149 +                self.vm_name = self.vmm.generateSDVMName()
   1.150 +                self.vmm.createVM(self.vm_name)
   1.151 +                self.vmm.storageAttach(self.vm_name)
   1.152 +                self.vmm.genCertificateISO(self.vm_name)
   1.153 +                self.vmm.attachCertificateISO(self.vm_name)
   1.154 +                self.vmm.startVM(self.vm_name)
   1.155 +                self.ip_addr = self.vmm.waitStartup(self.vm_name)
   1.156 +                if self.ip_addr == None:
   1.157 +                    continue
   1.158 +                self.drive = self.vmm.genNetworkDrive()
   1.159 +                if self.drive == None:
   1.160 +                    continue
   1.161 +                networkPath = '\\\\' + self.ip_addr + '\\Download'
   1.162 +                self.vmm.mapNetworkDrive(self.drive, networkPath, None, None)
   1.163 +                self.started.set()
   1.164 +                self.restart.wait()
   1.165 +                
   1.166 +            except:
   1.167 +                logger.error("BrowsingHandler failed. Cleaning up")
   1.168                  
   1.169  class DeviceHandler(threading.Thread): 
   1.170      vmm = None