From da55fb5208323e43ee7f81f631f7f2d235ca1c56 Mon Sep 17 00:00:00 2001 From: Andrew Canaday Date: Sat, 5 Jul 2014 10:04:19 +0800 Subject: [PATCH] Added HTTP OPTIONS support: - added options to minilex.c - regenerated lextable.h - added WSI_TOKEN_OPTIONS_URI to libwebsockets.h - tweaked parsers.c to accommodate OPTIONS token - tweaked server.c to set uri_ptr and uri_len for HTTP callback on OPTIONS as well --- lib/lextable.h | 615 ++++++++++++++++++++++++++-------------------------- lib/libwebsockets.h | 1 + lib/minilex.c | 1 + lib/parsers.c | 15 +- lib/server.c | 11 +- 5 files changed, 335 insertions(+), 308 deletions(-) diff --git a/lib/lextable.h b/lib/lextable.h index f747282..9d86577 100644 --- a/lib/lextable.h +++ b/lib/lextable.h @@ -1,329 +1,338 @@ /* pos 0000: 0 */ 0x67 /* 'g' */, 0x25, 0x00 /* (to 0x0025 state 1) */, 0x70 /* 'p' */, 0x27, 0x00 /* (to 0x002A state 5) */, - 0x68 /* 'h' */, 0x30, 0x00 /* (to 0x0036 state 10) */, - 0x63 /* 'c' */, 0x39, 0x00 /* (to 0x0042 state 15) */, - 0x73 /* 's' */, 0x54, 0x00 /* (to 0x0060 state 26) */, - 0x75 /* 'u' */, 0x93, 0x00 /* (to 0x00A2 state 56) */, - 0x6F /* 'o' */, 0x99, 0x00 /* (to 0x00AB state 64) */, - 0x0D /* '.' */, 0xA5, 0x00 /* (to 0x00BA state 77) */, - 0x61 /* 'a' */, 0xDC, 0x00 /* (to 0x00F4 state 127) */, - 0x69 /* 'i' */, 0x0F, 0x01 /* (to 0x012A state 161) */, - 0x64 /* 'd' */, 0x8E, 0x01 /* (to 0x01AC state 263) */, - 0x72 /* 'r' */, 0x91, 0x01 /* (to 0x01B2 state 268) */, + 0x6F /* 'o' */, 0x30, 0x00 /* (to 0x0036 state 10) */, + 0x68 /* 'h' */, 0x3C, 0x00 /* (to 0x0045 state 18) */, + 0x63 /* 'c' */, 0x45, 0x00 /* (to 0x0051 state 23) */, + 0x73 /* 's' */, 0x60, 0x00 /* (to 0x006F state 34) */, + 0x75 /* 'u' */, 0x9F, 0x00 /* (to 0x00B1 state 64) */, + 0x0D /* '.' */, 0xB3, 0x00 /* (to 0x00C8 state 84) */, + 0x61 /* 'a' */, 0xEA, 0x00 /* (to 0x0102 state 134) */, + 0x69 /* 'i' */, 0x1D, 0x01 /* (to 0x0138 state 168) */, + 0x64 /* 'd' */, 0x9C, 0x01 /* (to 0x01BA state 270) */, + 0x72 /* 'r' */, 0x9F, 0x01 /* (to 0x01C0 state 275) */, 0x08, /* fail */ /* pos 0025: 1 */ 0xE5 /* 'e' -> */, /* pos 0026: 2 */ 0xF4 /* 't' -> */, /* pos 0027: 3 */ 0xA0 /* ' ' -> */, /* pos 0028: 4 */ 0x00, 0x00 /* - terminal marker 0 - */, /* pos 002a: 5 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x0031 state 6) */, - 0x72 /* 'r' */, 0x3D, 0x01 /* (to 0x016A state 209) */, + 0x72 /* 'r' */, 0x4B, 0x01 /* (to 0x0178 state 216) */, 0x08, /* fail */ /* pos 0031: 6 */ 0xF3 /* 's' -> */, /* pos 0032: 7 */ 0xF4 /* 't' -> */, /* pos 0033: 8 */ 0xA0 /* ' ' -> */, /* pos 0034: 9 */ 0x00, 0x01 /* - terminal marker 1 - */, -/* pos 0036: 10 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x003D state 11) */, - 0x74 /* 't' */, 0xB2, 0x00 /* (to 0x00EB state 119) */, +/* pos 0036: 10 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x003D state 11) */, + 0x72 /* 'r' */, 0x81, 0x00 /* (to 0x00BA state 72) */, 0x08, /* fail */ -/* pos 003d: 11 */ 0xF3 /* 's' -> */, -/* pos 003e: 12 */ 0xF4 /* 't' -> */, -/* pos 003f: 13 */ 0xBA /* ':' -> */, -/* pos 0040: 14 */ 0x00, 0x02 /* - terminal marker 2 - */, -/* pos 0042: 15 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x0049 state 16) */, - 0x61 /* 'a' */, 0x2C, 0x01 /* (to 0x0171 state 215) */, +/* pos 003d: 11 */ 0xF4 /* 't' -> */, +/* pos 003e: 12 */ 0xE9 /* 'i' -> */, +/* pos 003f: 13 */ 0xEF /* 'o' -> */, +/* pos 0040: 14 */ 0xEE /* 'n' -> */, +/* pos 0041: 15 */ 0xF3 /* 's' -> */, +/* pos 0042: 16 */ 0xA0 /* ' ' -> */, +/* pos 0043: 17 */ 0x00, 0x02 /* - terminal marker 2 - */, +/* pos 0045: 18 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x004C state 19) */, + 0x74 /* 't' */, 0xB1, 0x00 /* (to 0x00F9 state 126) */, 0x08, /* fail */ -/* pos 0049: 16 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0050 state 17) */, - 0x6F /* 'o' */, 0x41, 0x01 /* (to 0x018D state 241) */, +/* pos 004c: 19 */ 0xF3 /* 's' -> */, +/* pos 004d: 20 */ 0xF4 /* 't' -> */, +/* pos 004e: 21 */ 0xBA /* ':' -> */, +/* pos 004f: 22 */ 0x00, 0x03 /* - terminal marker 3 - */, +/* pos 0051: 23 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x0058 state 24) */, + 0x61 /* 'a' */, 0x2B, 0x01 /* (to 0x017F state 222) */, 0x08, /* fail */ -/* pos 0050: 17 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0057 state 18) */, - 0x74 /* 't' */, 0x40, 0x01 /* (to 0x0193 state 246) */, +/* pos 0058: 24 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x005F state 25) */, + 0x6F /* 'o' */, 0x40, 0x01 /* (to 0x019B state 248) */, 0x08, /* fail */ -/* pos 0057: 18 */ 0xE5 /* 'e' -> */, -/* pos 0058: 19 */ 0xE3 /* 'c' -> */, -/* pos 0059: 20 */ 0xF4 /* 't' -> */, -/* pos 005a: 21 */ 0xE9 /* 'i' -> */, -/* pos 005b: 22 */ 0xEF /* 'o' -> */, -/* pos 005c: 23 */ 0xEE /* 'n' -> */, -/* pos 005d: 24 */ 0xBA /* ':' -> */, -/* pos 005e: 25 */ 0x00, 0x03 /* - terminal marker 3 - */, -/* pos 0060: 26 */ 0xE5 /* 'e' -> */, -/* pos 0061: 27 */ 0xE3 /* 'c' -> */, -/* pos 0062: 28 */ 0xAD /* '-' -> */, -/* pos 0063: 29 */ 0xF7 /* 'w' -> */, -/* pos 0064: 30 */ 0xE5 /* 'e' -> */, -/* pos 0065: 31 */ 0xE2 /* 'b' -> */, -/* pos 0066: 32 */ 0xF3 /* 's' -> */, -/* pos 0067: 33 */ 0xEF /* 'o' -> */, -/* pos 0068: 34 */ 0xE3 /* 'c' -> */, -/* pos 0069: 35 */ 0xEB /* 'k' -> */, -/* pos 006a: 36 */ 0xE5 /* 'e' -> */, -/* pos 006b: 37 */ 0xF4 /* 't' -> */, -/* pos 006c: 38 */ 0xAD /* '-' -> */, -/* pos 006d: 39 */ 0x6B /* 'k' */, 0x19, 0x00 /* (to 0x0086 state 40) */, - 0x70 /* 'p' */, 0x28, 0x00 /* (to 0x0098 state 47) */, - 0x64 /* 'd' */, 0x40, 0x00 /* (to 0x00B3 state 71) */, - 0x76 /* 'v' */, 0x49, 0x00 /* (to 0x00BF state 80) */, - 0x6F /* 'o' */, 0x4F, 0x00 /* (to 0x00C8 state 88) */, - 0x65 /* 'e' */, 0x54, 0x00 /* (to 0x00D0 state 95) */, - 0x61 /* 'a' */, 0x5D, 0x00 /* (to 0x00DC state 106) */, - 0x6E /* 'n' */, 0x62, 0x00 /* (to 0x00E4 state 113) */, +/* pos 005f: 25 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0066 state 26) */, + 0x74 /* 't' */, 0x3F, 0x01 /* (to 0x01A1 state 253) */, 0x08, /* fail */ -/* pos 0086: 40 */ 0xE5 /* 'e' -> */, -/* pos 0087: 41 */ 0xF9 /* 'y' -> */, -/* pos 0088: 42 */ 0x31 /* '1' */, 0x0A, 0x00 /* (to 0x0092 state 43) */, - 0x32 /* '2' */, 0x0A, 0x00 /* (to 0x0095 state 45) */, - 0x3A /* ':' */, 0x2F, 0x00 /* (to 0x00BD state 79) */, +/* pos 0066: 26 */ 0xE5 /* 'e' -> */, +/* pos 0067: 27 */ 0xE3 /* 'c' -> */, +/* pos 0068: 28 */ 0xF4 /* 't' -> */, +/* pos 0069: 29 */ 0xE9 /* 'i' -> */, +/* pos 006a: 30 */ 0xEF /* 'o' -> */, +/* pos 006b: 31 */ 0xEE /* 'n' -> */, +/* pos 006c: 32 */ 0xBA /* ':' -> */, +/* pos 006d: 33 */ 0x00, 0x04 /* - terminal marker 4 - */, +/* pos 006f: 34 */ 0xE5 /* 'e' -> */, +/* pos 0070: 35 */ 0xE3 /* 'c' -> */, +/* pos 0071: 36 */ 0xAD /* '-' -> */, +/* pos 0072: 37 */ 0xF7 /* 'w' -> */, +/* pos 0073: 38 */ 0xE5 /* 'e' -> */, +/* pos 0074: 39 */ 0xE2 /* 'b' -> */, +/* pos 0075: 40 */ 0xF3 /* 's' -> */, +/* pos 0076: 41 */ 0xEF /* 'o' -> */, +/* pos 0077: 42 */ 0xE3 /* 'c' -> */, +/* pos 0078: 43 */ 0xEB /* 'k' -> */, +/* pos 0079: 44 */ 0xE5 /* 'e' -> */, +/* pos 007a: 45 */ 0xF4 /* 't' -> */, +/* pos 007b: 46 */ 0xAD /* '-' -> */, +/* pos 007c: 47 */ 0x6B /* 'k' */, 0x19, 0x00 /* (to 0x0095 state 48) */, + 0x70 /* 'p' */, 0x28, 0x00 /* (to 0x00A7 state 55) */, + 0x64 /* 'd' */, 0x3F, 0x00 /* (to 0x00C1 state 78) */, + 0x76 /* 'v' */, 0x48, 0x00 /* (to 0x00CD state 87) */, + 0x6F /* 'o' */, 0x4E, 0x00 /* (to 0x00D6 state 95) */, + 0x65 /* 'e' */, 0x53, 0x00 /* (to 0x00DE state 102) */, + 0x61 /* 'a' */, 0x5C, 0x00 /* (to 0x00EA state 113) */, + 0x6E /* 'n' */, 0x61, 0x00 /* (to 0x00F2 state 120) */, 0x08, /* fail */ -/* pos 0092: 43 */ 0xBA /* ':' -> */, -/* pos 0093: 44 */ 0x00, 0x04 /* - terminal marker 4 - */, -/* pos 0095: 45 */ 0xBA /* ':' -> */, -/* pos 0096: 46 */ 0x00, 0x05 /* - terminal marker 5 - */, -/* pos 0098: 47 */ 0xF2 /* 'r' -> */, -/* pos 0099: 48 */ 0xEF /* 'o' -> */, -/* pos 009a: 49 */ 0xF4 /* 't' -> */, -/* pos 009b: 50 */ 0xEF /* 'o' -> */, -/* pos 009c: 51 */ 0xE3 /* 'c' -> */, -/* pos 009d: 52 */ 0xEF /* 'o' -> */, -/* pos 009e: 53 */ 0xEC /* 'l' -> */, -/* pos 009f: 54 */ 0xBA /* ':' -> */, -/* pos 00a0: 55 */ 0x00, 0x06 /* - terminal marker 6 - */, -/* pos 00a2: 56 */ 0xF0 /* 'p' -> */, -/* pos 00a3: 57 */ 0xE7 /* 'g' -> */, -/* pos 00a4: 58 */ 0xF2 /* 'r' -> */, -/* pos 00a5: 59 */ 0xE1 /* 'a' -> */, -/* pos 00a6: 60 */ 0xE4 /* 'd' -> */, -/* pos 00a7: 61 */ 0xE5 /* 'e' -> */, -/* pos 00a8: 62 */ 0xBA /* ':' -> */, -/* pos 00a9: 63 */ 0x00, 0x07 /* - terminal marker 7 - */, -/* pos 00ab: 64 */ 0xF2 /* 'r' -> */, -/* pos 00ac: 65 */ 0xE9 /* 'i' -> */, -/* pos 00ad: 66 */ 0xE7 /* 'g' -> */, -/* pos 00ae: 67 */ 0xE9 /* 'i' -> */, -/* pos 00af: 68 */ 0xEE /* 'n' -> */, -/* pos 00b0: 69 */ 0xBA /* ':' -> */, -/* pos 00b1: 70 */ 0x00, 0x08 /* - terminal marker 8 - */, -/* pos 00b3: 71 */ 0xF2 /* 'r' -> */, -/* pos 00b4: 72 */ 0xE1 /* 'a' -> */, -/* pos 00b5: 73 */ 0xE6 /* 'f' -> */, -/* pos 00b6: 74 */ 0xF4 /* 't' -> */, -/* pos 00b7: 75 */ 0xBA /* ':' -> */, -/* pos 00b8: 76 */ 0x00, 0x09 /* - terminal marker 9 - */, -/* pos 00ba: 77 */ 0x8A /* '.' -> */, -/* pos 00bb: 78 */ 0x00, 0x0A /* - terminal marker 10 - */, -/* pos 00bd: 79 */ 0x00, 0x0B /* - terminal marker 11 - */, -/* pos 00bf: 80 */ 0xE5 /* 'e' -> */, -/* pos 00c0: 81 */ 0xF2 /* 'r' -> */, -/* pos 00c1: 82 */ 0xF3 /* 's' -> */, -/* pos 00c2: 83 */ 0xE9 /* 'i' -> */, -/* pos 00c3: 84 */ 0xEF /* 'o' -> */, -/* pos 00c4: 85 */ 0xEE /* 'n' -> */, -/* pos 00c5: 86 */ 0xBA /* ':' -> */, -/* pos 00c6: 87 */ 0x00, 0x0C /* - terminal marker 12 - */, -/* pos 00c8: 88 */ 0xF2 /* 'r' -> */, -/* pos 00c9: 89 */ 0xE9 /* 'i' -> */, -/* pos 00ca: 90 */ 0xE7 /* 'g' -> */, -/* pos 00cb: 91 */ 0xE9 /* 'i' -> */, -/* pos 00cc: 92 */ 0xEE /* 'n' -> */, -/* pos 00cd: 93 */ 0xBA /* ':' -> */, -/* pos 00ce: 94 */ 0x00, 0x0D /* - terminal marker 13 - */, -/* pos 00d0: 95 */ 0xF8 /* 'x' -> */, -/* pos 00d1: 96 */ 0xF4 /* 't' -> */, -/* pos 00d2: 97 */ 0xE5 /* 'e' -> */, -/* pos 00d3: 98 */ 0xEE /* 'n' -> */, -/* pos 00d4: 99 */ 0xF3 /* 's' -> */, -/* pos 00d5: 100 */ 0xE9 /* 'i' -> */, -/* pos 00d6: 101 */ 0xEF /* 'o' -> */, -/* pos 00d7: 102 */ 0xEE /* 'n' -> */, -/* pos 00d8: 103 */ 0xF3 /* 's' -> */, -/* pos 00d9: 104 */ 0xBA /* ':' -> */, -/* pos 00da: 105 */ 0x00, 0x0E /* - terminal marker 14 - */, -/* pos 00dc: 106 */ 0xE3 /* 'c' -> */, -/* pos 00dd: 107 */ 0xE3 /* 'c' -> */, -/* pos 00de: 108 */ 0xE5 /* 'e' -> */, -/* pos 00df: 109 */ 0xF0 /* 'p' -> */, -/* pos 00e0: 110 */ 0xF4 /* 't' -> */, -/* pos 00e1: 111 */ 0xBA /* ':' -> */, -/* pos 00e2: 112 */ 0x00, 0x0F /* - terminal marker 15 - */, -/* pos 00e4: 113 */ 0xEF /* 'o' -> */, -/* pos 00e5: 114 */ 0xEE /* 'n' -> */, -/* pos 00e6: 115 */ 0xE3 /* 'c' -> */, -/* pos 00e7: 116 */ 0xE5 /* 'e' -> */, -/* pos 00e8: 117 */ 0xBA /* ':' -> */, -/* pos 00e9: 118 */ 0x00, 0x10 /* - terminal marker 16 - */, -/* pos 00eb: 119 */ 0xF4 /* 't' -> */, -/* pos 00ec: 120 */ 0xF0 /* 'p' -> */, -/* pos 00ed: 121 */ 0xAF /* '/' -> */, -/* pos 00ee: 122 */ 0xB1 /* '1' -> */, -/* pos 00ef: 123 */ 0xAE /* '.' -> */, -/* pos 00f0: 124 */ 0xB1 /* '1' -> */, -/* pos 00f1: 125 */ 0xA0 /* ' ' -> */, -/* pos 00f2: 126 */ 0x00, 0x11 /* - terminal marker 17 - */, -/* pos 00f4: 127 */ 0x63 /* 'c' */, 0x07, 0x00 /* (to 0x00FB state 128) */, - 0x75 /* 'u' */, 0x88, 0x00 /* (to 0x017F state 228) */, +/* pos 0095: 48 */ 0xE5 /* 'e' -> */, +/* pos 0096: 49 */ 0xF9 /* 'y' -> */, +/* pos 0097: 50 */ 0x31 /* '1' */, 0x0A, 0x00 /* (to 0x00A1 state 51) */, + 0x32 /* '2' */, 0x0A, 0x00 /* (to 0x00A4 state 53) */, + 0x3A /* ':' */, 0x2E, 0x00 /* (to 0x00CB state 86) */, 0x08, /* fail */ -/* pos 00fb: 128 */ 0xE3 /* 'c' -> */, -/* pos 00fc: 129 */ 0xE5 /* 'e' -> */, -/* pos 00fd: 130 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x0104 state 131) */, - 0x73 /* 's' */, 0x0E, 0x00 /* (to 0x010E state 134) */, +/* pos 00a1: 51 */ 0xBA /* ':' -> */, +/* pos 00a2: 52 */ 0x00, 0x05 /* - terminal marker 5 - */, +/* pos 00a4: 53 */ 0xBA /* ':' -> */, +/* pos 00a5: 54 */ 0x00, 0x06 /* - terminal marker 6 - */, +/* pos 00a7: 55 */ 0xF2 /* 'r' -> */, +/* pos 00a8: 56 */ 0xEF /* 'o' -> */, +/* pos 00a9: 57 */ 0xF4 /* 't' -> */, +/* pos 00aa: 58 */ 0xEF /* 'o' -> */, +/* pos 00ab: 59 */ 0xE3 /* 'c' -> */, +/* pos 00ac: 60 */ 0xEF /* 'o' -> */, +/* pos 00ad: 61 */ 0xEC /* 'l' -> */, +/* pos 00ae: 62 */ 0xBA /* ':' -> */, +/* pos 00af: 63 */ 0x00, 0x07 /* - terminal marker 7 - */, +/* pos 00b1: 64 */ 0xF0 /* 'p' -> */, +/* pos 00b2: 65 */ 0xE7 /* 'g' -> */, +/* pos 00b3: 66 */ 0xF2 /* 'r' -> */, +/* pos 00b4: 67 */ 0xE1 /* 'a' -> */, +/* pos 00b5: 68 */ 0xE4 /* 'd' -> */, +/* pos 00b6: 69 */ 0xE5 /* 'e' -> */, +/* pos 00b7: 70 */ 0xBA /* ':' -> */, +/* pos 00b8: 71 */ 0x00, 0x08 /* - terminal marker 8 - */, +/* pos 00ba: 72 */ 0xE9 /* 'i' -> */, +/* pos 00bb: 73 */ 0xE7 /* 'g' -> */, +/* pos 00bc: 74 */ 0xE9 /* 'i' -> */, +/* pos 00bd: 75 */ 0xEE /* 'n' -> */, +/* pos 00be: 76 */ 0xBA /* ':' -> */, +/* pos 00bf: 77 */ 0x00, 0x09 /* - terminal marker 9 - */, +/* pos 00c1: 78 */ 0xF2 /* 'r' -> */, +/* pos 00c2: 79 */ 0xE1 /* 'a' -> */, +/* pos 00c3: 80 */ 0xE6 /* 'f' -> */, +/* pos 00c4: 81 */ 0xF4 /* 't' -> */, +/* pos 00c5: 82 */ 0xBA /* ':' -> */, +/* pos 00c6: 83 */ 0x00, 0x0A /* - terminal marker 10 - */, +/* pos 00c8: 84 */ 0x8A /* '.' -> */, +/* pos 00c9: 85 */ 0x00, 0x0B /* - terminal marker 11 - */, +/* pos 00cb: 86 */ 0x00, 0x0C /* - terminal marker 12 - */, +/* pos 00cd: 87 */ 0xE5 /* 'e' -> */, +/* pos 00ce: 88 */ 0xF2 /* 'r' -> */, +/* pos 00cf: 89 */ 0xF3 /* 's' -> */, +/* pos 00d0: 90 */ 0xE9 /* 'i' -> */, +/* pos 00d1: 91 */ 0xEF /* 'o' -> */, +/* pos 00d2: 92 */ 0xEE /* 'n' -> */, +/* pos 00d3: 93 */ 0xBA /* ':' -> */, +/* pos 00d4: 94 */ 0x00, 0x0D /* - terminal marker 13 - */, +/* pos 00d6: 95 */ 0xF2 /* 'r' -> */, +/* pos 00d7: 96 */ 0xE9 /* 'i' -> */, +/* pos 00d8: 97 */ 0xE7 /* 'g' -> */, +/* pos 00d9: 98 */ 0xE9 /* 'i' -> */, +/* pos 00da: 99 */ 0xEE /* 'n' -> */, +/* pos 00db: 100 */ 0xBA /* ':' -> */, +/* pos 00dc: 101 */ 0x00, 0x0E /* - terminal marker 14 - */, +/* pos 00de: 102 */ 0xF8 /* 'x' -> */, +/* pos 00df: 103 */ 0xF4 /* 't' -> */, +/* pos 00e0: 104 */ 0xE5 /* 'e' -> */, +/* pos 00e1: 105 */ 0xEE /* 'n' -> */, +/* pos 00e2: 106 */ 0xF3 /* 's' -> */, +/* pos 00e3: 107 */ 0xE9 /* 'i' -> */, +/* pos 00e4: 108 */ 0xEF /* 'o' -> */, +/* pos 00e5: 109 */ 0xEE /* 'n' -> */, +/* pos 00e6: 110 */ 0xF3 /* 's' -> */, +/* pos 00e7: 111 */ 0xBA /* ':' -> */, +/* pos 00e8: 112 */ 0x00, 0x0F /* - terminal marker 15 - */, +/* pos 00ea: 113 */ 0xE3 /* 'c' -> */, +/* pos 00eb: 114 */ 0xE3 /* 'c' -> */, +/* pos 00ec: 115 */ 0xE5 /* 'e' -> */, +/* pos 00ed: 116 */ 0xF0 /* 'p' -> */, +/* pos 00ee: 117 */ 0xF4 /* 't' -> */, +/* pos 00ef: 118 */ 0xBA /* ':' -> */, +/* pos 00f0: 119 */ 0x00, 0x10 /* - terminal marker 16 - */, +/* pos 00f2: 120 */ 0xEF /* 'o' -> */, +/* pos 00f3: 121 */ 0xEE /* 'n' -> */, +/* pos 00f4: 122 */ 0xE3 /* 'c' -> */, +/* pos 00f5: 123 */ 0xE5 /* 'e' -> */, +/* pos 00f6: 124 */ 0xBA /* ':' -> */, +/* pos 00f7: 125 */ 0x00, 0x11 /* - terminal marker 17 - */, +/* pos 00f9: 126 */ 0xF4 /* 't' -> */, +/* pos 00fa: 127 */ 0xF0 /* 'p' -> */, +/* pos 00fb: 128 */ 0xAF /* '/' -> */, +/* pos 00fc: 129 */ 0xB1 /* '1' -> */, +/* pos 00fd: 130 */ 0xAE /* '.' -> */, +/* pos 00fe: 131 */ 0xB1 /* '1' -> */, +/* pos 00ff: 132 */ 0xA0 /* ' ' -> */, +/* pos 0100: 133 */ 0x00, 0x12 /* - terminal marker 18 - */, +/* pos 0102: 134 */ 0x63 /* 'c' */, 0x07, 0x00 /* (to 0x0109 state 135) */, + 0x75 /* 'u' */, 0x88, 0x00 /* (to 0x018D state 235) */, 0x08, /* fail */ -/* pos 0104: 131 */ 0xF4 /* 't' -> */, -/* pos 0105: 132 */ 0x3A /* ':' */, 0x07, 0x00 /* (to 0x010C state 133) */, - 0x2D /* '-' */, 0x47, 0x00 /* (to 0x014F state 190) */, +/* pos 0109: 135 */ 0xE3 /* 'c' -> */, +/* pos 010a: 136 */ 0xE5 /* 'e' -> */, +/* pos 010b: 137 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x0112 state 138) */, + 0x73 /* 's' */, 0x0E, 0x00 /* (to 0x011C state 141) */, 0x08, /* fail */ -/* pos 010c: 133 */ 0x00, 0x12 /* - terminal marker 18 - */, -/* pos 010e: 134 */ 0xF3 /* 's' -> */, -/* pos 010f: 135 */ 0xAD /* '-' -> */, -/* pos 0110: 136 */ 0xE3 /* 'c' -> */, -/* pos 0111: 137 */ 0xEF /* 'o' -> */, -/* pos 0112: 138 */ 0xEE /* 'n' -> */, -/* pos 0113: 139 */ 0xF4 /* 't' -> */, -/* pos 0114: 140 */ 0xF2 /* 'r' -> */, -/* pos 0115: 141 */ 0xEF /* 'o' -> */, -/* pos 0116: 142 */ 0xEC /* 'l' -> */, -/* pos 0117: 143 */ 0xAD /* '-' -> */, -/* pos 0118: 144 */ 0xF2 /* 'r' -> */, -/* pos 0119: 145 */ 0xE5 /* 'e' -> */, -/* pos 011a: 146 */ 0xF1 /* 'q' -> */, -/* pos 011b: 147 */ 0xF5 /* 'u' -> */, -/* pos 011c: 148 */ 0xE5 /* 'e' -> */, -/* pos 011d: 149 */ 0xF3 /* 's' -> */, -/* pos 011e: 150 */ 0xF4 /* 't' -> */, -/* pos 011f: 151 */ 0xAD /* '-' -> */, -/* pos 0120: 152 */ 0xE8 /* 'h' -> */, -/* pos 0121: 153 */ 0xE5 /* 'e' -> */, -/* pos 0122: 154 */ 0xE1 /* 'a' -> */, -/* pos 0123: 155 */ 0xE4 /* 'd' -> */, -/* pos 0124: 156 */ 0xE5 /* 'e' -> */, -/* pos 0125: 157 */ 0xF2 /* 'r' -> */, -/* pos 0126: 158 */ 0xF3 /* 's' -> */, -/* pos 0127: 159 */ 0xBA /* ':' -> */, -/* pos 0128: 160 */ 0x00, 0x13 /* - terminal marker 19 - */, -/* pos 012a: 161 */ 0xE6 /* 'f' -> */, -/* pos 012b: 162 */ 0xAD /* '-' -> */, -/* pos 012c: 163 */ 0x6D /* 'm' */, 0x07, 0x00 /* (to 0x0133 state 164) */, - 0x6E /* 'n' */, 0x14, 0x00 /* (to 0x0143 state 179) */, +/* pos 0112: 138 */ 0xF4 /* 't' -> */, +/* pos 0113: 139 */ 0x3A /* ':' */, 0x07, 0x00 /* (to 0x011A state 140) */, + 0x2D /* '-' */, 0x47, 0x00 /* (to 0x015D state 197) */, 0x08, /* fail */ -/* pos 0133: 164 */ 0xEF /* 'o' -> */, -/* pos 0134: 165 */ 0xE4 /* 'd' -> */, -/* pos 0135: 166 */ 0xE9 /* 'i' -> */, -/* pos 0136: 167 */ 0xE6 /* 'f' -> */, -/* pos 0137: 168 */ 0xE9 /* 'i' -> */, -/* pos 0138: 169 */ 0xE5 /* 'e' -> */, -/* pos 0139: 170 */ 0xE4 /* 'd' -> */, -/* pos 013a: 171 */ 0xAD /* '-' -> */, -/* pos 013b: 172 */ 0xF3 /* 's' -> */, -/* pos 013c: 173 */ 0xE9 /* 'i' -> */, -/* pos 013d: 174 */ 0xEE /* 'n' -> */, -/* pos 013e: 175 */ 0xE3 /* 'c' -> */, -/* pos 013f: 176 */ 0xE5 /* 'e' -> */, -/* pos 0140: 177 */ 0xBA /* ':' -> */, -/* pos 0141: 178 */ 0x00, 0x14 /* - terminal marker 20 - */, -/* pos 0143: 179 */ 0xEF /* 'o' -> */, -/* pos 0144: 180 */ 0xEE /* 'n' -> */, -/* pos 0145: 181 */ 0xE5 /* 'e' -> */, -/* pos 0146: 182 */ 0xAD /* '-' -> */, -/* pos 0147: 183 */ 0xED /* 'm' -> */, -/* pos 0148: 184 */ 0xE1 /* 'a' -> */, -/* pos 0149: 185 */ 0xF4 /* 't' -> */, -/* pos 014a: 186 */ 0xE3 /* 'c' -> */, -/* pos 014b: 187 */ 0xE8 /* 'h' -> */, -/* pos 014c: 188 */ 0xBA /* ':' -> */, -/* pos 014d: 189 */ 0x00, 0x15 /* - terminal marker 21 - */, -/* pos 014f: 190 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0156 state 191) */, - 0x6C /* 'l' */, 0x0E, 0x00 /* (to 0x0160 state 200) */, +/* pos 011a: 140 */ 0x00, 0x13 /* - terminal marker 19 - */, +/* pos 011c: 141 */ 0xF3 /* 's' -> */, +/* pos 011d: 142 */ 0xAD /* '-' -> */, +/* pos 011e: 143 */ 0xE3 /* 'c' -> */, +/* pos 011f: 144 */ 0xEF /* 'o' -> */, +/* pos 0120: 145 */ 0xEE /* 'n' -> */, +/* pos 0121: 146 */ 0xF4 /* 't' -> */, +/* pos 0122: 147 */ 0xF2 /* 'r' -> */, +/* pos 0123: 148 */ 0xEF /* 'o' -> */, +/* pos 0124: 149 */ 0xEC /* 'l' -> */, +/* pos 0125: 150 */ 0xAD /* '-' -> */, +/* pos 0126: 151 */ 0xF2 /* 'r' -> */, +/* pos 0127: 152 */ 0xE5 /* 'e' -> */, +/* pos 0128: 153 */ 0xF1 /* 'q' -> */, +/* pos 0129: 154 */ 0xF5 /* 'u' -> */, +/* pos 012a: 155 */ 0xE5 /* 'e' -> */, +/* pos 012b: 156 */ 0xF3 /* 's' -> */, +/* pos 012c: 157 */ 0xF4 /* 't' -> */, +/* pos 012d: 158 */ 0xAD /* '-' -> */, +/* pos 012e: 159 */ 0xE8 /* 'h' -> */, +/* pos 012f: 160 */ 0xE5 /* 'e' -> */, +/* pos 0130: 161 */ 0xE1 /* 'a' -> */, +/* pos 0131: 162 */ 0xE4 /* 'd' -> */, +/* pos 0132: 163 */ 0xE5 /* 'e' -> */, +/* pos 0133: 164 */ 0xF2 /* 'r' -> */, +/* pos 0134: 165 */ 0xF3 /* 's' -> */, +/* pos 0135: 166 */ 0xBA /* ':' -> */, +/* pos 0136: 167 */ 0x00, 0x14 /* - terminal marker 20 - */, +/* pos 0138: 168 */ 0xE6 /* 'f' -> */, +/* pos 0139: 169 */ 0xAD /* '-' -> */, +/* pos 013a: 170 */ 0x6D /* 'm' */, 0x07, 0x00 /* (to 0x0141 state 171) */, + 0x6E /* 'n' */, 0x14, 0x00 /* (to 0x0151 state 186) */, 0x08, /* fail */ -/* pos 0156: 191 */ 0xEE /* 'n' -> */, -/* pos 0157: 192 */ 0xE3 /* 'c' -> */, -/* pos 0158: 193 */ 0xEF /* 'o' -> */, -/* pos 0159: 194 */ 0xE4 /* 'd' -> */, -/* pos 015a: 195 */ 0xE9 /* 'i' -> */, -/* pos 015b: 196 */ 0xEE /* 'n' -> */, -/* pos 015c: 197 */ 0xE7 /* 'g' -> */, -/* pos 015d: 198 */ 0xBA /* ':' -> */, -/* pos 015e: 199 */ 0x00, 0x16 /* - terminal marker 22 - */, -/* pos 0160: 200 */ 0xE1 /* 'a' -> */, -/* pos 0161: 201 */ 0xEE /* 'n' -> */, -/* pos 0162: 202 */ 0xE7 /* 'g' -> */, -/* pos 0163: 203 */ 0xF5 /* 'u' -> */, -/* pos 0164: 204 */ 0xE1 /* 'a' -> */, -/* pos 0165: 205 */ 0xE7 /* 'g' -> */, -/* pos 0166: 206 */ 0xE5 /* 'e' -> */, -/* pos 0167: 207 */ 0xBA /* ':' -> */, -/* pos 0168: 208 */ 0x00, 0x17 /* - terminal marker 23 - */, -/* pos 016a: 209 */ 0xE1 /* 'a' -> */, -/* pos 016b: 210 */ 0xE7 /* 'g' -> */, -/* pos 016c: 211 */ 0xED /* 'm' -> */, -/* pos 016d: 212 */ 0xE1 /* 'a' -> */, -/* pos 016e: 213 */ 0xBA /* ':' -> */, -/* pos 016f: 214 */ 0x00, 0x18 /* - terminal marker 24 - */, -/* pos 0171: 215 */ 0xE3 /* 'c' -> */, -/* pos 0172: 216 */ 0xE8 /* 'h' -> */, -/* pos 0173: 217 */ 0xE5 /* 'e' -> */, -/* pos 0174: 218 */ 0xAD /* '-' -> */, -/* pos 0175: 219 */ 0xE3 /* 'c' -> */, -/* pos 0176: 220 */ 0xEF /* 'o' -> */, -/* pos 0177: 221 */ 0xEE /* 'n' -> */, -/* pos 0178: 222 */ 0xF4 /* 't' -> */, -/* pos 0179: 223 */ 0xF2 /* 'r' -> */, -/* pos 017a: 224 */ 0xEF /* 'o' -> */, -/* pos 017b: 225 */ 0xEC /* 'l' -> */, -/* pos 017c: 226 */ 0xBA /* ':' -> */, -/* pos 017d: 227 */ 0x00, 0x19 /* - terminal marker 25 - */, -/* pos 017f: 228 */ 0xF4 /* 't' -> */, -/* pos 0180: 229 */ 0xE8 /* 'h' -> */, -/* pos 0181: 230 */ 0xEF /* 'o' -> */, -/* pos 0182: 231 */ 0xF2 /* 'r' -> */, -/* pos 0183: 232 */ 0xE9 /* 'i' -> */, -/* pos 0184: 233 */ 0xFA /* 'z' -> */, -/* pos 0185: 234 */ 0xE1 /* 'a' -> */, -/* pos 0186: 235 */ 0xF4 /* 't' -> */, -/* pos 0187: 236 */ 0xE9 /* 'i' -> */, -/* pos 0188: 237 */ 0xEF /* 'o' -> */, -/* pos 0189: 238 */ 0xEE /* 'n' -> */, -/* pos 018a: 239 */ 0xBA /* ':' -> */, -/* pos 018b: 240 */ 0x00, 0x1A /* - terminal marker 26 - */, -/* pos 018d: 241 */ 0xEB /* 'k' -> */, -/* pos 018e: 242 */ 0xE9 /* 'i' -> */, -/* pos 018f: 243 */ 0xE5 /* 'e' -> */, -/* pos 0190: 244 */ 0xBA /* ':' -> */, -/* pos 0191: 245 */ 0x00, 0x1B /* - terminal marker 27 - */, -/* pos 0193: 246 */ 0xE5 /* 'e' -> */, -/* pos 0194: 247 */ 0xEE /* 'n' -> */, -/* pos 0195: 248 */ 0xF4 /* 't' -> */, -/* pos 0196: 249 */ 0xAD /* '-' -> */, -/* pos 0197: 250 */ 0x6C /* 'l' */, 0x07, 0x00 /* (to 0x019E state 251) */, - 0x74 /* 't' */, 0x0C, 0x00 /* (to 0x01A6 state 258) */, +/* pos 0141: 171 */ 0xEF /* 'o' -> */, +/* pos 0142: 172 */ 0xE4 /* 'd' -> */, +/* pos 0143: 173 */ 0xE9 /* 'i' -> */, +/* pos 0144: 174 */ 0xE6 /* 'f' -> */, +/* pos 0145: 175 */ 0xE9 /* 'i' -> */, +/* pos 0146: 176 */ 0xE5 /* 'e' -> */, +/* pos 0147: 177 */ 0xE4 /* 'd' -> */, +/* pos 0148: 178 */ 0xAD /* '-' -> */, +/* pos 0149: 179 */ 0xF3 /* 's' -> */, +/* pos 014a: 180 */ 0xE9 /* 'i' -> */, +/* pos 014b: 181 */ 0xEE /* 'n' -> */, +/* pos 014c: 182 */ 0xE3 /* 'c' -> */, +/* pos 014d: 183 */ 0xE5 /* 'e' -> */, +/* pos 014e: 184 */ 0xBA /* ':' -> */, +/* pos 014f: 185 */ 0x00, 0x15 /* - terminal marker 21 - */, +/* pos 0151: 186 */ 0xEF /* 'o' -> */, +/* pos 0152: 187 */ 0xEE /* 'n' -> */, +/* pos 0153: 188 */ 0xE5 /* 'e' -> */, +/* pos 0154: 189 */ 0xAD /* '-' -> */, +/* pos 0155: 190 */ 0xED /* 'm' -> */, +/* pos 0156: 191 */ 0xE1 /* 'a' -> */, +/* pos 0157: 192 */ 0xF4 /* 't' -> */, +/* pos 0158: 193 */ 0xE3 /* 'c' -> */, +/* pos 0159: 194 */ 0xE8 /* 'h' -> */, +/* pos 015a: 195 */ 0xBA /* ':' -> */, +/* pos 015b: 196 */ 0x00, 0x16 /* - terminal marker 22 - */, +/* pos 015d: 197 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0164 state 198) */, + 0x6C /* 'l' */, 0x0E, 0x00 /* (to 0x016E state 207) */, 0x08, /* fail */ -/* pos 019e: 251 */ 0xE5 /* 'e' -> */, -/* pos 019f: 252 */ 0xEE /* 'n' -> */, -/* pos 01a0: 253 */ 0xE7 /* 'g' -> */, -/* pos 01a1: 254 */ 0xF4 /* 't' -> */, -/* pos 01a2: 255 */ 0xE8 /* 'h' -> */, -/* pos 01a3: 256 */ 0xBA /* ':' -> */, -/* pos 01a4: 257 */ 0x00, 0x1C /* - terminal marker 28 - */, -/* pos 01a6: 258 */ 0xF9 /* 'y' -> */, -/* pos 01a7: 259 */ 0xF0 /* 'p' -> */, -/* pos 01a8: 260 */ 0xE5 /* 'e' -> */, -/* pos 01a9: 261 */ 0xBA /* ':' -> */, -/* pos 01aa: 262 */ 0x00, 0x1D /* - terminal marker 29 - */, -/* pos 01ac: 263 */ 0xE1 /* 'a' -> */, -/* pos 01ad: 264 */ 0xF4 /* 't' -> */, -/* pos 01ae: 265 */ 0xE5 /* 'e' -> */, -/* pos 01af: 266 */ 0xBA /* ':' -> */, -/* pos 01b0: 267 */ 0x00, 0x1E /* - terminal marker 30 - */, -/* pos 01b2: 268 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x01B9 state 269) */, - 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x01BF state 274) */, +/* pos 0164: 198 */ 0xEE /* 'n' -> */, +/* pos 0165: 199 */ 0xE3 /* 'c' -> */, +/* pos 0166: 200 */ 0xEF /* 'o' -> */, +/* pos 0167: 201 */ 0xE4 /* 'd' -> */, +/* pos 0168: 202 */ 0xE9 /* 'i' -> */, +/* pos 0169: 203 */ 0xEE /* 'n' -> */, +/* pos 016a: 204 */ 0xE7 /* 'g' -> */, +/* pos 016b: 205 */ 0xBA /* ':' -> */, +/* pos 016c: 206 */ 0x00, 0x17 /* - terminal marker 23 - */, +/* pos 016e: 207 */ 0xE1 /* 'a' -> */, +/* pos 016f: 208 */ 0xEE /* 'n' -> */, +/* pos 0170: 209 */ 0xE7 /* 'g' -> */, +/* pos 0171: 210 */ 0xF5 /* 'u' -> */, +/* pos 0172: 211 */ 0xE1 /* 'a' -> */, +/* pos 0173: 212 */ 0xE7 /* 'g' -> */, +/* pos 0174: 213 */ 0xE5 /* 'e' -> */, +/* pos 0175: 214 */ 0xBA /* ':' -> */, +/* pos 0176: 215 */ 0x00, 0x18 /* - terminal marker 24 - */, +/* pos 0178: 216 */ 0xE1 /* 'a' -> */, +/* pos 0179: 217 */ 0xE7 /* 'g' -> */, +/* pos 017a: 218 */ 0xED /* 'm' -> */, +/* pos 017b: 219 */ 0xE1 /* 'a' -> */, +/* pos 017c: 220 */ 0xBA /* ':' -> */, +/* pos 017d: 221 */ 0x00, 0x19 /* - terminal marker 25 - */, +/* pos 017f: 222 */ 0xE3 /* 'c' -> */, +/* pos 0180: 223 */ 0xE8 /* 'h' -> */, +/* pos 0181: 224 */ 0xE5 /* 'e' -> */, +/* pos 0182: 225 */ 0xAD /* '-' -> */, +/* pos 0183: 226 */ 0xE3 /* 'c' -> */, +/* pos 0184: 227 */ 0xEF /* 'o' -> */, +/* pos 0185: 228 */ 0xEE /* 'n' -> */, +/* pos 0186: 229 */ 0xF4 /* 't' -> */, +/* pos 0187: 230 */ 0xF2 /* 'r' -> */, +/* pos 0188: 231 */ 0xEF /* 'o' -> */, +/* pos 0189: 232 */ 0xEC /* 'l' -> */, +/* pos 018a: 233 */ 0xBA /* ':' -> */, +/* pos 018b: 234 */ 0x00, 0x1A /* - terminal marker 26 - */, +/* pos 018d: 235 */ 0xF4 /* 't' -> */, +/* pos 018e: 236 */ 0xE8 /* 'h' -> */, +/* pos 018f: 237 */ 0xEF /* 'o' -> */, +/* pos 0190: 238 */ 0xF2 /* 'r' -> */, +/* pos 0191: 239 */ 0xE9 /* 'i' -> */, +/* pos 0192: 240 */ 0xFA /* 'z' -> */, +/* pos 0193: 241 */ 0xE1 /* 'a' -> */, +/* pos 0194: 242 */ 0xF4 /* 't' -> */, +/* pos 0195: 243 */ 0xE9 /* 'i' -> */, +/* pos 0196: 244 */ 0xEF /* 'o' -> */, +/* pos 0197: 245 */ 0xEE /* 'n' -> */, +/* pos 0198: 246 */ 0xBA /* ':' -> */, +/* pos 0199: 247 */ 0x00, 0x1B /* - terminal marker 27 - */, +/* pos 019b: 248 */ 0xEB /* 'k' -> */, +/* pos 019c: 249 */ 0xE9 /* 'i' -> */, +/* pos 019d: 250 */ 0xE5 /* 'e' -> */, +/* pos 019e: 251 */ 0xBA /* ':' -> */, +/* pos 019f: 252 */ 0x00, 0x1C /* - terminal marker 28 - */, +/* pos 01a1: 253 */ 0xE5 /* 'e' -> */, +/* pos 01a2: 254 */ 0xEE /* 'n' -> */, +/* pos 01a3: 255 */ 0xF4 /* 't' -> */, +/* pos 01a4: 256 */ 0xAD /* '-' -> */, +/* pos 01a5: 257 */ 0x6C /* 'l' */, 0x07, 0x00 /* (to 0x01AC state 258) */, + 0x74 /* 't' */, 0x0C, 0x00 /* (to 0x01B4 state 265) */, 0x08, /* fail */ -/* pos 01b9: 269 */ 0xEE /* 'n' -> */, -/* pos 01ba: 270 */ 0xE7 /* 'g' -> */, -/* pos 01bb: 271 */ 0xE5 /* 'e' -> */, -/* pos 01bc: 272 */ 0xBA /* ':' -> */, -/* pos 01bd: 273 */ 0x00, 0x1F /* - terminal marker 31 - */, -/* pos 01bf: 274 */ 0xE6 /* 'f' -> */, -/* pos 01c0: 275 */ 0xE5 /* 'e' -> */, -/* pos 01c1: 276 */ 0xF2 /* 'r' -> */, -/* pos 01c2: 277 */ 0xE5 /* 'e' -> */, -/* pos 01c3: 278 */ 0xF2 /* 'r' -> */, -/* pos 01c4: 279 */ 0xBA /* ':' -> */, -/* pos 01c5: 280 */ 0x00, 0x20 /* - terminal marker 32 - */, -/* total size 455 bytes */ +/* pos 01ac: 258 */ 0xE5 /* 'e' -> */, +/* pos 01ad: 259 */ 0xEE /* 'n' -> */, +/* pos 01ae: 260 */ 0xE7 /* 'g' -> */, +/* pos 01af: 261 */ 0xF4 /* 't' -> */, +/* pos 01b0: 262 */ 0xE8 /* 'h' -> */, +/* pos 01b1: 263 */ 0xBA /* ':' -> */, +/* pos 01b2: 264 */ 0x00, 0x1D /* - terminal marker 29 - */, +/* pos 01b4: 265 */ 0xF9 /* 'y' -> */, +/* pos 01b5: 266 */ 0xF0 /* 'p' -> */, +/* pos 01b6: 267 */ 0xE5 /* 'e' -> */, +/* pos 01b7: 268 */ 0xBA /* ':' -> */, +/* pos 01b8: 269 */ 0x00, 0x1E /* - terminal marker 30 - */, +/* pos 01ba: 270 */ 0xE1 /* 'a' -> */, +/* pos 01bb: 271 */ 0xF4 /* 't' -> */, +/* pos 01bc: 272 */ 0xE5 /* 'e' -> */, +/* pos 01bd: 273 */ 0xBA /* ':' -> */, +/* pos 01be: 274 */ 0x00, 0x1F /* - terminal marker 31 - */, +/* pos 01c0: 275 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x01C7 state 276) */, + 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x01CD state 281) */, + 0x08, /* fail */ +/* pos 01c7: 276 */ 0xEE /* 'n' -> */, +/* pos 01c8: 277 */ 0xE7 /* 'g' -> */, +/* pos 01c9: 278 */ 0xE5 /* 'e' -> */, +/* pos 01ca: 279 */ 0xBA /* ':' -> */, +/* pos 01cb: 280 */ 0x00, 0x20 /* - terminal marker 32 - */, +/* pos 01cd: 281 */ 0xE6 /* 'f' -> */, +/* pos 01ce: 282 */ 0xE5 /* 'e' -> */, +/* pos 01cf: 283 */ 0xF2 /* 'r' -> */, +/* pos 01d0: 284 */ 0xE5 /* 'e' -> */, +/* pos 01d1: 285 */ 0xF2 /* 'r' -> */, +/* pos 01d2: 286 */ 0xBA /* ':' -> */, +/* pos 01d3: 287 */ 0x00, 0x21 /* - terminal marker 33 - */, +/* total size 469 bytes */ diff --git a/lib/libwebsockets.h b/lib/libwebsockets.h index 31cde77..147297b 100644 --- a/lib/libwebsockets.h +++ b/lib/libwebsockets.h @@ -279,6 +279,7 @@ struct lws_tokens { enum lws_token_indexes { WSI_TOKEN_GET_URI, WSI_TOKEN_POST_URI, + WSI_TOKEN_OPTIONS_URI, WSI_TOKEN_HOST, WSI_TOKEN_CONNECTION, WSI_TOKEN_KEY1, diff --git a/lib/minilex.c b/lib/minilex.c index dc2ed36..cdc500e 100644 --- a/lib/minilex.c +++ b/lib/minilex.c @@ -21,6 +21,7 @@ const char *set[] = { "get ", "post ", + "options ", "host:", "connection:", "sec-websocket-key1:", diff --git a/lib/parsers.c b/lib/parsers.c index b71c63c..a8d0a5e 100644 --- a/lib/parsers.c +++ b/lib/parsers.c @@ -194,6 +194,7 @@ int libwebsocket_parse( switch (wsi->u.hdr.parser_state) { case WSI_TOKEN_GET_URI: case WSI_TOKEN_POST_URI: + case WSI_TOKEN_OPTIONS_URI: case WSI_TOKEN_HOST: case WSI_TOKEN_CONNECTION: case WSI_TOKEN_KEY1: @@ -235,7 +236,9 @@ int libwebsocket_parse( wsi->u.hdr.parser_state]].len && c == ' ') break; - if ((wsi->u.hdr.parser_state != WSI_TOKEN_GET_URI) && (wsi->u.hdr.parser_state != WSI_TOKEN_POST_URI)) + if ((wsi->u.hdr.parser_state != WSI_TOKEN_GET_URI) && + (wsi->u.hdr.parser_state != WSI_TOKEN_POST_URI) && + (wsi->u.hdr.parser_state != WSI_TOKEN_OPTIONS_URI)) goto check_eol; /* special URI processing... end at space */ @@ -417,8 +420,10 @@ swallow: if (wsi->u.hdr.lextable_pos < 0) { /* this is not a header we know about */ - if (wsi->u.hdr.ah->frag_index[WSI_TOKEN_GET_URI] || wsi->u.hdr.ah->frag_index[WSI_TOKEN_POST_URI] || - wsi->u.hdr.ah->frag_index[WSI_TOKEN_HTTP]) { + if (wsi->u.hdr.ah->frag_index[WSI_TOKEN_GET_URI] || + wsi->u.hdr.ah->frag_index[WSI_TOKEN_POST_URI] || + wsi->u.hdr.ah->frag_index[WSI_TOKEN_OPTIONS_URI] || + wsi->u.hdr.ah->frag_index[WSI_TOKEN_HTTP]) { /* * altready had the method, no idea what * this crap is, ignore @@ -449,6 +454,10 @@ swallow: wsi->u.hdr.ah->frag_index[WSI_TOKEN_POST_URI]) { lwsl_warn("Duplicated POST\n"); return -1; + } else if (n == WSI_TOKEN_OPTIONS_URI && + wsi->u.hdr.ah->frag_index[WSI_TOKEN_OPTIONS_URI]) { + lwsl_warn("Duplicated OPTIONS\n"); + return -1; } /* diff --git a/lib/server.c b/lib/server.c index 1e85186..6afd570 100644 --- a/lib/server.c +++ b/lib/server.c @@ -200,13 +200,14 @@ int lws_handshake_server(struct libwebsocket_context *context, /* it's not websocket.... shall we accept it as http? */ if (!lws_hdr_total_length(wsi, WSI_TOKEN_GET_URI) && - !lws_hdr_total_length(wsi, WSI_TOKEN_POST_URI)) { + !lws_hdr_total_length(wsi, WSI_TOKEN_POST_URI) && + !lws_hdr_total_length(wsi, WSI_TOKEN_OPTIONS_URI)) { lwsl_warn("Missing URI in HTTP request\n"); goto bail_nuke_ah; } if (lws_hdr_total_length(wsi, WSI_TOKEN_GET_URI) && - lws_hdr_total_length(wsi, WSI_TOKEN_POST_URI)) { + lws_hdr_total_length(wsi, WSI_TOKEN_POST_URI)) { lwsl_warn("GET and POST methods?\n"); goto bail_nuke_ah; } @@ -227,6 +228,12 @@ int lws_handshake_server(struct libwebsocket_context *context, uri_ptr = lws_hdr_simple_ptr(wsi, WSI_TOKEN_POST_URI); uri_len = lws_hdr_total_length(wsi, WSI_TOKEN_POST_URI); } + if (lws_hdr_total_length(wsi, WSI_TOKEN_OPTIONS_URI)) { + lwsl_info("HTTP OPTIONS request for '%s'\n", + lws_hdr_simple_ptr(wsi, WSI_TOKEN_OPTIONS_URI)); + uri_ptr = lws_hdr_simple_ptr(wsi, WSI_TOKEN_OPTIONS_URI); + uri_len = lws_hdr_total_length(wsi, WSI_TOKEN_OPTIONS_URI); + } /* * Hm we still need the headers so the -- 2.7.4