Add HP Switch Protocol SAP value
[obnox/wireshark/wip.git] / epan / make-sminmpec.pl
1 #!/usr/bin/perl -w
2 # create the sminmpec.c file from 
3 # http://www.iana.org/assignments/enterprise-numbers
4 #
5 # $Id$
6 #
7 # Wireshark - Network traffic analyzer
8 # By Gerald Combs <gerald@wireshark.org>
9 # Copyright 2004 Gerald Combs
10 #
11 # This program is free software; you can redistribute it and/or
12 # modify it under the terms of the GNU General Public License
13 # as published by the Free Software Foundation; either version 2
14 # of the License, or (at your option) any later version.
15 #
16 # This program is distributed in the hope that it will be useful,
17 # but WITHOUT ANY WARRANTY; without even the implied warranty of
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 # GNU General Public License for more details.
20 #
21 # You should have received a copy of the GNU General Public License
22 # along with this program; if not, write to the Free Software
23 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24 use strict;
25
26 my $in = shift;
27
28 $in = "http://www.iana.org/assignments/enterprise-numbers" unless(defined $in);
29
30 my @in_lines;
31
32 if($in =~ m/^http:/i) {
33         eval "require LWP::UserAgent;";
34         die "LWP isn't installed. It is part of the standard Perl module libwww." if $@;
35                 
36         my $agent    = LWP::UserAgent->new;
37
38         warn "starting to fetch $in ...\n";
39
40         my $request  = HTTP::Request->new(GET => $in);
41
42                 
43         if (-f "enterprise-numbers") {
44                 my $mtime;
45                 (undef,undef,undef,undef,undef,undef,undef,undef,undef,$mtime,undef,undef,undef) = stat("enterprise-numbers");
46                 $request->if_modified_since( $mtime );
47         }
48         
49         my $result   = $agent->request($request);
50
51         if ($result->code eq 200) {
52                 warn "done fetching $in\n";
53                 @in_lines = split /\n/, $result->content;
54                 open ENFILE, "> enterprise-numbers";
55                 
56                 for (@in_lines) {
57                         chomp;
58                         print ENFILE "$_\n";
59                 }
60                 
61                 close ENFILE;
62         } elsif ($result->code eq 304) {
63                 warn "enterprise-numbers was up-to-date\n";
64                 open IN, "< enterprise-numbers";
65                 @in_lines = <IN>;
66                 close IN;
67         } else {
68                 die "request for $in failed with result code:" . $result->code;
69         }
70
71 } else {
72   open IN, "< $in";
73   @in_lines = <IN>;
74   close IN;
75 }
76
77
78 open OUT, "> sminmpec.c";
79
80 my $body = '';
81 my $code;
82
83 sub escape_non_ascii {
84     my $val = unpack 'C', $_[0];
85     return sprintf '\0%.3o',$val;
86 }
87
88 for(@in_lines) {
89         s/[\000-\037]//g;
90         s/\\/\\\\/g;
91         s/"/\\"/g;
92         s/([\x80-\xFF])/escape_non_ascii($1)/ge;
93         
94         if (/^(\d+)/) {
95                 $code = $1;
96         } if (/^  (\S.*)/ ) {
97                 my $name = $1;
98                 $body .= "\t{ $code,\t\"$name\" },\n";
99         }
100 }
101
102 print OUT <<"_SMINMPEC";
103 /*
104  * THIS FILE IS AUTOGENERATED, DO NOT EDIT
105  * generated from http://www.iana.org/assignments/enterprise-numbers
106  * run "epan/make-sminmspec <infile> <outfile>" to regenerate
107  */
108 #ifdef HAVE_CONFIG_H
109 # include "config.h"
110 #endif
111
112 #include <glib.h>
113
114 #include <epan/value_string.h>
115 #include <epan/sminmpec.h>
116
117 const value_string sminmpec_values[] = {
118
119 $body
120         {0, NULL}
121 };
122
123 _SMINMPEC
124
125 close OUT;