Example #1
0
def process_file(args, pcap_filename, security_id_filter=None):
    mdp_schema = SBESchema()
    # Read in the schema xml as a dictionary and construct the various schema objects
    try:
        from sbedecoder.generated import __messages__ as generated_messages
        mdp_schema.load(generated_messages)
    except:
        mdp_schema.parse(args.schema)

    msg_factory = SBEMessageFactory(mdp_schema)
    mdp_parser = SBEParser(msg_factory)

    secdef = SecDef()
    secdef.load(args.secdef)

    book_builder = PacketProcessor(mdp_parser, secdef, security_id_filter=security_id_filter)

    console_printer = ConsolePrinter()
    book_builder.orderbook_handler = console_printer

    with gzip.open(pcap_filename, 'rb') if pcap_filename.endswith('.gz') else open(pcap_filename, 'rb') as pcap:
        pcap_reader = dpkt.pcap.Reader(pcap)
        packet_number = 0
        for ts, packet in pcap_reader:
            packet_number += 1
            ethernet = dpkt.ethernet.Ethernet(packet)
            if ethernet.type == dpkt.ethernet.ETH_TYPE_IP:
                ip = ethernet.data
                if ip.p == dpkt.ip.IP_PROTO_UDP:
                    udp = ip.data
                    data = udp.data
                    try:
                        book_builder.handle_packet(long(ts*1000000), data)
                    except Exception:
                        continue
Example #2
0
    def test_security_status_reset_statistics(self):
        schema = SBESchema(include_message_size_header=True, use_description_as_message_name=True)
        try:
            from sbedecoder.generated import __messages__ as generated_messages
            schema.load(generated_messages)
        except:
            schema.parse(TestSBEParserLibrary.LOCAL_TEMPLATE_FILENAME)

        msg_factory = MDPMessageFactory(schema)
        parser = SBEParser(msg_factory)

        msg_buffer = binascii.a2b_hex('5603a9009c16d545349ad91428001e001e000100080003259845349ad914455300000000000000000000ffffff7fed4380150004')

        offset = 12

        for message in parser.parse(msg_buffer, offset):
            self.recorded_messages.append(message)

        # Validate that we parsed a security status message
        assert_equals(1, len(self.recorded_messages))
        recorded_message = self.recorded_messages[0]
        assert_equals(30, recorded_message.template_id.value)
        assert_equals('SecurityStatus', recorded_message.name)
        assert_equals(17389, recorded_message.trade_date.value)
        assert_equals(1502401500001346819, recorded_message.transact_time.value)
        assert_equals('Reset Statistics', recorded_message.security_trading_event.value)
        assert_equals('ResetStatistics', recorded_message.security_trading_event.enumerant)
        assert_equals('Pre Open', recorded_message.security_trading_status.value)
        assert_equals('PreOpen', recorded_message.security_trading_status.enumerant)
        assert_equals('ES', recorded_message.security_group.value)
        assert_equals('', recorded_message.asset.value)
        assert_equals('Group Schedule', recorded_message.halt_reason.value)
        assert_equals('GroupSchedule', recorded_message.halt_reason.enumerant)
        assert_equals(None, recorded_message.security_id.value)
Example #3
0
def mdp_schema():
    schema_filename = tempfile.NamedTemporaryFile().name
    urllib.request.urlretrieve(schema_url, schema_filename)
    urllib.request.urlcleanup(
    )  # work around a bug in urllib under python 2.7 (https://stackoverflow.com/a/44734254)
    schema = SBESchema(include_message_size_header=True,
                       use_description_as_message_name=True)
    try:
        from sbedecoder.generated import __messages__ as generated_messages
        schema.load(generated_messages)
    except:
        schema.parse(schema_filename)
    os.remove(schema_filename)
    return schema
Example #4
0
def process_file(args,
                 pcap_filename,
                 security_id_filter=None,
                 print_data=False):
    mdp_schema = SBESchema()
    # Read in the schema xml as a dictionary and construct the various schema objects
    try:
        from sbedecoder.generated import __messages__ as generated_messages
        mdp_schema.load(generated_messages)
    except:
        mdp_schema.parse(args.schema)

    msg_factory = SBEMessageFactory(mdp_schema)
    mdp_parser = SBEParser(msg_factory)

    secdef = SecDef()
    secdef.load(args.secdef)

    book_builder = PacketProcessor(mdp_parser,
                                   secdef,
                                   security_id_filter=security_id_filter)

    console_printer = ConsolePrinter()
    book_builder.orderbook_handler = console_printer

    with gzip.open(pcap_filename,
                   'rb') if pcap_filename.endswith('.gz') else open(
                       pcap_filename, 'rb') as pcap:
        pcap_reader = dpkt.pcap.Reader(pcap)
        packet_number = 0
        for ts, packet in pcap_reader:
            packet_number += 1
            ethernet = dpkt.ethernet.Ethernet(packet)
            if ethernet.type == dpkt.ethernet.ETH_TYPE_IP:
                ip = ethernet.data
                if ip.p == dpkt.ip.IP_PROTO_UDP:
                    udp = ip.data
                    data = udp.data
                    try:
                        if print_data:
                            print('data: {}'.format(binascii.b2a_hex(data)))
                        book_builder.handle_packet(long(ts * 1000000), data)
                    except Exception as e:
                        print('Error decoding e:{} message:{}'.format(
                            e, binascii.b2a_hex(data)))