Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
 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'))
Esempio n. 4
0
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
Esempio n. 5
0
 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'))
Esempio n. 6
0
 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)
Esempio n. 7
0
 def send(self, data):
     if verbose:
         print("Sending \"%s\"" %(data))
     data = Ctrl().add_header(data)
     return self.sock.send(data) == len(data)
Esempio n. 8
0
 def reply(self, r):
     self.transport.write(Ctrl().add_header(r))
Esempio n. 9
0
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)
Esempio n. 10
0
    (_, _, 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",