add some generic error handling

This commit is contained in:
Jakob Ketterl 2023-09-08 16:09:03 +02:00
parent 1e9b99dd90
commit 6b026e8450
2 changed files with 52 additions and 38 deletions

View file

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

View file

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