def go(G, s): try: while 1: # what are the per-txn size limits? pktlen = s.recv_exact(4) if not pktlen: break else: pktlen, = struct.unpack('>I', pktlen) packet = s.recv_exact(pktlen) data, size = decode(packet) assert size == pktlen [index, block_timestamp, raw_tx, lock_scripts] = data tx = TX() tx.unpack(raw_tx) result = True for i in range(len(tx.inputs)): lock_script = lock_scripts[i] try: tx.verify(i, lock_script, block_timestamp) except SystemError: result = False pkt = encode((result, index)) s.writev([struct.pack('>I', len(pkt)), pkt]) except EOFError: pass coro.set_exit()
def go (G, s): try: while 1: # what are the per-txn size limits? pktlen = s.recv_exact (4) if not pktlen: break else: pktlen, = struct.unpack ('>I', pktlen) packet = s.recv_exact (pktlen) data, size = decode (packet) assert size == pktlen [index, block_timestamp, raw_tx, lock_scripts] = data tx = TX() tx.unpack (raw_tx) result = True for i in range (len (tx.inputs)): lock_script = lock_scripts[i] try: tx.verify (i, lock_script, block_timestamp) except SystemError: result = False pkt = encode ((result, index)) s.writev ([struct.pack ('>I', len(pkt)), pkt]) except EOFError: pass coro.set_exit()
def go (self): while 1: job_id, tx, timestamp, locks = self.fifo.pop() pkt = encode ([job_id, timestamp, tx.raw, locks]) self.sock.writev ([struct.pack ('>I', len(pkt)), pkt]) pktlen = self.sock.recv_exact (4) if not pktlen: break else: pktlen, = struct.unpack ('>I', pktlen) pkt = self.sock.recv_exact (pktlen) (result, index), size = decode (pkt) assert (pktlen == size) G.pool.retire (index, result)
def handle_request (self, qid, path, params): o = self.root e = None if self.debug: LOG ('<-', self.conn.fd, qid, path, params) try: for p in path: o = getattr (o, p) result = o (*params) except Exception: e = (sys.exc_info()[1].__class__.__name__, coro.traceback_data()) LOG ('exc', e) result = None if self.debug: LOG ('->', self.conn.fd, qid, e, result) self.push (encode ([KIND_REPLY, qid, e, result]))
def handle_request(self, qid, path, params): o = self.root e = None if self.debug: LOG('<-', self.conn.fd, qid, path, params) try: for p in path: o = getattr(o, p) result = o(*params) except Exception: e = (sys.exc_info()[1].__class__.__name__, coro.traceback_data()) LOG('exc', e) result = None if self.debug: LOG('->', self.conn.fd, qid, e, result) self.push(encode([KIND_REPLY, qid, e, result]))
def request (self, path, params): me = coro.current() qid = self.qid_counter self.qid_counter += 1 if self.debug: LOG ('=>', self.conn.fd, qid, path, params) packet = encode ([KIND_REQUEST, qid, path, params]) self.push (packet) try: self.pending_requests[qid] = me result = me._yield() finally: if qid in self.pending_requests: del self.pending_requests[qid] error, result = result if error: raise RPC_Remote_Exception (*error) else: return result
def request(self, path, params): me = coro.current() qid = self.qid_counter self.qid_counter += 1 if self.debug: LOG('=>', self.conn.fd, qid, path, params) packet = encode([KIND_REQUEST, qid, path, params]) self.push(packet) try: self.pending_requests[qid] = me result = me._yield() finally: if qid in self.pending_requests: del self.pending_requests[qid] error, result = result if error: raise RPC_Remote_Exception(*error) else: return result