예제 #1
0
 def getFirstProtobufMessage(self):
     self.assertFalse(self._protobufQueue.empty())
     data = self._protobufQueue.get(False)
     self.assertTrue(data)
     msg = dnsmessage_pb2.PBDNSMessage()
     msg.ParseFromString(data)
     return msg
예제 #2
0
    def getFirstProtobufMessage(self, retries=1, waitTime=1):
        msg = None

        print("in getFirstProtobufMessage")
        for param in protobufServersParameters:
            print(param.port)
            failed = 0

            while param.queue.empty:
                print(failed)
                print(retries)
                if failed >= retries:
                    break

                failed = failed + 1
                print("waiting")
                time.sleep(waitTime)

            self.assertFalse(param.queue.empty())
            data = param.queue.get(False)
            self.assertTrue(data)
            oldmsg = msg
            msg = dnsmessage_pb2.PBDNSMessage()
            msg.ParseFromString(data)
            if oldmsg is not None:
                self.assertEquals(msg, oldmsg)

        return msg
예제 #3
0
    def getFirstProtobufMessage(self, retries=1, waitTime=1):
        global protobufQueue
        failed = 0

        while protobufQueue.empty:
            if failed >= retries:
                break

            failed = failed + 1
            time.sleep(waitTime)

        self.assertFalse(protobufQueue.empty())
        data = protobufQueue.get(False)
        self.assertTrue(data)
        msg = dnsmessage_pb2.PBDNSMessage()
        msg.ParseFromString(data)
        return msg
예제 #4
0
    def run(self):
        while True:
            data = self._conn.recv(2)
            if not data or len(data) < 2:
                break

            (datalen, ) = struct.unpack("!H", data)
            data = b''
            remaining = datalen

            while remaining > 0:
                buf = self._conn.recv(remaining)
                if not buf:
                    break
                data = data + buf
                remaining = remaining - len(buf)

            if len(data) != datalen:
                break

            msg = dnsmessage_pb2.PBDNSMessage()
            try:
                msg.ParseFromString(data)
                if msg.type == dnsmessage_pb2.PBDNSMessage.DNSQueryType:
                    self.printQueryMessage(msg)
                elif msg.type == dnsmessage_pb2.PBDNSMessage.DNSResponseType:
                    self.printResponseMessage(msg)
                elif msg.type == dnsmessage_pb2.PBDNSMessage.DNSOutgoingQueryType:
                    self.printOutgoingQueryMessage(msg)
                elif msg.type == dnsmessage_pb2.PBDNSMessage.DNSIncomingResponseType:
                    self.printIncomingResponseMessage(msg)
                else:
                    print('Discarding unsupported message type %d' %
                          (msg.type))
            except google.protobuf.message.DecodeError as exp:
                print('Error parsing message of size %d: %s' %
                      (datalen, str(exp)))
                break

        self._conn.close()
예제 #5
0
    def run(self):
        while True:
            data = self._conn.recv(2)
            if not data:
                break
            (datalen, ) = struct.unpack("!H", data)
            data = self._conn.recv(datalen)

            msg = dnsmessage_pb2.PBDNSMessage()
            msg.ParseFromString(data)
            if msg.type == dnsmessage_pb2.PBDNSMessage.DNSQueryType:
                self.printQueryMessage(msg)
            elif msg.type == dnsmessage_pb2.PBDNSMessage.DNSResponseType:
                self.printResponseMessage(msg)
            elif msg.type == dnsmessage_pb2.PBDNSMessage.DNSOutgoingQueryType:
                self.printOutgoingQueryMessage(msg)
            elif msg.type == dnsmessage_pb2.PBDNSMessage.DNSIncomingResponseType:
                self.printIncomingResponseMessage(msg)
            else:
                print('Discarding unsupported message type %d' % (msg.type))

        self._conn.close()