class SCCPClientProtocol(IntNStringReceiver):
    """ The protocol is based on twisted.protocols.basic
        IntNStringReceiver, with little-endian 32-bit 
        length prefix.
    """
    structFormat = "<L"
    prefixLength = struct.calcsize(structFormat)
    trailingNbOfBytes = 4
    messageFactory = MessageFactory()

    def dataReceived(self, recd):
        """
        Convert int prefixed strings into calls to stringReceived.
        """
        self.recvd = self.recvd + recd
        while len(self.recvd) >= self.prefixLength and not self.paused:
            length, = struct.unpack(self.structFormat,
                                    self.recvd[:self.prefixLength])
            length = length + self.trailingNbOfBytes

            if length > self.MAX_LENGTH:
                self.lengthLimitExceeded(length)
                return
            if len(self.recvd) < length + self.prefixLength:
                break
            packet = self.recvd[self.prefixLength:length + self.prefixLength]
            self.recvd = self.recvd[length + self.prefixLength:]
            self.stringReceived(packet)

    def stringReceived(self, s):
        message = self.messageFactory.create(s)
        message.unPack(s[8:])
        self.factory.handleMessage(message)

    def connectionMade(self):
        self.factory.clientReady(self)

    def sendString(self, data):
        self.transport.write(
            struct.pack(self.structFormat, len(data)) + data +
            "\x00\x00\x00\x00")
Пример #2
0
def run(filter=None):
    engine = create_engine(sccpreplay.DB_URL)
    metadata = MetaData(engine)

    tbl_packets = Table('packets', metadata, *model.packets_columns)
    tbl_messages = Table('messages', metadata, *model.messages_columns)
    tbl_session_counter = Table('session_counter', metadata, *model.session_counter_columns)

    metadata.create_all()
    tbl_messages.delete().execute()

    packets = tbl_packets.select().execute()

    messages = []

    i = 1
    j = 1

    messages = []
    message_factory = MessageFactory()

    channels_assemblers = defaultdict(MessageAssembler)
    
    for packet in packets:
        channel = (packet['session'], packet['side'])
        assembler = channels_assemblers[channel]
        packets_data = assembler.feed(packet.data)

        for packet_data in packets_data:
            # if packet_data[4] == '\x03':
            #     print 'button'
            message = packet_to_message(dict(packet))
            message['data'] = packet_data
            m = sccpclientprotocol.deserialize(packet_data, message_factory)
            message['type'] = m.sccpmessageType
            # print packet['number'], message['session'], message['side'], m, '%04X' % m.sccpmessageType
            messages.append(message)

    tbl_messages.insert().execute(messages)
Пример #3
0
class TestMessageFactory(unittest.TestCase):

    def setUp(self):
        self.messageFactory = MessageFactory()

    def testCreateRegisterAck(self):
        receivedBuffer = "\x00\x00\x00\x00\x81\x00\x00\x00\x00\x0b\x00\x00"
    
        msg = self.messageFactory.create(receivedBuffer)
        
        self.assertTrue(isinstance(msg, SCCPRegisterAck))

    def testCreateCapabilitiesReq(self):
        receivedBuffer = "\x00\x00\x00\x00\x9b\x00\x00\x00\x00\x0b\x00\x00"
    
        msg = self.messageFactory.create(receivedBuffer)
        
        self.assertTrue(isinstance(msg, SCCPCapabilitiesReq))
        
    def testCreateKeepAliveAck(self):
        receivedBuffer = "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0b\x00\x00"
    
        msg = self.messageFactory.create(receivedBuffer)
        
        self.assertTrue(isinstance(msg, SCCPKeepAliveAck))

    def testCreateDefineTimeDate(self):
        receivedBuffer = "\x00\x00\x00\x00\x94\x00\x00\x00\x00\x0b\x00\x00"
    
        msg = self.messageFactory.create(receivedBuffer)
        
        self.assertTrue(isinstance(msg, SCCPDefineTimeDate))
        
    def testCreateLineStat(self):
        receivedBuffer = "\x00\x00\x00\x00\x92\x00\x00\x00\x00\x0b\x00\x00"
        msg = self.messageFactory.create(receivedBuffer)
        
        self.assertTrue(isinstance(msg, SCCPLineStat))
        

    def testCreateUnkownType(self):
        receivedBuffer = "\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x0b\x00\x00"
        msg = self.messageFactory.create(receivedBuffer)
        self.assertEquals(0xFFFF,msg.sccpmessageType)
class TestMessageFactory(unittest.TestCase):
    def setUp(self):
        self.messageFactory = MessageFactory()

    def testCreateRegisterAck(self):
        receivedBuffer = "\x00\x00\x00\x00\x81\x00\x00\x00\x00\x0b\x00\x00"

        msg = self.messageFactory.create(receivedBuffer)

        self.assertTrue(isinstance(msg, SCCPRegisterAck))

    def testCreateCapabilitiesReq(self):
        receivedBuffer = "\x00\x00\x00\x00\x9b\x00\x00\x00\x00\x0b\x00\x00"

        msg = self.messageFactory.create(receivedBuffer)

        self.assertTrue(isinstance(msg, SCCPCapabilitiesReq))

    def testCreateKeepAliveAck(self):
        receivedBuffer = "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0b\x00\x00"

        msg = self.messageFactory.create(receivedBuffer)

        self.assertTrue(isinstance(msg, SCCPKeepAliveAck))

    def testCreateDefineTimeDate(self):
        receivedBuffer = "\x00\x00\x00\x00\x94\x00\x00\x00\x00\x0b\x00\x00"

        msg = self.messageFactory.create(receivedBuffer)

        self.assertTrue(isinstance(msg, SCCPDefineTimeDate))

    def testCreateLineStat(self):
        receivedBuffer = "\x00\x00\x00\x00\x92\x00\x00\x00\x00\x0b\x00\x00"
        msg = self.messageFactory.create(receivedBuffer)

        self.assertTrue(isinstance(msg, SCCPLineStat))

    def testCreateUnkownType(self):
        receivedBuffer = "\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x0b\x00\x00"
        msg = self.messageFactory.create(receivedBuffer)
        self.assertEquals(0xFFFF, msg.sccpmessageType)
Пример #5
0
 def __init__(self):
     self.messageFactory = MessageFactory()
     self.recvd = ""
 def setUp(self):
     self.messageFactory = MessageFactory()
Пример #7
0
 def setUp(self):
     self.messageFactory = MessageFactory()