diff options
author | Bill Meier <wmeier@newsguy.com> | 2010-06-09 17:16:33 +0000 |
---|---|---|
committer | Bill Meier <wmeier@newsguy.com> | 2010-06-09 17:16:33 +0000 |
commit | 39b087896f4fd12ef4c343e92294a2551cf45f9d (patch) | |
tree | 10286497a2e17ea1f3f44b7abaaf51cfb978ea41 /epan | |
parent | f38e41b5c1ffa70872a3419eeae8eee234ce5c03 (diff) |
Revise code slightly; mostly: remove some unnecessary if tests ....
svn path=/trunk/; revision=33191
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-quake.c | 26 | ||||
-rw-r--r-- | epan/dissectors/packet-quake2.c | 167 | ||||
-rw-r--r-- | epan/dissectors/packet-quake3.c | 185 |
3 files changed, 165 insertions, 213 deletions
diff --git a/epan/dissectors/packet-quake.c b/epan/dissectors/packet-quake.c index dd348a42e9..28efb0a09f 100644 --- a/epan/dissectors/packet-quake.c +++ b/epan/dissectors/packet-quake.c @@ -356,7 +356,6 @@ dissect_quake_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { guint8 command; int direction; - proto_item *control_item = NULL; proto_tree *control_tree = NULL; guint rest_length; tvbuff_t *next_tvb; @@ -371,13 +370,12 @@ dissect_quake_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } if (tree) { + proto_item *control_item; control_item = proto_tree_add_text(tree, tvb, 0, -1, "Control %s: %s", val_to_str(direction, names_control_direction, "%u"), val_to_str(command, names_control_command, "%u")); - if (control_item) - control_tree = proto_item_add_subtree(control_item, - ett_quake_control); + control_tree = proto_item_add_subtree(control_item, ett_quake_control); proto_tree_add_uint(control_tree, hf_quake_control_command, tvb, 0, 1, command); } @@ -387,39 +385,39 @@ dissect_quake_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) switch (command) { case CCREQ_CONNECT: dissect_quake_CCREQ_CONNECT - (next_tvb, control_tree); + (next_tvb, control_tree); break; case CCREQ_SERVER_INFO: dissect_quake_CCREQ_SERVER_INFO - (next_tvb, control_tree); + (next_tvb, control_tree); break; case CCREQ_PLAYER_INFO: dissect_quake_CCREQ_PLAYER_INFO - (next_tvb, control_tree); + (next_tvb, control_tree); break; case CCREQ_RULE_INFO: dissect_quake_CCREQ_RULE_INFO - (next_tvb, control_tree); + (next_tvb, control_tree); break; case CCREP_ACCEPT: dissect_quake_CCREP_ACCEPT - (next_tvb, pinfo, control_tree); + (next_tvb, pinfo, control_tree); break; case CCREP_REJECT: dissect_quake_CCREP_REJECT - (next_tvb, control_tree); + (next_tvb, control_tree); break; case CCREP_SERVER_INFO: dissect_quake_CCREP_SERVER_INFO - (next_tvb, control_tree); + (next_tvb, control_tree); break; case CCREP_PLAYER_INFO: dissect_quake_CCREP_PLAYER_INFO - (next_tvb, control_tree); + (next_tvb, control_tree); break; case CCREP_RULE_INFO: dissect_quake_CCREP_RULE_INFO - (next_tvb, control_tree); + (next_tvb, control_tree); break; default: call_dissector(data_handle,next_tvb, pinfo, control_tree); @@ -432,7 +430,6 @@ static void dissect_quake(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { proto_tree *quake_tree = NULL; - proto_item *quake_item = NULL; guint32 length; guint32 flags; guint32 sequence = 0; @@ -447,6 +444,7 @@ dissect_quake(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) length &= NETFLAG_LENGTH_MASK; if (tree) { + proto_item *quake_item; quake_item = proto_tree_add_item(tree, proto_quake, tvb, 0, -1, FALSE); quake_tree = proto_item_add_subtree(quake_item, ett_quake); diff --git a/epan/dissectors/packet-quake2.c b/epan/dissectors/packet-quake2.c index 184f122da7..24f232c7ec 100644 --- a/epan/dissectors/packet-quake2.c +++ b/epan/dissectors/packet-quake2.c @@ -91,7 +91,6 @@ dissect_quake2_ConnectionlessPacket(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int direction _U_) { proto_tree *cl_tree = NULL; - proto_item *cl_item = NULL; guint8 *text; int len; int offset; @@ -100,14 +99,10 @@ dissect_quake2_ConnectionlessPacket(tvbuff_t *tvb, packet_info *pinfo _U_, marker = tvb_get_ntohl(tvb, 0); if (tree) { + proto_item *cl_item = NULL; cl_item = proto_tree_add_text(tree, tvb, 0, -1, "Connectionless"); - if (cl_item) - cl_tree = proto_item_add_subtree( - cl_item, ett_quake2_connectionless); - } - - if (cl_tree) { + cl_tree = proto_item_add_subtree(cl_item, ett_quake2_connectionless); proto_tree_add_uint(cl_tree, hf_quake2_connectionless_marker, tvb, 0, 4, marker); } @@ -150,8 +145,8 @@ dissect_quake2_client_commands_move(tvbuff_t *tvb, packet_info *pinfo _U_, #define CM_IMPULSE (1<<7) /* qshared.h */ #define BUTTON_ATTACK 1 - #define BUTTON_USE 2 - #define BUTTON_ANY 128 + #define BUTTON_USE 2 + #define BUTTON_ANY 128 guint8 chksum; guint32 lastframe; @@ -408,12 +403,9 @@ dissect_quake2_client_commands(tvbuff_t *tvb, packet_info *pinfo, hf_quake2_game_client_command, tvb, offset, 1, client_cmd_type); - if (cmd_type_item) { - proto_item_append_text(cmd_type_item, " (%s)", - val_to_str(client_cmd_type, names_client_cmd, "%u")); - clc_tree = proto_item_add_subtree( - cmd_type_item, ett_quake2_game_clc_cmd); - } + proto_item_append_text(cmd_type_item, " (%s)", + val_to_str(client_cmd_type, names_client_cmd, "%u")); + clc_tree = proto_item_add_subtree(cmd_type_item, ett_quake2_game_clc_cmd); } offset++; @@ -504,7 +496,6 @@ dissect_quake2_server_commands(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { tvbuff_t *next_tvb = NULL; - proto_item *cmd_type_item = NULL; guint8 server_cmd_type; guint rest_length = 0; int offset = 0; @@ -512,13 +503,12 @@ dissect_quake2_server_commands(tvbuff_t *tvb, packet_info *pinfo, server_cmd_type = tvb_get_guint8(tvb, offset); if (tree) { + proto_item *cmd_type_item; cmd_type_item = proto_tree_add_uint(tree, hf_quake2_game_server_command, tvb, offset, 1, server_cmd_type); - if (cmd_type_item) { - proto_item_append_text(cmd_type_item, " (%s)", - val_to_str(server_cmd_type, names_server_cmd, "%u")); - } + proto_item_append_text(cmd_type_item, " (%s)", + val_to_str(server_cmd_type, names_server_cmd, "%u")); } offset++; @@ -584,7 +574,6 @@ static const value_string names_reliable[] = { { 0, NULL } }; - static const value_string names_direction[] = { #define DIR_C2S 0 { DIR_C2S, "Client to Server" }, @@ -598,24 +587,22 @@ static void dissect_quake2_GamePacket(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int direction) { - proto_tree *game_tree = NULL; - proto_item *game_item = NULL; - guint32 seq1; - guint32 seq2; - int rel1; - int rel2; - int offset; - guint rest_length; + proto_tree *game_tree = NULL; + guint32 seq1; + guint32 seq2; + int rel1; + int rel2; + int offset; + guint rest_length; direction = (pinfo->destport == gbl_quake2ServerPort) ? DIR_C2S : DIR_S2C; if (tree) { + proto_item *game_item; game_item = proto_tree_add_text(tree, tvb, 0, -1, "Game"); - if (game_item) - game_tree = proto_item_add_subtree( - game_item, ett_quake2_game); + game_tree = proto_item_add_subtree(game_item, ett_quake2_game); } offset = 0; @@ -627,14 +614,12 @@ dissect_quake2_GamePacket(tvbuff_t *tvb, packet_info *pinfo, proto_item *seq1_item = proto_tree_add_text(game_tree, tvb, offset, 4, "Current Sequence: %u (%s)", seq1, val_to_str(rel1,names_reliable,"%u")); - if (seq1_item) { - proto_tree *seq1_tree = proto_item_add_subtree( - seq1_item, ett_quake2_game_seq1); - proto_tree_add_uint(seq1_tree, hf_quake2_game_seq1, - tvb, offset, 4, seq1); - proto_tree_add_boolean(seq1_tree, hf_quake2_game_rel1, - tvb, offset+3, 1, rel1); - } + proto_tree *seq1_tree = proto_item_add_subtree( + seq1_item, ett_quake2_game_seq1); + proto_tree_add_uint(seq1_tree, hf_quake2_game_seq1, + tvb, offset, 4, seq1); + proto_tree_add_boolean(seq1_tree, hf_quake2_game_rel1, + tvb, offset+3, 1, rel1); } offset += 4; @@ -645,14 +630,12 @@ dissect_quake2_GamePacket(tvbuff_t *tvb, packet_info *pinfo, proto_item *seq2_item = proto_tree_add_text(game_tree, tvb, offset, 4, "Acknowledge Sequence: %u (%s)", seq2, val_to_str(rel2,names_reliable,"%u")); - if (seq2_item) { - proto_tree *seq2_tree = proto_item_add_subtree( - seq2_item, ett_quake2_game_seq2); - proto_tree_add_uint(seq2_tree, hf_quake2_game_seq2, - tvb, offset, 4, seq2); - proto_tree_add_boolean(seq2_tree, hf_quake2_game_rel2, - tvb, offset+3, 1, rel2); - } + proto_tree *seq2_tree = proto_item_add_subtree( + seq2_item, ett_quake2_game_seq2); + proto_tree_add_uint(seq2_tree, hf_quake2_game_seq2, + tvb, offset, 4, seq2); + proto_tree_add_boolean(seq2_tree, hf_quake2_game_rel2, + tvb, offset+3, 1, rel2); } offset += 4; @@ -673,28 +656,22 @@ dissect_quake2_GamePacket(tvbuff_t *tvb, packet_info *pinfo, tvb_new_subset(tvb, offset, rest_length , rest_length); if (direction == DIR_C2S) { - proto_item *c_item = NULL; proto_tree *c_tree = NULL; if (tree) { + proto_item *c_item; c_item = proto_tree_add_text(game_tree, next_tvb, - 0, -1, "Client Commands"); - if (c_item) { - c_tree = proto_item_add_subtree( - c_item, ett_quake2_game_clc); - } + 0, -1, "Client Commands"); + c_tree = proto_item_add_subtree(c_item, ett_quake2_game_clc); } dissect_quake2_client_commands(next_tvb, pinfo, c_tree); } else { - proto_item *c_item = NULL; proto_tree *c_tree = NULL; if (tree) { + proto_item *c_item; c_item = proto_tree_add_text(game_tree, next_tvb, - 0, -1, "Server Commands"); - if (c_item) { - c_tree = proto_item_add_subtree( - c_item, ett_quake2_game_svc); - } + 0, -1, "Server Commands"); + c_tree = proto_item_add_subtree(c_item, ett_quake2_game_svc); } dissect_quake2_server_commands(next_tvb, pinfo, c_tree); } @@ -706,7 +683,6 @@ static void dissect_quake2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { proto_tree *quake2_tree = NULL; - proto_item *quake2_item = NULL; int direction; direction = (pinfo->destport == gbl_quake2ServerPort) ? @@ -718,19 +694,16 @@ dissect_quake2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) names_direction, "%u")); if (tree) { + proto_item *quake2_item; quake2_item = proto_tree_add_item(tree, proto_quake2, - tvb, 0, -1, FALSE); - if (quake2_item) - quake2_tree = proto_item_add_subtree( - quake2_item, ett_quake2); - if (quake2_tree) { - proto_tree_add_uint_format(quake2_tree, - direction == DIR_S2C ? - hf_quake2_s2c : - hf_quake2_c2s, - tvb, 0, 0, 1, - "Direction: %s", val_to_str(direction, names_direction, "%u")); - } + tvb, 0, -1, FALSE); + quake2_tree = proto_item_add_subtree(quake2_item, ett_quake2); + proto_tree_add_uint_format(quake2_tree, + direction == DIR_S2C ? + hf_quake2_s2c : + hf_quake2_c2s, + tvb, 0, 0, 1, + "Direction: %s", val_to_str(direction, names_direction, "%u")); } if (tvb_get_ntohl(tvb, 0) == 0xffffffff) { @@ -756,28 +729,7 @@ dissect_quake2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } -void -proto_reg_handoff_quake2(void) -{ - static gboolean Initialized=FALSE; - static dissector_handle_t quake2_handle; - static guint ServerPort; - - if (!Initialized) { - quake2_handle = create_dissector_handle(dissect_quake2, - proto_quake2); - data_handle = find_dissector("data"); - Initialized=TRUE; - } else { - dissector_delete("udp.port", ServerPort, quake2_handle); - } - - /* set port for future deletes */ - ServerPort=gbl_quake2ServerPort; - - dissector_add("udp.port", gbl_quake2ServerPort, quake2_handle); -} - +void proto_reg_handoff_quake2(void); void proto_register_quake2(void) @@ -924,3 +876,28 @@ proto_register_quake2(void) "Set the UDP port for the Quake II Server", 10, &gbl_quake2ServerPort); } + + +void +proto_reg_handoff_quake2(void) +{ + static gboolean Initialized=FALSE; + static dissector_handle_t quake2_handle; + static guint ServerPort; + + if (!Initialized) { + quake2_handle = create_dissector_handle(dissect_quake2, + proto_quake2); + data_handle = find_dissector("data"); + Initialized=TRUE; + } else { + dissector_delete("udp.port", ServerPort, quake2_handle); + } + + /* set port for future deletes */ + ServerPort=gbl_quake2ServerPort; + + dissector_add("udp.port", gbl_quake2ServerPort, quake2_handle); +} + + diff --git a/epan/dissectors/packet-quake3.c b/epan/dissectors/packet-quake3.c index 89c244196e..61fb11f729 100644 --- a/epan/dissectors/packet-quake3.c +++ b/epan/dissectors/packet-quake3.c @@ -145,7 +145,6 @@ dissect_quake3_ConnectionlessPacket(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int* direction) { proto_tree *cl_tree = NULL; - proto_item *cl_item = NULL; proto_item *text_item = NULL; proto_tree *text_tree = NULL; guint8 text[2048]; @@ -154,22 +153,18 @@ dissect_quake3_ConnectionlessPacket(tvbuff_t *tvb, packet_info *pinfo _U_, guint32 marker; int command; int command_len; - int command_finished = FALSE; + gboolean command_finished = FALSE; marker = tvb_get_ntohl(tvb, 0); if (tree) { + proto_item *cl_item = NULL; cl_item = proto_tree_add_text(tree, tvb, 0, -1, "Connectionless"); - if (cl_item) - cl_tree = proto_item_add_subtree( - cl_item, ett_quake3_connectionless); - } + cl_tree = proto_item_add_subtree(cl_item, ett_quake3_connectionless); - if (cl_tree) { proto_tree_add_uint(cl_tree, hf_quake3_connectionless_marker, - tvb, 0, 4, marker); + tvb, 0, 4, marker); } - /* all the rest of the packet is just text */ offset = 4; @@ -178,11 +173,7 @@ dissect_quake3_ConnectionlessPacket(tvbuff_t *tvb, packet_info *pinfo _U_, text_item = proto_tree_add_string(cl_tree, hf_quake3_connectionless_text, tvb, offset, len + 1, text); - if (text_item) { - text_tree = proto_item_add_subtree( - text_item, - ett_quake3_connectionless_text); - } + text_tree = proto_item_add_subtree(text_item, ett_quake3_connectionless_text); } command = COMMAND_UNKNOWN; @@ -274,8 +265,6 @@ dissect_quake3_ConnectionlessPacket(tvbuff_t *tvb, packet_info *pinfo _U_, while (tvb_reported_length_remaining(tvb, base) >= 7) { guint32 ip_addr; guint16 udp_port; - proto_item *server_item = NULL; - proto_tree *server_tree = NULL; ip_addr = tvb_get_ipv4(tvb, base + 1); udp_port = tvb_get_ntohs(tvb, base + 5); @@ -286,21 +275,20 @@ dissect_quake3_ConnectionlessPacket(tvbuff_t *tvb, packet_info *pinfo _U_, may run on totally unusual ports. */ if (text_tree) { + proto_item *server_item; + proto_tree *server_tree; server_item = proto_tree_add_text(text_tree, tvb, base, 7, "Server: %s:%u", get_hostname(ip_addr), udp_port); - if (server_item) - server_tree = proto_item_add_subtree( - server_item, - ett_quake3_server); - } - if (server_tree) { + server_tree = proto_item_add_subtree( + server_item, + ett_quake3_server); proto_tree_add_ipv4(server_tree, hf_quake3_server_addr, - tvb, base + 1, 4, ip_addr); + tvb, base + 1, 4, ip_addr); proto_tree_add_uint(server_tree, hf_quake3_server_port, - tvb, base + 5, 2, udp_port); + tvb, base + 5, 2, udp_port); } base += 7; @@ -372,7 +360,6 @@ dissect_quake3_GamePacket(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *direction) { proto_tree *game_tree = NULL; - proto_item *game_item = NULL; guint32 seq1; guint32 seq2; int rel1; @@ -384,11 +371,9 @@ dissect_quake3_GamePacket(tvbuff_t *tvb, packet_info *pinfo, DIR_C2S : DIR_S2C; if (tree) { - game_item = proto_tree_add_text(tree, tvb, - 0, -1, "Game"); - if (game_item) - game_tree = proto_item_add_subtree( - game_item, ett_quake3_game); + proto_item *game_item; + game_item = proto_tree_add_text(tree, tvb, 0, -1, "Game"); + game_tree = proto_item_add_subtree(game_item, ett_quake3_game); } offset = 0; @@ -400,14 +385,12 @@ dissect_quake3_GamePacket(tvbuff_t *tvb, packet_info *pinfo, proto_item *seq1_item = proto_tree_add_text(game_tree, tvb, offset, 2, "Current Sequence: %u (%s)", seq1, val_to_str(rel1,names_reliable,"%u")); - if (seq1_item) { - proto_tree *seq1_tree = proto_item_add_subtree( - seq1_item, ett_quake3_game_seq1); - proto_tree_add_uint(seq1_tree, hf_quake3_game_seq1, - tvb, offset, 2, seq1); - proto_tree_add_boolean(seq1_tree, hf_quake3_game_rel1, - tvb, offset+1, 1, rel1); - } + proto_tree *seq1_tree = proto_item_add_subtree( + seq1_item, ett_quake3_game_seq1); + proto_tree_add_uint(seq1_tree, hf_quake3_game_seq1, + tvb, offset, 2, seq1); + proto_tree_add_boolean(seq1_tree, hf_quake3_game_rel1, + tvb, offset+1, 1, rel1); } offset += 2; @@ -418,14 +401,12 @@ dissect_quake3_GamePacket(tvbuff_t *tvb, packet_info *pinfo, proto_item *seq2_item = proto_tree_add_text(game_tree, tvb, offset, 2, "Acknowledge Sequence: %u (%s)", seq2, val_to_str(rel2,names_reliable,"%u")); - if (seq2_item) { - proto_tree *seq2_tree = proto_item_add_subtree( - seq2_item, ett_quake3_game_seq2); - proto_tree_add_uint(seq2_tree, hf_quake3_game_seq2, - tvb, offset, 2, seq2); - proto_tree_add_boolean(seq2_tree, hf_quake3_game_rel2, - tvb, offset+1, 1, rel2); - } + proto_tree *seq2_tree = proto_item_add_subtree( + seq2_item, ett_quake3_game_seq2); + proto_tree_add_uint(seq2_tree, hf_quake3_game_seq2, + tvb, offset, 2, seq2); + proto_tree_add_boolean(seq2_tree, hf_quake3_game_rel2, + tvb, offset+1, 1, rel2); } offset += 2; @@ -446,28 +427,24 @@ dissect_quake3_GamePacket(tvbuff_t *tvb, packet_info *pinfo, tvb_new_subset(tvb, offset, rest_length , rest_length); if (*direction == DIR_C2S) { - proto_item *c_item = NULL; proto_tree *c_tree = NULL; if (tree) { + proto_item *c_item; c_item = proto_tree_add_text(game_tree, next_tvb, - 0, -1, "Client Commands"); - if (c_item) { - c_tree = proto_item_add_subtree( - c_item, ett_quake3_game_clc); - } + 0, -1, "Client Commands"); + c_tree = proto_item_add_subtree( + c_item, ett_quake3_game_clc); } dissect_quake3_client_commands(next_tvb, pinfo, c_tree); } else { - proto_item *c_item = NULL; proto_tree *c_tree = NULL; if (tree) { + proto_item *c_item; c_item = proto_tree_add_text(game_tree, next_tvb, - 0, -1, "Server Commands"); - if (c_item) { - c_tree = proto_item_add_subtree( + 0, -1, "Server Commands"); + c_tree = proto_item_add_subtree( c_item, ett_quake3_game_svc); - } } dissect_quake3_server_commands(next_tvb, pinfo, c_tree); } @@ -479,7 +456,6 @@ static void dissect_quake3(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { proto_tree *quake3_tree = NULL; - proto_item *quake3_item = NULL; proto_item *dir_item = NULL; int direction; @@ -488,20 +464,17 @@ dissect_quake3(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) col_set_str(pinfo->cinfo, COL_PROTOCOL, "QUAKE3"); if (tree) { + proto_item *quake3_item; quake3_item = proto_tree_add_item(tree, proto_quake3, tvb, 0, -1, FALSE); - if (quake3_item) - quake3_tree = proto_item_add_subtree( - quake3_item, ett_quake3); - - if (quake3_tree) { - dir_item = proto_tree_add_none_format( - quake3_tree, - hf_quake3_direction, tvb, 0, 0, - "Direction: %s", - val_to_str(direction, - names_direction, "%u")); - } + quake3_tree = proto_item_add_subtree(quake3_item, ett_quake3); + + dir_item = proto_tree_add_none_format( + quake3_tree, + hf_quake3_direction, tvb, 0, 0, + "Direction: %s", + val_to_str(direction, + names_direction, "%u")); } if (tvb_get_ntohl(tvb, 0) == 0xffffffff) { @@ -536,40 +509,7 @@ dissect_quake3(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } -void -proto_reg_handoff_quake3(void) -{ - static gboolean initialized=FALSE; - static dissector_handle_t quake3_handle; - static guint server_port; - static guint master_port; - int i; - - if (!initialized) { - quake3_handle = create_dissector_handle(dissect_quake3, - proto_quake3); - data_handle = find_dissector("data"); - initialized=TRUE; - } else { - for (i=0;i<4;i++) - dissector_delete("udp.port", server_port+i, quake3_handle); - for (i=0;i<4;i++) - dissector_delete("udp.port", master_port+i, quake3_handle); - } - - /* set port for future deletes */ - server_port = gbl_quake3_server_port; - master_port = gbl_quake3_master_port; - - /* add dissectors */ - for (i=0;i<4;i++) - dissector_add("udp.port", gbl_quake3_server_port + i, - quake3_handle); - for (i=0;i<4;i++) - dissector_add("udp.port", gbl_quake3_master_port + i, - quake3_handle); -} - +void proto_reg_handoff_quake3(void); void proto_register_quake3(void) @@ -658,3 +598,40 @@ proto_register_quake3(void) "Set the UDP base port for the Quake III Arena Master Server", 10, &gbl_quake3_master_port); } + + +void +proto_reg_handoff_quake3(void) +{ + static gboolean initialized=FALSE; + static dissector_handle_t quake3_handle; + static guint server_port; + static guint master_port; + int i; + + if (!initialized) { + quake3_handle = create_dissector_handle(dissect_quake3, + proto_quake3); + data_handle = find_dissector("data"); + initialized=TRUE; + } else { + for (i=0;i<4;i++) + dissector_delete("udp.port", server_port+i, quake3_handle); + for (i=0;i<4;i++) + dissector_delete("udp.port", master_port+i, quake3_handle); + } + + /* set port for future deletes */ + server_port = gbl_quake3_server_port; + master_port = gbl_quake3_master_port; + + /* add dissectors */ + for (i=0;i<4;i++) + dissector_add("udp.port", gbl_quake3_server_port + i, + quake3_handle); + for (i=0;i<4;i++) + dissector_add("udp.port", gbl_quake3_master_port + i, + quake3_handle); +} + + |