[proxy] Update proxy logger to show l2

Этот коммит содержится в:
Alexander UR6LKW
2025-06-01 01:02:32 +03:00
родитель fa6399b0e6
Коммит 522fd8a472
2 изменённых файлов: 53 добавлений и 7 удалений
Executable
+26
Просмотреть файл
@@ -0,0 +1,26 @@
import argparse
from udpproxylogger import log_packet, setup_logger
def parse_arguments():
parser = argparse.ArgumentParser(description='ReLog')
parser.add_argument('infilename', type=str, help='input log filename')
parser.add_argument('-l', '--log-file', type=str, help='Log filename')
return parser.parse_args()
def main():
args = parse_arguments()
setup_logger(args.log_file)
with open(args.infilename, "r") as file:
for line in file:
line = line.strip()
if line.startswith("HD: "):
pdata = bytes.fromhex(line[4:])
log_packet("DIR", pdata, ('', ''))
if __name__ == "__main__":
main()
+27 -7
Просмотреть файл
@@ -3,8 +3,13 @@ import asyncio
import logging import logging
import traceback import traceback
from bitarray import bitarray
from dmrtools import DMRPPacketFactory from dmrtools import DMRPPacketFactory
from dmrtools import hexdump from dmrtools import hexdump
from dmrtools.dmrproto import DMRPL2FullLC, DMRPL2VoiceBurst
from dmrtools.dmrproto import DMRPPacketData
from dmrtools.dmrproto import EmbLCAssembler, LCFactory
def setup_logger(log_file=None): def setup_logger(log_file=None):
@@ -13,21 +18,36 @@ def setup_logger(log_file=None):
handlers.append(logging.FileHandler(log_file)) handlers.append(logging.FileHandler(log_file))
logging.basicConfig( logging.basicConfig(
level=logging.INFO, # level=logging.INFO,
level=logging.DEBUG,
format='%(asctime)s [%(levelname)s] %(message)s', format='%(asctime)s [%(levelname)s] %(message)s',
datefmt='%Y-%m-%d %H:%M:%S', datefmt='%Y-%m-%d %H:%M:%S',
handlers=handlers handlers=handlers
) )
elca: dict[int, EmbLCAssembler] = dict()
def get_packet_details(data): def get_packet_details(data):
if not hasattr(get_packet_details, 'pf'):
get_packet_details.pf = DMRPPacketFactory()
try: try:
p = get_packet_details.pf.from_data(data) p = DMRPPacketFactory.fd(data)
if p.pkt_type == 'DMRD': if type(p) is DMRPPacketData:
return f"{p:ext}\n" emblcinfo = ""
return f"{str(p)}\n" if (full_lc := p.get_full_lc()) is not None:
lcdec = LCFactory.fd(full_lc)
emblcinfo = f"FullLC:{hexdump(full_lc)}\n{lcdec}\n"
return f"{p:l2}\n" + emblcinfo
if p.stream_id not in elca:
elca[p.stream_id] = EmbLCAssembler()
if elca[p.stream_id].process_voicedata(p):
emblcdata = elca[p.stream_id].decode()
lcdec = LCFactory.fd(emblcdata)
emblcinfo = f"EmbLC:{hexdump(emblcdata)}\n{lcdec}\n"
del elca[p.stream_id]
if p.is_voice_term:
del elca[p.stream_id]
return f"{p:l2}\n" + emblcinfo
return f"{p}\n"
except: except:
return f"Exception while decoding packet:\n{traceback.format_exc()}" return f"Exception while decoding packet:\n{traceback.format_exc()}"