Returns a built ISOTP message
        :param identifier: if not None, only return isotp messages with this
                           destination
        :param ext_addr: if identifier is not None, only return isotp messages
                         with this extended address for destination
        :param basecls: the class of packets that will be returned, defautls to
                        ISOTP
        :return: an ISOTP packet, or None if no message is ready

def pop(self, identifier=None, ext_addr=None, basecls=ISOTP):
        """
        Returns a built ISOTP message
        :param identifier: if not None, only return isotp messages with this
                           destination
        :param ext_addr: if identifier is not None, only return isotp messages
                         with this extended address for destination
        :param basecls: the class of packets that will be returned, defautls to
                        ISOTP
        :return: an ISOTP packet, or None if no message is ready
        """

        if identifier is not None:
            for i in range(len(self.ready)):
                b = self.ready[i]
                identifier = b[0]
                ea = b[1]
                if identifier == identifier and ext_addr == ea:
                    return ISOTPMessageBuilder._build(self.ready.pop(i))
            return None

        if len(self.ready) > 0:
            return ISOTPMessageBuilder._build(self.ready.pop(0))
        return None