Ethereal-dev: [Ethereal-dev] more mgcp fixes
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Ed Warnicke <hagbard@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 28 Dec 2000 00:59:28 -0500 (EST)
Please check in these other mgcp plugin fixes. Ed
? mgcp-plugin-0.0.2.patch Index: ChangeLog =================================================================== RCS file: /cvsroot/ethereal/plugins/mgcp/ChangeLog,v retrieving revision 1.1 diff -u -r1.1 ChangeLog --- ChangeLog 2000/11/09 10:04:48 1.1 +++ ChangeLog 2000/12/28 05:56:17 @@ -0,0 +1,3 @@ +Overview of changes in Ethereal MGCP plugin 0.0.2: +* Fixed misc problems with improperly dissecting some xgcp packets as + short or malformed. Index: moduleinfo.h =================================================================== RCS file: /cvsroot/ethereal/plugins/mgcp/moduleinfo.h,v retrieving revision 1.1 diff -u -r1.1 moduleinfo.h --- moduleinfo.h 2000/11/09 10:04:48 1.1 +++ moduleinfo.h 2000/12/28 05:56:17 @@ -13,5 +13,5 @@ #endif /* Version number of package */ -#define VERSION "0.0.1" +#define VERSION "0.0.2" Index: packet-mgcp.c =================================================================== RCS file: /cvsroot/ethereal/plugins/mgcp/packet-mgcp.c,v retrieving revision 1.10 diff -u -r1.10 packet-mgcp.c --- packet-mgcp.c 2000/12/25 09:37:35 1.10 +++ packet-mgcp.c 2000/12/28 05:56:18 @@ -2,7 +2,7 @@ * Routines for mgcp packet disassembly * RFC 2705 * - * $Id: packet-mgcp.c,v 1.10 2000/12/25 09:37:35 guy Exp $ + * $Id: packet-mgcp.c,v 1.9 2000/12/20 05:45:27 gram Exp $ * * Copyright (c) 2000 by Ed Warnicke <hagbard@xxxxxxxxxxxxxxxxxxx> * @@ -434,32 +434,32 @@ mgcp_module = prefs_register_module("mgcp", "MGCP", proto_reg_handoff_mgcp); - prefs_register_uint_preference(mgcp_module, "tcp.gateway_port", + prefs_register_uint_preference(mgcp_module, "tcp.port", "MGCP Gateway TCP Port", - "Set the UDP port for gateway messages " - "(if other than the default of 2427)", + "Set the port for gateway messages (if other" + " than the default of 2427)", 10, &global_mgcp_gateway_tcp_port); - prefs_register_uint_preference(mgcp_module, "udp.gateway_port", - "MGCP Gateway UDP Port", - "Set the TCP port for gateway messages " - "(if other than the default of 2427)", + prefs_register_uint_preference(mgcp_module, "udp.port", + "MGCP UDP Gateway Port", + "Set the port for gateway messages (if other" + " than the default of 2427)", 10, &global_mgcp_gateway_udp_port); - prefs_register_uint_preference(mgcp_module, "tcp.callagent_port", + prefs_register_uint_preference(mgcp_module, "tcp.port", "MGCP Callagent TCP Port", - "Set the TCP port for callagent messages " + "Set the port for callagent messages" "(if other than the default of 2727)", 10, &global_mgcp_callagent_tcp_port); - prefs_register_uint_preference(mgcp_module, "udp.callagent_port", - "MGCP Callagent UDP Port", - "Set the UDP port for callagent messages " + prefs_register_uint_preference(mgcp_module, "udp.port", + "MGCP UDP Gateway Port", + "Set the port for callagent messages " "(if other than the default of 2727)", 10, &global_mgcp_callagent_udp_port); - prefs_register_bool_preference(mgcp_module, "display_raw_text", + prefs_register_bool_preference(mgcp_module, "display raw text toggle", "Display raw text for MGCP message", "Specifies that the raw text of the " "MGCP message should be displayed " @@ -467,7 +467,7 @@ "dissection tree", &global_mgcp_raw_text); - prefs_register_bool_preference(mgcp_module, "display_dissect_tree", + prefs_register_bool_preference(mgcp_module, "display dissect tree", "Display tree dissection for MGCP message", "Specifies that the dissection tree of the " "MGCP message should be displayed " @@ -812,15 +812,18 @@ my_proto_tree_add_string = proto_tree_add_string_hidden; } - tvb_current_offset = tvb_find_guint8(tvb,tvb_previous_offset, - tvb_current_len, ' '); - if(tvb_current_offset == -1){ - tvb_current_offset = tvb_len; - } - tvb_current_len = tvb_length_remaining(tvb,tvb_previous_offset); - tokenlen = tvb_current_offset - tvb_previous_offset; + do { + tvb_current_len = tvb_length_remaining(tvb,tvb_previous_offset); + tvb_current_offset = tvb_find_guint8(tvb, tvb_previous_offset, + tvb_current_len, ' '); + if(tvb_current_offset == -1){ + tvb_current_offset = tvb_len; + tokenlen = tvb_current_len; + } + else{ + tokenlen = tvb_current_offset - tvb_previous_offset; + } - while( tvb_current_offset < tvb_len || tokennum <= 3){ if(tokennum == 0){ if(is_mgcp_verb(tvb,tvb_previous_offset,tvb_current_len)){ mgcp_type = MGCP_REQUEST; @@ -849,38 +852,46 @@ if(tokennum == 2){ if(mgcp_type == MGCP_REQUEST){ my_proto_tree_add_string(tree,hf_mgcp_req_endpoint, tvb, - tvb_previous_offset, tokenlen, - tvb_format_text(tvb, tvb_previous_offset, - tokenlen)); + tvb_previous_offset, tokenlen, + tvb_format_text(tvb, tvb_previous_offset, + tokenlen)); } else if(mgcp_type == MGCP_RESPONSE){ - tokenlen = tvb_find_line_end(tvb, tvb_previous_offset, - -1,&tvb_current_offset); - my_proto_tree_add_string(tree,hf_mgcp_rsp_rspstring, tvb, + if(tvb_current_offset < tvb_len){ + tokenlen = tvb_find_line_end(tvb, tvb_previous_offset, + -1,&tvb_current_offset); + } + else{ + tokenlen = tvb_current_len; + } + my_proto_tree_add_string(tree, hf_mgcp_rsp_rspstring, tvb, tvb_previous_offset, tokenlen, - tvb_format_text(tvb,tvb_previous_offset, + tvb_format_text(tvb, tvb_previous_offset, tokenlen)); - break; - } + } + break; } if( (tokennum == 3 && mgcp_type == MGCP_REQUEST) ){ - tokenlen = tvb_find_line_end(tvb, tvb_previous_offset, - -1,&tvb_current_offset); + if(tvb_current_offset < tvb_len ){ + tokenlen = tvb_find_line_end(tvb, tvb_previous_offset, + -1,&tvb_current_offset); + } + else{ + tokenlen = tvb_current_len; + } my_proto_tree_add_string(tree,hf_mgcp_version, tvb, tvb_previous_offset, tokenlen, tvb_format_text(tvb,tvb_previous_offset, tokenlen)); break; } - tvb_previous_offset = tvb_skip_wsp(tvb, tvb_current_offset, - tvb_current_len); - tvb_current_len = tvb_length_remaining(tvb,tvb_previous_offset); - tvb_current_offset = tvb_find_guint8(tvb,tvb_previous_offset, - tvb_current_len, ' '); - tokenlen = tvb_current_offset - tvb_previous_offset; + if(tvb_current_offset < tvb_len){ + tvb_previous_offset = tvb_skip_wsp(tvb, tvb_current_offset, + tvb_current_len); + } tokennum++; - } - + } while( tvb_current_offset < tvb_len && tvb_previous_offset < tvb_len + && tokennum <= 3); switch (mgcp_type){ case MGCP_RESPONSE: proto_tree_add_boolean_hidden(tree,hf_mgcp_rsp, NullTVB,0,0,1); @@ -972,8 +983,13 @@ */ static gint tvb_skip_wsp(tvbuff_t* tvb, gint offset, gint maxlength){ gint counter = offset; - gint end = offset + maxlength; + gint end = offset + maxlength,tvb_len; guint8 tempchar; + tvb_len = tvb_length(tvb); + end = offset + maxlength; + if(end >= tvb_len){ + end = tvb_len; + } for(counter = offset; counter < end && ((tempchar = tvb_get_guint8(tvb,counter)) == ' ' || tempchar == '\t');counter++);
- Follow-Ups:
- Re: [Ethereal-dev] more mgcp fixes
- From: Guy Harris
- Re: [Ethereal-dev] more mgcp fixes
- Prev by Date: [Ethereal-dev] TCP fields in higher-level protocols
- Next by Date: Re: [Ethereal-dev] more mgcp fixes
- Previous by thread: Re: [Ethereal-dev] TCP fields in higher-level protocols
- Next by thread: Re: [Ethereal-dev] more mgcp fixes
- Index(es):