mobile_insight.monitor.dm_collector.dm_endec package


Module contents

dm_endec A module that encodes or decodes DM packets.

Author: Jiayao Li

class mobile_insight.monitor.dm_collector.dm_endec.DMLogPacket(decoded_list)

Bases: object

DM log packet decoder.

A log packet contains a header that specifies the packet type and timestamp, and a payload field that store useful information of a phone. This class will decode both the header and payload fields.

This class depends on Wireshark to decode some 3GPP standardized messages.

classmethod _decode_msg(msg_type, b)

Decode standard message using WSDissector.

_init_called = False
classmethod _parse_internal_list(out_type, decoded_list)

Parse the internal list to create different types of output.

  • out_type (string) – can be “dict”, “list”, “xml/dict” or “xml/list”

  • decoded_list (list) – output of dm_collector_c library

classmethod _parse_internal_list_dict(decoded_list)
classmethod _parse_internal_list_list(decoded_list)
classmethod _parse_internal_list_old(out_type, decoded_list)
classmethod _parse_internal_list_xml(tag_name, decoded_list)
classmethod _preparse_internal_list(decoded_list)
classmethod _search_result(result, target)
classmethod _wrap_decoded_xml(xmls)

an XML string that looks like:


<packet>…</packet> <packet>…</packet> <packet>…</packet>



Decode a DM log packet.


a Python dict object that looks like:


”type_id”: “LTE_RRC_OTA_Packet”, “timestamp”: datetime.datetime(……), “Pkt Version”: 2, “RRC Release Number”: 9, # other fields … “Msg”: “””


<packet>…</packet> <packet>…</packet> <packet>…</packet>

</msg> “””,



FormatError – this message has an unknown type


Decode the message and convert to a standard JSON dictionary.


a string that contains the converted JSON document.


Decode the message and convert to a standard XML document.


a string that contains the converted XML document.

classmethod init(prefs)

Configure the DMLogPacket class with user preferences.

This method should be called before any actual decoding.


prefs (dict) – a dict storing the preferences

exception mobile_insight.monitor.dm_collector.dm_endec.FormatError

Bases: RuntimeError

Error in decoding messages.

class mobile_insight.monitor.dm_collector.dm_endec.WSDissector

Bases: object

A wrapper class of the ws_dissector program, which calls libwireshark to dissect many types of messages, e.g. 3GPP standardized messages.

This wrapper communicates with the ws_dissector program using a trivial TLV-formatted protocol named AWW (Automator Wireshark Wrapper), through the standard input/output interfaces.

SUPPORTED_TYPES = {'LTE-NAS_EPS_PLAIN': 250, 'LTE-PDCP_DL_SRB': 300, 'LTE-PDCP_UL_SRB': 301, 'LTE-RRC_BCCH_DL_SCH': 203, 'LTE-RRC_BCCH_DL_SCH_NB': 208, 'LTE-RRC_DL_CCCH': 204, 'LTE-RRC_DL_CCCH_NB': 209, 'LTE-RRC_DL_DCCH': 201, 'LTE-RRC_DL_DCCH_NB': 206, 'LTE-RRC_PCCH': 200, 'LTE-RRC_UL_CCCH': 205, 'LTE-RRC_UL_CCCH_NB': 210, 'LTE-RRC_UL_DCCH': 202, 'LTE-RRC_UL_DCCH_NB': 207, 'NAS': 190, 'RRC_DL_BCCH_BCH': 104, 'RRC_DL_CCCH': 102, 'RRC_DL_DCCH': 103, 'RRC_DL_PCCH': 106, 'RRC_MIB': 150, 'RRC_SB1': 181, 'RRC_SIB1': 151, 'RRC_SIB11': 161, 'RRC_SIB12': 162, 'RRC_SIB19': 169, 'RRC_SIB2': 152, 'RRC_SIB3': 153, 'RRC_SIB5': 155, 'RRC_SIB7': 157, 'RRC_UL_CCCH': 100, 'RRC_UL_DCCH': 101, 'nas-5gs': 416, 'nr-rrc.bcch.bch': 402, 'nr-rrc.bcch.dl.sch': 403, 'nr-rrc.dl.ccch': 404, 'nr-rrc.dl.dcch': 405, 'nr-rrc.pcch': 406, 'nr-rrc.radio_bearer_conf': 415, 'nr-rrc.rrc_reconf': 410, '': 413, 'nr-rrc.scch': 414, 'nr-rrc.ue_mrdc_cap': 411, 'nr-rrc.ue_nr_cap': 412, 'nr-rrc.ue_radio_access_cap_info': 401, 'nr-rrc.ue_radio_paging_info': 400, 'nr-rrc.ul.ccch': 407, 'nr-rrc.ul.ccch1': 408, 'nr-rrc.ul.dcch': 409}
_init_proc_called = False
_proc = None
classmethod decode_msg(msg_type, b)

Decode a binary message of type msg_type.

  • msg_type (string) – the type of the message to be decoded

  • b (string) – binary data to be decoded


an XML string

classmethod init_proc(executable_path, ws_library_path)

Launch the ws_dissector program. Must be called before any actual decoding, and should be called only once.

  • executable_path (string or None) – path to ws_dissector. If set to None, uses the default path.

  • ws_library_path (string or None) – a directory that contains libwireshark. If set to None, uses the default path.