zeek/auxil/spicy/doc/tutorial/examples/_tftp-enum.spicy
Patrick Kelley 8fd444092b initial
2025-05-07 15:35:15 -04:00

46 lines
1010 B
Plaintext

# Automatically generated; edit in Sphinx source code, not here.
# %hide-begin%
module TFTP;
type Opcode = enum { RRQ = 1, WRQ = 2, DATA = 3, ACK = 4, ERROR = 5 };
public type Packet = unit {
opcode: uint16 &convert=Opcode($$);
# %hide-end%
switch ( self.opcode ) {
Opcode::RRQ -> rrq: ReadRequest;
Opcode::WRQ -> wrq: WriteRequest;
Opcode::DATA -> data: Data;
Opcode::ACK -> ack: Acknowledgement;
Opcode::ERROR -> error: Error;
};
# %hide-begin%
on %done { print self; }
};
type ReadRequest = unit {
filename: bytes &until=b"\x00";
mode: bytes &until=b"\x00";
};
type WriteRequest = unit {
filename: bytes &until=b"\x00";
mode: bytes &until=b"\x00";
};
type Data = unit {
num: uint16;
data: bytes &eod; # parse until end of data (i.e., packet) is reached
};
type Acknowledgement = unit {
num: uint16;
};
type Error = unit {
code: uint16;
msg: bytes &until=b"\x00";
};
# %hide-end%