1.1 --- a/OpenSecurity/bin/vmmanager.pyw Wed Apr 30 13:14:35 2014 +0200
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