Mercurial > dnsbl
annotate src/scanner.cpp @ 19:b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
author | carl |
---|---|
date | Fri, 30 Apr 2004 22:44:56 -0700 |
parents | 041ea016b684 |
children | 06de5ab6a232 |
rev | line source |
---|---|
8 | 1 static char* scanner_version="$Id$"; |
6 | 2 |
3 using namespace std; | |
4 | |
16 | 5 enum state {// host name recognizer states |
6 h_init, | |
7 h_host, | |
8 | |
9 // html tag discarder states | |
10 t_init, | |
11 t_disc, | |
12 | |
13 // url recognizer states | |
7 | 14 u_init, |
15 u_http, | |
16 u_sla, | |
17 u_url, | |
6 | 18 |
7 | 19 // html entity decoder states |
20 e_init, | |
21 e_amp, | |
22 e_num, | |
23 | |
24 // mime decoder states | |
25 m_init, | |
6 | 26 m_eq, |
27 m_1, | |
28 | |
7 | 29 // base64 decoder states |
30 b_init, | |
6 | 31 b_lf, |
32 b_lf2, | |
33 b_64, | |
34 | |
7 | 35 // counter for number of columns in the table |
36 end_state, | |
6 | 37 |
19
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
38 // temporary states |
16 | 39 h_end, |
40 t_end, | |
7 | 41 u_reco, |
42 e_semi, | |
43 m_2, | |
6 | 44 m_cr, |
45 m_nl, | |
46 b_cr, | |
47 }; | |
48 | |
49 typedef state PARSE[end_state]; | |
50 | |
51 static PARSE parse_table[256] = { | |
16 | 52 // h_init, h_host, t_init, t_disc, u_init, u_http, u_sla , u_url, e_init, e_amp, e_num, m_init, m_eq, m_1, b_init, b_lf, b_lf2, b_64 |
6 | 53 |
16 | 54 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x00 |
55 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x01 | |
56 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x02 | |
57 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x03 | |
58 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x04 | |
59 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x05 | |
60 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x06 | |
61 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x07 | |
62 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x08 | |
63 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x09 <tab> | |
64 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_nl, m_init, b_lf, b_init, b_lf2, b_init, }, // 0x0a <lf> | |
65 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x0b | |
66 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x0c | |
67 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_cr, m_init, b_init, b_init, b_init, b_cr, }, // 0x0d <cr> | |
68 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x0e | |
69 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x0f | |
70 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x10 | |
71 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x11 xon char | |
72 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x12 | |
73 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x13 xoff char | |
74 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x14 | |
75 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x15 | |
76 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x16 | |
77 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x17 | |
78 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x18 | |
79 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x19 | |
80 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x1a | |
81 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x1b | |
82 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x1c | |
83 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x1d | |
84 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x1e | |
85 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x1f | |
86 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x20 space | |
87 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x21 ! | |
88 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x22 "" | |
89 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_num, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x23 # | |
90 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x24 $ | |
91 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x25 % | |
92 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_amp, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x26 & | |
93 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x27 ' | |
94 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x28 ( | |
95 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x29 ) | |
96 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x2A * | |
97 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x2B + | |
98 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x2C , | |
99 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x2D - | |
100 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x2E . | |
101 {h_init, h_end, t_init, t_disc, u_init, u_sla, u_sla, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x2F / | |
102 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_num, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x30 0 | |
103 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_num, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x31 1 | |
104 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_num, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x32 2 | |
105 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_num, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x33 3 | |
106 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_num, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x34 4 | |
107 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_num, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x35 5 | |
108 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_num, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x36 6 | |
109 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_num, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x37 7 | |
110 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_num, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x38 8 | |
111 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_num, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x39 9 | |
112 {h_init, h_end, t_init, t_disc, u_http, u_http, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x3A : | |
113 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_semi, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x3B ; | |
114 {h_init, h_end, t_disc, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x3C < | |
115 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_eq, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x3D = | |
116 {h_init, h_end, t_init, t_end, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x3E > | |
117 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x3F ? | |
118 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x40 @ | |
119 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x41 A | |
120 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x42 B | |
121 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x43 C | |
122 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x44 D | |
123 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x45 E | |
124 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x46 F | |
125 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x47 G | |
126 {h_host, h_host, t_init, t_disc, u_http, u_http, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x48 H | |
127 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x49 I | |
128 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x4A J | |
129 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x4B K | |
130 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x4C L | |
131 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x4D M | |
132 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x4E N | |
133 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x4F O | |
134 {h_host, h_host, t_init, t_disc, u_http, u_http, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x50 P | |
135 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x51 Q | |
136 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x52 R | |
19
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
137 {h_host, h_host, t_init, t_disc, u_http, u_http, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x53 S |
16 | 138 {h_host, h_host, t_init, t_disc, u_http, u_http, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x54 T |
139 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x55 U | |
140 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x56 V | |
141 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x57 W | |
142 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x58 X | |
143 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x59 Y | |
144 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x5A Z | |
145 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x5B [ | |
146 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x5C brace | |
147 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x5D ] | |
148 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x5E ^ | |
149 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x5F _ | |
150 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x60 ` | |
151 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x61 a | |
152 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x62 b | |
153 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x63 c | |
154 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x64 d | |
155 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x65 e | |
156 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_1, m_2, b_init, b_64, b_64, b_64, }, // 0x66 f | |
157 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x67 g | |
158 {h_host, h_host, t_init, t_disc, u_http, u_http, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x68 h | |
159 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x69 i | |
160 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x6A j | |
161 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x6B k | |
162 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x6C l | |
163 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x6D m | |
164 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x6E n | |
165 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x6F o | |
166 {h_host, h_host, t_init, t_disc, u_http, u_http, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x70 p | |
167 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x71 q | |
168 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x72 r | |
19
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
169 {h_host, h_host, t_init, t_disc, u_http, u_http, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x73 s |
16 | 170 {h_host, h_host, t_init, t_disc, u_http, u_http, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x74 t |
171 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x75 u | |
172 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x76 v | |
173 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x77 w | |
174 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x78 x | |
175 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x79 y | |
176 {h_host, h_host, t_init, t_disc, u_init, u_init, u_url, u_url, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_64, b_64, b_64, }, // 0x7A z | |
177 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x7B { | |
178 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x7C | | |
179 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x7D } | |
180 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x7E ~ | |
181 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x7f | |
182 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x80 | |
183 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x81 | |
184 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x82 | |
185 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x83 | |
186 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x84 | |
187 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x85 | |
188 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x86 | |
189 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x87 | |
190 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x88 | |
191 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x89 | |
192 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x8a | |
193 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x8b | |
194 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x8c | |
195 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x8d | |
196 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x8e | |
197 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x8f | |
198 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x90 | |
199 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x91 | |
200 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x92 | |
201 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x93 | |
202 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x94 | |
203 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x95 | |
204 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x96 | |
205 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x97 | |
206 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x98 | |
207 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x99 | |
208 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x9a | |
209 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x9b | |
210 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x9c | |
211 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x9d | |
212 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x9e | |
213 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0x9f | |
214 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xa0 | |
215 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xa1 | |
216 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xa2 | |
217 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xa3 | |
218 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xa4 | |
219 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xa5 | |
220 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xa6 | |
221 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xa7 | |
222 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xa8 | |
223 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xa9 | |
224 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xaa | |
225 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xab | |
226 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xac | |
227 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xad | |
228 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xae | |
229 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xaf | |
230 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xb0 | |
231 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xb1 | |
232 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xb2 | |
233 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xb3 | |
234 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xb4 | |
235 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xb5 | |
236 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xb6 | |
237 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xb7 | |
238 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xb8 | |
239 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xb9 | |
240 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xba | |
241 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xbb | |
242 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xbc | |
243 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xbd | |
244 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xbe | |
245 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xbf | |
246 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xc0 | |
247 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xc1 | |
248 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xc2 | |
249 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xc3 | |
250 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xc4 | |
251 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xc5 | |
252 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xc6 | |
253 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xc7 | |
254 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xc8 | |
255 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xc9 | |
256 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xca | |
257 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xcb | |
258 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xcc | |
259 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xcd | |
260 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xce | |
261 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xcf | |
262 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xd0 | |
263 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xd1 | |
264 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xd2 | |
265 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xd3 | |
266 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xd4 | |
267 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xd5 | |
268 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xd6 | |
269 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xd7 | |
270 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xd8 | |
271 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xd9 | |
272 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xda | |
273 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xdb | |
274 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xdc | |
275 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xdd | |
276 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xde | |
277 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xdf | |
278 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xe0 | |
279 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xe1 | |
280 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xe2 | |
281 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xe3 | |
282 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xe4 | |
283 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xe5 | |
284 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xe6 | |
285 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xe7 | |
286 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xe8 | |
287 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xe9 | |
288 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xea | |
289 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xeb | |
290 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xec | |
291 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xed | |
292 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xee | |
293 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xef | |
294 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xf0 | |
295 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xf1 | |
296 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xf2 | |
297 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xf3 | |
298 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xf4 | |
299 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xf5 | |
300 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xf6 | |
301 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xf7 | |
302 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xf8 | |
303 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xf9 | |
304 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xfa | |
305 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xfb | |
306 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xfc | |
307 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xfd | |
308 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xfe | |
309 {h_init, h_end, t_init, t_disc, u_init, u_init, u_init, u_reco, e_init, e_init, e_init, m_init, m_init, m_init, b_init, b_init, b_init, b_init, }, // 0xff | |
6 | 310 }; |
311 | |
312 | |
16 | 313 char *tlds[] = { |
314 ".com", | |
315 ".net", | |
316 ".org", | |
317 ".biz", | |
318 NULL | |
319 }; | |
320 | |
6 | 321 u_char hex_decode[256] = { |
322 0, // 0x00 | |
323 0, // 0x01 | |
324 0, // 0x02 | |
325 0, // 0x03 | |
326 0, // 0x04 | |
327 0, // 0x05 | |
328 0, // 0x06 | |
329 0, // 0x07 | |
330 0, // 0x08 | |
7 | 331 0, // 0x09 <tab> |
332 0, // 0x0a <lf> | |
6 | 333 0, // 0x0b |
334 0, // 0x0c | |
7 | 335 0, // 0x0d <cr> |
6 | 336 0, // 0x0e |
337 0, // 0x0f | |
338 0, // 0x10 | |
339 0, // 0x11 xon char | |
340 0, // 0x12 | |
341 0, // 0x13 xoff char | |
342 0, // 0x14 | |
343 0, // 0x15 | |
344 0, // 0x16 | |
345 0, // 0x17 | |
346 0, // 0x18 | |
347 0, // 0x19 | |
348 0, // 0x1a | |
349 0, // 0x1b | |
350 0, // 0x1c | |
351 0, // 0x1d | |
352 0, // 0x1e | |
353 0, // 0x1f | |
354 0, // 0x20 space | |
355 0, // 0x21 ! | |
356 0, // 0x22 "" | |
357 0, // 0x23 # | |
358 0, // 0x24 $ | |
359 0, // 0x25 % | |
360 0, // 0x26 & | |
361 0, // 0x27 ' | |
362 0, // 0x28 ( | |
363 0, // 0x29 ) | |
364 0, // 0x2A * | |
365 0, // 0x2B + | |
366 0, // 0x2C , | |
367 0, // 0x2D - | |
368 0, // 0x2E . | |
369 0, // 0x2F / | |
370 0, // 0x30 0 | |
371 1, // 0x31 1 | |
372 2, // 0x32 2 | |
373 3, // 0x33 3 | |
374 4, // 0x34 4 | |
375 5, // 0x35 5 | |
376 6, // 0x36 6 | |
377 7, // 0x37 7 | |
378 8, // 0x38 8 | |
379 9, // 0x39 9 | |
380 0, // 0x3A : | |
381 0, // 0x3B ; | |
382 0, // 0x3C < | |
383 0, // 0x3D = | |
384 0, // 0x3E > | |
385 0, // 0x3F ? | |
386 0, // 0x40 @ | |
387 10, // 0x41 A | |
388 11, // 0x42 B | |
389 12, // 0x43 C | |
390 13, // 0x44 D | |
391 14, // 0x45 E | |
392 15, // 0x46 F | |
393 0, // 0x47 G | |
394 0, // 0x48 H | |
395 0, // 0x49 I | |
396 0, // 0x4A J | |
397 0, // 0x4B K | |
398 0, // 0x4C L | |
399 0, // 0x4D M | |
400 0, // 0x4E N | |
401 0, // 0x4F O | |
402 0, // 0x50 P | |
403 0, // 0x51 Q | |
404 0, // 0x52 R | |
405 0, // 0x53 S | |
406 0, // 0x54 T | |
407 0, // 0x55 U | |
408 0, // 0x56 V | |
409 0, // 0x57 W | |
410 0, // 0x58 X | |
411 0, // 0x59 Y | |
412 0, // 0x5A Z | |
413 0, // 0x5B [ | |
414 0, // 0x5C brace | |
415 0, // 0x5D ] | |
416 0, // 0x5E ^ | |
417 0, // 0x5F _ | |
418 0, // 0x60 ` | |
419 10, // 0x61 a | |
420 11, // 0x62 b | |
421 12, // 0x63 c | |
422 13, // 0x64 d | |
423 14, // 0x65 e | |
424 15, // 0x66 f | |
425 0, // 0x67 g | |
426 0, // 0x68 h | |
427 0, // 0x69 i | |
428 0, // 0x6A j | |
429 0, // 0x6B k | |
430 0, // 0x6C l | |
431 0, // 0x6D m | |
432 0, // 0x6E n | |
433 0, // 0x6F o | |
434 0, // 0x70 p | |
435 0, // 0x71 q | |
436 0, // 0x72 r | |
437 0, // 0x73 s | |
438 0, // 0x74 t | |
439 0, // 0x75 u | |
440 0, // 0x76 v | |
441 0, // 0x77 w | |
442 0, // 0x78 x | |
443 0, // 0x79 y | |
444 0, // 0x7A z | |
445 0, // 0x7B { | |
446 0, // 0x7C | | |
447 0, // 0x7D } | |
448 0, // 0x7E ~ | |
449 0, // 0x7f | |
450 0, // 0x80 | |
451 0, // 0x81 | |
452 0, // 0x82 | |
453 0, // 0x83 | |
454 0, // 0x84 | |
455 0, // 0x85 | |
456 0, // 0x86 | |
457 0, // 0x87 | |
458 0, // 0x88 | |
459 0, // 0x89 | |
460 0, // 0x8a | |
461 0, // 0x8b | |
462 0, // 0x8c | |
463 0, // 0x8d | |
464 0, // 0x8e | |
465 0, // 0x8f | |
466 0, // 0x90 | |
467 0, // 0x91 | |
468 0, // 0x92 | |
469 0, // 0x93 | |
470 0, // 0x94 | |
471 0, // 0x95 | |
472 0, // 0x96 | |
473 0, // 0x97 | |
474 0, // 0x98 | |
475 0, // 0x99 | |
476 0, // 0x9a | |
477 0, // 0x9b | |
478 0, // 0x9c | |
479 0, // 0x9d | |
480 0, // 0x9e | |
481 0, // 0x9f | |
482 0, // 0xa0 | |
483 0, // 0xa1 | |
484 0, // 0xa2 | |
485 0, // 0xa3 | |
486 0, // 0xa4 | |
487 0, // 0xa5 | |
488 0, // 0xa6 | |
489 0, // 0xa7 | |
490 0, // 0xa8 | |
491 0, // 0xa9 | |
492 0, // 0xaa | |
493 0, // 0xab | |
494 0, // 0xac | |
495 0, // 0xad | |
496 0, // 0xae | |
497 0, // 0xaf | |
498 0, // 0xb0 | |
499 0, // 0xb1 | |
500 0, // 0xb2 | |
501 0, // 0xb3 | |
502 0, // 0xb4 | |
503 0, // 0xb5 | |
504 0, // 0xb6 | |
505 0, // 0xb7 | |
506 0, // 0xb8 | |
507 0, // 0xb9 | |
508 0, // 0xba | |
509 0, // 0xbb | |
510 0, // 0xbc | |
511 0, // 0xbd | |
512 0, // 0xbe | |
513 0, // 0xbf | |
514 0, // 0xc0 | |
515 0, // 0xc1 | |
516 0, // 0xc2 | |
517 0, // 0xc3 | |
518 0, // 0xc4 | |
519 0, // 0xc5 | |
520 0, // 0xc6 | |
521 0, // 0xc7 | |
522 0, // 0xc8 | |
523 0, // 0xc9 | |
524 0, // 0xca | |
525 0, // 0xcb | |
526 0, // 0xcc | |
527 0, // 0xcd | |
528 0, // 0xce | |
529 0, // 0xcf | |
530 0, // 0xd0 | |
531 0, // 0xd1 | |
532 0, // 0xd2 | |
533 0, // 0xd3 | |
534 0, // 0xd4 | |
535 0, // 0xd5 | |
536 0, // 0xd6 | |
537 0, // 0xd7 | |
538 0, // 0xd8 | |
539 0, // 0xd9 | |
540 0, // 0xda | |
541 0, // 0xdb | |
542 0, // 0xdc | |
543 0, // 0xdd | |
544 0, // 0xde | |
545 0, // 0xdf | |
546 0, // 0xe0 | |
547 0, // 0xe1 | |
548 0, // 0xe2 | |
549 0, // 0xe3 | |
550 0, // 0xe4 | |
551 0, // 0xe5 | |
552 0, // 0xe6 | |
553 0, // 0xe7 | |
554 0, // 0xe8 | |
555 0, // 0xe9 | |
556 0, // 0xea | |
557 0, // 0xeb | |
558 0, // 0xec | |
559 0, // 0xed | |
560 0, // 0xee | |
561 0, // 0xef | |
562 0, // 0xf0 | |
563 0, // 0xf1 | |
564 0, // 0xf2 | |
565 0, // 0xf3 | |
566 0, // 0xf4 | |
567 0, // 0xf5 | |
568 0, // 0xf6 | |
569 0, // 0xf7 | |
570 0, // 0xf8 | |
571 0, // 0xf9 | |
572 0, // 0xfa | |
573 0, // 0xfb | |
574 0, // 0xfc | |
575 0, // 0xfd | |
576 0, // 0xfe | |
577 0, // 0xff | |
578 }; | |
7 | 579 |
6 | 580 u_char b64_decode[256] = { |
581 0, // 0x00 | |
582 0, // 0x01 | |
583 0, // 0x02 | |
584 0, // 0x03 | |
585 0, // 0x04 | |
586 0, // 0x05 | |
587 0, // 0x06 | |
588 0, // 0x07 | |
589 0, // 0x08 | |
7 | 590 0, // 0x09 <tab> |
591 0, // 0x0a <lf> | |
6 | 592 0, // 0x0b |
593 0, // 0x0c | |
7 | 594 0, // 0x0d <cr> |
6 | 595 0, // 0x0e |
596 0, // 0x0f | |
597 0, // 0x10 | |
598 0, // 0x11 xon char | |
599 0, // 0x12 | |
600 0, // 0x13 xoff char | |
601 0, // 0x14 | |
602 0, // 0x15 | |
603 0, // 0x16 | |
604 0, // 0x17 | |
605 0, // 0x18 | |
606 0, // 0x19 | |
607 0, // 0x1a | |
608 0, // 0x1b | |
609 0, // 0x1c | |
610 0, // 0x1d | |
611 0, // 0x1e | |
612 0, // 0x1f | |
613 0, // 0x20 space | |
614 0, // 0x21 ! | |
615 0, // 0x22 "" | |
616 0, // 0x23 # | |
617 0, // 0x24 $ | |
618 0, // 0x25 % | |
619 0, // 0x26 & | |
620 0, // 0x27 ' | |
621 0, // 0x28 ( | |
622 0, // 0x29 ) | |
623 0, // 0x2A * | |
624 62, // 0x2B + | |
625 0, // 0x2C , | |
626 0, // 0x2D - | |
627 0, // 0x2E . | |
628 63, // 0x2F / | |
629 52, // 0x30 0 | |
630 53, // 0x31 1 | |
631 54, // 0x32 2 | |
632 55, // 0x33 3 | |
633 56, // 0x34 4 | |
634 57, // 0x35 5 | |
635 58, // 0x36 6 | |
636 59, // 0x37 7 | |
637 60, // 0x38 8 | |
638 61, // 0x39 9 | |
639 0, // 0x3A : | |
640 0, // 0x3B ; | |
641 0, // 0x3C < | |
642 0, // 0x3D = | |
643 0, // 0x3E > | |
644 0, // 0x3F ? | |
645 0, // 0x40 @ | |
7 | 646 0, // 0x41 A |
647 1, // 0x42 B | |
648 2, // 0x43 C | |
649 3, // 0x44 D | |
650 4, // 0x45 E | |
651 5, // 0x46 F | |
652 6, // 0x47 G | |
653 7, // 0x48 H | |
654 8, // 0x49 I | |
655 9, // 0x4A J | |
6 | 656 10, // 0x4B K |
657 11, // 0x4C L | |
658 12, // 0x4D M | |
659 13, // 0x4E N | |
660 14, // 0x4F O | |
661 15, // 0x50 P | |
662 16, // 0x51 Q | |
663 17, // 0x52 R | |
664 18, // 0x53 S | |
665 19, // 0x54 T | |
666 20, // 0x55 U | |
667 21, // 0x56 V | |
668 22, // 0x57 W | |
669 23, // 0x58 X | |
670 24, // 0x59 Y | |
671 25, // 0x5A Z | |
672 0, // 0x5B [ | |
673 0, // 0x5C brace | |
674 0, // 0x5D ] | |
675 0, // 0x5E ^ | |
676 0, // 0x5F _ | |
677 0, // 0x60 ` | |
678 26, // 0x61 a | |
679 27, // 0x62 b | |
680 28, // 0x63 c | |
681 29, // 0x64 d | |
682 30, // 0x65 e | |
683 31, // 0x66 f | |
684 32, // 0x67 g | |
685 33, // 0x68 h | |
686 34, // 0x69 i | |
687 35, // 0x6A j | |
688 36, // 0x6B k | |
689 37, // 0x6C l | |
690 38, // 0x6D m | |
691 39, // 0x6E n | |
692 40, // 0x6F o | |
693 41, // 0x70 p | |
694 42, // 0x71 q | |
695 43, // 0x72 r | |
696 44, // 0x73 s | |
697 45, // 0x74 t | |
698 46, // 0x75 u | |
699 47, // 0x76 v | |
700 48, // 0x77 w | |
701 49, // 0x78 x | |
702 50, // 0x79 y | |
703 51, // 0x7A z | |
704 0, // 0x7B { | |
705 0, // 0x7C | | |
706 0, // 0x7D } | |
707 0, // 0x7E ~ | |
708 0, // 0x7f | |
709 0, // 0x80 | |
710 0, // 0x81 | |
711 0, // 0x82 | |
712 0, // 0x83 | |
713 0, // 0x84 | |
714 0, // 0x85 | |
715 0, // 0x86 | |
716 0, // 0x87 | |
717 0, // 0x88 | |
718 0, // 0x89 | |
719 0, // 0x8a | |
720 0, // 0x8b | |
721 0, // 0x8c | |
722 0, // 0x8d | |
723 0, // 0x8e | |
724 0, // 0x8f | |
725 0, // 0x90 | |
726 0, // 0x91 | |
727 0, // 0x92 | |
728 0, // 0x93 | |
729 0, // 0x94 | |
730 0, // 0x95 | |
731 0, // 0x96 | |
732 0, // 0x97 | |
733 0, // 0x98 | |
734 0, // 0x99 | |
735 0, // 0x9a | |
736 0, // 0x9b | |
737 0, // 0x9c | |
738 0, // 0x9d | |
739 0, // 0x9e | |
740 0, // 0x9f | |
741 0, // 0xa0 | |
742 0, // 0xa1 | |
743 0, // 0xa2 | |
744 0, // 0xa3 | |
745 0, // 0xa4 | |
746 0, // 0xa5 | |
747 0, // 0xa6 | |
748 0, // 0xa7 | |
749 0, // 0xa8 | |
750 0, // 0xa9 | |
751 0, // 0xaa | |
752 0, // 0xab | |
753 0, // 0xac | |
754 0, // 0xad | |
755 0, // 0xae | |
756 0, // 0xaf | |
757 0, // 0xb0 | |
758 0, // 0xb1 | |
759 0, // 0xb2 | |
760 0, // 0xb3 | |
761 0, // 0xb4 | |
762 0, // 0xb5 | |
763 0, // 0xb6 | |
764 0, // 0xb7 | |
765 0, // 0xb8 | |
766 0, // 0xb9 | |
767 0, // 0xba | |
768 0, // 0xbb | |
769 0, // 0xbc | |
770 0, // 0xbd | |
771 0, // 0xbe | |
772 0, // 0xbf | |
773 0, // 0xc0 | |
774 0, // 0xc1 | |
775 0, // 0xc2 | |
776 0, // 0xc3 | |
777 0, // 0xc4 | |
778 0, // 0xc5 | |
779 0, // 0xc6 | |
780 0, // 0xc7 | |
781 0, // 0xc8 | |
782 0, // 0xc9 | |
783 0, // 0xca | |
784 0, // 0xcb | |
785 0, // 0xcc | |
786 0, // 0xcd | |
787 0, // 0xce | |
788 0, // 0xcf | |
789 0, // 0xd0 | |
790 0, // 0xd1 | |
791 0, // 0xd2 | |
792 0, // 0xd3 | |
793 0, // 0xd4 | |
794 0, // 0xd5 | |
795 0, // 0xd6 | |
796 0, // 0xd7 | |
797 0, // 0xd8 | |
798 0, // 0xd9 | |
799 0, // 0xda | |
800 0, // 0xdb | |
801 0, // 0xdc | |
802 0, // 0xdd | |
803 0, // 0xde | |
804 0, // 0xdf | |
805 0, // 0xe0 | |
806 0, // 0xe1 | |
807 0, // 0xe2 | |
808 0, // 0xe3 | |
809 0, // 0xe4 | |
810 0, // 0xe5 | |
811 0, // 0xe6 | |
812 0, // 0xe7 | |
813 0, // 0xe8 | |
814 0, // 0xe9 | |
815 0, // 0xea | |
816 0, // 0xeb | |
817 0, // 0xec | |
818 0, // 0xed | |
819 0, // 0xee | |
820 0, // 0xef | |
821 0, // 0xf0 | |
822 0, // 0xf1 | |
823 0, // 0xf2 | |
824 0, // 0xf3 | |
825 0, // 0xf4 | |
826 0, // 0xf5 | |
827 0, // 0xf6 | |
828 0, // 0xf7 | |
829 0, // 0xf8 | |
830 0, // 0xf9 | |
831 0, // 0xfa | |
832 0, // 0xfb | |
833 0, // 0xfc | |
834 0, // 0xfd | |
835 0, // 0xfe | |
836 0, // 0xff | |
837 }; | |
838 | |
8 | 839 #define PENDING_LIMIT 100 |
6 | 840 struct fsa { |
12 | 841 u_char pending[PENDING_LIMIT]; |
842 int count; | |
843 state st; | |
844 state init; | |
16 | 845 fsa* next1; |
846 fsa* next2; | |
12 | 847 string_set *hosts; |
6 | 848 |
16 | 849 fsa(state init, fsa* next1_, fsa* next2_, string_set *hosts_); |
6 | 850 void push(u_char *buf, int len); |
16 | 851 void pusher(); |
19
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
852 void error(char *err); |
6 | 853 }; |
854 | |
16 | 855 fsa::fsa(state init_, fsa *next1_, fsa *next2_, string_set *hosts_) { |
6 | 856 count = 0; |
857 st = init_; | |
858 init = init_; | |
16 | 859 next1 = next1_; |
860 next2 = next2_; | |
12 | 861 hosts = hosts_; |
6 | 862 } |
863 | |
19
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
864 void fsa::error(char *err) { |
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
865 count = 0; |
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
866 st = init; |
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
867 if (err) my_syslog(err); |
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
868 } |
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
869 |
16 | 870 void fsa::pusher() { |
871 if (next1) next1->push(pending, count); | |
872 if (next2) next2->push(pending, count); | |
873 count = 0; | |
874 } | |
875 | |
6 | 876 void fsa::push(u_char *buf, int len) { |
877 for (int i=0; i<len; i++) { | |
19
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
878 if (count == (PENDING_LIMIT-1)) error(NULL); |
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
879 if (st >= end_state) error("finite state machine impossible state"); |
6 | 880 u_char c = buf[i]; |
881 pending[count++] = c; | |
882 st = parse_table[c][st]; | |
883 switch (st) { | |
884 | |
885 ////////////////////////////// | |
16 | 886 // host name recognizer |
887 case h_end: { | |
18 | 888 pending[--count] = '\0'; // null terminate host name by overwriting the terminator |
16 | 889 char *tld; |
890 for (int i=0; (tld = tlds[i]); i++) { | |
891 int n = strlen(tld); | |
892 if (count > n) { | |
893 if (strncasecmp((const char *)(pending+count-n), tld, n) == 0) { | |
894 register_string(*hosts, (char*)pending); | |
17 | 895 break; |
16 | 896 } |
897 } | |
898 } | |
19
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
899 st = h_init; |
16 | 900 } // fall thru |
901 | |
902 case h_init: { | |
18 | 903 count = 0; |
16 | 904 } break; |
905 | |
906 ////////////////////////////// | |
18 | 907 // html tag discarder |
908 case t_end: { | |
16 | 909 st = t_init; |
18 | 910 } // fall thru |
16 | 911 |
912 case t_disc: { | |
18 | 913 count = 0; // discard all characters |
16 | 914 } break; |
915 | |
916 case t_init: { | |
917 pusher(); | |
918 } break; | |
919 | |
920 ////////////////////////////// | |
7 | 921 // url recognizer |
922 case u_sla: { | |
19
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
923 if ((count < 6) || (8 < count)) { // allow http:// or https:// |
7 | 924 count = 0; |
925 st = u_init; | |
926 } | |
927 } break; | |
928 | |
929 case u_reco: { | |
19
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
930 if (count > 13) { // need some minimal length host name after the protocol |
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
931 pending[--count] = '\0'; // null terminate host name by overwriting the terminator |
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
932 char *p = NULL; |
9 | 933 if (strncasecmp((const char *)pending, "http://", 7) == 0) { |
19
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
934 p = (char *)pending + 7; |
9 | 935 } |
19
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
936 if (strncasecmp((const char *)pending, "https://", 8) == 0) { |
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
937 p = (char *)pending + 8; |
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
938 } |
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
939 if (p && strchr(p, '.')) register_string(*hosts, p); // require at least one . in a dns name |
8 | 940 } |
19
b8f5fa3dd5b8
fix problems in the state transitions causing impossible states
carl
parents:
18
diff
changeset
|
941 st = u_init; |
16 | 942 } // fall thru |
7 | 943 |
944 case u_init: { | |
945 count = 0; // discard all characters | |
946 } break; | |
947 | |
948 | |
949 ////////////////////////////// | |
6 | 950 // html entity decoder |
951 case e_semi: { | |
952 pending[--count] = '\0'; // null terminate the digit string by overwriting the semicolon | |
953 pending[0] = atoi((const char *)pending+2); | |
954 count = 1; | |
955 st = e_init; | |
956 } // fall thru | |
957 | |
958 case e_init: { | |
16 | 959 pusher(); |
960 } break; | |
961 | |
962 ////////////////////////////// | |
963 // mime decoder | |
964 case m_2: { | |
965 pending[0] = hex_decode[pending[1]] * 16 + hex_decode[pending[2]]; | |
966 count = 1; | |
967 st = m_init; | |
968 } // fall thru | |
969 | |
970 case m_init: { | |
971 pusher(); | |
972 } break; | |
973 | |
974 case m_cr: { | |
975 count = 1; | |
976 st = m_eq; | |
977 } break; | |
978 | |
979 case m_nl: { | |
6 | 980 count = 0; |
16 | 981 st = m_init; |
6 | 982 } break; |
983 | |
984 ////////////////////////////// | |
985 // base64 decoder | |
986 case b_lf2: { | |
987 count--; | |
988 } break; | |
989 | |
990 case b_cr: { | |
991 int cnt = 0; | |
992 if ((count % 4) == 1) { | |
993 count--; | |
994 // might have proper b64 data | |
995 for (int i=0; i<count; i+=4) { | |
996 unsigned long a1 = b64_decode[pending[i]]; | |
997 unsigned long a2 = b64_decode[pending[i+1]]; | |
998 unsigned long a3 = b64_decode[pending[i+2]]; | |
999 unsigned long a4 = b64_decode[pending[i+3]]; | |
1000 unsigned long a = (a1 << 18) | (a2 << 12) | (a3 << 6) | a4; | |
1001 pending[cnt++] = (a & 0x00ff0000) >> 16; | |
1002 pending[cnt++] = (a & 0x0000ff00) >> 8; | |
1003 pending[cnt++] = (a & 0x000000ff); | |
1004 if ((char)pending[i+3] == '=') cnt--; | |
1005 if ((char)pending[i+2] == '=') cnt--; | |
1006 } | |
1007 count = cnt; | |
1008 st = b_lf2; | |
1009 } | |
1010 else st = b_init; | |
1011 } // fall thru | |
1012 | |
1013 case b_lf: | |
1014 case b_init: { | |
16 | 1015 pusher(); |
6 | 1016 } break; |
1017 | |
1018 ////////////////////////////// | |
1019 // states that just accumulate characters in the pending buffer | |
16 | 1020 case h_host: |
7 | 1021 case u_http: |
1022 case u_url: | |
6 | 1023 case e_amp: |
1024 case e_num: | |
1025 case b_64: | |
1026 case m_eq: | |
1027 case m_1: | |
1028 default: { | |
1029 } break; | |
1030 } | |
1031 } | |
1032 } | |
1033 | |
8 | 1034 struct url_scanner { |
16 | 1035 fsa *host_parser; |
1036 fsa *tags_parser; | |
8 | 1037 fsa *urls_parser; |
1038 fsa *html_parser; | |
1039 fsa *mime_parser; | |
1040 fsa *b64_parser; | |
6 | 1041 |
12 | 1042 url_scanner(string_set *hosts); |
8 | 1043 ~url_scanner(); |
1044 void scan(u_char *buffer, size_t length); | |
1045 }; | |
1046 | |
12 | 1047 url_scanner::url_scanner(string_set *hosts) { |
16 | 1048 host_parser = new fsa(h_init, NULL, NULL, hosts); |
1049 tags_parser = new fsa(t_init, host_parser, NULL, NULL); | |
1050 urls_parser = new fsa(u_init, NULL, NULL, hosts); | |
1051 html_parser = new fsa(e_init, urls_parser, tags_parser, NULL); | |
1052 mime_parser = new fsa(m_init, html_parser, NULL, NULL); | |
1053 b64_parser = new fsa(b_init, mime_parser, NULL, NULL); | |
6 | 1054 } |
1055 | |
8 | 1056 url_scanner::~url_scanner() { |
16 | 1057 delete host_parser; |
1058 delete tags_parser; | |
8 | 1059 delete urls_parser; |
1060 delete html_parser; | |
1061 delete mime_parser; | |
1062 delete b64_parser; | |
6 | 1063 } |
1064 | |
8 | 1065 void url_scanner::scan(u_char *buffer, size_t length) { |
1066 b64_parser->push(buffer, length); | |
6 | 1067 } |
1068 |