svn commit: lorikeet r184 - in trunk/ethereal/plugins/pidl: .

tpot at samba.org tpot at samba.org
Mon Jan 17 06:24:03 GMT 2005


Author: tpot
Date: 2005-01-17 06:24:03 +0000 (Mon, 17 Jan 2005)
New Revision: 184

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=lorikeet&rev=184

Log:
Add the name of what we are pointing to when dissecting pointers.

Modified:
   trunk/ethereal/plugins/pidl/eparser.c
   trunk/ethereal/plugins/pidl/eparser.h


Changeset:
Modified: trunk/ethereal/plugins/pidl/eparser.c
===================================================================
--- trunk/ethereal/plugins/pidl/eparser.c	2005-01-17 05:42:19 UTC (rev 183)
+++ trunk/ethereal/plugins/pidl/eparser.c	2005-01-17 06:24:03 UTC (rev 184)
@@ -1,6 +1,7 @@
 /* ethereal/pidl glue */
 
 #include "eparser.h"
+#include <ctype.h>
 
 struct pidl_pull *pidl_pull_init(tvbuff_t *tvb, int offset, packet_info *pinfo,
 				 guint8 *drep)
@@ -27,10 +28,34 @@
 	return NT_STATUS_OK;
 }
 
-NTSTATUS ndr_pull_ptr(struct pidl_pull *ndr, pidl_tree *tree, int hf, 
+NTSTATUS ndr_pull_ptr(struct pidl_pull *ndr, pidl_tree *tree, char *name,
 		      guint32 *ptr)
 {
-	return ndr_pull_uint32(ndr, tree, hf, ptr);
+	char *ptr_name, *tmp;
+
+	ndr_pull_align(ndr, sizeof(guint32));
+
+	*ptr = (ndr->drep[0] & 0x10)
+		? tvb_get_letohl(ndr->tvb, ndr->offset)
+		: tvb_get_ntohl(ndr->tvb, ndr->offset);
+	
+	ptr_name = g_strdup(name);
+
+	for (tmp = ptr_name; *tmp; tmp++) {
+		if (*tmp == '_') *tmp = ' ';
+		if (tmp == ptr_name || *(tmp - 1) == ' ')
+			*tmp = toupper(*tmp);
+	}
+	
+	proto_tree_add_text(
+		tree->proto_tree, ndr->tvb, ndr->offset, sizeof(guint32), 
+		"Pointer to %s: 0x%08x", ptr_name, *ptr);
+
+	g_free(ptr_name);
+
+	ndr->offset += 4;
+
+	return NT_STATUS_OK;
 }
 
 NTSTATUS ndr_pull_uint8(struct pidl_pull *ndr, pidl_tree *tree, int hf, 

Modified: trunk/ethereal/plugins/pidl/eparser.h
===================================================================
--- trunk/ethereal/plugins/pidl/eparser.h	2005-01-17 05:42:19 UTC (rev 183)
+++ trunk/ethereal/plugins/pidl/eparser.h	2005-01-17 06:24:03 UTC (rev 184)
@@ -114,7 +114,7 @@
 NTSTATUS ndr_pull_NTTIME(struct pidl_pull *ndr, pidl_tree *tree, int hf, NTTIME *data);
 NTSTATUS ndr_pull_HYPER_T(struct pidl_pull *ndr, pidl_tree *tree, int hf, HYPER_T *data);
 void ndr_set_flags(uint32_t *pflags, uint32_t new_flags);
-NTSTATUS ndr_pull_ptr(struct pidl_pull *ndr, pidl_tree *tree, int hf, uint32_t *v);
+NTSTATUS ndr_pull_ptr(struct pidl_pull *ndr, pidl_tree *tree, char *name, uint32_t *v);
 NTSTATUS ndr_pull_error(struct pidl_pull *ndr, 
 			enum ndr_err_code err, const char *format, ...);
 NTSTATUS ndr_pull_string(struct pidl_pull *ndr, int ndr_flags, pidl_tree *tree, const char **s);



More information about the samba-cvs mailing list