svn commit: samba r9128 - in branches/SAMBA_4_0/source/build/pidl/Parse/Pidl/Ethereal: .

jelmer at samba.org jelmer at samba.org
Fri Aug 5 18:03:52 GMT 2005


Author: jelmer
Date: 2005-08-05 18:03:52 +0000 (Fri, 05 Aug 2005)
New Revision: 9128

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

Log:
More ethereal parser generator updates. String handling is still broken as 
well as handling more then two element levels.

Modified:
   branches/SAMBA_4_0/source/build/pidl/Parse/Pidl/Ethereal/Conformance.pm
   branches/SAMBA_4_0/source/build/pidl/Parse/Pidl/Ethereal/NDR.pm


Changeset:
Modified: branches/SAMBA_4_0/source/build/pidl/Parse/Pidl/Ethereal/Conformance.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/Parse/Pidl/Ethereal/Conformance.pm	2005-08-05 17:45:36 UTC (rev 9127)
+++ branches/SAMBA_4_0/source/build/pidl/Parse/Pidl/Ethereal/Conformance.pm	2005-08-05 18:03:52 UTC (rev 9128)
@@ -16,16 +16,28 @@
 
 sub handle_union_tag_size($$)
 {
+	my ($union,$size) = @_;
+
 	#FIXME	
 }
 
+use vars qw(%hf_renames %types %header_fields);
+
 sub handle_type($$$$$$$)
 {
 	my ($name,$dissectorname,$ft_type,$base_type,$mask,$valsstring,$alignment) = @_;
-	#FIXME
+
+	$types{$name} = {
+		NAME => $name,
+		DISSECTOR_NAME => $dissectorname,
+		FT_TYPE => $ft_type,
+		BASE_TYPE => $base_type,
+		MASK => $mask,
+		VALSSTRING => $valsstring,
+		ALIGNMENT => $alignment
+	};
 }
 
-use vars qw(%hf_renames);
 
 sub handle_hf_rename($$)
 {
@@ -45,12 +57,23 @@
 
 sub handle_hf_field($$$$$$$$)
 {
-	my ($hf,$title,$filter,$ft_type,$base_type,$valsstring,$mask,$blub) = @_;
+	my ($hf,$title,$filter,$ft_type,$base_type,$valsstring,$mask,$blurb) = @_;
 
+	$header_fields{$hf} = {
+		HF => $hf,
+		TITLE => $title,
+		FILTER => $filter,
+		FT_TYPE => $ft_type,
+		BASE_TYPE => $base_type,
+		VALSSTRING => $valsstring,
+		MASK => $mask,
+		BLURB => $blurb
+	};
 }
 
 sub handle_strip_prefix($)
 {
+	my $x = shift;
 	#FIXME
 }
 

Modified: branches/SAMBA_4_0/source/build/pidl/Parse/Pidl/Ethereal/NDR.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/Parse/Pidl/Ethereal/NDR.pm	2005-08-05 17:45:36 UTC (rev 9127)
+++ branches/SAMBA_4_0/source/build/pidl/Parse/Pidl/Ethereal/NDR.pm	2005-08-05 18:03:52 UTC (rev 9128)
@@ -6,6 +6,10 @@
 # Portions based on idl2eth.c by Ronnie Sahlberg
 # released under the GNU GPL
 
+# TODO:
+#  - order of functions generated per element level
+#  - strings
+
 package Parse::Pidl::Ethereal::NDR;
 
 use strict;
@@ -150,7 +154,7 @@
 	pidl_code "return offset;";
 	pidl_code "}\n";
 
-	register_hf_field($name, $dissectorname, enum_ft($e), "BASE_DEC", "0", "VALS($valsstring)", enum_size($e));
+	register_type($name, $dissectorname, enum_ft($e), "BASE_DEC", "0", "VALS($valsstring)", enum_size($e));
 }
 
 sub Bitmap($$$)
@@ -194,7 +198,7 @@
 		my $hf_bitname = "hf_$ifname\_$name\_$en";
 		my $filtername = "$ifname\.$name\.$en";
 		
-		register_hf_field($hf_bitname, $en, $filtername, "FT_BOOLEAN", $e->{ALIGN} * 8, "TFS(&$en\_tfs)", $ev, "");
+		register_hf_field($hf_bitname, field2name($en), $filtername, "FT_BOOLEAN", $e->{ALIGN} * 8, "TFS(&$en\_tfs)", $ev, "");
 
 		pidl_def "static const true_false_string $name\_tfs = {";
 		pidl_def "   \"$name is SET\",";
@@ -253,7 +257,7 @@
 
 	return if (EmitProhibited($dissectorname));
 
-	my $hf = register_hf_field("hf_$ifname\_$pn\_$e->{NAME}", $e->{NAME}, "$ifname.$pn.$e->{NAME}", type2ft($e->{TYPE}), "BASE_HEX", "NULL", 0, "");
+	my $hf = register_hf_field("hf_$ifname\_$pn\_$e->{NAME}", field2name($e->{NAME}), "$ifname.$pn.$e->{NAME}", type2ft($e->{TYPE}), "BASE_HEX", "NULL", 0, "");
 	my $add = "";
 
 	foreach (@{$e->{LEVELS}}) {
@@ -290,8 +294,9 @@
 	indent;
 	foreach (@{$fn->{ELEMENTS}}) {
 		if (grep(/in/,@{$_->{DIRECTION}})) {
-			pidl_code "dissectornames{$_->{NAME}};";
+			pidl_code "$dissectornames{$_->{NAME}}";
 			pidl_code "offset=dissect_deferred_pointers(pinfo,tvb,offset,drep);";
+			pidl_code "";
 		}
 	}
 	pidl_code "return offset;";
@@ -304,7 +309,7 @@
 	indent;
 	foreach (@{$fn->{ELEMENTS}}) {
 		if (grep(/out/,@{$_->{DIRECTION}})) {
-			pidl_code "$dissectornames{$_->{NAME}};";
+			pidl_code "$dissectornames{$_->{NAME}}";
 			pidl_code "offset=dissect_deferred_pointers(pinfo,tvb,offset,drep);";
 		}
 
@@ -478,6 +483,21 @@
 {
 	my $x = shift;
 
+	my $define = "__PACKET_DCERPC_" . uc($_->{NAME}) . "_H";
+	pidl_hdr "#ifndef $define";
+	pidl_hdr "#define $define";
+	pidl_hdr "";
+
+	if (defined $x->{PROPERTIES}->{depends}) {
+		foreach (split / /, $x->{PROPERTIES}->{depends}) {
+			pidl_hdr "#include \"packet-dcerpc-$_\.h\"\n";
+		}
+	}
+
+	pidl_def "static gint proto_dcerpc_$x->{NAME} = -1;";
+	register_ett("ett_dcerpc_$x->{NAME}");
+	register_hf_field("hf_$x->{NAME}_opnum", "Operation", "$x->{NAME}.opnum", "FT_UINT16", "BASE_DEC", "NULL", 0, "");
+
 	foreach (@{$x->{TYPEDEFS}}) {
 		$dissectors{$_->{NAME}} = "$x->{NAME}_dissect_$_->{NAME}";
 	}
@@ -507,10 +527,12 @@
 
 	Interface($x);
 
-	$res{functiontable} = DumpFunctionTable($x);
+	pidl_code "\n".DumpFunctionTable($x);
 
 	RegisterInterface($x);
 	RegisterInterfaceHandoff($x);
+
+	pidl_hdr "#endif /* $define */";
 }
 
 #####################################################################
@@ -530,7 +552,7 @@
 
 	pidl_hdr "/* header auto-generated by pidl */";
 
-	$res{headers} = "";
+	$res{headers} = "\n";
 	$res{headers} .= "#ifdef HAVE_CONFIG_H\n";
 	$res{headers} .= "#include \"config.h\"\n";
 	$res{headers} .= "#endif\n\n";
@@ -558,8 +580,8 @@
 	$parser.=$res{def};
 	$parser.=$res{code};
 
-	my $define = "__PACKET_DCERPC_" . uc($_->{NAME}) . "_H";
-	my $header = "#ifndef $define\n#define $define\n\n".$res{hdr} . "\n#endif /* $define */\n";
+	my $header = "/* autogenerated by pidl */\n\n";
+	$header.=$res{hdr};
     
 	return ($parser,$header);
 }
@@ -663,13 +685,13 @@
 	my $res = "static dcerpc_sub_dissector $if->{NAME}\_dissectors[] = {\n";
 	
 	foreach (@{$if->{FUNCTIONS}}) {
-		$res.= "\t{ $_->{OPNUM}, \"$_->{NAME},\n";
+		$res.= "\t{ $_->{OPNUM}, \"$_->{NAME}\",\n";
 		$res.= "\t   $if->{NAME}_dissect_$_->{NAME}_request, $if->{NAME}_dissect_$_->{NAME}_response},\n";
 	}
 
-	$res .= "\t{ 0, NULL, NULL, NULL },\n";
+	$res .= "\t{ 0, NULL, NULL, NULL }\n";
 
-	return "$res\t}\n";
+	return "$res};\n";
 }
 
 



More information about the samba-cvs mailing list