def handle(self): if SHOW_TIME: start_time = datetime.utcnow() uid = self.request.recv(UID_LEN) if len(uid) != UID_LEN: show_error(self, 'failed to handle, invalid head') return buf = self.request.recv(FLG_LEN) if len(buf) != FLG_LEN: show_error(self, 'failed to handle, invalid head') return flg, = struct.unpack('I', buf) if flg == FLG_SEC: if not self.server.rpcserver.user: show_error(self, 'user is not initialized') raise Exception('user is not initialized') key = self.server.cache_get(uid) if not key: key = self.server.rpcserver.user.get_private_key(uid) if not key: show_error(self, 'failed to handle, invalid private key') return key = rsa.PrivateKey.load_pkcs1(key) self.server.cache_update(uid, key) stream = Stream(self.request, uid=uid, key=key) else: stream = Stream(self.request) buf = stream.read() if buf: res = self.server.rpcserver.proc(buf) if flg == FLG_SEC: stream = Stream(self.request) stream.write(res) if SHOW_TIME: self._print('handle, time=%d sec' % (datetime.utcnow() - start_time).seconds)