// line 1 "HttpRequestParser.rl" /* Copyright (c) 2006, Sriram Srinivasan * * You may distribute this software under the terms of the license * specified in the file "License" */ package kilim.http; /** * --- DO NOT EDIT ----- * HttpRequestParser.java generated from RAGEL (http://www.complang.org/ragel/) from the * specification file HttpRequestParser.rl. All changes must be made in the .rl file. **/ import java.util.TimeZone; import java.util.GregorianCalendar; import java.nio.charset.Charset; import java.nio.ByteBuffer; import java.io.UnsupportedEncodingException; import java.io.IOException; import java.net.URLDecoder; public class HttpRequestParser { public static final Charset UTF8 = Charset.forName("UTF-8"); // line 135 "HttpRequestParser.rl" // line 34 "HttpRequestParser.java" private static byte[] init__http_parser_actions_0() { return new byte [] { 0, 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, 1, 11, 1, 12, 1, 13, 2, 0, 3, 2, 0, 6, 2, 1, 5 }; } private static final byte _http_parser_actions[] = init__http_parser_actions_0(); private static short[] init__http_parser_key_offsets_0() { return new short [] { 0, 0, 10, 12, 14, 16, 18, 20, 21, 31, 41, 50, 52, 53, 54, 55, 56, 58, 61, 63, 66, 67, 69, 70, 72, 73, 75, 84, 93, 99, 105, 111, 117, 121, 125, 135, 141, 147, 156, 165, 171, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 203, 205, 207, 209 }; } private static final short _http_parser_key_offsets[] = init__http_parser_key_offsets_0(); private static char[] init__http_parser_trans_keys_0() { return new char [] { 68, 71, 72, 79, 80, 100, 103, 104, 111, 112, 69, 101, 76, 108, 69, 101, 84, 116, 69, 101, 32, 32, 43, 47, 58, 45, 57, 65, 90, 97, 122, 43, 58, 45, 46, 48, 57, 65, 90, 97, 122, 32, 34, 35, 37, 60, 62, 127, 0, 31, 32, 72, 84, 84, 80, 47, 48, 57, 46, 48, 57, 48, 57, 13, 48, 57, 10, 13, 58, 58, 13, 32, 13, 10, 58, 32, 37, 60, 62, 127, 0, 31, 34, 35, 32, 37, 60, 62, 127, 0, 31, 34, 35, 48, 57, 65, 70, 97, 102, 48, 57, 65, 70, 97, 102, 48, 57, 65, 70, 97, 102, 48, 57, 65, 70, 97, 102, 32, 35, 59, 63, 32, 35, 59, 63, 32, 34, 35, 37, 60, 62, 63, 127, 0, 31, 48, 57, 65, 70, 97, 102, 48, 57, 65, 70, 97, 102, 32, 34, 35, 37, 60, 62, 127, 0, 31, 32, 34, 35, 37, 60, 62, 127, 0, 31, 48, 57, 65, 70, 97, 102, 48, 57, 65, 70, 97, 102, 69, 101, 84, 116, 69, 101, 65, 97, 68, 100, 80, 112, 84, 116, 73, 105, 79, 111, 78, 110, 83, 115, 79, 85, 111, 117, 83, 115, 84, 116, 84, 116, 58, 0 }; } private static final char _http_parser_trans_keys[] = init__http_parser_trans_keys_0(); private static byte[] init__http_parser_single_lengths_0() { return new byte [] { 0, 10, 2, 2, 2, 2, 2, 1, 4, 2, 7, 2, 1, 1, 1, 1, 0, 1, 0, 1, 1, 2, 1, 2, 1, 2, 5, 5, 0, 0, 0, 0, 4, 4, 8, 0, 0, 7, 7, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 1 }; } private static final byte _http_parser_single_lengths[] = init__http_parser_single_lengths_0(); private static byte[] init__http_parser_range_lengths_0() { return new byte [] { 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 3, 3, 3, 3, 0, 0, 1, 3, 3, 1, 1, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; } private static final byte _http_parser_range_lengths[] = init__http_parser_range_lengths_0(); private static short[] init__http_parser_index_offsets_0() { return new short [] { 0, 0, 11, 14, 17, 20, 23, 26, 28, 36, 43, 52, 55, 57, 59, 61, 63, 65, 68, 70, 73, 75, 78, 80, 83, 85, 88, 96, 104, 108, 112, 116, 120, 125, 130, 140, 144, 148, 157, 166, 170, 174, 177, 180, 183, 186, 189, 192, 195, 198, 201, 204, 207, 212, 215, 218, 221 }; } private static final short _http_parser_index_offsets[] = init__http_parser_index_offsets_0(); private static byte[] init__http_parser_indicies_0() { return new byte [] { 0, 2, 3, 4, 5, 0, 2, 3, 4, 5, 1, 6, 6, 1, 7, 7, 1, 8, 8, 1, 9, 9, 1, 10, 10, 1, 11, 1, 11, 12, 13, 14, 12, 12, 12, 1, 15, 16, 15, 15, 15, 15, 1, 17, 1, 18, 19, 1, 1, 1, 1, 16, 17, 20, 1, 21, 1, 22, 1, 23, 1, 24, 1, 25, 1, 26, 27, 1, 28, 1, 29, 28, 1, 30, 1, 32, 1, 31, 34, 33, 36, 37, 35, 39, 38, 40, 34, 33, 41, 43, 1, 1, 1, 1, 1, 42, 44, 46, 1, 1, 1, 1, 1, 45, 47, 47, 47, 1, 45, 45, 45, 1, 48, 48, 48, 1, 16, 16, 16, 1, 17, 18, 50, 51, 49, 52, 53, 54, 55, 49, 17, 1, 18, 56, 1, 1, 51, 1, 1, 50, 57, 57, 57, 1, 50, 50, 50, 1, 58, 1, 60, 61, 1, 1, 1, 1, 59, 62, 1, 64, 65, 1, 1, 1, 1, 63, 66, 66, 66, 1, 63, 63, 63, 1, 67, 67, 1, 68, 68, 1, 69, 69, 1, 70, 70, 1, 71, 71, 1, 72, 72, 1, 73, 73, 1, 74, 74, 1, 75, 75, 1, 76, 76, 1, 77, 77, 1, 78, 79, 78, 79, 1, 80, 80, 1, 81, 81, 1, 82, 82, 1, 34, 33, 0 }; } private static final byte _http_parser_indicies[] = init__http_parser_indicies_0(); private static byte[] init__http_parser_trans_targs_0() { return new byte [] { 2, 0, 41, 43, 46, 52, 3, 4, 5, 6, 7, 8, 9, 32, 10, 9, 10, 11, 26, 30, 12, 13, 14, 15, 16, 17, 18, 17, 19, 20, 21, 22, 25, 22, 23, 24, 20, 23, 24, 20, 56, 11, 27, 28, 11, 27, 28, 29, 31, 33, 34, 37, 11, 26, 34, 37, 35, 36, 11, 38, 26, 39, 11, 38, 26, 39, 40, 42, 7, 44, 45, 7, 47, 48, 49, 50, 51, 7, 53, 55, 54, 7, 7 }; } private static final byte _http_parser_trans_targs[] = init__http_parser_trans_targs_0(); private static byte[] init__http_parser_trans_actions_0() { return new byte [] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 15, 0, 1, 1, 0, 5, 1, 29, 1, 0, 7, 0, 32, 1, 1, 13, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 35, 3, 35, 3, 11, 0, 11, 0, 0, 0, 17, 0, 0, 23, 0, 0, 0, 0, 0, 27, 0, 0, 0, 19, 25 }; } private static final byte _http_parser_trans_actions[] = init__http_parser_trans_actions_0(); static final int http_parser_start = 1; static final int http_parser_first_final = 56; static final int http_parser_error = 0; static final int http_parser_en_main = 1; // line 138 "HttpRequestParser.rl" public static void err(String msg) throws IOException{ throw new IOException(msg); } public static void initHeader(HttpRequest req, int headerLength) throws IOException { ByteBuffer bb = req.buffer; /* required variables */ byte[] data = bb.array(); int p = 0; int pe = headerLength; // int eof = pe; int cs = 0; // variables used by actions in http_req_parser machine above. int query_start = 0; int mark = 0; String field_name = ""; // line 219 "HttpRequestParser.java" { cs = http_parser_start; } // line 158 "HttpRequestParser.rl" // line 226 "HttpRequestParser.java" { int _klen; int _trans = 0; int _acts; int _nacts; int _keys; int _goto_targ = 0; _goto: while (true) { switch ( _goto_targ ) { case 0: if ( p == pe ) { _goto_targ = 4; continue _goto; } if ( cs == 0 ) { _goto_targ = 5; continue _goto; } case 1: _match: do { _keys = _http_parser_key_offsets[cs]; _trans = _http_parser_index_offsets[cs]; _klen = _http_parser_single_lengths[cs]; if ( _klen > 0 ) { int _lower = _keys; int _mid; int _upper = _keys + _klen - 1; while (true) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( data[p] < _http_parser_trans_keys[_mid] ) _upper = _mid - 1; else if ( data[p] > _http_parser_trans_keys[_mid] ) _lower = _mid + 1; else { _trans += (_mid - _keys); break _match; } } _keys += _klen; _trans += _klen; } _klen = _http_parser_range_lengths[cs]; if ( _klen > 0 ) { int _lower = _keys; int _mid; int _upper = _keys + (_klen<<1) - 2; while (true) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( data[p] < _http_parser_trans_keys[_mid] ) _upper = _mid - 2; else if ( data[p] > _http_parser_trans_keys[_mid+1] ) _lower = _mid + 2; else { _trans += ((_mid - _keys)>>1); break _match; } } _trans += _klen; } } while (false); _trans = _http_parser_indicies[_trans]; cs = _http_parser_trans_targs[_trans]; if ( _http_parser_trans_actions[_trans] != 0 ) { _acts = _http_parser_trans_actions[_trans]; _nacts = (int) _http_parser_actions[_acts++]; while ( _nacts-- > 0 ) { switch ( _http_parser_actions[_acts++] ) { case 0: // line 31 "HttpRequestParser.rl" {mark = p; } break; case 1: // line 33 "HttpRequestParser.rl" {query_start = p; } break; case 2: // line 35 "HttpRequestParser.rl" { field_name = kw_lookup(data, mark, p); if (field_name == null) {// not a known keyword field_name = req.extractRange(mark, p); } } break; case 3: // line 42 "HttpRequestParser.rl" { int value = encodeRange(mark, p); req.addField(field_name, value); } break; case 4: // line 47 "HttpRequestParser.rl" { req.uriPath = req.extractRange(mark, p); String s = req.uriPath; int len = s.length(); boolean need_decode; // Scan the string to see if the string requires any conversion. for (int i = 0; i < len; i++) { char c = s.charAt(i); if (c == '%' || c > 0x7F) { try { // TODO: Correct this. URLDecoder is broken for path (upto // JDK1.6): it converts'+' to ' ', which should // be done only for the query part of the url. req.uriPath = URLDecoder.decode(req.uriPath, "UTF-8"); break; } catch (UnsupportedEncodingException ignore){} } } } break; case 5: // line 72 "HttpRequestParser.rl" { req.queryStringRange = encodeRange(query_start, p); } break; case 6: // line 76 "HttpRequestParser.rl" { req.uriFragmentRange = encodeRange(mark, p); } break; case 7: // line 80 "HttpRequestParser.rl" { req.versionRange = encodeRange(mark, p); } break; case 8: // line 119 "HttpRequestParser.rl" {req.method = "GET";} break; case 9: // line 120 "HttpRequestParser.rl" {req.method = "POST";} break; case 10: // line 121 "HttpRequestParser.rl" {req.method = "DELETE";} break; case 11: // line 122 "HttpRequestParser.rl" {req.method = "HEAD";} break; case 12: // line 123 "HttpRequestParser.rl" {req.method = "PUT";} break; case 13: // line 124 "HttpRequestParser.rl" {req.method = "OPTIONS";} break; // line 394 "HttpRequestParser.java" } } } case 2: if ( cs == 0 ) { _goto_targ = 5; continue _goto; } if ( ++p != pe ) { _goto_targ = 1; continue _goto; } case 4: case 5: } break; } } // line 159 "HttpRequestParser.rl" if (cs == http_parser_error) { throw new IOException("Malformed HTTP Header. p = " + p +", cs = " + cs); } } /** * encode the start pos and length as ints; */ public static int encodeRange(int start, int end) { return (start << 16) + end ; } // line 429 "HttpRequestParser.java" private static byte[] init__http_keywords_actions_0() { return new byte [] { 0, 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, 1, 11, 1, 12, 1, 13, 1, 14, 1, 15, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 1, 24, 1, 25, 1, 26, 1, 27, 1, 28, 1, 29, 1, 30, 1, 31, 1, 32, 1, 33, 1, 34, 1, 35, 1, 36, 1, 37, 1, 38, 1, 39, 1, 40, 1, 41, 1, 42, 1, 43, 1, 44, 1, 45, 1, 46, 1, 47, 1, 48, 1, 49, 1, 50 }; } private static final byte _http_keywords_actions[] = init__http_keywords_actions_0(); private static short[] init__http_keywords_key_offsets_0() { return new short [] { 0, 0, 8, 10, 12, 14, 16, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 108, 110, 112, 114, 115, 117, 119, 121, 123, 125, 127, 129, 131, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 154, 164, 166, 168, 170, 172, 174, 176, 178, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 243, 245, 247, 249, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 278, 286, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 309, 311, 313, 315, 317, 319, 321, 323, 325, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 363, 365, 367, 369, 371, 373, 377, 379, 381, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 415, 417, 419, 421, 423, 425, 427, 429, 431, 433, 437, 439, 441, 443, 445, 447, 448, 450, 452, 454, 456, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 494, 496, 498, 500, 504, 506, 508, 510, 512, 514, 516, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, 541, 543, 547, 549, 551, 553, 555, 557, 559, 561, 562, 564, 566, 568, 570, 572, 574, 576, 578, 582, 584, 586, 588, 590, 592, 594, 596, 597, 599, 601, 603, 605, 607, 611, 613, 615, 617, 621, 623, 625, 627, 629, 631, 633, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 690 }; } private static final short _http_keywords_key_offsets[] = init__http_keywords_key_offsets_0(); private static char[] init__http_keywords_trans_keys_0() { return new char [] { 67, 71, 76, 85, 99, 103, 108, 117, 67, 99, 69, 101, 80, 112, 84, 116, 67, 69, 76, 82, 99, 101, 108, 114, 72, 104, 65, 97, 82, 114, 83, 115, 69, 101, 84, 116, 78, 110, 67, 99, 79, 111, 68, 100, 73, 105, 78, 110, 71, 103, 65, 97, 78, 110, 71, 103, 85, 117, 65, 97, 71, 103, 69, 101, 65, 97, 78, 110, 71, 103, 69, 101, 83, 115, 69, 101, 76, 108, 79, 111, 87, 119, 84, 116, 72, 104, 79, 111, 82, 114, 73, 105, 90, 122, 65, 97, 84, 116, 73, 105, 79, 111, 78, 110, 65, 79, 97, 111, 67, 99, 72, 104, 69, 101, 45, 67, 99, 79, 111, 78, 110, 84, 116, 82, 114, 79, 111, 76, 108, 78, 110, 78, 84, 110, 116, 69, 101, 67, 99, 84, 116, 73, 105, 79, 111, 78, 110, 69, 101, 78, 110, 84, 116, 45, 69, 76, 77, 82, 84, 101, 108, 109, 114, 116, 78, 110, 67, 99, 79, 111, 68, 100, 73, 105, 78, 110, 71, 103, 65, 69, 79, 97, 101, 111, 78, 110, 71, 103, 85, 117, 65, 97, 71, 103, 69, 101, 78, 110, 71, 103, 84, 116, 72, 104, 67, 99, 65, 97, 84, 116, 73, 105, 79, 111, 78, 110, 68, 100, 53, 65, 97, 78, 110, 71, 103, 69, 101, 89, 121, 80, 112, 69, 101, 65, 97, 84, 116, 69, 101, 84, 88, 116, 120, 65, 97, 71, 103, 80, 112, 69, 73, 101, 105, 67, 99, 84, 116, 82, 114, 69, 101, 83, 115, 82, 114, 79, 111, 77, 109, 79, 111, 83, 115, 84, 116, 70, 102, 45, 77, 78, 82, 85, 109, 110, 114, 117, 65, 79, 97, 111, 84, 116, 67, 99, 72, 104, 68, 100, 73, 105, 70, 102, 73, 105, 69, 101, 68, 100, 45, 83, 115, 73, 105, 78, 110, 67, 99, 69, 101, 79, 111, 78, 110, 69, 101, 45, 77, 109, 65, 97, 84, 116, 67, 99, 72, 104, 65, 97, 78, 110, 71, 103, 69, 101, 78, 110, 77, 109, 79, 111, 68, 100, 73, 105, 70, 102, 73, 105, 69, 101, 68, 100, 45, 83, 115, 73, 105, 78, 110, 67, 99, 69, 101, 65, 79, 97, 111, 83, 115, 84, 116, 45, 77, 109, 79, 111, 68, 100, 73, 105, 70, 102, 73, 105, 69, 101, 68, 100, 67, 99, 65, 97, 84, 116, 73, 105, 79, 111, 78, 110, 65, 97, 88, 120, 45, 70, 102, 79, 111, 82, 114, 87, 119, 65, 97, 82, 114, 68, 100, 83, 115, 82, 114, 65, 79, 97, 111, 71, 103, 77, 109, 65, 97, 88, 120, 89, 121, 45, 65, 97, 85, 117, 84, 116, 72, 104, 69, 79, 101, 111, 78, 110, 84, 116, 73, 105, 67, 99, 65, 97, 84, 116, 69, 101, 82, 114, 73, 105, 90, 122, 65, 97, 84, 116, 73, 105, 79, 111, 78, 110, 65, 69, 97, 101, 78, 110, 71, 103, 69, 101, 70, 84, 102, 116, 69, 101, 82, 114, 69, 101, 82, 114, 82, 114, 89, 121, 45, 65, 97, 70, 102, 84, 116, 69, 101, 82, 114, 69, 101, 82, 114, 86, 118, 69, 101, 82, 114, 69, 82, 101, 114, 65, 97, 73, 78, 105, 110, 76, 108, 69, 101, 82, 114, 83, 115, 70, 102, 69, 101, 82, 114, 45, 69, 101, 78, 110, 67, 99, 79, 111, 68, 100, 73, 105, 78, 110, 71, 103, 80, 83, 112, 115, 71, 103, 82, 114, 65, 97, 68, 100, 69, 101, 69, 101, 82, 114, 45, 65, 97, 71, 103, 69, 101, 78, 110, 84, 116, 65, 73, 97, 105, 82, 114, 89, 121, 65, 97, 65, 87, 97, 119, 82, 114, 78, 110, 73, 105, 78, 110, 71, 103, 87, 119, 45, 65, 97, 85, 117, 84, 116, 72, 104, 69, 101, 78, 110, 84, 116, 73, 105, 67, 99, 65, 97, 84, 116, 69, 101, 65, 67, 68, 69, 70, 72, 73, 76, 77, 80, 82, 83, 84, 85, 86, 87, 97, 99, 100, 101, 102, 104, 105, 108, 109, 112, 114, 115, 116, 117, 118, 119, 45, 0 }; } private static final char _http_keywords_trans_keys[] = init__http_keywords_trans_keys_0(); private static byte[] init__http_keywords_single_lengths_0() { return new byte [] { 0, 8, 2, 2, 2, 2, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 10, 2, 2, 2, 2, 2, 2, 2, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 8, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 4, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 4, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 4, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 32, 1 }; } private static final byte _http_keywords_single_lengths[] = init__http_keywords_single_lengths_0(); private static byte[] init__http_keywords_range_lengths_0() { return new byte [] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; } private static final byte _http_keywords_range_lengths[] = init__http_keywords_range_lengths_0(); private static short[] init__http_keywords_index_offsets_0() { return new short [] { 0, 0, 9, 12, 15, 18, 21, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99, 102, 105, 108, 111, 114, 117, 120, 123, 126, 129, 132, 135, 138, 141, 144, 147, 150, 155, 158, 161, 164, 166, 169, 172, 175, 178, 181, 184, 187, 190, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 224, 235, 238, 241, 244, 247, 250, 253, 256, 263, 266, 269, 272, 275, 278, 281, 284, 287, 290, 293, 296, 299, 302, 305, 308, 311, 314, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 351, 354, 357, 360, 365, 368, 371, 374, 377, 380, 383, 386, 389, 392, 395, 398, 401, 403, 412, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 446, 449, 452, 455, 458, 461, 464, 467, 470, 472, 475, 478, 481, 484, 487, 490, 493, 496, 499, 502, 505, 508, 511, 514, 517, 520, 523, 526, 528, 531, 534, 537, 540, 543, 548, 551, 554, 556, 559, 562, 565, 568, 571, 574, 577, 580, 583, 586, 589, 592, 595, 598, 601, 604, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 638, 641, 644, 647, 650, 653, 655, 658, 661, 664, 667, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699, 702, 705, 708, 711, 714, 717, 722, 725, 728, 731, 736, 739, 742, 745, 748, 751, 754, 756, 759, 762, 765, 768, 771, 774, 777, 780, 783, 786, 791, 794, 799, 802, 805, 808, 811, 814, 817, 820, 822, 825, 828, 831, 834, 837, 840, 843, 846, 851, 854, 857, 860, 863, 866, 869, 872, 874, 877, 880, 883, 886, 889, 894, 897, 900, 903, 908, 911, 914, 917, 920, 923, 926, 928, 931, 934, 937, 940, 943, 946, 949, 952, 955, 958, 961, 964, 997 }; } private static final short _http_keywords_index_offsets[] = init__http_keywords_index_offsets_0(); private static short[] init__http_keywords_trans_targs_0() { return new short [] { 2, 32, 33, 36, 2, 32, 33, 36, 0, 3, 3, 0, 4, 4, 0, 5, 5, 0, 308, 308, 0, 7, 13, 20, 27, 7, 13, 20, 27, 307, 8, 8, 307, 9, 9, 307, 10, 10, 307, 11, 11, 307, 12, 12, 307, 307, 307, 307, 14, 14, 307, 15, 15, 307, 16, 16, 307, 17, 17, 307, 18, 18, 307, 19, 19, 307, 307, 307, 307, 21, 21, 307, 22, 22, 307, 23, 23, 307, 24, 24, 307, 25, 25, 307, 26, 26, 307, 307, 307, 307, 28, 28, 307, 29, 29, 307, 30, 30, 307, 31, 31, 307, 307, 307, 307, 307, 307, 0, 34, 34, 0, 35, 35, 0, 307, 307, 0, 37, 37, 0, 38, 38, 0, 39, 39, 0, 40, 40, 0, 41, 41, 0, 42, 42, 0, 43, 43, 0, 44, 44, 0, 45, 45, 0, 46, 46, 0, 307, 307, 0, 48, 59, 48, 59, 0, 49, 49, 0, 50, 50, 0, 51, 51, 0, 52, 0, 53, 53, 0, 54, 54, 0, 55, 55, 0, 56, 56, 0, 57, 57, 0, 58, 58, 0, 307, 307, 0, 60, 60, 0, 61, 67, 61, 67, 0, 62, 62, 0, 63, 63, 0, 64, 64, 0, 65, 65, 0, 66, 66, 0, 307, 307, 0, 68, 68, 0, 69, 69, 0, 70, 70, 0, 71, 0, 72, 79, 96, 98, 102, 72, 79, 96, 98, 102, 0, 73, 73, 0, 74, 74, 0, 75, 75, 0, 76, 76, 0, 77, 77, 0, 78, 78, 0, 307, 307, 0, 80, 86, 90, 80, 86, 90, 0, 81, 81, 0, 82, 82, 0, 83, 83, 0, 84, 84, 0, 85, 85, 0, 307, 307, 0, 87, 87, 0, 88, 88, 0, 89, 89, 0, 307, 307, 0, 91, 91, 0, 92, 92, 0, 93, 93, 0, 94, 94, 0, 95, 95, 0, 307, 307, 0, 97, 97, 0, 307, 0, 99, 99, 0, 100, 100, 0, 101, 101, 0, 307, 307, 0, 103, 103, 0, 104, 104, 0, 307, 307, 0, 106, 106, 0, 107, 107, 0, 307, 307, 0, 109, 111, 109, 111, 0, 110, 110, 0, 307, 307, 0, 112, 112, 0, 113, 115, 113, 115, 0, 114, 114, 0, 307, 307, 0, 116, 116, 0, 117, 117, 0, 307, 307, 0, 119, 119, 0, 120, 120, 0, 307, 307, 0, 122, 122, 0, 123, 123, 0, 307, 307, 0, 125, 125, 0, 126, 0, 127, 143, 152, 156, 127, 143, 152, 156, 0, 128, 131, 128, 131, 0, 129, 129, 0, 130, 130, 0, 307, 307, 0, 132, 132, 0, 133, 133, 0, 134, 134, 0, 135, 135, 0, 136, 136, 0, 137, 137, 0, 138, 0, 139, 139, 0, 140, 140, 0, 141, 141, 0, 142, 142, 0, 307, 307, 0, 144, 144, 0, 145, 145, 0, 146, 146, 0, 147, 0, 148, 148, 0, 149, 149, 0, 150, 150, 0, 151, 151, 0, 307, 307, 0, 153, 153, 0, 154, 154, 0, 155, 155, 0, 307, 307, 0, 157, 157, 0, 158, 158, 0, 159, 159, 0, 160, 160, 0, 161, 161, 0, 162, 162, 0, 163, 163, 0, 164, 164, 0, 165, 165, 0, 166, 0, 167, 167, 0, 168, 168, 0, 169, 169, 0, 170, 170, 0, 307, 307, 0, 172, 183, 172, 183, 0, 173, 173, 0, 174, 174, 0, 175, 0, 176, 176, 0, 177, 177, 0, 178, 178, 0, 179, 179, 0, 180, 180, 0, 181, 181, 0, 182, 182, 0, 307, 307, 0, 184, 184, 0, 185, 185, 0, 186, 186, 0, 187, 187, 0, 188, 188, 0, 307, 307, 0, 190, 190, 0, 191, 191, 0, 192, 0, 193, 193, 0, 194, 194, 0, 195, 195, 0, 196, 196, 0, 197, 197, 0, 198, 198, 0, 199, 199, 0, 307, 307, 0, 201, 201, 0, 202, 205, 202, 205, 0, 203, 203, 0, 204, 204, 0, 307, 307, 0, 206, 206, 0, 207, 207, 0, 208, 0, 209, 209, 0, 210, 210, 0, 211, 211, 0, 212, 212, 0, 213, 220, 213, 220, 0, 214, 214, 0, 215, 215, 0, 216, 216, 0, 217, 217, 0, 218, 218, 0, 219, 219, 0, 307, 307, 0, 221, 221, 0, 222, 222, 0, 223, 223, 0, 224, 224, 0, 225, 225, 0, 226, 226, 0, 227, 227, 0, 307, 307, 0, 229, 232, 229, 232, 0, 230, 230, 0, 231, 231, 0, 307, 307, 0, 233, 237, 233, 237, 0, 234, 234, 0, 235, 235, 0, 236, 236, 0, 307, 307, 0, 238, 238, 0, 239, 239, 0, 240, 0, 241, 241, 0, 242, 242, 0, 243, 243, 0, 244, 244, 0, 307, 307, 0, 246, 246, 0, 247, 247, 0, 248, 248, 0, 249, 249, 0, 307, 307, 0, 307, 251, 307, 251, 0, 252, 252, 0, 253, 256, 253, 256, 0, 254, 254, 0, 255, 255, 0, 307, 307, 0, 257, 257, 0, 258, 258, 0, 259, 259, 0, 260, 260, 0, 261, 0, 262, 262, 0, 263, 263, 0, 264, 264, 0, 265, 265, 0, 266, 266, 0, 267, 267, 0, 268, 268, 0, 307, 307, 0, 270, 275, 270, 275, 0, 271, 271, 0, 272, 272, 0, 273, 273, 0, 274, 274, 0, 307, 307, 0, 276, 276, 0, 277, 277, 0, 278, 0, 279, 279, 0, 280, 280, 0, 281, 281, 0, 282, 282, 0, 307, 307, 0, 284, 286, 284, 286, 0, 285, 285, 0, 307, 307, 0, 307, 307, 0, 288, 293, 288, 293, 0, 289, 289, 0, 290, 290, 0, 291, 291, 0, 292, 292, 0, 307, 307, 0, 294, 294, 0, 295, 0, 296, 296, 0, 297, 297, 0, 298, 298, 0, 299, 299, 0, 300, 300, 0, 301, 301, 0, 302, 302, 0, 303, 303, 0, 304, 304, 0, 305, 305, 0, 306, 306, 0, 307, 307, 0, 1, 47, 105, 108, 118, 121, 124, 171, 189, 200, 228, 245, 250, 269, 283, 287, 1, 47, 105, 108, 118, 121, 124, 171, 189, 200, 228, 245, 250, 269, 283, 287, 0, 6, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 0 }; } private static final short _http_keywords_trans_targs[] = init__http_keywords_trans_targs_0(); private static byte[] init__http_keywords_trans_actions_0() { return new byte [] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 101, 0, 0, 101, 0, 0, 101, 0, 0, 101, 0, 0, 101, 7, 7, 101, 0, 0, 101, 0, 0, 101, 0, 0, 101, 0, 0, 101, 0, 0, 101, 0, 0, 101, 9, 9, 101, 0, 0, 101, 0, 0, 101, 0, 0, 101, 0, 0, 101, 0, 0, 101, 0, 0, 101, 11, 11, 101, 0, 0, 101, 0, 0, 101, 0, 0, 101, 0, 0, 101, 13, 13, 101, 15, 15, 0, 0, 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 0, 0, 0, 0, 0, 0, 0, 37, 37, 0, 0, 0, 0, 0, 0, 0, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 49, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 0, 81, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 91, 0, 93, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 99, 0 }; } private static final byte _http_keywords_trans_actions[] = init__http_keywords_trans_actions_0(); private static byte[] init__http_keywords_to_state_actions_0() { return new byte [] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }; } private static final byte _http_keywords_to_state_actions[] = init__http_keywords_to_state_actions_0(); private static byte[] init__http_keywords_from_state_actions_0() { return new byte [] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0 }; } private static final byte _http_keywords_from_state_actions[] = init__http_keywords_from_state_actions_0(); private static short[] init__http_keywords_eof_trans_0() { return new short [] { 0, 0, 0, 0, 0, 0, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1026 }; } private static final short _http_keywords_eof_trans[] = init__http_keywords_eof_trans_0(); static final int http_keywords_start = 307; static final int http_keywords_first_final = 307; static final int http_keywords_error = 0; static final int http_keywords_en_main = 307; // line 226 "HttpRequestParser.rl" @SuppressWarnings("unused") public static String kw_lookup(byte[] data, int start, int len) { // String req = null; int ts, te, act; // int wb = 0; int p = start; int pe = start + len; int eof = pe; int cs; String kw = null; // line 972 "HttpRequestParser.java" { cs = http_keywords_start; ts = -1; te = -1; act = 0; } // line 240 "HttpRequestParser.rl" // line 982 "HttpRequestParser.java" { int _klen; int _trans = 0; int _acts; int _nacts; int _keys; int _goto_targ = 0; _goto: while (true) { switch ( _goto_targ ) { case 0: if ( p == pe ) { _goto_targ = 4; continue _goto; } if ( cs == 0 ) { _goto_targ = 5; continue _goto; } case 1: _acts = _http_keywords_from_state_actions[cs]; _nacts = (int) _http_keywords_actions[_acts++]; while ( _nacts-- > 0 ) { switch ( _http_keywords_actions[_acts++] ) { case 1: // line 1 "HttpRequestParser.rl" {ts = p;} break; // line 1011 "HttpRequestParser.java" } } _match: do { _keys = _http_keywords_key_offsets[cs]; _trans = _http_keywords_index_offsets[cs]; _klen = _http_keywords_single_lengths[cs]; if ( _klen > 0 ) { int _lower = _keys; int _mid; int _upper = _keys + _klen - 1; while (true) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( data[p] < _http_keywords_trans_keys[_mid] ) _upper = _mid - 1; else if ( data[p] > _http_keywords_trans_keys[_mid] ) _lower = _mid + 1; else { _trans += (_mid - _keys); break _match; } } _keys += _klen; _trans += _klen; } _klen = _http_keywords_range_lengths[cs]; if ( _klen > 0 ) { int _lower = _keys; int _mid; int _upper = _keys + (_klen<<1) - 2; while (true) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( data[p] < _http_keywords_trans_keys[_mid] ) _upper = _mid - 2; else if ( data[p] > _http_keywords_trans_keys[_mid+1] ) _lower = _mid + 2; else { _trans += ((_mid - _keys)>>1); break _match; } } _trans += _klen; } } while (false); case 3: cs = _http_keywords_trans_targs[_trans]; if ( _http_keywords_trans_actions[_trans] != 0 ) { _acts = _http_keywords_trans_actions[_trans]; _nacts = (int) _http_keywords_actions[_acts++]; while ( _nacts-- > 0 ) { switch ( _http_keywords_actions[_acts++] ) { case 2: // line 1 "HttpRequestParser.rl" {te = p+1;} break; case 3: // line 177 "HttpRequestParser.rl" {te = p+1;{ kw = "Accept-Charset";}} break; case 4: // line 178 "HttpRequestParser.rl" {te = p+1;{ kw = "Accept-Encoding";}} break; case 5: // line 179 "HttpRequestParser.rl" {te = p+1;{ kw = "Accept-Language";}} break; case 6: // line 180 "HttpRequestParser.rl" {te = p+1;{ kw = "Accept-Ranges";}} break; case 7: // line 181 "HttpRequestParser.rl" {te = p+1;{ kw = "Age";}} break; case 8: // line 182 "HttpRequestParser.rl" {te = p+1;{ kw = "Allow";}} break; case 9: // line 183 "HttpRequestParser.rl" {te = p+1;{ kw = "Authorization";}} break; case 10: // line 184 "HttpRequestParser.rl" {te = p+1;{ kw = "Cache-Control";}} break; case 11: // line 185 "HttpRequestParser.rl" {te = p+1;{ kw = "Connection";}} break; case 12: // line 186 "HttpRequestParser.rl" {te = p+1;{ kw = "Content-Encoding";}} break; case 13: // line 187 "HttpRequestParser.rl" {te = p+1;{ kw = "Content-Language";}} break; case 14: // line 188 "HttpRequestParser.rl" {te = p+1;{ kw = "Content-Length";}} break; case 15: // line 189 "HttpRequestParser.rl" {te = p+1;{ kw = "Content-Location";}} break; case 16: // line 190 "HttpRequestParser.rl" {te = p+1;{ kw = "Content-MD5";}} break; case 17: // line 191 "HttpRequestParser.rl" {te = p+1;{ kw = "Content-Range";}} break; case 18: // line 192 "HttpRequestParser.rl" {te = p+1;{ kw = "Content-Type";}} break; case 19: // line 193 "HttpRequestParser.rl" {te = p+1;{ kw = "Date";}} break; case 20: // line 194 "HttpRequestParser.rl" {te = p+1;{ kw = "ETag";}} break; case 21: // line 195 "HttpRequestParser.rl" {te = p+1;{ kw = "Expect";}} break; case 22: // line 196 "HttpRequestParser.rl" {te = p+1;{ kw = "Expires";}} break; case 23: // line 197 "HttpRequestParser.rl" {te = p+1;{ kw = "From";}} break; case 24: // line 198 "HttpRequestParser.rl" {te = p+1;{ kw = "Host";}} break; case 25: // line 199 "HttpRequestParser.rl" {te = p+1;{ kw = "If-Match";}} break; case 26: // line 200 "HttpRequestParser.rl" {te = p+1;{ kw = "If-Modified-Since";}} break; case 27: // line 201 "HttpRequestParser.rl" {te = p+1;{ kw = "If-None-Match";}} break; case 28: // line 202 "HttpRequestParser.rl" {te = p+1;{ kw = "If-Range";}} break; case 29: // line 203 "HttpRequestParser.rl" {te = p+1;{ kw = "If-Unmodified-Since";}} break; case 30: // line 204 "HttpRequestParser.rl" {te = p+1;{ kw = "Last-Modified";}} break; case 31: // line 205 "HttpRequestParser.rl" {te = p+1;{ kw = "Location";}} break; case 32: // line 206 "HttpRequestParser.rl" {te = p+1;{ kw = "Max-Forwards";}} break; case 33: // line 207 "HttpRequestParser.rl" {te = p+1;{ kw = "Pragma";}} break; case 34: // line 208 "HttpRequestParser.rl" {te = p+1;{ kw = "Proxy-Authenticate";}} break; case 35: // line 209 "HttpRequestParser.rl" {te = p+1;{ kw = "Proxy-Authorization";}} break; case 36: // line 210 "HttpRequestParser.rl" {te = p+1;{ kw = "Range";}} break; case 37: // line 211 "HttpRequestParser.rl" {te = p+1;{ kw = "Referer";}} break; case 38: // line 212 "HttpRequestParser.rl" {te = p+1;{ kw = "Retry-After";}} break; case 39: // line 213 "HttpRequestParser.rl" {te = p+1;{ kw = "Server";}} break; case 40: // line 214 "HttpRequestParser.rl" {te = p+1;{ kw = "TE";}} break; case 41: // line 215 "HttpRequestParser.rl" {te = p+1;{ kw = "Trailer";}} break; case 42: // line 216 "HttpRequestParser.rl" {te = p+1;{ kw = "Transfer-Encoding";}} break; case 43: // line 217 "HttpRequestParser.rl" {te = p+1;{ kw = "Upgrade";}} break; case 44: // line 218 "HttpRequestParser.rl" {te = p+1;{ kw = "User-Agent";}} break; case 45: // line 219 "HttpRequestParser.rl" {te = p+1;{ kw = "Vary";}} break; case 46: // line 220 "HttpRequestParser.rl" {te = p+1;{ kw = "Via";}} break; case 47: // line 221 "HttpRequestParser.rl" {te = p+1;{ kw = "Warning";}} break; case 48: // line 222 "HttpRequestParser.rl" {te = p+1;{ kw = "WWW-Authenticate";}} break; case 49: // line 176 "HttpRequestParser.rl" {te = p;p--;{ kw = "Accept";}} break; case 50: // line 176 "HttpRequestParser.rl" {{p = ((te))-1;}{ kw = "Accept";}} break; // line 1270 "HttpRequestParser.java" } } } case 2: _acts = _http_keywords_to_state_actions[cs]; _nacts = (int) _http_keywords_actions[_acts++]; while ( _nacts-- > 0 ) { switch ( _http_keywords_actions[_acts++] ) { case 0: // line 1 "HttpRequestParser.rl" {ts = -1;} break; // line 1284 "HttpRequestParser.java" } } if ( cs == 0 ) { _goto_targ = 5; continue _goto; } if ( ++p != pe ) { _goto_targ = 1; continue _goto; } case 4: if ( p == eof ) { if ( _http_keywords_eof_trans[cs] > 0 ) { _trans = _http_keywords_eof_trans[cs] - 1; _goto_targ = 3; continue _goto; } } case 5: } break; } } // line 241 "HttpRequestParser.rl" return kw; } // line 1317 "HttpRequestParser.java" private static byte[] init__http_date_actions_0() { return new byte [] { 0, 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, 1, 11, 1, 12, 1, 13, 1, 14, 1, 15, 1, 16 }; } private static final byte _http_date_actions[] = init__http_date_actions_0(); private static short[] init__http_date_key_offsets_0() { return new short [] { 0, 0, 5, 6, 7, 9, 18, 20, 21, 22, 25, 28, 31, 34, 36, 39, 41, 44, 47, 48, 49, 50, 51, 52, 54, 55, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 70, 74, 83, 85, 86, 87, 90, 93, 96, 99, 101, 104, 106, 109, 111, 112, 113, 114, 115, 116, 117, 118, 120, 121, 123, 124, 126, 127, 128, 129, 130, 131, 132, 140, 142, 143, 144, 146, 147, 148, 149, 150, 151, 153, 154, 156, 157, 159, 160, 161, 162, 163, 164, 165, 166, 167, 169, 170, 172, 173, 174, 175, 176, 178 }; } private static final short _http_date_key_offsets[] = init__http_date_key_offsets_0(); private static char[] init__http_date_trans_keys_0() { return new char [] { 70, 77, 83, 84, 87, 114, 105, 32, 44, 32, 65, 68, 70, 74, 77, 78, 79, 83, 112, 117, 114, 32, 32, 48, 57, 32, 48, 57, 32, 48, 57, 58, 48, 57, 48, 57, 58, 48, 57, 48, 57, 32, 48, 57, 32, 48, 57, 103, 101, 99, 101, 98, 97, 117, 110, 108, 110, 97, 114, 121, 111, 118, 99, 116, 101, 112, 32, 32, 48, 57, 32, 45, 48, 57, 32, 65, 68, 70, 74, 77, 78, 79, 83, 112, 117, 114, 32, 32, 48, 57, 32, 48, 57, 32, 48, 57, 58, 48, 57, 48, 57, 58, 48, 57, 48, 57, 32, 48, 57, 32, 71, 77, 84, 103, 101, 99, 101, 98, 97, 117, 110, 108, 110, 97, 114, 121, 111, 118, 99, 116, 101, 112, 65, 68, 70, 74, 77, 78, 79, 83, 112, 117, 114, 45, 48, 57, 103, 101, 99, 101, 98, 97, 117, 110, 108, 110, 97, 114, 121, 111, 118, 99, 116, 101, 112, 111, 110, 97, 117, 116, 104, 117, 117, 101, 101, 100, 48, 57, 0 }; } private static final char _http_date_trans_keys[] = init__http_date_trans_keys_0(); private static byte[] init__http_date_single_lengths_0() { return new byte [] { 0, 5, 1, 1, 2, 9, 2, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 9, 2, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 8, 2, 1, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 0, 0 }; } private static final byte _http_date_single_lengths[] = init__http_date_single_lengths_0(); private static byte[] init__http_date_range_lengths_0() { return new byte [] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }; } private static final byte _http_date_range_lengths[] = init__http_date_range_lengths_0(); private static short[] init__http_date_index_offsets_0() { return new short [] { 0, 0, 6, 8, 10, 13, 23, 26, 28, 30, 33, 36, 39, 42, 44, 47, 49, 52, 55, 57, 59, 61, 63, 65, 68, 70, 73, 75, 78, 80, 82, 84, 86, 88, 90, 92, 95, 99, 109, 112, 114, 116, 119, 122, 125, 128, 130, 133, 135, 138, 141, 143, 145, 147, 149, 151, 153, 155, 158, 160, 163, 165, 168, 170, 172, 174, 176, 178, 180, 189, 192, 194, 196, 198, 200, 202, 204, 206, 208, 211, 213, 216, 218, 221, 223, 225, 227, 229, 231, 233, 235, 237, 240, 242, 245, 247, 249, 251, 253, 255 }; } private static final short _http_date_index_offsets[] = init__http_date_index_offsets_0(); private static byte[] init__http_date_trans_targs_0() { return new byte [] { 2, 89, 91, 93, 96, 0, 3, 0, 4, 0, 5, 34, 0, 5, 6, 19, 21, 23, 26, 28, 30, 32, 0, 7, 18, 0, 8, 0, 9, 0, 9, 10, 0, 11, 10, 0, 11, 12, 0, 13, 12, 0, 14, 0, 15, 14, 0, 16, 0, 17, 16, 0, 17, 98, 0, 8, 0, 20, 0, 8, 0, 22, 0, 8, 0, 24, 25, 0, 8, 0, 8, 8, 0, 27, 0, 8, 8, 0, 29, 0, 8, 0, 31, 0, 8, 0, 33, 0, 8, 0, 35, 0, 35, 36, 0, 37, 68, 36, 0, 37, 38, 53, 55, 57, 60, 62, 64, 66, 0, 39, 52, 0, 40, 0, 41, 0, 41, 42, 0, 43, 42, 0, 43, 44, 0, 45, 44, 0, 46, 0, 47, 46, 0, 48, 0, 49, 48, 0, 49, 50, 0, 51, 0, 99, 0, 40, 0, 54, 0, 40, 0, 56, 0, 40, 0, 58, 59, 0, 40, 0, 40, 40, 0, 61, 0, 40, 40, 0, 63, 0, 40, 0, 65, 0, 40, 0, 67, 0, 40, 0, 69, 74, 76, 78, 81, 83, 85, 87, 0, 70, 73, 0, 71, 0, 72, 0, 42, 0, 71, 0, 75, 0, 71, 0, 77, 0, 71, 0, 79, 80, 0, 71, 0, 71, 71, 0, 82, 0, 71, 71, 0, 84, 0, 71, 0, 86, 0, 71, 0, 88, 0, 71, 0, 90, 0, 4, 0, 92, 90, 0, 4, 0, 94, 95, 0, 4, 0, 4, 0, 97, 0, 4, 0, 98, 0, 0, 0 }; } private static final byte _http_date_trans_targs[] = init__http_date_trans_targs_0(); private static byte[] init__http_date_trans_actions_0() { return new byte [] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 5, 0, 0, 5, 0, 7, 0, 0, 7, 0, 9, 0, 0, 9, 0, 0, 3, 0, 25, 0, 0, 0, 33, 0, 0, 0, 13, 0, 0, 0, 0, 11, 0, 23, 21, 0, 0, 0, 15, 19, 0, 0, 0, 31, 0, 0, 0, 29, 0, 0, 0, 27, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 5, 0, 0, 5, 0, 7, 0, 0, 7, 0, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 33, 0, 0, 0, 13, 0, 0, 0, 0, 11, 0, 23, 21, 0, 0, 0, 15, 19, 0, 0, 0, 31, 0, 0, 0, 29, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 3, 0, 25, 0, 0, 0, 33, 0, 0, 0, 13, 0, 0, 0, 0, 11, 0, 23, 21, 0, 0, 0, 15, 19, 0, 0, 0, 31, 0, 0, 0, 29, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0 }; } private static final byte _http_date_trans_actions[] = init__http_date_trans_actions_0(); static final int http_date_start = 1; static final int http_date_first_final = 98; static final int http_date_error = 0; static final int http_date_en_main = 1; // line 285 "HttpRequestParser.rl" public static TimeZone GMT = TimeZone.getTimeZone("GMT"); public static long parseDate(byte[] data, int pos, int len) { int p = 0; int pe = len; // int eof = pe; int cs; // int wkday = 0; int day = 0, month = 0, year = 0; int hh = 0, mm = 0, ss = 0; // line 1510 "HttpRequestParser.java" { cs = http_date_start; } // line 299 "HttpRequestParser.rl" // line 1517 "HttpRequestParser.java" { int _klen; int _trans = 0; int _acts; int _nacts; int _keys; int _goto_targ = 0; _goto: while (true) { switch ( _goto_targ ) { case 0: if ( p == pe ) { _goto_targ = 4; continue _goto; } if ( cs == 0 ) { _goto_targ = 5; continue _goto; } case 1: _match: do { _keys = _http_date_key_offsets[cs]; _trans = _http_date_index_offsets[cs]; _klen = _http_date_single_lengths[cs]; if ( _klen > 0 ) { int _lower = _keys; int _mid; int _upper = _keys + _klen - 1; while (true) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( data[p] < _http_date_trans_keys[_mid] ) _upper = _mid - 1; else if ( data[p] > _http_date_trans_keys[_mid] ) _lower = _mid + 1; else { _trans += (_mid - _keys); break _match; } } _keys += _klen; _trans += _klen; } _klen = _http_date_range_lengths[cs]; if ( _klen > 0 ) { int _lower = _keys; int _mid; int _upper = _keys + (_klen<<1) - 2; while (true) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( data[p] < _http_date_trans_keys[_mid] ) _upper = _mid - 2; else if ( data[p] > _http_date_trans_keys[_mid+1] ) _lower = _mid + 2; else { _trans += ((_mid - _keys)>>1); break _match; } } _trans += _klen; } } while (false); cs = _http_date_trans_targs[_trans]; if ( _http_date_trans_actions[_trans] != 0 ) { _acts = _http_date_trans_actions[_trans]; _nacts = (int) _http_date_actions[_acts++]; while ( _nacts-- > 0 ) { switch ( _http_date_actions[_acts++] ) { case 0: // line 254 "HttpRequestParser.rl" {day = day * 10 + (data[p] - 48);} break; case 1: // line 255 "HttpRequestParser.rl" {year = year * 10 + (data[p] - 48);} break; case 2: // line 256 "HttpRequestParser.rl" {hh = hh * 10 + (data[p] - 48) ;} break; case 3: // line 257 "HttpRequestParser.rl" {mm = mm * 10 + (data[p] - 48) ;} break; case 4: // line 258 "HttpRequestParser.rl" {ss = ss * 10 + (data[p] - 48) ;} break; case 5: // line 262 "HttpRequestParser.rl" { month = 0;} break; case 6: // line 263 "HttpRequestParser.rl" { month = 1;} break; case 7: // line 264 "HttpRequestParser.rl" { month = 2;} break; case 8: // line 265 "HttpRequestParser.rl" { month = 3;} break; case 9: // line 266 "HttpRequestParser.rl" { month = 4;} break; case 10: // line 267 "HttpRequestParser.rl" { month = 5;} break; case 11: // line 268 "HttpRequestParser.rl" { month = 6;} break; case 12: // line 269 "HttpRequestParser.rl" { month = 7;} break; case 13: // line 270 "HttpRequestParser.rl" { month = 8;} break; case 14: // line 271 "HttpRequestParser.rl" { month = 90;} break; case 15: // line 272 "HttpRequestParser.rl" { month = 10;} break; case 16: // line 273 "HttpRequestParser.rl" { month = 11;} break; // line 1664 "HttpRequestParser.java" } } } case 2: if ( cs == 0 ) { _goto_targ = 5; continue _goto; } if ( ++p != pe ) { _goto_targ = 1; continue _goto; } case 4: case 5: } break; } } // line 300 "HttpRequestParser.rl" if (year < 100) {year += 1900;} GregorianCalendar gc = new GregorianCalendar(); gc.set(year, month, day, hh, mm, ss); gc.setTimeZone(GMT); return gc.getTimeInMillis(); } public static String crlf = "\r\n"; public static void main(String args[]) throws Exception { /// Testing String s = "GET /favicon.ico#test HTTP/1.1\r\n" + "Host: localhost:7262\r\n" + "User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.10) Gecko/2009042315 Firefox/3.0.10 Ubiquity/0.1.5\r\n" + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" + "Accept-Language: en-us,en;q=0.5\r\n" + "Accept-Encoding: gzip,deflate\r\n" + "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n" + "Keep-Alive: 300\r\n" + "Connection: keep-alive\r\n\r\n"; System.out.println("Input Request: (" + s.length() + " bytes)");System.out.println(s); byte[] data = s.getBytes(); int len = data.length; System.out.println("============================================================="); HttpRequest req = new HttpRequest(); req.buffer = ByteBuffer.allocate(2048); req.buffer.put(data); initHeader(req, len); System.out.println(req); } }