[proxy] Update proxy logger to show l2
Этот коммит содержится в:
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()
|
||||||
@@ -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()}"
|
||||||
|
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user