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
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)
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
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)))