diff options
author | Guy Harris <guy@alum.mit.edu> | 2000-02-14 04:02:21 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2000-02-14 04:02:21 +0000 |
commit | 12df8af4e3703a7cffd38486ec09a3789c22fbf2 (patch) | |
tree | 0ce261d8450317177091fbc9b5b1e73da238c6ef /packet-smb-common.c | |
parent | 0fa3ae9df0e8afadb6dfcebc9818a9858aa8e6a1 (diff) |
Jeff Foster's SMB Mailslot and Netlogin dissectors; he split
"packet-smb.c" up into several files.
svn path=/trunk/; revision=1629
Diffstat (limited to 'packet-smb-common.c')
-rw-r--r-- | packet-smb-common.c | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/packet-smb-common.c b/packet-smb-common.c new file mode 100644 index 0000000000..b7ad8a99aa --- /dev/null +++ b/packet-smb-common.c @@ -0,0 +1,142 @@ +/* packet-smb-common.h + * Common routines for smb packet dissection + * Copyright 2000, Jeffrey C. Foster <jfoste@woodward.com> + * + * $Id: packet-smb-common.c,v 1.1 2000/02/14 04:02:06 guy Exp $ + * + * Ethereal - Network traffic analyzer + * By Gerald Combs <gerald@zing.org> + * Copyright 1998 Gerald Combs + * + * Copied from packet-pop.c + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + + + +#include "packet-smb-common.h" + + + +int display_ms_value( char *Name, int len, const u_char *pd, int offset, + frame_data *fd, proto_tree *tree) + +{/* display an entry from the tree and return the length */ + + guint32 Temp32; + + if( len == 1) + Temp32 = GBYTE(pd, offset); + else if( len == 2) + Temp32 = GSHORT(pd, offset); + else if( len == 4) + Temp32 = GWORD(pd, offset); + +/* this is an error if we didn't hit one of those three */ + else + return 0; + + proto_tree_add_text( tree, offset, len, "%s: %u", Name, Temp32); + + return len; +} + +int display_ms_string( char *Name, const u_char *pd, int offset, + frame_data *fd, proto_tree *tree) + +{/* display a string from the tree and return the amount to move offset */ + + proto_tree_add_text( tree, offset, strlen( &pd[offset]) + 1, "%s: %s ", + Name, &pd[offset]); + + return strlen( &pd[offset]) + 1; +} + + +int display_unicode_string( char *Name, const u_char *pd, int offset, + frame_data *fd, proto_tree *tree){ + +/* display a unicode string from the tree and return amount to move offset */ + + char Temp[100], *OutPtr; + const char *InPtr; + + InPtr = &pd[ offset]; /* point to unicode string */ + OutPtr = Temp; /* point to temp space */ + + while ( *InPtr){ /* copy every other byte */ + *OutPtr++ = *InPtr; + InPtr += 2; + } + *OutPtr = 0; /* terminate out string */ + + proto_tree_add_text( tree, offset, strlen( Temp) * 2 + 2, "%s: %s ", + Name, Temp); + + return strlen( Temp) * 2 + 2; +} + + +void +dissect_smb_unknown( const u_char *pd, int offset, frame_data *fd, + proto_tree *tree){ + +/* display data as unknown */ + + proto_tree_add_text(tree, offset, END_OF_FRAME, "Data (%u bytes)", + END_OF_FRAME); + +} + + + +void +display_flags( struct flag_array_type *flag_array, int length, + const u_char *pd, int offset, proto_tree *tree){ + +/* Display a bit fields using the flag_array information. */ +/* See packet-smb-common.h for definition of the flag_array structure */ + + +/*** NOTE: currently only handles values that are 1, 2, or 4 octets wide.*/ +/*** This should be expanded to handle any bit width. */ + +/* NOTE: the last entry must have the mask value = 0, this is the end of */ +/* array flag */ + + + struct flag_array_type *array_ptr = flag_array; + + guint32 flags; + + if ( length == 1) flags = GBYTE( pd, offset); + if ( length == 2) flags = GSHORT( pd, offset); + if ( length == 4) flags = GWORD( pd, offset); + + + while( array_ptr->mask) { + proto_tree_add_text( tree, offset, 2, "%s%s%s%s", + decode_boolean_bitfield( flags, array_ptr->mask, + length * 8, "",""), + array_ptr->pre_string, + ((flags & array_ptr->mask) ? array_ptr->true_string : + array_ptr->false_string), + array_ptr->post_string); + + ++array_ptr; + } +} + |