1 ###################################################
2 # parse an ethereal conformance file
3 # Copyright jelmer@samba.org 2005
4 # released under the GNU GPL
6 package Parse
::Pidl
::Ethereal
::Conformance
;
11 @EXPORT_OK = qw(ReadConformance);
15 use Parse
::Pidl
::Util
qw(has_property);
17 sub handle_type
($$$$$$$$)
19 my ($data,$name,$dissectorname,$ft_type,$base_type,$mask,$valsstring,$alignment) = @_;
21 $data->{types
}->{$name} = {
23 DISSECTOR_NAME
=> $dissectorname,
25 BASE_TYPE
=> $base_type,
27 VALSSTRING
=> $valsstring,
28 ALIGNMENT
=> $alignment
32 sub handle_hf_rename
($$$)
34 my ($data,$old,$new) = @_;
35 $data->{hf_renames
}{$old} = $new;
38 sub handle_param_value
($$$)
40 my ($data,$dissector_name,$value) = @_;
42 $data->{dissectorparams
}->{$dissector_name} = $value;
45 sub handle_hf_field
($$$$$$$$$)
47 my ($data,$index,$name,$filter,$ft_type,$base_type,$valsstring,$mask,$blurb) = @_;
49 $data->{header_fields
}->{$index} = {
54 BASE_TYPE
=> $base_type,
55 VALSSTRING
=> $valsstring,
61 sub handle_strip_prefix
($$)
65 push (@
{$data->{strip_prefixes
}}, $x);
73 $type = shift if ($#_ == 1);
76 $data->{noemit
}->{$type} = 1;
78 $data->{noemit_dissector
} = 1;
82 sub handle_protocol
($$$$$)
84 my ($data, $name, $longname, $shortname, $filtername) = @_;
86 $data->{protocols
}->{$name} = {
87 LONGNAME
=> $longname,
88 SHORTNAME
=> $shortname,
89 FILTERNAME
=> $filtername
93 sub handle_fielddescription
($$$)
95 my ($data,$field,$desc) = @_;
97 $data->{fielddescription
}->{$field} = $desc;
103 my $dissectorname = shift @_;
105 $data->{imports
}->{$dissectorname} = join(' ', @_);
108 my %field_handlers = (
109 TYPE
=> \
&handle_type
,
110 NOEMIT
=> \
&handle_noemit
,
111 PARAM_VALUE
=> \
&handle_param_value
,
112 HF_FIELD
=> \
&handle_hf_field
,
113 HF_RENAME
=> \
&handle_hf_rename
,
114 STRIP_PREFIX
=> \
&handle_strip_prefix
,
115 PROTOCOL
=> \
&handle_protocol
,
116 FIELD_DESCRIPTION
=> \
&handle_fielddescription
,
117 IMPORT
=> \
&handle_import
120 sub ReadConformance
($$)
124 $data->{override
} = "";
128 open(IN
,"<$f") or return undef;
139 if ($_ eq "CODE START") {
142 } elsif ($incodeblock and $_ eq "CODE END") {
145 } elsif ($incodeblock) {
146 $data->{override
}.="$_\n";
150 my @fields = split(/ /);
152 my $cmd = $fields[0];
156 if (not defined($field_handlers{$cmd})) {
157 print "$f:$ln: Warning: Unknown command `$cmd'\n";
161 $field_handlers{$cmd}($data, @fields);