94 lines
2.3 KiB
Python
94 lines
2.3 KiB
Python
import logging
|
|
import weakref
|
|
|
|
if __name__ == "app.src.messages":
|
|
from app.src.infos import Infos
|
|
else: # pragma: no cover
|
|
from infos import Infos
|
|
|
|
logger = logging.getLogger('msg')
|
|
|
|
|
|
def hex_dump_memory(level, info, data, num):
|
|
n = 0
|
|
lines = []
|
|
lines.append(info)
|
|
tracer = logging.getLogger('tracer')
|
|
if not tracer.isEnabledFor(level):
|
|
return
|
|
|
|
for i in range(0, num, 16):
|
|
line = ' '
|
|
line += '%04x | ' % (i)
|
|
n += 16
|
|
|
|
for j in range(n-16, n):
|
|
if j >= len(data):
|
|
break
|
|
line += '%02x ' % abs(data[j])
|
|
|
|
line += ' ' * (3 * 16 + 9 - len(line)) + ' | '
|
|
|
|
for j in range(n-16, n):
|
|
if j >= len(data):
|
|
break
|
|
c = data[j] if not (data[j] < 0x20 or data[j] > 0x7e) else '.'
|
|
line += '%c' % c
|
|
|
|
lines.append(line)
|
|
|
|
tracer.log(level, '\n'.join(lines))
|
|
|
|
|
|
class IterRegistry(type):
|
|
def __iter__(cls):
|
|
for ref in cls._registry:
|
|
obj = ref()
|
|
if obj is not None:
|
|
yield obj
|
|
|
|
|
|
class Message(metaclass=IterRegistry):
|
|
_registry = []
|
|
|
|
def __init__(self, server_side: bool):
|
|
self._registry.append(weakref.ref(self))
|
|
|
|
self.server_side = server_side
|
|
self.header_valid = False
|
|
self.header_len = 0
|
|
self.data_len = 0
|
|
self.unique_id = 0
|
|
self.node_id = ''
|
|
self.sug_area = ''
|
|
self._recv_buffer = bytearray(0)
|
|
self._send_buffer = bytearray(0)
|
|
self._forward_buffer = bytearray(0)
|
|
self.new_data = {}
|
|
|
|
'''
|
|
Empty methods, that have to be implemented in any child class which
|
|
don't use asyncio
|
|
'''
|
|
def _read(self) -> None: # read data bytes from socket and copy them
|
|
# to our _recv_buffer
|
|
return # pragma: no cover
|
|
|
|
def _update_header(self, _forward_buffer):
|
|
'''callback for updating the header of the forward buffer'''
|
|
return # pragma: no cover
|
|
|
|
'''
|
|
Our puplic methods
|
|
'''
|
|
def close(self) -> None:
|
|
pass # pragma: no cover
|
|
|
|
def inc_counter(self, counter: str) -> None:
|
|
self.db.inc_counter(counter)
|
|
Infos.new_stat_data['proxy'] = True
|
|
|
|
def dec_counter(self, counter: str) -> None:
|
|
self.db.dec_counter(counter)
|
|
Infos.new_stat_data['proxy'] = True
|