コード例 #1
0
ファイル: connector.py プロジェクト: sitian/wing
 def connect(self, guest, name, secret, privacy):
     host = WHubHost().acquire(guest, privacy)
     if not host:
         log_err(self, 'failed to acquire host, user=%s' % name)
         return
     real = self._get_real_name(guest)
     if not self._connect(guest, real, secret, privacy, host):
         WHubHost().release(host)
         return
     res = self._add_dev(host, Container(), real)
     if not res:
         self._disconnect(real, secret, privacy, host)
         WHubHost().release(host)
         return
     res = self._add_dev(host, Monitor(), real)
     if not res:
         self._remove_dev(host, Container(), real)
         self._disconnect(real, secret, privacy, host)
         WHubHost().release(host)
         return
     res = self._add_dev(host, Storage(), real)
     if not res:
         self._remove_dev(host, Monitor(), real)
         self._remove_dev(host, Container(), real)
         self._disconnect(real, secret, privacy, host)
         WHubHost().release(host)
         return
     return host
コード例 #2
0
def _check_dep(buf):
    if not buf:
        return

    dep = yaml.load(buf)
    if not dep:
        return
    cmds = []
    for i in dep:
        installer = dep[i].get('installer')
        if installer not in INSTALLERS:
            log_err('util', 'failed to check dependency, invalid installer')
            return
        cmd = '%s install %s' % (installer, i)
        version = dep[i].get('version')
        if version:
            if installer == APT:
                cmd += '=%s' % version
            elif installer == PIP:
                cmd += '==%s' % version
        cmds.append(cmd)

    for cmd in cmds:
        status, output = commands.getstatusoutput(cmd)
        if status != 0:
            log_err('util', 'failed to check dependency')
            return

    return True
コード例 #3
0
def install_driver(uid, package, version=None):
    driver_path = os.path.join(PATH_DRIVER, package)
    if os.path.exists(driver_path):
        shutil.rmtree(driver_path)
    ret = install(uid, package, version, DRIVER)
    if not ret:
        log_err(
            'util', 'failed to install driver, uid=%s, driver=%s, version=%s' %
            (str(uid), str(package), str(version)))
        return False
    dirname = tempfile.mkdtemp()
    try:
        buf = json.loads(zlib.decompress(ret))
        dep = buf['dep']
        if not _check_dep(dep):
            log_err(
                'util',
                'failed to install driver, invalid dependency, uid=%s, driver=%s, version=%s'
                % (str(uid), str(package), str(version)))
            return False
        driver = buf['driver']
        if driver:
            src = os.path.join(dirname, 'driver')
            os.mkdir(src)
            filenames = driver.keys()
            for name in filenames:
                filepath = os.path.join(src, name)
                with open(filepath, 'wb') as f:
                    f.write(driver[name])
            shutil.copytree(src, driver_path)
    finally:
        shutil.rmtree(dirname)
    return True
コード例 #4
0
ファイル: settings.py プロジェクト: dreamer/roberta
    def __setup_fullscreen__(self):
        user_choice = self.get_scummvm_fullscreenmode()

        env_override = 'LUX_USE_SCREEN' in os.environ or \
                       'SDL_VIDEO_FULLSCREEN_DISPLAY' in os.environ or \
                       'SDL_VIDEO_FULLSCREEN_HEAD' in os.environ

        if user_choice == 'default' and not env_override:
            return

        screen = self.__get_screen_number__()
        all_screens = xlib.query_screens()

        if all_screens == {}:
            log_err('no screens detected')
        for number, info in all_screens.items():
            log("screen '{}': {}x{}".format(number, info.width, info.height))

        if screen not in all_screens:
            log("screen '{}' not found".format(screen))
            if '0' in all_screens:
                screen = '0'
                log("using '" + screen + "' instead")
            else:
                log("using ScummVM default fullscreen mode")
                return

        log("selected screen '{}'".format(screen))
        os.putenv('SDL_VIDEO_FULLSCREEN_DISPLAY', screen)  # SDL >= 1.2.14
        os.putenv('SDL_VIDEO_FULLSCREEN_HEAD', screen)  # SDL >= 1.2.10
        info = all_screens[screen]
        self.fullresolution = (info.width, info.height)
コード例 #5
0
 def write(self, buf):
     if len(self._uid) != UID_LEN:
         log_err('Stream11111', 'invalid uid')
         return
     if self._key:
         flg = FLG_SEC
     else:
         flg = 0
     cnt = 0
     length = len(buf)
     total = (length + PACKET_LEN - 1) / PACKET_LEN
     head = self._uid + struct.pack('I', flg) + struct.pack('I', total)
     self._sock.sendall(head)
     while cnt < total:
         start = cnt * PACKET_LEN
         end = min(start + PACKET_LEN, length)
         if self._key:
             body = rsa.encrypt(buf[start:end], self._key)
         else:
             body = buf[start:end]
         head = struct.pack('H', len(body))
         self._sock.sendall(head)
         self._sock.sendall(body)
         cnt += 1
     self._sock.recv(1)
コード例 #6
0
ファイル: stream.py プロジェクト: tx626/dpmtest
 def write(self, buf):
     if len(self._uid) != UID_LEN:
         log_err('Stream',  'invalid uid')
         return
     if self._key:
         flg = FLG_SEC
     else:
         flg = 0
     cnt = 0
     length = len(buf)
     total = (length + PACKET_LEN - 1) / PACKET_LEN
     head = self._uid + struct.pack('I', flg) + struct.pack('I', total)
     self._sock.sendall(head)
     while cnt < total:
         start = cnt * PACKET_LEN
         end = min(start + PACKET_LEN, length)
         if self._key:
             body = rsa.encrypt(buf[start:end], self._key)
         else:
             body = buf[start:end]
         head = struct.pack('H', len(body))
         self._sock.sendall(head)
         self._sock.sendall(body)
         cnt += 1
     self._sock.recv(1)
コード例 #7
0
ファイル: util.py プロジェクト: tx626/dpmtest
def get_md5(text):
    if type(text) is types.StringType:
        tmp = hashlib.md5()   
        tmp.update(text)
        return tmp.hexdigest()
    else:
        log_err('util', 'failed to get md5')
コード例 #8
0
ファイル: worker.py プロジェクト: sitian/wing
 def run(self):
     liveness = PPP_HEARTBEAT_LIVENESS
     timeout = time.time() + PPP_HEARTBEAT_INTERVAL
     while True:
         socks = dict(self._poller.poll(PPP_HEARTBEAT_INTERVAL * 1000))
         if socks.get(self._sock) == zmq.POLLIN:
             frames = self._sock.recv_multipart()
             if not frames:
                 log_err(self, 'found an empty request')
                 break
             if len(frames) == PPP_NR_FRAMES:
                 res = self.proc(frames[PPP_FRAME_BUF])
                 msg = [frames[PPP_FRAME_ID], '', frames[PPP_FRAME_SEQ], json.dumps(res)]
                 self._sock.send_multipart(msg)
             elif len(frames) == 1 and frames[0] == PPP_HEARTBEAT:
                 liveness = PPP_HEARTBEAT_LIVENESS
             else:
                 log_err(self, "invalid request, %s" % frames)
         else:
             liveness -= 1
             if liveness == 0:
                 time.sleep(random.randint(0, PPP_SLEEP_TIME))
                 self._reset_sock()
                 liveness = PPP_HEARTBEAT_LIVENESS
                 
         if time.time() > timeout:
             timeout = time.time() + PPP_HEARTBEAT_INTERVAL
             self._sock.send(PPP_HEARTBEAT)
コード例 #9
0
def get_md5(text):
    if type(text) is types.StringType:
        tmp = hashlib.md5()
        tmp.update(text)
        return tmp.hexdigest()
    else:
        log_err('util', 'failed to get md5')
コード例 #10
0
ファイル: rep.py プロジェクト: sitian/wing
 def _coordinate(self):
     ret = -1
     end = None
     dest = None
     req_list = []
     sock = self._sock
     rep_id = idx._idgen()
     req = {'id':rep_id}
     req_base = copy(req)
     curr = WMD_REP_START
     total = len(self._nodes) - 1
     
     try:
         while ret != 0:
             args = self._recv(sock, timeout=WMD_REP_LONG_TIMEOUT)
             if not args or not args.has_key('cmd'):
                 log_err(self, 'failed to coordinate')
                 break
             
             cmd = args['cmd']
             src = args.get('src')
             off = int(cmd) - curr
             if not src or src not in self._nodes or (cmd != WMD_REP_START and args.get('id') != rep_id) or off < 0 or off > 1:
                 self._send_req(sock, WMD_REP_EXIT)
                 continue
             
             if off != 0:
                 cmd = WMD_REP_WAIT
                 self._send_req(sock, cmd, req_base)
                 continue
             
             if cmd == WMD_REP_START:
                 target = args.get('target')
                 if target != self._target:
                     self._send_req(sock, WMD_REP_EXIT)
                     break
                 lst = args.get('lst')
                 if lst and (not end or idx.idxcmp(end, lst) < 0):
                     end = lst
                     dest = src
             
             self._send_req(sock, cmd, req)
             if src not in req_list:
                 req_list.append(src)
             if len(req_list) == total:
                 req_list = []
                 if cmd == WMD_REP_START:
                     req.update({'dest':dest, 'end':end})
                     self._sync(target, self._lst, req)
                     curr = WMD_REP_ACCEPT
                 elif cmd == WMD_REP_ACCEPT:
                     req = copy(req_base)
                     curr = WMD_REP_STOP
                 elif cmd == WMD_REP_STOP:
                     ret = 0
     except:
         self._context.destroy()
         self._init_sock(net.ntoa(self._addr))
     return ret
コード例 #11
0
ファイル: util.py プロジェクト: tx626/dpmtest
def install(uid, package, version, typ):
    addr = get_frontend()
    rpcclient = RPCClient(addr, FRONTEND_PORT)
    ret = rpcclient.request('install', uid=uid, package=package, version=version, typ=typ)
    if not ret:
        log_err('util', 'failed to install, uid=%s, package=%s, version=%s, typ=%s' % (str(uid), str(package), str(version), str(typ)))
        return
    return ret
コード例 #12
0
ファイル: mix.py プロジェクト: sitian/wing
 def _recv(self, addr):
     try:
         index, cmd = self._sub[addr].recv()
         self._show_recv(index)
         return (index, cmd)
     except:
         log_err(self, 'failed to receive from %s' % net.ntoa(addr))
         raise Exception(log_get(self, 'failed to receive'))
コード例 #13
0
ファイル: sub.py プロジェクト: sitian/wing
 def _keep_alive(self):
     try:
         if self._live:
             self._live(self._addr)
         return True
     except:
         log_err(self, 'failed to keep alive')
         return False
コード例 #14
0
ファイル: sub.py プロジェクト: sitian/wing
 def _remove(self):
     try:
         if self._fault:
             self._fault(self._addr)
         return True
     except:
         log_err(self, 'failed to remove')
         return False
コード例 #15
0
ファイル: que.py プロジェクト: sitian/wing
 def _count(self, index):
     if not self._cnt.has_key(index):
         self._cnt.update({index:0})
         self._hits.update({index:0})
     total = self._cnt[index]
     if total >= self._total:
         log_err(self, 'failed to count (out of range)')
         raise Exception(log_get(self, 'out of range'))
     self._cnt[index] = total + 1
コード例 #16
0
ファイル: seq.py プロジェクト: sitian/wing
 def update(self, cmd):
     track, orig, command = unpack(cmd)
     identity = idx.idxid(orig)
     addr = self._sub_addr.get(identity)
     if not addr or not self._sub.has_key(addr):
         log_err(self, 'failed to update (no subscriber)')
         raise Exception(log_get(self, 'failed to update'))
     if self._sub[addr].idxnxt(orig, command):
         self._forward(orig, command)
コード例 #17
0
ファイル: seq.py プロジェクト: sitian/wing
 def _recv(self, addr):
     try:
         if WMD_SEQ_CHK_SLOW:
             self._cmd.chkslow()
         return self._sub[addr].recv()
     except:
         log_err(self, 'failed to receive, %s' % net.ntoa(addr))
         self._stop_sub(addr)
         raise Exception(log_get(self, 'failed to receive'))
コード例 #18
0
ファイル: settings.py プロジェクト: dreamer/roberta
 def get_scummvm_cmd(self):
     scummvm_cmd = self.get_str('scummvm', 'cmd', DEFAULT_SCUMMVM_CMD)
     cmd = os.environ.get('LUX_SCUMMVM_CMD', scummvm_cmd)
     try:
         split = shlex.split(cmd, comments=True)
         return [os.path.expanduser(s) for s in split]
     except ValueError as err:
         log_err('invalid scummvm.cmd value:', err)
         return [DEFAULT_SCUMMVM_CMD]
コード例 #19
0
ファイル: cmd.py プロジェクト: sitian/wing
 def mkactive(self, addr):
     self._lock.acquire()
     try:
         self._que.mkactive(addr)
     except:
         log_err(self, 'failed to mark active node %s' % net.ntoa(addr))
         raise Exception(log_get(self, 'failed to mark active node'))
     finally:
         self._lock.release()
コード例 #20
0
ファイル: cmd.py プロジェクト: sitian/wing
 def add(self, addr, index, cmd):
     self._lock.acquire()
     try:
         return self._add_cmd(addr, index, cmd)
     except:
         log_err(self, 'failed to add, addr=%s' % net.ntoa(addr))
         raise Exception(log_get(self, 'failed to add'))
     finally:
         self._lock.release()
コード例 #21
0
ファイル: device.py プロジェクト: sitian/wing
 def proc(self, op, args):
     if op not in self._op:
         log_err(self, 'invalid op %s' % op)
         return
     try:
         func = getattr(self, op)
         return func(*args)
     except:
         log_err(self, 'failed to process (op=%s)' % op)
コード例 #22
0
ファイル: wroute.py プロジェクト: sitian/wing
 def _proc(self, *args):
     try:
         req = WRouteReq()
         cmd = {'task':self._task, 'args':{'op':self._op, 'args':args}, 'timeout':self._timeout}
         res = req.send(cmd)
         req.release()
         return res
     except:
         log_err(self, "failed")
コード例 #23
0
ファイル: wctrl.py プロジェクト: sitian/wing
 def _proc(self, *args):
     try:
         self._open()
         cmd = {'ctrl':self._ctrl, 'op':self._op, 'args':args, 'timeout':self._timeout}
         self._send(cmd)
         return self._recv()
     except:
         log_err(self, 'failed')
     finally:
         self._close()
コード例 #24
0
ファイル: wview.py プロジェクト: sitian/wing
 def _proc(self, *args):
     try:
         self._open()
         cmd = {'viewer':self._viewer, 'op':self._op, 'args':args}
         self._send(cmd)
         return self._recv()
     except:
         log_err(self, 'failed')
     finally:
         self._close()
コード例 #25
0
ファイル: settings.py プロジェクト: dreamer/roberta
 def __get_screen_number__(self):
     tokens = self.get_scummvm_fullscreenmode().split()
     screen = '0'
     if tokens == [] or tokens[0] != 'screen':
         log_err('unknown option value:', tokens[0])
     if len(tokens) >= 2 and tokens[0] == 'screen':
         screen = tokens[1]
     screen = os.environ.get('SDL_VIDEO_FULLSCREEN_HEAD', screen)
     screen = os.environ.get('SDL_VIDEO_FULLSCREEN_DISPLAY', screen)
     screen = os.environ.get('LUX_USE_SCREEN', screen)
     return screen
コード例 #26
0
ファイル: whubd.py プロジェクト: sitian/wing
 def exit(self, guest, name, secret, password, privacy, host):
     if not net.validate(guest):
         log_err(self, 'failed, invalid addr')
         return
     res = None
     self._lock_acquire(guest)
     if self._auth.exist(guest, name, password, privacy, host):
         log(self, 'exit (%s)' % name)
         res = self._conn.disconnect(guest, name, secret, privacy, host)
     self._lock_release(guest)
     return res
コード例 #27
0
ファイル: seq.py プロジェクト: sitian/wing
 def _forward(self, index, cmd):
     self._lock.acquire()
     try:
         new_index, new_cmd = self._cmd.wrap(self._addr, index, cmd, self._wrapper)
         self._pub.send(new_cmd, new_index)
         self._show_fwd(new_index)
     except:
         log_err(self, 'failed to forward, index=%s' % index)
         raise Exception(log_get(self, 'failed to forward'))
     finally:
         self._lock.release()
コード例 #28
0
ファイル: wmond.py プロジェクト: sitian/wing
 def proc(self, sock, trig, op, args, timeout):
     pool = ThreadPool(processes=1)
     async = pool.apply_async(trig.proc, (op, args))
     try:
         res = async.get(timeout)
         stream_input(sock, res)
     except TimeoutError:
         log_err(self, 'failed to process (timeout)')
         pool.terminate()
     finally:
         sock.close()
コード例 #29
0
ファイル: rec.py プロジェクト: sitian/wing
 def mkactive(self, addr):
     if not self._stat.has_key(addr):
         if len(self._active) + 1 > self._available:
             log_err(self, 'failed to make active')
             raise Exception(log_get(self, 'failed to make active'))
     self._stat.update({addr:WMD_REC_ACTIVE})
     self._active.update({addr:None})
     count = self._total
     for i in self._stat:
         if self._stat[i] == WMD_REC_INACTIVE:
             count -= 1
     self._available = count
コード例 #30
0
ファイル: cmd.py プロジェクト: sitian/wing
 def wrap(self, addr, index, cmd, wrapper):
     self._lock.acquire()
     try:
         track = self._que.track()
         new_index, new_cmd = wrapper(track, index, cmd)
         self._add_cmd(addr, new_index, new_cmd)
         return (new_index, new_cmd)
     except:
         log_err(self, 'failed to wrap, addr=%s' % net.ntoa(addr))
         raise Exception(log_get(self, 'failed to wrap'))
     finally:
         self._lock.release()
コード例 #31
0
 def readall(self):
     uid = self._sock.recv(UID_LEN)
     if len(uid) != UID_LEN:
         log_err('Stream', 'failed to receive uid')
         return (None, None, '')
     buf = self._sock.recv(FLG_LEN)
     if len(buf) != FLG_LEN:
         log_err('Stream', 'failed to receive flag')
         return (None, None, '')
     flg = struct.unpack('I', buf)[0]
     buf = self.read()
     return (uid, flg, buf)
コード例 #32
0
ファイル: connector.py プロジェクト: sitian/wing
 def _disconnect(self, name, secret, privacy, host):
     try:
         dev = Network()
         if not dev.unregister(name, secret, privacy, host):
             return
         if PRIVATE == privacy or net.chkiface(NET_ADAPTER) == host:
             dev.unmount(name)
         else:
             WHub(host, dev).unmount(name)
         return True
     except:
         log_err(self, 'failed to disconnect')
コード例 #33
0
ファイル: stream.py プロジェクト: tx626/dpmtest
 def readall(self):
     uid = self._sock.recv(UID_LEN)
     if len(uid) != UID_LEN:
         log_err('Stream',  'failed to receive uid')
         return (None, None, '')
     buf = self._sock.recv(FLG_LEN)
     if len(buf) != FLG_LEN:
         log_err('Stream',  'failed to receive flag')
         return (None, None, '')
     flg = struct.unpack('I', buf)[0]
     buf = self.read()
     return (uid, flg, buf)
コード例 #34
0
ファイル: que.py プロジェクト: sitian/wing
 def _pop(self):
     if len(self._cand) > 0:
         index = self._cand[0]
         if self._is_safe(index):
             cmd = self._rec.get_cmd(index)
             if not cmd:
                 log_err(self, 'failed to get command')
                 raise Exception(log_get(self, 'failed to get command'))
             del self._cand[0]
             self._remove(index)
             self._log(index)
             return (index, cmd)
     return (None, None)
コード例 #35
0
ファイル: wmd.py プロジェクト: sitian/wing
 def send(self, buf):
     ret = False
     if not self._connected:
         log_err(self, 'no connection')
         return ret
     try:
         self._sock.send(buf)
         res = self._sock.recv()
         if res and loads(res):
             ret = True
     except:
         log_err(self, 'failed to send')
     finally:
         return ret
コード例 #36
0
 def read(self):
     head = self._sock.recv(4)
     if len(head) != 4:
         log_err('Stream', 'failed to receive head')
         return
     total, = struct.unpack('I', head)
     cnt = 0
     res = ''
     while cnt < total:
         head = self._sock.recv(2)
         if len(head) != 2:
             log_err('Stream', 'failed to receive')
             return
         length, = struct.unpack('H', head)
         body = ''
         while len(body) < length:
             buf = self._sock.recv(length - len(body))
             if not buf:
                 log_err('Stream', 'failed to receive buf')
                 return
             body += buf
         if len(body) != length:
             log_err('Stream', 'failed to receive body')
             return
         if self._key:
             res += rsa.decrypt(body, self._key)
         else:
             res += body
         cnt += 1
     self._sock.sendall('0')
     return res
コード例 #37
0
ファイル: cmd.py プロジェクト: sitian/wing
 def pop(self):
     self._lock.acquire()
     try:
         index, cmd = self._que.pop()
         if index and not self._event.is_set():
             addr = self._que.chkslow()
             if not addr or addr == self._addr:
                 self._event.set()
         return (index, cmd)
     except:
         log_err(self, 'failed to pop')
         raise Exception(log_get(self, 'failed to pop'))
     finally:
         self._lock.release()
コード例 #38
0
ファイル: stream.py プロジェクト: tx626/dpmtest
 def read(self):
     head = self._sock.recv(4)
     if len(head) != 4:
         log_err('Stream',  'failed to receive head')
         return
     total, =  struct.unpack('I', head)
     cnt = 0
     res = ''
     while cnt < total:
         head = self._sock.recv(2)
         if len(head) != 2:
             log_err('Stream',  'failed to receive')
             return
         length, = struct.unpack('H', head)
         body = ''
         while len(body) < length:
             buf = self._sock.recv(length - len(body))
             if not buf:
                 log_err('Stream',  'failed to receive buf')
                 return
             body += buf
         if len(body) != length:
             log_err('Stream',  'failed to receive body')
             return
         if self._key:
             res += rsa.decrypt(body, self._key)
         else:
             res += body
         cnt += 1
     self._sock.sendall('0')
     return res
コード例 #39
0
ファイル: mix.py プロジェクト: sitian/wing
 def _pop(self):
     self._lock.acquire()
     try:
         while True:
             index, cmd = self._cmd.pop()
             if not index:
                 break
             self._hdl.proc(cmd)
             self._show_pop(index)
     except:
         log_err(self, 'failed to pop')
         raise Exception(log_get(self, 'failed to pop'))
     finally:
         self._lock.release()
コード例 #40
0
def install(uid, package, version, typ):
    addr = get_frontend()
    rpcclient = RPCClient(addr, FRONTEND_PORT)
    if typ == DRIVER:
        content = None
    ret = rpcclient.request('install',
                            uid=uid,
                            package=package,
                            version=version,
                            typ=typ,
                            content=content)
    if not ret:
        log_err(
            'util',
            'failed to install, uid=%s, package=%s, version=%s, typ=%s' %
            (str(uid), str(package), str(version), str(typ)))
        return
    return ret
コード例 #41
0
def upload(path, uid, package, version, typ, key):
    content = dump_content(path)
    buf = zlib.compress(json.dumps(content))
    addr = get_frontend()
    rpcclient = RPCClient(addr, FRONTEND_PORT, uid, key)
    ret = rpcclient.request('upload',
                            uid=uid,
                            package=package,
                            version=version,
                            buf=buf,
                            typ=typ)
    if ret:
        return True
    else:
        log_err(
            'util',
            'failed to upload, uid=%s, package=%s, version=%s, typ=%s' %
            (str(uid), str(package), str(version), str(typ)))
        return False