diff --git a/owrx/hfdl/dumphfdl.py b/owrx/hfdl/dumphfdl.py index 47e8ec8c..80e1cb9e 100644 --- a/owrx/hfdl/dumphfdl.py +++ b/owrx/hfdl/dumphfdl.py @@ -3,6 +3,10 @@ from pycsdr.types import Format from owrx.aeronautical import AirplaneLocation, AcarsProcessor, IcaoSource from owrx.map import Map, Source +import logging + +logger = logging.getLogger(__name__) + class HfdlAirplaneLocation(AirplaneLocation): pass @@ -43,23 +47,26 @@ class HFDLMessageParser(AcarsProcessor): def process(self, line): msg = super().process(line) if msg is not None: - payload = msg["hfdl"] - if "lpdu" in payload: - lpdu = payload["lpdu"] - icao = lpdu["src"]["ac_info"]["icao"] if "ac_info" in lpdu["src"] else None - if lpdu["type"]["id"] in [13, 29]: - hfnpdu = lpdu["hfnpdu"] - if hfnpdu["type"]["id"] == 209: - # performance data - self.processPosition(hfnpdu, icao) - elif hfnpdu["type"]["id"] == 255: - # enveloped data - if "acars" in hfnpdu: - self.processAcars(hfnpdu["acars"], icao) - elif lpdu["type"]["id"] in [79, 143, 191]: - if "ac_info" in lpdu: - icao = lpdu["ac_info"]["icao"] - self.processPosition(lpdu["hfnpdu"], icao) + try: + payload = msg["hfdl"] + if "lpdu" in payload: + lpdu = payload["lpdu"] + icao = lpdu["src"]["ac_info"]["icao"] if "ac_info" in lpdu["src"] else None + if lpdu["type"]["id"] in [13, 29]: + hfnpdu = lpdu["hfnpdu"] + if hfnpdu["type"]["id"] == 209: + # performance data + self.processPosition(hfnpdu, icao) + elif hfnpdu["type"]["id"] == 255: + # enveloped data + if "acars" in hfnpdu: + self.processAcars(hfnpdu["acars"], icao) + elif lpdu["type"]["id"] in [79, 143, 191]: + if "ac_info" in lpdu: + icao = lpdu["ac_info"]["icao"] + self.processPosition(lpdu["hfnpdu"], icao) + except Exception: + logger.exception("error processing HFDL data") return msg diff --git a/owrx/vdl2/dumpvdl2.py b/owrx/vdl2/dumpvdl2.py index 48af2357..baebaa50 100644 --- a/owrx/vdl2/dumpvdl2.py +++ b/owrx/vdl2/dumpvdl2.py @@ -4,6 +4,10 @@ from owrx.aeronautical import AcarsProcessor from owrx.map import Map from owrx.aeronautical import AirplaneLocation, IcaoSource +import logging + +logger = logging.getLogger(__name__) + class DumpVDL2Module(ExecModule): def __init__(self): @@ -27,27 +31,30 @@ class VDL2MessageParser(AcarsProcessor): def process(self, line): msg = super().process(line) if msg is not None: - payload = msg["vdl2"] - if "avlc" in payload: - avlc = payload["avlc"] - src = avlc["src"]["addr"] - if avlc["frame_type"] == "I": - if "acars" in avlc: - self.processAcars(avlc["acars"]) - elif "x25" in avlc: - x25 = avlc["x25"] - if "clnp" in x25: - clnp = x25["clnp"] - if "cotp" in clnp: - cotp = clnp["cotp"] - if "adsc_v2" in cotp: - adsc_v2 = cotp["adsc_v2"] - if "adsc_report" in adsc_v2: - adsc_report = adsc_v2["adsc_report"] - if "periodic_report" in adsc_report["data"]: - periodic_report = adsc_report["data"]["periodic_report"] - report_data = periodic_report["report_data"] - self.processReport(report_data, src) + try: + payload = msg["vdl2"] + if "avlc" in payload: + avlc = payload["avlc"] + src = avlc["src"]["addr"] + if avlc["frame_type"] == "I": + if "acars" in avlc: + self.processAcars(avlc["acars"]) + elif "x25" in avlc: + x25 = avlc["x25"] + if "clnp" in x25: + clnp = x25["clnp"] + if "cotp" in clnp: + cotp = clnp["cotp"] + if "adsc_v2" in cotp: + adsc_v2 = cotp["adsc_v2"] + if "adsc_report" in adsc_v2: + adsc_report = adsc_v2["adsc_report"] + if "periodic_report" in adsc_report["data"]: + periodic_report = adsc_report["data"]["periodic_report"] + report_data = periodic_report["report_data"] + self.processReport(report_data, src) + except Exception: + logger.exception("error processing VDL2 data") return msg def processReport(self, report, icao):