LibMISB - Examples - Example Python Application
LibMISB |
---|
![]() |
Introduction |
Supported Standards |
Getting Started |
Examples |
Evaluating |
Contact Us |
Introduction
LibMISB includes Python bindings when you build it with -Dpython=enabled (see How to Compile). These bindings expose the same API as the C library. In the sections that follow, you’ll find some usage examples.
Meta Encoding from JSON
This example shows you how to encode metadata using a JSON formatted string as the input.
# Copyright (C) 2025 RidgeRun, LLC (http://www.ridgerun.com) # All Rights Reserved. # # The contents of this software are proprietary and confidential to RidgeRun, # LLC. No part of this program may be photocopied, reproduced or translated # into another programming language without prior written consent of # RidgeRun, LLC. The user is free to modify the source code after obtaining # a software license from RidgeRun. All source code changes must be provided # back to RidgeRun without any encumbrance. import json from libmisb import LibMisb, LogLevel from libmisb.formatter import JsonFormatter data = { "key": "060E2B34020B01010E01030101000000", "items": [ { "tag": "2", "value": "Oct. 24, 2008. 00:13:29.913" }, { "tag": "3", "value": "MISSION01" }, { "tag": "4", "value": "AF-101" }, { "tag": "5", "value": "159.97436" }, { "tag": "15", "value": "14190.7195" }, { "tag": "48", "value": [ { "tag": "1", "value": "1" }, { "tag": "2", "value": "1" }, { "tag": "3", "value": "//USA" }, { "tag": "4", "value": "TS/SI/CompartmentA//" }, { "tag": "5", "value": "FOUO" }, { "tag": "6", "value": "506 82 81" }, { "tag": "12", "value": "1" }, { "tag": "13", "value": "USA" }, { "tag": "22", "value": "10" } ] }, { "tag": "74", "value": [ { "tag": "2", "value": "Apr. 19, 2001. 04:25:21.000" }, { "tag": "101", "value": [ { "tag": "targetId", "value": "1234" }, { "tag": "1", "value": "409600" }, { "tag": "3", "value": "409600" }, { "tag": "5", "value": "80" }, { "tag": "102", "value": [ { "tag": "1", "value": "Aircraft" }, { "tag": "2", "value": "Aircraft" } ] } ] }, { "tag": "4", "value": "6" }, { "tag": "6", "value": "14" }, { "tag": "7", "value": "78000" }, { "tag": "8", "value": "1280" }, { "tag": "9", "value": "720" } ] }, { "tag": "94", "value": "0170:F592-F023-7336-4AF8-AA91-62C0-0F2E-B2DA/16B7-4341-0008-41A0-BE36-5B5A-B96A-3645:D3" }, { "tag": "96", "value": "13,898.5463" }, { "tag": "104", "value": "34,567.35" } ] } original_json = json.dumps(data, separators=(',', ':')) lm = LibMisb() lm.set_formatter(JsonFormatter()) lm.set_log_level(LogLevel.INFO) klv_bytes = lm.encode(original_json) print("Encoded KLV (hex):", klv_bytes.hex())
Encoding from Items
If you don't want to pass the full list of tags as a JSON string, you can also create and add individual items as shown in the following example:
# Copyright (C) 2025 RidgeRun, LLC (http://www.ridgerun.com) # All Rights Reserved. # # The contents of this software are proprietary and confidential to RidgeRun, # LLC. No part of this program may be photocopied, reproduced or translated # into another programming language without prior written consent of # RidgeRun, LLC. The user is free to modify the source code after obtaining # a software license from RidgeRun. All source code changes must be provided # back to RidgeRun without any encumbrance. import json from libmisb import LibMisb, Metadata, metadata_item, LogLevel from libmisb.formatter import JsonFormatter raw = { "key": "060E2B34020B01010E01030101000000", "items": [ { "tag": "2", "value": "Oct. 24, 2008. 00:13:29.913" }, { "tag": "3", "value": "MISSION01" }, { "tag": "4", "value": "AF-101" }, { "tag": "5", "value": "159.97436" }, { "tag": "15", "value": "14190.7195" } ] } def build_items(lst): out = [] for entry in lst: mi = metadata_item() mi.tag = entry["tag"] mi.value = entry["value"] mi.sub_items = [] # no nested items here mi.local_set = True out.append(mi) return out # Build and populate Metadata meta = Metadata() meta.set_key(raw["key"]) meta.set_items(build_items(raw["items"])) lm = LibMisb() lm.set_formatter(JsonFormatter()) lm.set_log_level(LogLevel.INFO) original_json = json.dumps(raw, separators=(',', ':')) packet, status = lm.encode(meta) if status != 0: raise RuntimeError(f"Encode failed with status {status}") print("Encoded KLV (hex):", packet.hex())
Metadata Decoding
The following example shows you how to decode MISB-encoded metadata into a JSON string.
# Copyright (C) 2025 RidgeRun, LLC (http://www.ridgerun.com) # All Rights Reserved. # # The contents of this software are proprietary and confidential to RidgeRun, # LLC. No part of this program may be photocopied, reproduced or translated # into another programming language without prior written consent of # RidgeRun, LLC. The user is free to modify the source code after obtaining # a software license from RidgeRun. All source code changes must be provided # back to RidgeRun without any encumbrance. from libmisb import LibMisb, LogLevel from libmisb.formatter import JsonFormatter from binascii import unhexlify import json # Your hex‐encoded MISB KLV packet hex_data = ( "060e2b34020b01010e01030101000000" "2c0208000459f9ae2022a803094d4953" "53494f4e3031040641462d3130310502" "71c20f02c2214101130102a67d" ) # Convert hex string to raw bytes packet_bytes = unhexlify(hex_data) lm = LibMisb() lm.set_formatter(JsonFormatter()) lm.set_log_level(LogLevel.INFO) # Decode the packet back into a JSON‐style string decoded_str = lm.decode(packet_bytes) print("Decoded string:") print(decoded_str) # Show tags print("-------------------------------------------------------") print("Tags and values:") print("-------------------------------------------------------") print(lm.get_tags_names(decoded_str))