Exemplo n.º 1
0
 def datagramReceived(self, data, addr):
     self.buffer = ConstBuffer(data)
     if self.deferred is None:
         self._startSM()
     old_deferred = self.datagramDeferred
     self.datagramDeferred = Deferred()
     old_deferred.callback(addr)
Exemplo n.º 2
0
class TestConstBuffer(unittest.TestCase):
    
    def setUp(self):
        self.b = ConstBuffer(b'12345')
    
    def tearDown(self):
        del self.b
    
    def testPop(self):
        d1 = self.b.pop(2)
        d2 = self.b.pop(1)
        self.assertTrue(d1.called)
        self.assertEqual(d1.result, b'12')
        self.assertTrue(d2.called)
        self.assertEqual(d2.result, b'3')
        self.assertRaises(BufferUnderflowException, lambda: self.b.pop(3))
        self.assertEqual(len(self.b), 2)
Exemplo n.º 3
0
class StatefulDatagramProtocol(WriterMixin, ReaderMixin, StateMixin,
                               object, DatagramProtocol):
    __metaclass__ = ABCMeta

    def __init__(self):
        super(StatefulDatagramProtocol, self).__init__()
        self.datagramDeferred = Deferred()
        self.writeBuffer = bytearray()

    @abstractmethod
    def stateMachine(self):
        return defer.Deferred()

    def protocolError(self, failure):
        txlog.err(failure)

    def datagramReceived(self, data, addr):
        self.buffer = ConstBuffer(data)
        if self.deferred is None:
            self._startSM()
        old_deferred = self.datagramDeferred
        self.datagramDeferred = Deferred()
        old_deferred.callback(addr)

    def receiveDatagram(self):
        return self.datagramDeferred

    def readBytes(self, count):
        return self.buffer.pop(count)

    def writeBytes(self, data):
        self.writeBuffer.extend(data)

    def writePacked(self, format_, *args):
        offset = len(self.writeBuffer)
        self.writeBuffer.extend(itertools.repeat(0, struct.calcsize(format_)))
        struct.pack_into(format_, self.writeBuffer, offset, *args)

    def send(self, addr=None):
        #if _log.isEnabledFor(logging.DEBUG):
        #    s = str(self.writeBuffer).encode('string_escape')
        #    _log.debug('Sending %s', s)
        if addr is None:
            self.transport.write(self.writeBuffer)
        else:
            self.transport.write(self.writeBuffer, addr=addr)
        self.writeBuffer = bytearray()
Exemplo n.º 4
0
 def setUp(self):
     self.b = ConstBuffer(b'12345')