123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- function ftsr_dissector(buffer, pinfo, tree, ftsr_protocol, offset)
- -- Define the fields for the protocol
- local f_session_id = ProtoField.uint8("ftsr_protocol.session_id", "Session ID", base.DEC)
- local f_status_code = ProtoField.uint8("ftsr_protocol.status_code", "Response Status Code", base.HEX)
- local f_missing_count = ProtoField.uint8("ftsr_protocol.missing_count", "Total Missing Data Segment Count", base.DEC)
- local f_reserved = ProtoField.uint16("ftsr_protocol.reserved1", "Reserved", base.HEX)
- local f_suspend_timeout_or_sct_db = ProtoField.uint32("ftsr_protocol.suspend_timeout_or_sct_db", "Suspend Waiting Timeout or SCT Database", base.HEX)
- local f_missing_segment_seq = ProtoField.bytes("ftsr_protocol.missing_segment_seq", "Missing Segment Sequence Numbers", base.SPACE)
- -- Add the fields to the protocol
- ftsr_protocol.fields = { f_session_id, f_status_code, f_reserved, f_missing_count, f_suspend_timeout_or_sct_db, f_missing_segment_seq }
- local subtree = tree:add(ftsr_protocol, buffer(), "FTSR")
- -- Parse the CONTROL FIELD (1 byte)
- local control_field = buffer(offset, 1):le_uint()
- local session_id = (control_field & 0x07) -- Bits 0-2 for Session ID (3 bits)
- local status_code = (control_field >> 3) & 0x1f -- Bits 3-7 for Status Code (5 bits)
-
- -- Add fields to the protocol tree
- subtree:add(f_session_id, session_id)
-
- if status_code == 0 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR RECEIVER READY (0x%02X)", status_code))
- elseif status_code == 1 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR RX API NOT FOUND (0x%02X)", status_code))
- elseif status_code == 2 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR SUSPEND (0x%02X)", status_code))
- elseif status_code == 3 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR RESUME (0x%02X)", status_code))
- elseif status_code == 4 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR STOP TRANSFER (0x%02X)", status_code))
- elseif status_code == 5 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR MISSING PACKETS (0x%02X)", status_code))
- elseif status_code == 6 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR CRC FAIL (0x%02X)", status_code))
- elseif status_code == 7 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR FILE NOT FOUND (0x%02X)", status_code))
- elseif status_code == 8 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR HEAD CHANGE (0x%02X)", status_code))
- elseif status_code == 9 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR CANCELLED BY SUSPEND TIMEOUT (0x%02X)", status_code))
- elseif status_code == 10 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR SUSPEND SAVE CONTEXT (0x%02X)", status_code))
- elseif status_code == 11 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR RESUME SAVE CONTEXT (0x%02X)", status_code))
- elseif status_code == 12 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR ACK (0x%02X)", status_code))
- elseif status_code == 13 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR NAK (0x%02X)", status_code))
- elseif status_code == 14 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR PING (0x%02X)", status_code))
- elseif status_code == 15 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR DOWNLOAD COMPLETE (0x%02X)", status_code))
- elseif status_code == 16 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR TERMINATE RX NODE (0x%02X)", status_code))
- elseif status_code == 17 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR INVALID SESSION ID (0x%02X)", status_code))
- elseif status_code == 18 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR DOWNLOAD PTR NULL (0x%02X)", status_code))
- elseif status_code == 19 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR FTM BUSY (0x%02X)", status_code))
- elseif status_code == 20 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR INVALID CFG INPUT (0x%02X)", status_code))
- elseif status_code == 21 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR RX SYSTEM ERROR (0x%02X)", status_code))
- elseif status_code == 22 then
- subtree:add(f_status_code, status_code):set_text(string.format("RESPONSE STATUS CODE: FTSR VERSION MISMATCH (0x%02X)", status_code))
- end
-
- offset = offset + 1 -- Move to the next byte
-
- -- Parse the MISSING DATA SEGMENT COUNT (1 byte)
- if status_code == 0x05 then
- local missing_count = buffer(offset, 1):uint()
- subtree:add(f_missing_count, missing_count)
- offset = offset + 1
- end
- -- Parse Reserved bytes (2 bytes)
- local reserved_bytes = buffer(offset, 2)
- subtree:add(f_reserved, reserved_bytes)
- offset = offset + 2
- -- Parse SUSPEND WAITING TIMEOUT OR SCT DATABASE (4 bytes)
- -- This field is present based on the Response Status Code
- if status_code == 0x02 or status_code == 0x0A or status_code == 0x0B then
- local suspend_timeout_or_sct_db = buffer(offset, 4)
- subtree:add(f_suspend_timeout_or_sct_db, suspend_timeout_or_sct_db)
- offset = offset + 4
- end
- -- Parse the MISSING SEGMENT SEQUENCE NUMBERS (variable length)
- if status_code == 0x05 then
- -- Missing segment sequence numbers are present when status code is 0x05
- local missing_seq_start = offset
- local missing_seq_count = missing_count
- local missing_segments = buffer(missing_seq_start, missing_seq_count)
- subtree:add(f_missing_segment_seq, missing_segments)
- end
- end
|