@@ -41,6 +41,7 @@ RESET_ID = 0x40000001
4141WINDOW_ID = 0x40000002
4242SIGNAL_ID = 0x40000003
4343CHALLENGE_ID = 0x40000004
44+ REDIRECT_ID = 0x40000005
4445
4546AMQP_ID = 0x112dc182
4647FILESYSTEM_ID = 0xe4e6aa9e
@@ -867,6 +868,8 @@ function zilla_protocol.dissector(buffer, pinfo, tree)
867868 handle_signal_frame (buffer , next_offset , subtree , pinfo , info )
868869 elseif frame_type_id == ABORT_ID or frame_type_id == RESET_ID or frame_type_id == CHALLENGE_ID then
869870 handle_extension (buffer , subtree , pinfo , info , next_offset , frame_type_id )
871+ elseif frame_type_id == REDIRECT_ID then
872+ handle_redirect_frame (buffer , next_offset , subtree , pinfo , info )
870873 end
871874end
872875
@@ -876,6 +879,12 @@ function handle_begin_frame(buffer, offset, subtree, pinfo, info)
876879 handle_extension (buffer , subtree , pinfo , info , offset + 8 , BEGIN_ID )
877880end
878881
882+ function handle_redirect_frame (buffer , offset , subtree , pinfo , info )
883+ local slice_affinity = buffer (offset , 8 )
884+ subtree :add_le (fields .affinity , slice_affinity )
885+ handle_extension (buffer , subtree , pinfo , info , offset + 8 , REDIRECT_ID )
886+ end
887+
879888function handle_data_frame (buffer , offset , tree , subtree , sequence , acknowledge , maximum , pinfo , info , protocol_type )
880889 local slice_flags = buffer (offset , 1 )
881890 local flags_label = string.format (" Flags: 0x%02x" , slice_flags :le_uint ())
@@ -974,6 +983,7 @@ function resolve_frame_type(frame_type_id)
974983 elseif frame_type_id == WINDOW_ID then frame_type = " WINDOW"
975984 elseif frame_type_id == SIGNAL_ID then frame_type = " SIGNAL"
976985 elseif frame_type_id == CHALLENGE_ID then frame_type = " CHALLENGE"
986+ elseif frame_type_id == REDIRECT_ID then frame_type = " REDIRECT"
977987 end
978988 return frame_type
979989end
@@ -1280,7 +1290,8 @@ function add_proxy_string_as_subtree(buffer, tree, label_format, slice_type_id,
12801290end
12811291
12821292function handle_http_extension (buffer , offset , ext_subtree , frame_type_id )
1283- if frame_type_id == BEGIN_ID or frame_type_id == RESET_ID or frame_type_id == CHALLENGE_ID then
1293+ if frame_type_id == BEGIN_ID or frame_type_id == RESET_ID or frame_type_id == CHALLENGE_ID or
1294+ frame_type_id == REDIRECT_ID then
12841295 dissect_and_add_http_headers (buffer , offset , ext_subtree , " Headers" , " Header" )
12851296 elseif frame_type_id == END_ID then
12861297 dissect_and_add_http_headers (buffer , offset , ext_subtree , " Trailers" , " Trailer" )
@@ -1311,7 +1322,7 @@ function dissect_and_add_http_headers(buffer, offset, tree, plural_name, singula
13111322end
13121323
13131324function handle_grpc_extension (buffer , offset , ext_subtree , frame_type_id )
1314- if frame_type_id == BEGIN_ID then
1325+ if frame_type_id == BEGIN_ID or frame_type_id == REDIRECT_ID then
13151326 handle_grpc_begin_extension (buffer , offset , ext_subtree )
13161327 elseif frame_type_id == DATA_ID then
13171328 handle_grpc_data_extension (buffer , offset , ext_subtree )
@@ -1464,7 +1475,7 @@ function decode_varuint32(buffer, offset)
14641475end
14651476
14661477function handle_sse_extension (buffer , offset , ext_subtree , frame_type_id )
1467- if frame_type_id == BEGIN_ID then
1478+ if frame_type_id == BEGIN_ID or frame_type_id == REDIRECT_ID then
14681479 handle_sse_begin_extension (buffer , offset , ext_subtree )
14691480 elseif frame_type_id == DATA_ID then
14701481 handle_sse_data_extension (buffer , offset , ext_subtree )
@@ -1521,7 +1532,7 @@ function handle_sse_end_extension(buffer, offset, ext_subtree)
15211532end
15221533
15231534function handle_ws_extension (buffer , offset , ext_subtree , frame_type_id )
1524- if frame_type_id == BEGIN_ID then
1535+ if frame_type_id == BEGIN_ID or frame_type_id == REDIRECT_ID then
15251536 handle_ws_begin_extension (buffer , offset , ext_subtree )
15261537 elseif frame_type_id == DATA_ID then
15271538 handle_ws_data_extension (buffer , offset , ext_subtree )
@@ -1629,12 +1640,13 @@ function handle_filesystem_extension(buffer, offset, ext_subtree)
16291640end
16301641
16311642function handle_mqtt_extension (buffer , offset , ext_subtree , frame_type_id )
1632- if frame_type_id == BEGIN_ID or frame_type_id == DATA_ID or frame_type_id == FLUSH_ID then
1643+ if frame_type_id == BEGIN_ID or frame_type_id == DATA_ID or frame_type_id == FLUSH_ID or
1644+ frame_type_id == REDIRECT_ID then
16331645 local kind_length = 1
16341646 local slice_kind = buffer (offset , kind_length )
16351647 local kind = mqtt_ext_kinds [slice_kind :le_int ()]
16361648 ext_subtree :add_le (fields .mqtt_ext_kind , slice_kind )
1637- if frame_type_id == BEGIN_ID then
1649+ if frame_type_id == BEGIN_ID or frame_type_id == REDIRECT_ID then
16381650 if kind == " PUBLISH" then
16391651 handle_mqtt_begin_publish_extension (buffer , offset + kind_length , ext_subtree )
16401652 elseif kind == " SUBSCRIBE" then
@@ -2046,12 +2058,13 @@ function handle_mqtt_reset_extension(buffer, offset, ext_subtree)
20462058end
20472059
20482060function handle_kafka_extension (buffer , offset , ext_subtree , frame_type_id )
2049- if frame_type_id == BEGIN_ID or frame_type_id == DATA_ID or frame_type_id == FLUSH_ID then
2061+ if frame_type_id == BEGIN_ID or frame_type_id == DATA_ID or frame_type_id == FLUSH_ID or
2062+ frame_type_id == REDIRECT_ID then
20502063 local api_length = 1
20512064 local slice_api = buffer (offset , api_length )
20522065 local api = kafka_ext_apis [slice_api :le_uint ()]
20532066 ext_subtree :add_le (fields .kafka_ext_api , slice_api )
2054- if frame_type_id == BEGIN_ID then
2067+ if frame_type_id == BEGIN_ID or frame_type_id == REDIRECT_ID then
20552068 if api == " CONSUMER" then
20562069 handle_kafka_begin_consumer_extension (buffer , offset + api_length , ext_subtree )
20572070 elseif api == " GROUP" then
0 commit comments