Wireshark-bugs: [Wireshark-bugs] [Bug 2059] New: packet-sccp -> XUDTS
From:
bugzilla-daemon@xxxxxxxxxxxxx
Date: Sun, 2 Dec 2007 12:05:19 +0000 (GMT)
http://bugs.wireshark.org/bugzilla/show_bug.cgi?id=2059
Summary: packet-sccp -> XUDTS
Product: Wireshark
Version: 0.99.6
Platform: PC
OS/Version: All
Status: NEW
Severity: Major
Priority: Low
Component: Wireshark
AssignedTo: wireshark-bugs@xxxxxxxxxxxxx
ReportedBy: shmulik.bezalel@xxxxxxxxx
Build Information:
Version 0.99.6a (SVN Rev 22276)
Copyright 1998-2007 Gerald Combs <gerald@xxxxxxxxxxxxx> and contributors.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Compiled with GTK+ 2.10.12, with GLib 2.12.12, with WinPcap (version unknown),
with libz 1.2.3, with libpcre 6.4, with Net-SNMP 5.4, with ADNS, with Lua 5.1,
with GnuTLS 1.6.1, with Gcrypt 1.2.3, with MIT Kerberos, with PortAudio
PortAudio V19-devel, with AirPcap.
Running on Windows XP Service Pack 2, build 2600, with WinPcap version 4.0.1
(packet.dll version 4.0.0.901), based on libpcap version 0.9.5, without
AirPcap.
Built using Microsoft Visual C++ 6.0 build 8804
Wireshark is Open Source Software released under the GNU General Public
License.
Check the man page and http://www.wireshark.org for more information.
--
The XUDTS layer does not support segmentation
case SCCP_MSG_TYPE_XUDTS:
pinfo->sccp_info = sccp_msg = new_ud_msg(pinfo,message_type);
offset += dissect_sccp_parameter(tvb, pinfo, sccp_tree, tree,
PARAMETER_RETURN_CAUSE, offset,
RETURN_CAUSE_LENGTH);
offset += dissect_sccp_parameter(tvb, pinfo, sccp_tree, tree,
PARAMETER_HOP_COUNTER, offset,
HOP_COUNTER_LENGTH);
VARIABLE_POINTER(variable_pointer1, hf_sccp_variable_pointer1,
POINTER_LENGTH)
VARIABLE_POINTER(variable_pointer2, hf_sccp_variable_pointer2,
POINTER_LENGTH)
VARIABLE_POINTER(variable_pointer3, hf_sccp_variable_pointer3,
POINTER_LENGTH)
OPTIONAL_POINTER(POINTER_LENGTH)
assoc = get_sccp_assoc(pinfo, msg_offset, slr, dlr, message_type);
dissect_sccp_variable_parameter(tvb, pinfo, sccp_tree, tree,
PARAMETER_CALLED_PARTY_ADDRESS,
variable_pointer1);
dissect_sccp_variable_parameter(tvb, pinfo, sccp_tree, tree,
PARAMETER_CALLING_PARTY_ADDRESS,
variable_pointer2);
dissect_sccp_variable_parameter(tvb, pinfo, sccp_tree, tree,
PARAMETER_DATA,
variable_pointer3);
break;
to support segmentation change TO:
case SCCP_MSG_TYPE_XUDTS:
offset += dissect_sccp_parameter(tvb, pinfo, sccp_tree, tree,
PARAMETER_RETURN_CAUSE, offset,
RETURN_CAUSE_LENGTH);
offset += dissect_sccp_parameter(tvb, pinfo, sccp_tree, tree,
PARAMETER_HOP_COUNTER, offset,
HOP_COUNTER_LENGTH);
VARIABLE_POINTER(variable_pointer1, hf_sccp_variable_pointer1,
POINTER_LENGTH)
VARIABLE_POINTER(variable_pointer2, hf_sccp_variable_pointer2,
POINTER_LENGTH)
VARIABLE_POINTER(variable_pointer3, hf_sccp_variable_pointer3,
POINTER_LENGTH)
OPTIONAL_POINTER(POINTER_LENGTH)
/* Optional parameters are Segmentation and Importance
* NOTE 2 - Segmentation Should not be present in case of a single XUDT
message.
*/
assoc = get_sccp_assoc(pinfo, msg_offset, slr, dlr, message_type);
//assoc = sccp_assoc(&(pinfo->src), &(pinfo->dst), slr, dlr);
dissect_sccp_variable_parameter(tvb, pinfo, sccp_tree, tree,
PARAMETER_CALLED_PARTY_ADDRESS,
variable_pointer1);
dissect_sccp_variable_parameter(tvb, pinfo, sccp_tree, tree,
PARAMETER_CALLING_PARTY_ADDRESS,
variable_pointer2);
if ((parameter_type = tvb_get_guint8(tvb, optional_pointer)) ==
PARAMETER_SEGMENTATION)
{
if (!sccp_xudt_desegment){
proto_tree_add_text(sccp_tree, tvb, variable_pointer3,
tvb_get_guint8(tvb, variable_pointer3)+1, "Segmented Data" );
}else{
guint8 octet;
gboolean more_frag = TRUE;
/* Get the first octet of parameter Segmentation, Ch
3.17 in Q.713
* Bit 8 of octet 1 is used for First segment
indication
* Bit 7 of octet 1 is used to keep in the message in
sequence delivery option required by the SCCP user
* Bits 6 and 5 in octet 1 are spare bits.
* Bits 4-1 of octet 1 are used to indicate the number
of remaining segments.
* The values 0000 to 1111 are possible; the value 0000
indicates the last segment.
*/
octet = tvb_get_guint8(tvb,optional_pointer+2);
source_local_ref = tvb_get_letoh24(tvb,
optional_pointer+3);
if ((octet&0x0f) == 0)
more_frag = FALSE;
save_fragmented = pinfo->fragmented;
pinfo->fragmented = TRUE;
frag_msg = fragment_add_seq_next(tvb, variable_pointer3
+ 1, pinfo,
source_local_ref,
/* ID for fragments belonging together
*/
sccp_xudt_msg_fragment_table,
/* list of message fragments */
sccp_xudt_msg_reassembled_table,
/* list of reassembled messages */
tvb_get_guint8(tvb,variable_pointer3),
/* fragment length - to the end */
more_frag);
/* More fragments? */
if ((octet&0x80) == 0x80)/*First segment, set number of
segments*/
fragment_set_tot_len(pinfo, source_local_ref,
sccp_xudt_msg_fragment_table,(octet & 0xf));
new_tvb = process_reassembled_data(tvb,
variable_pointer3 + 1, pinfo,
"Reassembled Message", frag_msg,
&sccp_xudt_msg_frag_items,
NULL, tree);
if (frag_msg) { /* Reassembled */
if (check_col(pinfo->cinfo, COL_INFO))
col_append_str(pinfo->cinfo, COL_INFO,
" (Message Reassembled)");
} else { /* Not last packet of reassembled Short
Message */
if (check_col(pinfo->cinfo, COL_INFO))
col_append_fstr(pinfo->cinfo, COL_INFO,
" (Message fragment )");
}
pinfo->fragmented = save_fragmented;
if (new_tvb)
dissect_sccp_data_param(new_tvb, pinfo, tree);
}
}
else
{
dissect_sccp_variable_parameter(tvb, pinfo, sccp_tree, tree,
PARAMETER_DATA,
variable_pointer3);
}
break;
--
Configure bugmail: http://bugs.wireshark.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.