blob: 115212ce4c7afae2d87ff45e44e31c25dd3032af (
plain) (
tree)
|
|
from construct import Struct, ULInt16, MetaField
from loggers import netlog
from packetlen import packet_lengths
def dispatch(stream, protodef):
opcode = ULInt16("opcode").parse_stream(stream)
if opcode in protodef:
func, macro = protodef[opcode]
data = macro.parse_stream(stream)
func(data)
else:
data = ''
pktlen = packet_lengths.get(opcode, -1)
if pktlen > 0:
data = stream.read(pktlen - 2)
elif pktlen == -1:
datadef = Struct("data",
ULInt16("length"),
MetaField("ignore",
lambda ctx: ctx["length"] - 4))
data = datadef.parse_stream(stream)
netlog.warning('UNIMPLEMENTED opcode={:04x} data={}'.format(
opcode, data))
|