def recv_msgs(self): responses = {} data = self.sock.recv(4096) while (len(data)>0): (head, data) = IPA().split_combined(data) answer = Ctrl().rem_header(head) if verbose: print "Got message:", answer (mtype, id, msg) = answer.split(None, 2) id = int(id) rsp = {'mtype': mtype, 'id': id} if mtype == "ERROR": rsp['error'] = msg else: split = msg.split(None, 1) rsp['var'] = split[0] if len(split) > 1: rsp['value'] = split[1] else: rsp['value'] = None responses[id] = rsp if verbose: print "Decoded replies: ", responses return responses
def recv_msgs(self): responses = {} data = self.sock.recv(4096) while (len(data)>0): (head, data) = IPA().split_combined(data) answer = Ctrl().rem_header(head).decode() if verbose: print("Got message:", answer) (mtype, id, msg) = answer.split(None, 2) id = int(id) rsp = {'mtype': mtype, 'id': id} if mtype == "ERROR": rsp['error'] = msg else: split = msg.split(None, 1) rsp['var'] = split[0] if len(split) > 1: rsp['value'] = split[1] else: rsp['value'] = None responses[id] = rsp if verbose: print("Decoded replies: ", responses) return responses
def connectionMade(self): """ Keep reconnection logic working by calling routine from CTRL Send TRAP upon connection Note: we can't use sendString() because of it's incompatibility with IPA interpretation of length prefix """ print('CTRL server connection made!') super(CtrlServer, self).connectionMade() self.transport.write(Ctrl().trap('LOL', 'what')) self.transport.write(Ctrl().trap('rulez', 'XXX'))
def _leftovers(sck): data = sck.recv(1024) if len(data) != 0: tail = data while True: (head, tail) = Ctrl().split_combined(tail) print "Got message:", Ctrl().rem_header(head) if len(tail) == 0: break return True return False
def connectionMade(self): """ Keep reconnection logic working by calling routine from CTRL Send TRAP upon connection Note: we can't use sendString() because of it's incompatibility with IPA interpretation of length prefix """ addr = self.transport.getPeer() self.factory.log.info('CTRL server: connection from %s:%d client' % (addr.host, addr.port)) super(CtrlServer, self).connectionMade() self.transport.write(Ctrl().trap('LOL', 'what')) self.transport.write(Ctrl().trap('rulez', 'XXX'))
def osmo_CTRL(self, data): """ OSMO CTRL message dispatcher, lambda default should never happen For basic tests only, appropriate handling routines should be replaced: see CtrlServer for example """ self.dbg('OSMO CTRL received %s::%s' % Ctrl().parse(data.decode('utf-8'))) (cmd, op_id, v) = data.decode('utf-8').split(' ', 2) method = getattr(self, 'ctrl_' + cmd, lambda: "CTRL unknown command") method(data, op_id, v)
def send(self, data): if verbose: print("Sending \"%s\"" %(data)) data = Ctrl().add_header(data) return self.sock.send(data) == len(data)
def reply(self, r): self.transport.write(Ctrl().add_header(r))
def do_set_get(sck, var, value=None): (r, c) = Ctrl().cmd(var, value) sck.send(c) answer = Ctrl().rem_header(sck.recv(4096)) return (answer, ) + Ctrl().verify(answer, r, var, value)
(_, _, v) = do_set_get(sck, var) return v def _leftovers(sck, fl): """ Read outstanding data if any according to flags """ try: data = sck.recv(1024, fl) except socket.error as (s_errno, strerror): return False if len(data) != 0: tail = data while True: (head, tail) = Ctrl().split_combined(tail) print "Got message:", Ctrl().rem_header(head) if len(tail) == 0: break return True return False if __name__ == '__main__': parser = OptionParser("Usage: %prog [options] var [value]") parser.add_option("-d", "--host", dest="host", help="connect to HOST", metavar="HOST") parser.add_option("-p",