mirror of
https://github.com/warmcat/libwebsockets.git
synced 2025-03-09 00:00:04 +01:00
http2 able to send test.html to nghttp2
Signed-off-by: Andy Green <andy.green@linaro.org>
This commit is contained in:
parent
2add6340d5
commit
917f43ab82
9 changed files with 930 additions and 611 deletions
61
changelog
61
changelog
|
@ -27,6 +27,55 @@ the same writeable callback. If set, you can't do any more writes until the
|
|||
writeable callback is called again. If you only do one write per writeable callback,
|
||||
you can ignore this.
|
||||
|
||||
HTTP2-related: HTTP2 changes how headers are handled, lws now has new version-
|
||||
agnositic header creation APIs. These do the right thing depending on each
|
||||
connection's HTTP version without the user code having to know or care, except
|
||||
to make sure to use the new APIs for headers (test-server is updated to use
|
||||
them already, so look there for examples)
|
||||
|
||||
The APIs "render" the headers into a user-provided buffer and bump *p as it
|
||||
is used. If *p reaches end, then the APIs return nonzero for error.
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_add_http_header_status(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi,
|
||||
unsigned int code,
|
||||
unsigned char **p,
|
||||
unsigned char *end);
|
||||
|
||||
Start a response header reporting status like 200, 500, etc
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_add_http_header_by_name(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi,
|
||||
const unsigned char *name,
|
||||
const unsigned char *value,
|
||||
int length,
|
||||
unsigned char **p,
|
||||
unsigned char *end);
|
||||
|
||||
Add a header like name: value in HTTP1.x
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_finalize_http_header(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi,
|
||||
unsigned char **p,
|
||||
unsigned char *end);
|
||||
|
||||
Finish off the headers, like add the extra \r\n in HTTP1.x
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_add_http_header_by_token(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi,
|
||||
enum lws_token_indexes token,
|
||||
const unsigned char *value,
|
||||
int length,
|
||||
unsigned char **p,
|
||||
unsigned char *end);
|
||||
|
||||
Add a header by using a lws token as the name part. In HTTP2, this can be
|
||||
compressed to one or two bytes.
|
||||
|
||||
|
||||
User api removal
|
||||
----------------
|
||||
|
@ -37,6 +86,18 @@ partial send buffering is the only way to deal with the problem, so turning
|
|||
it off is deprecated.
|
||||
|
||||
|
||||
User api changes
|
||||
----------------
|
||||
|
||||
HTTP2-related: API libwebsockets_serve_http_file() takes an extra parameter at
|
||||
the end now
|
||||
|
||||
int other_headers_len)
|
||||
|
||||
If you are providing other headers, they must be generated using the new
|
||||
HTTP-version-agnostic APIs, and you must provide the length of them using this
|
||||
additional parameter.
|
||||
|
||||
|
||||
v1.3-chrome37-firefox30
|
||||
=======================
|
||||
|
|
95
lib/hpack.c
95
lib/hpack.c
|
@ -468,3 +468,98 @@ pre_data:
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lws_http2_num(int starting_bits, unsigned long num, unsigned char **p, unsigned char *end)
|
||||
{
|
||||
int mask = (1 << starting_bits) - 1;
|
||||
|
||||
if (num < mask) {
|
||||
*((*p)++) |= num;
|
||||
return *p >= end;
|
||||
}
|
||||
|
||||
*((*p)++) |= mask;
|
||||
if (*p >= end)
|
||||
return 1;
|
||||
|
||||
num -= mask;
|
||||
while (num >= 128) {
|
||||
*((*p)++) = 0x80 | (num & 0x7f);
|
||||
if (*p >= end)
|
||||
return 1;
|
||||
num >>= 7;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lws_add_http2_header_by_name(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi,
|
||||
const unsigned char *name,
|
||||
const unsigned char *value,
|
||||
int length,
|
||||
unsigned char **p,
|
||||
unsigned char *end)
|
||||
{
|
||||
int len;
|
||||
|
||||
lwsl_info("%s: %p %s:%s\n", __func__, *p, name, value);
|
||||
|
||||
len = strlen((char *)name);
|
||||
if (len)
|
||||
if (name[len - 1] == ':')
|
||||
len--;
|
||||
|
||||
if (end - *p < len + length + 8)
|
||||
return 1;
|
||||
|
||||
*((*p)++) = 0; /* not indexed, literal name */
|
||||
|
||||
**p = 0; /* non-HUF */
|
||||
if (lws_http2_num(7, len, p, end))
|
||||
return 1;
|
||||
memcpy(*p, name, len);
|
||||
*p += len;
|
||||
|
||||
*(*p) = 0; /* non-HUF */
|
||||
if (lws_http2_num(7, length, p, end))
|
||||
return 1;
|
||||
|
||||
memcpy(*p, value, length);
|
||||
*p += length;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lws_add_http2_header_by_token(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi,
|
||||
enum lws_token_indexes token,
|
||||
const unsigned char *value,
|
||||
int length,
|
||||
unsigned char **p,
|
||||
unsigned char *end)
|
||||
{
|
||||
const unsigned char *name;
|
||||
|
||||
name = lws_token_to_string(token);
|
||||
if (!name)
|
||||
return 1;
|
||||
|
||||
return lws_add_http2_header_by_name(context, wsi, name, value, length, p, end);
|
||||
}
|
||||
|
||||
int lws_add_http2_header_status(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi,
|
||||
unsigned int code,
|
||||
unsigned char **p,
|
||||
unsigned char *end)
|
||||
{
|
||||
unsigned char status[10];
|
||||
int n;
|
||||
|
||||
n = sprintf((char *)status, "%u", code);
|
||||
if (lws_add_http2_header_by_token(context, wsi, WSI_TOKEN_HTTP_COLON_STATUS, status, n, p, end))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
85
lib/lextable-strings.h
Normal file
85
lib/lextable-strings.h
Normal file
|
@ -0,0 +1,85 @@
|
|||
/* set of parsable strings -- ALL LOWER CASE */
|
||||
|
||||
static const char *set[] = {
|
||||
"get ",
|
||||
"post ",
|
||||
"options ",
|
||||
"host:",
|
||||
"connection:",
|
||||
"upgrade:",
|
||||
"origin:",
|
||||
"sec-websocket-draft:",
|
||||
"\x0d\x0a",
|
||||
|
||||
"sec-websocket-extensions:",
|
||||
"sec-websocket-key1:",
|
||||
"sec-websocket-key2:",
|
||||
"sec-websocket-protocol:",
|
||||
|
||||
"sec-websocket-accept:",
|
||||
"sec-websocket-nonce:",
|
||||
"http/1.1 ",
|
||||
"http2-settings:",
|
||||
|
||||
"accept:",
|
||||
"access-control-request-headers:",
|
||||
"if-modified-since:",
|
||||
"if-none-match:",
|
||||
"accept-encoding:",
|
||||
"accept-language:",
|
||||
"pragma:",
|
||||
"cache-control:",
|
||||
"authorization:",
|
||||
"cookie:",
|
||||
"content-length:",
|
||||
"content-type:",
|
||||
"date:",
|
||||
"range:",
|
||||
"referer:",
|
||||
"sec-websocket-key:",
|
||||
"sec-websocket-version:",
|
||||
"sec-websocket-origin:",
|
||||
|
||||
":authority:",
|
||||
":method:",
|
||||
":path:",
|
||||
":scheme:",
|
||||
":status:",
|
||||
|
||||
"accept-charset:",
|
||||
"accept-ranges:",
|
||||
"access-control-allow-origin:",
|
||||
"age:",
|
||||
"allow:",
|
||||
"content-disposition:",
|
||||
"content-encoding:",
|
||||
"content-language:",
|
||||
"content-location:",
|
||||
"content-range:",
|
||||
"etag:",
|
||||
"expect:",
|
||||
"expires:",
|
||||
"from:",
|
||||
"if-match:",
|
||||
"if-range:",
|
||||
"if-unmodified-since:",
|
||||
"last-modified:",
|
||||
"link:",
|
||||
"location:",
|
||||
"max-forwards:",
|
||||
"proxy-authenticate:",
|
||||
"proxy-authorization:",
|
||||
"refresh:",
|
||||
"retry-after:",
|
||||
"server:",
|
||||
"set-cookie:",
|
||||
"strict-transport-security:",
|
||||
"transfer-encoding:",
|
||||
"user-agent:",
|
||||
"vary:",
|
||||
"via:",
|
||||
"www-authenticate:",
|
||||
|
||||
"", /* not matchable */
|
||||
|
||||
};
|
850
lib/lextable.h
850
lib/lextable.h
|
@ -8,16 +8,16 @@
|
|||
0x0D /* '.' */, 0xC4, 0x00 /* (to 0x00D9 state 68) */,
|
||||
0x61 /* 'a' */, 0x16, 0x01 /* (to 0x012E state 129) */,
|
||||
0x69 /* 'i' */, 0x55, 0x01 /* (to 0x0170 state 163) */,
|
||||
0x64 /* 'd' */, 0xFB, 0x01 /* (to 0x0219 state 265) */,
|
||||
0x72 /* 'r' */, 0xFE, 0x01 /* (to 0x021F state 270) */,
|
||||
0x3A /* ':' */, 0x2F, 0x02 /* (to 0x0253 state 299) */,
|
||||
0x65 /* 'e' */, 0xB6, 0x02 /* (to 0x02DD state 405) */,
|
||||
0x66 /* 'f' */, 0xD2, 0x02 /* (to 0x02FC state 421) */,
|
||||
0x6C /* 'l' */, 0xF4, 0x02 /* (to 0x0321 state 454) */,
|
||||
0x6D /* 'm' */, 0x17, 0x03 /* (to 0x0347 state 480) */,
|
||||
0x74 /* 't' */, 0x80, 0x03 /* (to 0x03B3 state 574) */,
|
||||
0x76 /* 'v' */, 0x9B, 0x03 /* (to 0x03D1 state 602) */,
|
||||
0x77 /* 'w' */, 0xA8, 0x03 /* (to 0x03E1 state 610) */,
|
||||
0x64 /* 'd' */, 0xFE, 0x01 /* (to 0x021C state 265) */,
|
||||
0x72 /* 'r' */, 0x01, 0x02 /* (to 0x0222 state 270) */,
|
||||
0x3A /* ':' */, 0x32, 0x02 /* (to 0x0256 state 299) */,
|
||||
0x65 /* 'e' */, 0xC3, 0x02 /* (to 0x02EA state 414) */,
|
||||
0x66 /* 'f' */, 0xDF, 0x02 /* (to 0x0309 state 430) */,
|
||||
0x6C /* 'l' */, 0x01, 0x03 /* (to 0x032E state 463) */,
|
||||
0x6D /* 'm' */, 0x24, 0x03 /* (to 0x0354 state 489) */,
|
||||
0x74 /* 't' */, 0x8D, 0x03 /* (to 0x03C0 state 583) */,
|
||||
0x76 /* 'v' */, 0xA8, 0x03 /* (to 0x03DE state 611) */,
|
||||
0x77 /* 'w' */, 0xB5, 0x03 /* (to 0x03EE state 619) */,
|
||||
0x08, /* fail */
|
||||
/* pos 003d: 1 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 003e: 2 */ 0xF4 /* 't' -> */,
|
||||
|
@ -65,7 +65,7 @@
|
|||
/* pos 0084: 32 */ 0xBA /* ':' -> */,
|
||||
/* pos 0085: 33 */ 0x00, 0x04 /* - terminal marker 4 - */,
|
||||
/* pos 0087: 34 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x008E state 35) */,
|
||||
0x73 /* 's' */, 0x3C, 0x03 /* (to 0x03C6 state 592) */,
|
||||
0x73 /* 's' */, 0x49, 0x03 /* (to 0x03D3 state 601) */,
|
||||
0x08, /* fail */
|
||||
/* pos 008e: 35 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 008f: 36 */ 0xF2 /* 'r' -> */,
|
||||
|
@ -81,11 +81,11 @@
|
|||
/* pos 009a: 46 */ 0xBA /* ':' -> */,
|
||||
/* pos 009b: 47 */ 0x00, 0x06 /* - terminal marker 6 - */,
|
||||
/* pos 009d: 48 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x00A4 state 49) */,
|
||||
0x74 /* 't' */, 0xF9, 0x02 /* (to 0x0399 state 549) */,
|
||||
0x74 /* 't' */, 0x06, 0x03 /* (to 0x03A6 state 558) */,
|
||||
0x08, /* fail */
|
||||
/* pos 00a4: 49 */ 0x63 /* 'c' */, 0x0A, 0x00 /* (to 0x00AE state 50) */,
|
||||
0x72 /* 'r' */, 0xE2, 0x02 /* (to 0x0389 state 535) */,
|
||||
0x74 /* 't' */, 0xE5, 0x02 /* (to 0x038F state 540) */,
|
||||
0x72 /* 'r' */, 0xEF, 0x02 /* (to 0x0396 state 544) */,
|
||||
0x74 /* 't' */, 0xF2, 0x02 /* (to 0x039C state 549) */,
|
||||
0x08, /* fail */
|
||||
/* pos 00ae: 50 */ 0xAD /* '-' -> */,
|
||||
/* pos 00af: 51 */ 0xF7 /* 'w' -> */,
|
||||
|
@ -104,8 +104,8 @@
|
|||
0x70 /* 'p' */, 0x38, 0x00 /* (to 0x00FA state 88) */,
|
||||
0x61 /* 'a' */, 0x3F, 0x00 /* (to 0x0104 state 97) */,
|
||||
0x6E /* 'n' */, 0x44, 0x00 /* (to 0x010C state 104) */,
|
||||
0x76 /* 'v' */, 0x77, 0x01 /* (to 0x0242 state 284) */,
|
||||
0x6F /* 'o' */, 0x7D, 0x01 /* (to 0x024B state 292) */,
|
||||
0x76 /* 'v' */, 0x7A, 0x01 /* (to 0x0245 state 284) */,
|
||||
0x6F /* 'o' */, 0x80, 0x01 /* (to 0x024E state 292) */,
|
||||
0x08, /* fail */
|
||||
/* pos 00d2: 62 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 00d3: 63 */ 0xE1 /* 'a' -> */,
|
||||
|
@ -130,7 +130,7 @@
|
|||
/* pos 00e9: 82 */ 0xF9 /* 'y' -> */,
|
||||
/* pos 00ea: 83 */ 0x31 /* '1' */, 0x0A, 0x00 /* (to 0x00F4 state 84) */,
|
||||
0x32 /* '2' */, 0x0A, 0x00 /* (to 0x00F7 state 86) */,
|
||||
0x3A /* ':' */, 0x50, 0x01 /* (to 0x0240 state 283) */,
|
||||
0x3A /* ':' */, 0x53, 0x01 /* (to 0x0243 state 283) */,
|
||||
0x08, /* fail */
|
||||
/* pos 00f4: 84 */ 0xBA /* ':' -> */,
|
||||
/* pos 00f5: 85 */ 0x00, 0x0A /* - terminal marker 10 - */,
|
||||
|
@ -181,8 +181,8 @@
|
|||
/* pos 012c: 128 */ 0x00, 0x10 /* - terminal marker 16 - */,
|
||||
/* pos 012e: 129 */ 0x63 /* 'c' */, 0x0D, 0x00 /* (to 0x013B state 130) */,
|
||||
0x75 /* 'u' */, 0xAC, 0x00 /* (to 0x01DD state 230) */,
|
||||
0x67 /* 'g' */, 0x79, 0x01 /* (to 0x02AD state 363) */,
|
||||
0x6C /* 'l' */, 0x7A, 0x01 /* (to 0x02B1 state 366) */,
|
||||
0x67 /* 'g' */, 0x7C, 0x01 /* (to 0x02B0 state 363) */,
|
||||
0x6C /* 'l' */, 0x7D, 0x01 /* (to 0x02B4 state 366) */,
|
||||
0x08, /* fail */
|
||||
/* pos 013b: 130 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 013c: 131 */ 0xE5 /* 'e' -> */,
|
||||
|
@ -205,7 +205,7 @@
|
|||
/* pos 0156: 144 */ 0xEC /* 'l' -> */,
|
||||
/* pos 0157: 145 */ 0xAD /* '-' -> */,
|
||||
/* pos 0158: 146 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x015F state 147) */,
|
||||
0x61 /* 'a' */, 0x44, 0x01 /* (to 0x029F state 350) */,
|
||||
0x61 /* 'a' */, 0x47, 0x01 /* (to 0x02A2 state 350) */,
|
||||
0x08, /* fail */
|
||||
/* pos 015f: 147 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0160: 148 */ 0xF1 /* 'q' -> */,
|
||||
|
@ -227,11 +227,11 @@
|
|||
/* pos 0171: 164 */ 0xAD /* '-' -> */,
|
||||
/* pos 0172: 165 */ 0x6D /* 'm' */, 0x0D, 0x00 /* (to 0x017F state 166) */,
|
||||
0x6E /* 'n' */, 0x20, 0x00 /* (to 0x0195 state 181) */,
|
||||
0x72 /* 'r' */, 0x90, 0x01 /* (to 0x0308 state 431) */,
|
||||
0x75 /* 'u' */, 0x94, 0x01 /* (to 0x030F state 437) */,
|
||||
0x72 /* 'r' */, 0x9D, 0x01 /* (to 0x0315 state 440) */,
|
||||
0x75 /* 'u' */, 0xA1, 0x01 /* (to 0x031C state 446) */,
|
||||
0x08, /* fail */
|
||||
/* pos 017f: 166 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x0186 state 167) */,
|
||||
0x61 /* 'a' */, 0x80, 0x01 /* (to 0x0302 state 426) */,
|
||||
0x61 /* 'a' */, 0x8D, 0x01 /* (to 0x030F state 435) */,
|
||||
0x08, /* fail */
|
||||
/* pos 0186: 167 */ 0xE4 /* 'd' -> */,
|
||||
/* pos 0187: 168 */ 0xE9 /* 'i' -> */,
|
||||
|
@ -260,8 +260,8 @@
|
|||
/* pos 019f: 191 */ 0x00, 0x14 /* - terminal marker 20 - */,
|
||||
/* pos 01a1: 192 */ 0x65 /* 'e' */, 0x0D, 0x00 /* (to 0x01AE state 193) */,
|
||||
0x6C /* 'l' */, 0x14, 0x00 /* (to 0x01B8 state 202) */,
|
||||
0x63 /* 'c' */, 0xE7, 0x00 /* (to 0x028E state 335) */,
|
||||
0x72 /* 'r' */, 0xED, 0x00 /* (to 0x0297 state 343) */,
|
||||
0x63 /* 'c' */, 0xEA, 0x00 /* (to 0x0291 state 335) */,
|
||||
0x72 /* 'r' */, 0xF0, 0x00 /* (to 0x029A state 343) */,
|
||||
0x08, /* fail */
|
||||
/* pos 01ae: 193 */ 0xEE /* 'n' -> */,
|
||||
/* pos 01af: 194 */ 0xE3 /* 'c' -> */,
|
||||
|
@ -282,7 +282,7 @@
|
|||
/* pos 01bf: 209 */ 0xBA /* ':' -> */,
|
||||
/* pos 01c0: 210 */ 0x00, 0x16 /* - terminal marker 22 - */,
|
||||
/* pos 01c2: 211 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x01C9 state 212) */,
|
||||
0x6F /* 'o' */, 0x90, 0x01 /* (to 0x0355 state 493) */,
|
||||
0x6F /* 'o' */, 0x9D, 0x01 /* (to 0x0362 state 502) */,
|
||||
0x08, /* fail */
|
||||
/* pos 01c9: 212 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 01ca: 213 */ 0xED /* 'm' -> */,
|
||||
|
@ -324,409 +324,419 @@
|
|||
/* pos 01f2: 249 */ 0xEE /* 'n' -> */,
|
||||
/* pos 01f3: 250 */ 0xF4 /* 't' -> */,
|
||||
/* pos 01f4: 251 */ 0xAD /* '-' -> */,
|
||||
/* pos 01f5: 252 */ 0x6C /* 'l' */, 0x0D, 0x00 /* (to 0x0202 state 253) */,
|
||||
0x74 /* 't' */, 0x1B, 0x00 /* (to 0x0213 state 260) */,
|
||||
0x64 /* 'd' */, 0xBC, 0x00 /* (to 0x02B7 state 371) */,
|
||||
0x72 /* 'r' */, 0xD8, 0x00 /* (to 0x02D6 state 399) */,
|
||||
/* pos 01f5: 252 */ 0x6C /* 'l' */, 0x10, 0x00 /* (to 0x0205 state 253) */,
|
||||
0x74 /* 't' */, 0x1E, 0x00 /* (to 0x0216 state 260) */,
|
||||
0x64 /* 'd' */, 0xBF, 0x00 /* (to 0x02BA state 371) */,
|
||||
0x65 /* 'e' */, 0xC9, 0x00 /* (to 0x02C7 state 383) */,
|
||||
0x72 /* 'r' */, 0xE2, 0x00 /* (to 0x02E3 state 408) */,
|
||||
0x08, /* fail */
|
||||
/* pos 0202: 253 */ 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x020C state 254) */,
|
||||
0x61 /* 'a' */, 0xBF, 0x00 /* (to 0x02C4 state 383) */,
|
||||
0x6F /* 'o' */, 0xC5, 0x00 /* (to 0x02CD state 391) */,
|
||||
/* pos 0205: 253 */ 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x020F state 254) */,
|
||||
0x61 /* 'a' */, 0xC9, 0x00 /* (to 0x02D1 state 392) */,
|
||||
0x6F /* 'o' */, 0xCF, 0x00 /* (to 0x02DA state 400) */,
|
||||
0x08, /* fail */
|
||||
/* pos 020c: 254 */ 0xEE /* 'n' -> */,
|
||||
/* pos 020d: 255 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 020e: 256 */ 0xF4 /* 't' -> */,
|
||||
/* pos 020f: 257 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 0210: 258 */ 0xBA /* ':' -> */,
|
||||
/* pos 0211: 259 */ 0x00, 0x1B /* - terminal marker 27 - */,
|
||||
/* pos 0213: 260 */ 0xF9 /* 'y' -> */,
|
||||
/* pos 0214: 261 */ 0xF0 /* 'p' -> */,
|
||||
/* pos 0215: 262 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0216: 263 */ 0xBA /* ':' -> */,
|
||||
/* pos 0217: 264 */ 0x00, 0x1C /* - terminal marker 28 - */,
|
||||
/* pos 0219: 265 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 021a: 266 */ 0xF4 /* 't' -> */,
|
||||
/* pos 021b: 267 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 021c: 268 */ 0xBA /* ':' -> */,
|
||||
/* pos 021d: 269 */ 0x00, 0x1D /* - terminal marker 29 - */,
|
||||
/* pos 021f: 270 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0226 state 271) */,
|
||||
0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x022C state 276) */,
|
||||
/* pos 020f: 254 */ 0xEE /* 'n' -> */,
|
||||
/* pos 0210: 255 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 0211: 256 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0212: 257 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 0213: 258 */ 0xBA /* ':' -> */,
|
||||
/* pos 0214: 259 */ 0x00, 0x1B /* - terminal marker 27 - */,
|
||||
/* pos 0216: 260 */ 0xF9 /* 'y' -> */,
|
||||
/* pos 0217: 261 */ 0xF0 /* 'p' -> */,
|
||||
/* pos 0218: 262 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0219: 263 */ 0xBA /* ':' -> */,
|
||||
/* pos 021a: 264 */ 0x00, 0x1C /* - terminal marker 28 - */,
|
||||
/* pos 021c: 265 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 021d: 266 */ 0xF4 /* 't' -> */,
|
||||
/* pos 021e: 267 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 021f: 268 */ 0xBA /* ':' -> */,
|
||||
/* pos 0220: 269 */ 0x00, 0x1D /* - terminal marker 29 - */,
|
||||
/* pos 0222: 270 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0229 state 271) */,
|
||||
0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x022F state 276) */,
|
||||
0x08, /* fail */
|
||||
/* pos 0226: 271 */ 0xEE /* 'n' -> */,
|
||||
/* pos 0227: 272 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 0228: 273 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0229: 274 */ 0xBA /* ':' -> */,
|
||||
/* pos 022a: 275 */ 0x00, 0x1E /* - terminal marker 30 - */,
|
||||
/* pos 022c: 276 */ 0x66 /* 'f' */, 0x07, 0x00 /* (to 0x0233 state 277) */,
|
||||
0x74 /* 't' */, 0x4F, 0x01 /* (to 0x037E state 525) */,
|
||||
/* pos 0229: 271 */ 0xEE /* 'n' -> */,
|
||||
/* pos 022a: 272 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 022b: 273 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 022c: 274 */ 0xBA /* ':' -> */,
|
||||
/* pos 022d: 275 */ 0x00, 0x1E /* - terminal marker 30 - */,
|
||||
/* pos 022f: 276 */ 0x66 /* 'f' */, 0x07, 0x00 /* (to 0x0236 state 277) */,
|
||||
0x74 /* 't' */, 0x59, 0x01 /* (to 0x038B state 534) */,
|
||||
0x08, /* fail */
|
||||
/* pos 0233: 277 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x023A state 278) */,
|
||||
0x72 /* 'r' */, 0x42, 0x01 /* (to 0x0378 state 520) */,
|
||||
/* pos 0236: 277 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x023D state 278) */,
|
||||
0x72 /* 'r' */, 0x4C, 0x01 /* (to 0x0385 state 529) */,
|
||||
0x08, /* fail */
|
||||
/* pos 023a: 278 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 023b: 279 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 023c: 280 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 023d: 281 */ 0xBA /* ':' -> */,
|
||||
/* pos 023e: 282 */ 0x00, 0x1F /* - terminal marker 31 - */,
|
||||
/* pos 0240: 283 */ 0x00, 0x20 /* - terminal marker 32 - */,
|
||||
/* pos 0242: 284 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0243: 285 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 0244: 286 */ 0xF3 /* 's' -> */,
|
||||
/* pos 0245: 287 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0246: 288 */ 0xEF /* 'o' -> */,
|
||||
/* pos 0247: 289 */ 0xEE /* 'n' -> */,
|
||||
/* pos 0248: 290 */ 0xBA /* ':' -> */,
|
||||
/* pos 0249: 291 */ 0x00, 0x21 /* - terminal marker 33 - */,
|
||||
/* pos 024b: 292 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 024c: 293 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 024d: 294 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 024e: 295 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 024f: 296 */ 0xEE /* 'n' -> */,
|
||||
/* pos 0250: 297 */ 0xBA /* ':' -> */,
|
||||
/* pos 0251: 298 */ 0x00, 0x22 /* - terminal marker 34 - */,
|
||||
/* pos 0253: 299 */ 0x61 /* 'a' */, 0x0D, 0x00 /* (to 0x0260 state 300) */,
|
||||
0x6D /* 'm' */, 0x15, 0x00 /* (to 0x026B state 310) */,
|
||||
0x70 /* 'p' */, 0x1A, 0x00 /* (to 0x0273 state 317) */,
|
||||
0x73 /* 's' */, 0x1D, 0x00 /* (to 0x0279 state 322) */,
|
||||
/* pos 023d: 278 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 023e: 279 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 023f: 280 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 0240: 281 */ 0xBA /* ':' -> */,
|
||||
/* pos 0241: 282 */ 0x00, 0x1F /* - terminal marker 31 - */,
|
||||
/* pos 0243: 283 */ 0x00, 0x20 /* - terminal marker 32 - */,
|
||||
/* pos 0245: 284 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0246: 285 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 0247: 286 */ 0xF3 /* 's' -> */,
|
||||
/* pos 0248: 287 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0249: 288 */ 0xEF /* 'o' -> */,
|
||||
/* pos 024a: 289 */ 0xEE /* 'n' -> */,
|
||||
/* pos 024b: 290 */ 0xBA /* ':' -> */,
|
||||
/* pos 024c: 291 */ 0x00, 0x21 /* - terminal marker 33 - */,
|
||||
/* pos 024e: 292 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 024f: 293 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0250: 294 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 0251: 295 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0252: 296 */ 0xEE /* 'n' -> */,
|
||||
/* pos 0253: 297 */ 0xBA /* ':' -> */,
|
||||
/* pos 0254: 298 */ 0x00, 0x22 /* - terminal marker 34 - */,
|
||||
/* pos 0256: 299 */ 0x61 /* 'a' */, 0x0D, 0x00 /* (to 0x0263 state 300) */,
|
||||
0x6D /* 'm' */, 0x15, 0x00 /* (to 0x026E state 310) */,
|
||||
0x70 /* 'p' */, 0x1A, 0x00 /* (to 0x0276 state 317) */,
|
||||
0x73 /* 's' */, 0x1D, 0x00 /* (to 0x027C state 322) */,
|
||||
0x08, /* fail */
|
||||
/* pos 0260: 300 */ 0xF5 /* 'u' -> */,
|
||||
/* pos 0261: 301 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0262: 302 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 0263: 303 */ 0xEF /* 'o' -> */,
|
||||
/* pos 0264: 304 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 0265: 305 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0266: 306 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0267: 307 */ 0xF9 /* 'y' -> */,
|
||||
/* pos 0268: 308 */ 0xBA /* ':' -> */,
|
||||
/* pos 0269: 309 */ 0x00, 0x23 /* - terminal marker 35 - */,
|
||||
/* pos 026b: 310 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 026c: 311 */ 0xF4 /* 't' -> */,
|
||||
/* pos 026d: 312 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 026e: 313 */ 0xEF /* 'o' -> */,
|
||||
/* pos 026f: 314 */ 0xE4 /* 'd' -> */,
|
||||
/* pos 0270: 315 */ 0xBA /* ':' -> */,
|
||||
/* pos 0271: 316 */ 0x00, 0x24 /* - terminal marker 36 - */,
|
||||
/* pos 0273: 317 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 0274: 318 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0275: 319 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 0276: 320 */ 0xBA /* ':' -> */,
|
||||
/* pos 0277: 321 */ 0x00, 0x25 /* - terminal marker 37 - */,
|
||||
/* pos 0279: 322 */ 0x63 /* 'c' */, 0x07, 0x00 /* (to 0x0280 state 323) */,
|
||||
0x74 /* 't' */, 0x0B, 0x00 /* (to 0x0287 state 329) */,
|
||||
/* pos 0263: 300 */ 0xF5 /* 'u' -> */,
|
||||
/* pos 0264: 301 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0265: 302 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 0266: 303 */ 0xEF /* 'o' -> */,
|
||||
/* pos 0267: 304 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 0268: 305 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0269: 306 */ 0xF4 /* 't' -> */,
|
||||
/* pos 026a: 307 */ 0xF9 /* 'y' -> */,
|
||||
/* pos 026b: 308 */ 0xBA /* ':' -> */,
|
||||
/* pos 026c: 309 */ 0x00, 0x23 /* - terminal marker 35 - */,
|
||||
/* pos 026e: 310 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 026f: 311 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0270: 312 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 0271: 313 */ 0xEF /* 'o' -> */,
|
||||
/* pos 0272: 314 */ 0xE4 /* 'd' -> */,
|
||||
/* pos 0273: 315 */ 0xBA /* ':' -> */,
|
||||
/* pos 0274: 316 */ 0x00, 0x24 /* - terminal marker 36 - */,
|
||||
/* pos 0276: 317 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 0277: 318 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0278: 319 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 0279: 320 */ 0xBA /* ':' -> */,
|
||||
/* pos 027a: 321 */ 0x00, 0x25 /* - terminal marker 37 - */,
|
||||
/* pos 027c: 322 */ 0x63 /* 'c' */, 0x07, 0x00 /* (to 0x0283 state 323) */,
|
||||
0x74 /* 't' */, 0x0B, 0x00 /* (to 0x028A state 329) */,
|
||||
0x08, /* fail */
|
||||
/* pos 0280: 323 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 0281: 324 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0282: 325 */ 0xED /* 'm' -> */,
|
||||
/* pos 0283: 326 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0284: 327 */ 0xBA /* ':' -> */,
|
||||
/* pos 0285: 328 */ 0x00, 0x26 /* - terminal marker 38 - */,
|
||||
/* pos 0287: 329 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 0288: 330 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0289: 331 */ 0xF5 /* 'u' -> */,
|
||||
/* pos 028a: 332 */ 0xF3 /* 's' -> */,
|
||||
/* pos 028b: 333 */ 0xBA /* ':' -> */,
|
||||
/* pos 028c: 334 */ 0x00, 0x27 /* - terminal marker 39 - */,
|
||||
/* pos 028e: 335 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 028f: 336 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 0290: 337 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 0291: 338 */ 0xF3 /* 's' -> */,
|
||||
/* pos 0292: 339 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0293: 340 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0294: 341 */ 0xBA /* ':' -> */,
|
||||
/* pos 0295: 342 */ 0x00, 0x28 /* - terminal marker 40 - */,
|
||||
/* pos 0297: 343 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 0298: 344 */ 0xEE /* 'n' -> */,
|
||||
/* pos 0299: 345 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 029a: 346 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 029b: 347 */ 0xF3 /* 's' -> */,
|
||||
/* pos 029c: 348 */ 0xBA /* ':' -> */,
|
||||
/* pos 029d: 349 */ 0x00, 0x29 /* - terminal marker 41 - */,
|
||||
/* pos 029f: 350 */ 0xEC /* 'l' -> */,
|
||||
/* pos 02a0: 351 */ 0xEC /* 'l' -> */,
|
||||
/* pos 02a1: 352 */ 0xEF /* 'o' -> */,
|
||||
/* pos 02a2: 353 */ 0xF7 /* 'w' -> */,
|
||||
/* pos 02a3: 354 */ 0xAD /* '-' -> */,
|
||||
/* pos 02a4: 355 */ 0xEF /* 'o' -> */,
|
||||
/* pos 02a5: 356 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 02a6: 357 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 02a7: 358 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 02a8: 359 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 02a9: 360 */ 0xEE /* 'n' -> */,
|
||||
/* pos 02aa: 361 */ 0xBA /* ':' -> */,
|
||||
/* pos 02ab: 362 */ 0x00, 0x2A /* - terminal marker 42 - */,
|
||||
/* pos 02ad: 363 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 02ae: 364 */ 0xBA /* ':' -> */,
|
||||
/* pos 02af: 365 */ 0x00, 0x2B /* - terminal marker 43 - */,
|
||||
/* pos 02b1: 366 */ 0xEC /* 'l' -> */,
|
||||
/* pos 02b2: 367 */ 0xEF /* 'o' -> */,
|
||||
/* pos 02b3: 368 */ 0xF7 /* 'w' -> */,
|
||||
/* pos 02b4: 369 */ 0xBA /* ':' -> */,
|
||||
/* pos 02b5: 370 */ 0x00, 0x2C /* - terminal marker 44 - */,
|
||||
/* pos 02b7: 371 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 02b8: 372 */ 0xF3 /* 's' -> */,
|
||||
/* pos 02b9: 373 */ 0xF0 /* 'p' -> */,
|
||||
/* pos 02ba: 374 */ 0xEF /* 'o' -> */,
|
||||
/* pos 02bb: 375 */ 0xF3 /* 's' -> */,
|
||||
/* pos 02bc: 376 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 02bd: 377 */ 0xF4 /* 't' -> */,
|
||||
/* pos 02be: 378 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 02bf: 379 */ 0xEF /* 'o' -> */,
|
||||
/* pos 02c0: 380 */ 0xEE /* 'n' -> */,
|
||||
/* pos 02c1: 381 */ 0xBA /* ':' -> */,
|
||||
/* pos 02c2: 382 */ 0x00, 0x2D /* - terminal marker 45 - */,
|
||||
/* pos 02c4: 383 */ 0xEE /* 'n' -> */,
|
||||
/* pos 02c5: 384 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 02c6: 385 */ 0xF5 /* 'u' -> */,
|
||||
/* pos 02c7: 386 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 02c8: 387 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 02c9: 388 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 02ca: 389 */ 0xBA /* ':' -> */,
|
||||
/* pos 02cb: 390 */ 0x00, 0x2E /* - terminal marker 46 - */,
|
||||
/* pos 02cd: 391 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 02ce: 392 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 02cf: 393 */ 0xF4 /* 't' -> */,
|
||||
/* pos 02d0: 394 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 02d1: 395 */ 0xEF /* 'o' -> */,
|
||||
/* pos 02d2: 396 */ 0xEE /* 'n' -> */,
|
||||
/* pos 02d3: 397 */ 0xBA /* ':' -> */,
|
||||
/* pos 02d4: 398 */ 0x00, 0x2F /* - terminal marker 47 - */,
|
||||
/* pos 02d6: 399 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 02d7: 400 */ 0xEE /* 'n' -> */,
|
||||
/* pos 02d8: 401 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 02d9: 402 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 02da: 403 */ 0xBA /* ':' -> */,
|
||||
/* pos 02db: 404 */ 0x00, 0x30 /* - terminal marker 48 - */,
|
||||
/* pos 02dd: 405 */ 0x74 /* 't' */, 0x07, 0x00 /* (to 0x02E4 state 406) */,
|
||||
0x78 /* 'x' */, 0x09, 0x00 /* (to 0x02E9 state 410) */,
|
||||
/* pos 0283: 323 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 0284: 324 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0285: 325 */ 0xED /* 'm' -> */,
|
||||
/* pos 0286: 326 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0287: 327 */ 0xBA /* ':' -> */,
|
||||
/* pos 0288: 328 */ 0x00, 0x26 /* - terminal marker 38 - */,
|
||||
/* pos 028a: 329 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 028b: 330 */ 0xF4 /* 't' -> */,
|
||||
/* pos 028c: 331 */ 0xF5 /* 'u' -> */,
|
||||
/* pos 028d: 332 */ 0xF3 /* 's' -> */,
|
||||
/* pos 028e: 333 */ 0xBA /* ':' -> */,
|
||||
/* pos 028f: 334 */ 0x00, 0x27 /* - terminal marker 39 - */,
|
||||
/* pos 0291: 335 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 0292: 336 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 0293: 337 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 0294: 338 */ 0xF3 /* 's' -> */,
|
||||
/* pos 0295: 339 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0296: 340 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0297: 341 */ 0xBA /* ':' -> */,
|
||||
/* pos 0298: 342 */ 0x00, 0x28 /* - terminal marker 40 - */,
|
||||
/* pos 029a: 343 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 029b: 344 */ 0xEE /* 'n' -> */,
|
||||
/* pos 029c: 345 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 029d: 346 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 029e: 347 */ 0xF3 /* 's' -> */,
|
||||
/* pos 029f: 348 */ 0xBA /* ':' -> */,
|
||||
/* pos 02a0: 349 */ 0x00, 0x29 /* - terminal marker 41 - */,
|
||||
/* pos 02a2: 350 */ 0xEC /* 'l' -> */,
|
||||
/* pos 02a3: 351 */ 0xEC /* 'l' -> */,
|
||||
/* pos 02a4: 352 */ 0xEF /* 'o' -> */,
|
||||
/* pos 02a5: 353 */ 0xF7 /* 'w' -> */,
|
||||
/* pos 02a6: 354 */ 0xAD /* '-' -> */,
|
||||
/* pos 02a7: 355 */ 0xEF /* 'o' -> */,
|
||||
/* pos 02a8: 356 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 02a9: 357 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 02aa: 358 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 02ab: 359 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 02ac: 360 */ 0xEE /* 'n' -> */,
|
||||
/* pos 02ad: 361 */ 0xBA /* ':' -> */,
|
||||
/* pos 02ae: 362 */ 0x00, 0x2A /* - terminal marker 42 - */,
|
||||
/* pos 02b0: 363 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 02b1: 364 */ 0xBA /* ':' -> */,
|
||||
/* pos 02b2: 365 */ 0x00, 0x2B /* - terminal marker 43 - */,
|
||||
/* pos 02b4: 366 */ 0xEC /* 'l' -> */,
|
||||
/* pos 02b5: 367 */ 0xEF /* 'o' -> */,
|
||||
/* pos 02b6: 368 */ 0xF7 /* 'w' -> */,
|
||||
/* pos 02b7: 369 */ 0xBA /* ':' -> */,
|
||||
/* pos 02b8: 370 */ 0x00, 0x2C /* - terminal marker 44 - */,
|
||||
/* pos 02ba: 371 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 02bb: 372 */ 0xF3 /* 's' -> */,
|
||||
/* pos 02bc: 373 */ 0xF0 /* 'p' -> */,
|
||||
/* pos 02bd: 374 */ 0xEF /* 'o' -> */,
|
||||
/* pos 02be: 375 */ 0xF3 /* 's' -> */,
|
||||
/* pos 02bf: 376 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 02c0: 377 */ 0xF4 /* 't' -> */,
|
||||
/* pos 02c1: 378 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 02c2: 379 */ 0xEF /* 'o' -> */,
|
||||
/* pos 02c3: 380 */ 0xEE /* 'n' -> */,
|
||||
/* pos 02c4: 381 */ 0xBA /* ':' -> */,
|
||||
/* pos 02c5: 382 */ 0x00, 0x2D /* - terminal marker 45 - */,
|
||||
/* pos 02c7: 383 */ 0xEE /* 'n' -> */,
|
||||
/* pos 02c8: 384 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 02c9: 385 */ 0xEF /* 'o' -> */,
|
||||
/* pos 02ca: 386 */ 0xE4 /* 'd' -> */,
|
||||
/* pos 02cb: 387 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 02cc: 388 */ 0xEE /* 'n' -> */,
|
||||
/* pos 02cd: 389 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 02ce: 390 */ 0xBA /* ':' -> */,
|
||||
/* pos 02cf: 391 */ 0x00, 0x2E /* - terminal marker 46 - */,
|
||||
/* pos 02d1: 392 */ 0xEE /* 'n' -> */,
|
||||
/* pos 02d2: 393 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 02d3: 394 */ 0xF5 /* 'u' -> */,
|
||||
/* pos 02d4: 395 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 02d5: 396 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 02d6: 397 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 02d7: 398 */ 0xBA /* ':' -> */,
|
||||
/* pos 02d8: 399 */ 0x00, 0x2F /* - terminal marker 47 - */,
|
||||
/* pos 02da: 400 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 02db: 401 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 02dc: 402 */ 0xF4 /* 't' -> */,
|
||||
/* pos 02dd: 403 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 02de: 404 */ 0xEF /* 'o' -> */,
|
||||
/* pos 02df: 405 */ 0xEE /* 'n' -> */,
|
||||
/* pos 02e0: 406 */ 0xBA /* ':' -> */,
|
||||
/* pos 02e1: 407 */ 0x00, 0x30 /* - terminal marker 48 - */,
|
||||
/* pos 02e3: 408 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 02e4: 409 */ 0xEE /* 'n' -> */,
|
||||
/* pos 02e5: 410 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 02e6: 411 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 02e7: 412 */ 0xBA /* ':' -> */,
|
||||
/* pos 02e8: 413 */ 0x00, 0x31 /* - terminal marker 49 - */,
|
||||
/* pos 02ea: 414 */ 0x74 /* 't' */, 0x07, 0x00 /* (to 0x02F1 state 415) */,
|
||||
0x78 /* 'x' */, 0x09, 0x00 /* (to 0x02F6 state 419) */,
|
||||
0x08, /* fail */
|
||||
/* pos 02e4: 406 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 02e5: 407 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 02e6: 408 */ 0xBA /* ':' -> */,
|
||||
/* pos 02e7: 409 */ 0x00, 0x31 /* - terminal marker 49 - */,
|
||||
/* pos 02e9: 410 */ 0xF0 /* 'p' -> */,
|
||||
/* pos 02ea: 411 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x02F1 state 412) */,
|
||||
0x69 /* 'i' */, 0x09, 0x00 /* (to 0x02F6 state 416) */,
|
||||
/* pos 02f1: 415 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 02f2: 416 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 02f3: 417 */ 0xBA /* ':' -> */,
|
||||
/* pos 02f4: 418 */ 0x00, 0x32 /* - terminal marker 50 - */,
|
||||
/* pos 02f6: 419 */ 0xF0 /* 'p' -> */,
|
||||
/* pos 02f7: 420 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x02FE state 421) */,
|
||||
0x69 /* 'i' */, 0x09, 0x00 /* (to 0x0303 state 425) */,
|
||||
0x08, /* fail */
|
||||
/* pos 02f1: 412 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 02f2: 413 */ 0xF4 /* 't' -> */,
|
||||
/* pos 02f3: 414 */ 0xBA /* ':' -> */,
|
||||
/* pos 02f4: 415 */ 0x00, 0x32 /* - terminal marker 50 - */,
|
||||
/* pos 02f6: 416 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 02f7: 417 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 02f8: 418 */ 0xF3 /* 's' -> */,
|
||||
/* pos 02f9: 419 */ 0xBA /* ':' -> */,
|
||||
/* pos 02fa: 420 */ 0x00, 0x33 /* - terminal marker 51 - */,
|
||||
/* pos 02fc: 421 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 02fd: 422 */ 0xEF /* 'o' -> */,
|
||||
/* pos 02fe: 423 */ 0xED /* 'm' -> */,
|
||||
/* pos 02ff: 424 */ 0xBA /* ':' -> */,
|
||||
/* pos 0300: 425 */ 0x00, 0x34 /* - terminal marker 52 - */,
|
||||
/* pos 0302: 426 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0303: 427 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 0304: 428 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 0305: 429 */ 0xBA /* ':' -> */,
|
||||
/* pos 0306: 430 */ 0x00, 0x35 /* - terminal marker 53 - */,
|
||||
/* pos 0308: 431 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 0309: 432 */ 0xEE /* 'n' -> */,
|
||||
/* pos 030a: 433 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 030b: 434 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 030c: 435 */ 0xBA /* ':' -> */,
|
||||
/* pos 030d: 436 */ 0x00, 0x36 /* - terminal marker 54 - */,
|
||||
/* pos 030f: 437 */ 0xEE /* 'n' -> */,
|
||||
/* pos 0310: 438 */ 0xED /* 'm' -> */,
|
||||
/* pos 0311: 439 */ 0xEF /* 'o' -> */,
|
||||
/* pos 0312: 440 */ 0xE4 /* 'd' -> */,
|
||||
/* pos 0313: 441 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0314: 442 */ 0xE6 /* 'f' -> */,
|
||||
/* pos 0315: 443 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0316: 444 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0317: 445 */ 0xE4 /* 'd' -> */,
|
||||
/* pos 0318: 446 */ 0xAD /* '-' -> */,
|
||||
/* pos 0319: 447 */ 0xF3 /* 's' -> */,
|
||||
/* pos 031a: 448 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 031b: 449 */ 0xEE /* 'n' -> */,
|
||||
/* pos 031c: 450 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 031d: 451 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 031e: 452 */ 0xBA /* ':' -> */,
|
||||
/* pos 031f: 453 */ 0x00, 0x37 /* - terminal marker 55 - */,
|
||||
/* pos 0321: 454 */ 0x61 /* 'a' */, 0x0A, 0x00 /* (to 0x032B state 455) */,
|
||||
0x69 /* 'i' */, 0x15, 0x00 /* (to 0x0339 state 468) */,
|
||||
0x6F /* 'o' */, 0x17, 0x00 /* (to 0x033E state 472) */,
|
||||
/* pos 02fe: 421 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 02ff: 422 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0300: 423 */ 0xBA /* ':' -> */,
|
||||
/* pos 0301: 424 */ 0x00, 0x33 /* - terminal marker 51 - */,
|
||||
/* pos 0303: 425 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 0304: 426 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0305: 427 */ 0xF3 /* 's' -> */,
|
||||
/* pos 0306: 428 */ 0xBA /* ':' -> */,
|
||||
/* pos 0307: 429 */ 0x00, 0x34 /* - terminal marker 52 - */,
|
||||
/* pos 0309: 430 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 030a: 431 */ 0xEF /* 'o' -> */,
|
||||
/* pos 030b: 432 */ 0xED /* 'm' -> */,
|
||||
/* pos 030c: 433 */ 0xBA /* ':' -> */,
|
||||
/* pos 030d: 434 */ 0x00, 0x35 /* - terminal marker 53 - */,
|
||||
/* pos 030f: 435 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0310: 436 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 0311: 437 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 0312: 438 */ 0xBA /* ':' -> */,
|
||||
/* pos 0313: 439 */ 0x00, 0x36 /* - terminal marker 54 - */,
|
||||
/* pos 0315: 440 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 0316: 441 */ 0xEE /* 'n' -> */,
|
||||
/* pos 0317: 442 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 0318: 443 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0319: 444 */ 0xBA /* ':' -> */,
|
||||
/* pos 031a: 445 */ 0x00, 0x37 /* - terminal marker 55 - */,
|
||||
/* pos 031c: 446 */ 0xEE /* 'n' -> */,
|
||||
/* pos 031d: 447 */ 0xED /* 'm' -> */,
|
||||
/* pos 031e: 448 */ 0xEF /* 'o' -> */,
|
||||
/* pos 031f: 449 */ 0xE4 /* 'd' -> */,
|
||||
/* pos 0320: 450 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0321: 451 */ 0xE6 /* 'f' -> */,
|
||||
/* pos 0322: 452 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0323: 453 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0324: 454 */ 0xE4 /* 'd' -> */,
|
||||
/* pos 0325: 455 */ 0xAD /* '-' -> */,
|
||||
/* pos 0326: 456 */ 0xF3 /* 's' -> */,
|
||||
/* pos 0327: 457 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0328: 458 */ 0xEE /* 'n' -> */,
|
||||
/* pos 0329: 459 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 032a: 460 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 032b: 461 */ 0xBA /* ':' -> */,
|
||||
/* pos 032c: 462 */ 0x00, 0x38 /* - terminal marker 56 - */,
|
||||
/* pos 032e: 463 */ 0x61 /* 'a' */, 0x0A, 0x00 /* (to 0x0338 state 464) */,
|
||||
0x69 /* 'i' */, 0x15, 0x00 /* (to 0x0346 state 477) */,
|
||||
0x6F /* 'o' */, 0x17, 0x00 /* (to 0x034B state 481) */,
|
||||
0x08, /* fail */
|
||||
/* pos 032b: 455 */ 0xF3 /* 's' -> */,
|
||||
/* pos 032c: 456 */ 0xF4 /* 't' -> */,
|
||||
/* pos 032d: 457 */ 0xAD /* '-' -> */,
|
||||
/* pos 032e: 458 */ 0xED /* 'm' -> */,
|
||||
/* pos 032f: 459 */ 0xEF /* 'o' -> */,
|
||||
/* pos 0330: 460 */ 0xE4 /* 'd' -> */,
|
||||
/* pos 0331: 461 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0332: 462 */ 0xE6 /* 'f' -> */,
|
||||
/* pos 0333: 463 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0334: 464 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0335: 465 */ 0xE4 /* 'd' -> */,
|
||||
/* pos 0336: 466 */ 0xBA /* ':' -> */,
|
||||
/* pos 0337: 467 */ 0x00, 0x38 /* - terminal marker 56 - */,
|
||||
/* pos 0339: 468 */ 0xEE /* 'n' -> */,
|
||||
/* pos 033a: 469 */ 0xEB /* 'k' -> */,
|
||||
/* pos 033b: 470 */ 0xBA /* ':' -> */,
|
||||
/* pos 033c: 471 */ 0x00, 0x39 /* - terminal marker 57 - */,
|
||||
/* pos 033e: 472 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 033f: 473 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 0340: 474 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0341: 475 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0342: 476 */ 0xEF /* 'o' -> */,
|
||||
/* pos 0343: 477 */ 0xEE /* 'n' -> */,
|
||||
/* pos 0344: 478 */ 0xBA /* ':' -> */,
|
||||
/* pos 0345: 479 */ 0x00, 0x3A /* - terminal marker 58 - */,
|
||||
/* pos 0347: 480 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 0348: 481 */ 0xF8 /* 'x' -> */,
|
||||
/* pos 0349: 482 */ 0xAD /* '-' -> */,
|
||||
/* pos 034a: 483 */ 0xE6 /* 'f' -> */,
|
||||
/* pos 034b: 484 */ 0xEF /* 'o' -> */,
|
||||
/* pos 034c: 485 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 034d: 486 */ 0xF7 /* 'w' -> */,
|
||||
/* pos 034e: 487 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 034f: 488 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 0350: 489 */ 0xE4 /* 'd' -> */,
|
||||
/* pos 0351: 490 */ 0xF3 /* 's' -> */,
|
||||
/* pos 0352: 491 */ 0xBA /* ':' -> */,
|
||||
/* pos 0353: 492 */ 0x00, 0x3B /* - terminal marker 59 - */,
|
||||
/* pos 0355: 493 */ 0xF8 /* 'x' -> */,
|
||||
/* pos 0356: 494 */ 0xF9 /* 'y' -> */,
|
||||
/* pos 0357: 495 */ 0xAD /* '-' -> */,
|
||||
/* pos 0358: 496 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 0359: 497 */ 0xF5 /* 'u' -> */,
|
||||
/* pos 035a: 498 */ 0xF4 /* 't' -> */,
|
||||
/* pos 035b: 499 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 035c: 500 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0363 state 501) */,
|
||||
0x6F /* 'o' */, 0x0E, 0x00 /* (to 0x036D state 510) */,
|
||||
/* pos 0338: 464 */ 0xF3 /* 's' -> */,
|
||||
/* pos 0339: 465 */ 0xF4 /* 't' -> */,
|
||||
/* pos 033a: 466 */ 0xAD /* '-' -> */,
|
||||
/* pos 033b: 467 */ 0xED /* 'm' -> */,
|
||||
/* pos 033c: 468 */ 0xEF /* 'o' -> */,
|
||||
/* pos 033d: 469 */ 0xE4 /* 'd' -> */,
|
||||
/* pos 033e: 470 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 033f: 471 */ 0xE6 /* 'f' -> */,
|
||||
/* pos 0340: 472 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0341: 473 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0342: 474 */ 0xE4 /* 'd' -> */,
|
||||
/* pos 0343: 475 */ 0xBA /* ':' -> */,
|
||||
/* pos 0344: 476 */ 0x00, 0x39 /* - terminal marker 57 - */,
|
||||
/* pos 0346: 477 */ 0xEE /* 'n' -> */,
|
||||
/* pos 0347: 478 */ 0xEB /* 'k' -> */,
|
||||
/* pos 0348: 479 */ 0xBA /* ':' -> */,
|
||||
/* pos 0349: 480 */ 0x00, 0x3A /* - terminal marker 58 - */,
|
||||
/* pos 034b: 481 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 034c: 482 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 034d: 483 */ 0xF4 /* 't' -> */,
|
||||
/* pos 034e: 484 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 034f: 485 */ 0xEF /* 'o' -> */,
|
||||
/* pos 0350: 486 */ 0xEE /* 'n' -> */,
|
||||
/* pos 0351: 487 */ 0xBA /* ':' -> */,
|
||||
/* pos 0352: 488 */ 0x00, 0x3B /* - terminal marker 59 - */,
|
||||
/* pos 0354: 489 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 0355: 490 */ 0xF8 /* 'x' -> */,
|
||||
/* pos 0356: 491 */ 0xAD /* '-' -> */,
|
||||
/* pos 0357: 492 */ 0xE6 /* 'f' -> */,
|
||||
/* pos 0358: 493 */ 0xEF /* 'o' -> */,
|
||||
/* pos 0359: 494 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 035a: 495 */ 0xF7 /* 'w' -> */,
|
||||
/* pos 035b: 496 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 035c: 497 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 035d: 498 */ 0xE4 /* 'd' -> */,
|
||||
/* pos 035e: 499 */ 0xF3 /* 's' -> */,
|
||||
/* pos 035f: 500 */ 0xBA /* ':' -> */,
|
||||
/* pos 0360: 501 */ 0x00, 0x3C /* - terminal marker 60 - */,
|
||||
/* pos 0362: 502 */ 0xF8 /* 'x' -> */,
|
||||
/* pos 0363: 503 */ 0xF9 /* 'y' -> */,
|
||||
/* pos 0364: 504 */ 0xAD /* '-' -> */,
|
||||
/* pos 0365: 505 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 0366: 506 */ 0xF5 /* 'u' -> */,
|
||||
/* pos 0367: 507 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0368: 508 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 0369: 509 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0370 state 510) */,
|
||||
0x6F /* 'o' */, 0x0E, 0x00 /* (to 0x037A state 519) */,
|
||||
0x08, /* fail */
|
||||
/* pos 0363: 501 */ 0xEE /* 'n' -> */,
|
||||
/* pos 0364: 502 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0365: 503 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0366: 504 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 0367: 505 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 0368: 506 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0369: 507 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 036a: 508 */ 0xBA /* ':' -> */,
|
||||
/* pos 036b: 509 */ 0x00, 0x3C /* - terminal marker 60 - */,
|
||||
/* pos 036d: 510 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 036e: 511 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 036f: 512 */ 0xFA /* 'z' -> */,
|
||||
/* pos 0370: 513 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 0371: 514 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0372: 515 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0373: 516 */ 0xEF /* 'o' -> */,
|
||||
/* pos 0374: 517 */ 0xEE /* 'n' -> */,
|
||||
/* pos 0375: 518 */ 0xBA /* ':' -> */,
|
||||
/* pos 0376: 519 */ 0x00, 0x3D /* - terminal marker 61 - */,
|
||||
/* pos 0378: 520 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0379: 521 */ 0xF3 /* 's' -> */,
|
||||
/* pos 037a: 522 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 037b: 523 */ 0xBA /* ':' -> */,
|
||||
/* pos 037c: 524 */ 0x00, 0x3E /* - terminal marker 62 - */,
|
||||
/* pos 037e: 525 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 037f: 526 */ 0xF9 /* 'y' -> */,
|
||||
/* pos 0380: 527 */ 0xAD /* '-' -> */,
|
||||
/* pos 0381: 528 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 0382: 529 */ 0xE6 /* 'f' -> */,
|
||||
/* pos 0383: 530 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0384: 531 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0385: 532 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 0386: 533 */ 0xBA /* ':' -> */,
|
||||
/* pos 0387: 534 */ 0x00, 0x3F /* - terminal marker 63 - */,
|
||||
/* pos 0389: 535 */ 0xF6 /* 'v' -> */,
|
||||
/* pos 038a: 536 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 038b: 537 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 038c: 538 */ 0xBA /* ':' -> */,
|
||||
/* pos 038d: 539 */ 0x00, 0x40 /* - terminal marker 64 - */,
|
||||
/* pos 038f: 540 */ 0xAD /* '-' -> */,
|
||||
/* pos 0390: 541 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 0391: 542 */ 0xEF /* 'o' -> */,
|
||||
/* pos 0392: 543 */ 0xEF /* 'o' -> */,
|
||||
/* pos 0393: 544 */ 0xEB /* 'k' -> */,
|
||||
/* pos 0394: 545 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0395: 546 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0396: 547 */ 0xBA /* ':' -> */,
|
||||
/* pos 0397: 548 */ 0x00, 0x41 /* - terminal marker 65 - */,
|
||||
/* pos 0399: 549 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 039a: 550 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 039b: 551 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 039c: 552 */ 0xF4 /* 't' -> */,
|
||||
/* pos 039d: 553 */ 0xAD /* '-' -> */,
|
||||
/* pos 039e: 554 */ 0xF4 /* 't' -> */,
|
||||
/* pos 039f: 555 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 03a0: 556 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 03a1: 557 */ 0xEE /* 'n' -> */,
|
||||
/* pos 03a2: 558 */ 0xF3 /* 's' -> */,
|
||||
/* pos 03a3: 559 */ 0xF0 /* 'p' -> */,
|
||||
/* pos 03a4: 560 */ 0xEF /* 'o' -> */,
|
||||
/* pos 03a5: 561 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 03a6: 562 */ 0xF4 /* 't' -> */,
|
||||
/* pos 03a7: 563 */ 0xAD /* '-' -> */,
|
||||
/* pos 03a8: 564 */ 0xF3 /* 's' -> */,
|
||||
/* pos 03a9: 565 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 03aa: 566 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 03ab: 567 */ 0xF5 /* 'u' -> */,
|
||||
/* pos 03ac: 568 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 03ad: 569 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 03ae: 570 */ 0xF4 /* 't' -> */,
|
||||
/* pos 03af: 571 */ 0xF9 /* 'y' -> */,
|
||||
/* pos 03b0: 572 */ 0xBA /* ':' -> */,
|
||||
/* pos 03b1: 573 */ 0x00, 0x42 /* - terminal marker 66 - */,
|
||||
/* pos 03b3: 574 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 03b4: 575 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 03b5: 576 */ 0xEE /* 'n' -> */,
|
||||
/* pos 03b6: 577 */ 0xF3 /* 's' -> */,
|
||||
/* pos 03b7: 578 */ 0xE6 /* 'f' -> */,
|
||||
/* pos 03b8: 579 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 03b9: 580 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 03ba: 581 */ 0xAD /* '-' -> */,
|
||||
/* pos 03bb: 582 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 03bc: 583 */ 0xEE /* 'n' -> */,
|
||||
/* pos 03bd: 584 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 03be: 585 */ 0xEF /* 'o' -> */,
|
||||
/* pos 03bf: 586 */ 0xE4 /* 'd' -> */,
|
||||
/* pos 03c0: 587 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 03c1: 588 */ 0xEE /* 'n' -> */,
|
||||
/* pos 03c2: 589 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 03c3: 590 */ 0xBA /* ':' -> */,
|
||||
/* pos 03c4: 591 */ 0x00, 0x43 /* - terminal marker 67 - */,
|
||||
/* pos 03c6: 592 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 03c7: 593 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 03c8: 594 */ 0xAD /* '-' -> */,
|
||||
/* pos 03c9: 595 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 03ca: 596 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 03cb: 597 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 03cc: 598 */ 0xEE /* 'n' -> */,
|
||||
/* pos 03cd: 599 */ 0xF4 /* 't' -> */,
|
||||
/* pos 03ce: 600 */ 0xBA /* ':' -> */,
|
||||
/* pos 03cf: 601 */ 0x00, 0x44 /* - terminal marker 68 - */,
|
||||
/* pos 03d1: 602 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x03D8 state 603) */,
|
||||
0x69 /* 'i' */, 0x09, 0x00 /* (to 0x03DD state 607) */,
|
||||
/* pos 0370: 510 */ 0xEE /* 'n' -> */,
|
||||
/* pos 0371: 511 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0372: 512 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0373: 513 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 0374: 514 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 0375: 515 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0376: 516 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0377: 517 */ 0xBA /* ':' -> */,
|
||||
/* pos 0378: 518 */ 0x00, 0x3D /* - terminal marker 61 - */,
|
||||
/* pos 037a: 519 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 037b: 520 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 037c: 521 */ 0xFA /* 'z' -> */,
|
||||
/* pos 037d: 522 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 037e: 523 */ 0xF4 /* 't' -> */,
|
||||
/* pos 037f: 524 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 0380: 525 */ 0xEF /* 'o' -> */,
|
||||
/* pos 0381: 526 */ 0xEE /* 'n' -> */,
|
||||
/* pos 0382: 527 */ 0xBA /* ':' -> */,
|
||||
/* pos 0383: 528 */ 0x00, 0x3E /* - terminal marker 62 - */,
|
||||
/* pos 0385: 529 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0386: 530 */ 0xF3 /* 's' -> */,
|
||||
/* pos 0387: 531 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 0388: 532 */ 0xBA /* ':' -> */,
|
||||
/* pos 0389: 533 */ 0x00, 0x3F /* - terminal marker 63 - */,
|
||||
/* pos 038b: 534 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 038c: 535 */ 0xF9 /* 'y' -> */,
|
||||
/* pos 038d: 536 */ 0xAD /* '-' -> */,
|
||||
/* pos 038e: 537 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 038f: 538 */ 0xE6 /* 'f' -> */,
|
||||
/* pos 0390: 539 */ 0xF4 /* 't' -> */,
|
||||
/* pos 0391: 540 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0392: 541 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 0393: 542 */ 0xBA /* ':' -> */,
|
||||
/* pos 0394: 543 */ 0x00, 0x40 /* - terminal marker 64 - */,
|
||||
/* pos 0396: 544 */ 0xF6 /* 'v' -> */,
|
||||
/* pos 0397: 545 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 0398: 546 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 0399: 547 */ 0xBA /* ':' -> */,
|
||||
/* pos 039a: 548 */ 0x00, 0x41 /* - terminal marker 65 - */,
|
||||
/* pos 039c: 549 */ 0xAD /* '-' -> */,
|
||||
/* pos 039d: 550 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 039e: 551 */ 0xEF /* 'o' -> */,
|
||||
/* pos 039f: 552 */ 0xEF /* 'o' -> */,
|
||||
/* pos 03a0: 553 */ 0xEB /* 'k' -> */,
|
||||
/* pos 03a1: 554 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 03a2: 555 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 03a3: 556 */ 0xBA /* ':' -> */,
|
||||
/* pos 03a4: 557 */ 0x00, 0x42 /* - terminal marker 66 - */,
|
||||
/* pos 03a6: 558 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 03a7: 559 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 03a8: 560 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 03a9: 561 */ 0xF4 /* 't' -> */,
|
||||
/* pos 03aa: 562 */ 0xAD /* '-' -> */,
|
||||
/* pos 03ab: 563 */ 0xF4 /* 't' -> */,
|
||||
/* pos 03ac: 564 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 03ad: 565 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 03ae: 566 */ 0xEE /* 'n' -> */,
|
||||
/* pos 03af: 567 */ 0xF3 /* 's' -> */,
|
||||
/* pos 03b0: 568 */ 0xF0 /* 'p' -> */,
|
||||
/* pos 03b1: 569 */ 0xEF /* 'o' -> */,
|
||||
/* pos 03b2: 570 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 03b3: 571 */ 0xF4 /* 't' -> */,
|
||||
/* pos 03b4: 572 */ 0xAD /* '-' -> */,
|
||||
/* pos 03b5: 573 */ 0xF3 /* 's' -> */,
|
||||
/* pos 03b6: 574 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 03b7: 575 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 03b8: 576 */ 0xF5 /* 'u' -> */,
|
||||
/* pos 03b9: 577 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 03ba: 578 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 03bb: 579 */ 0xF4 /* 't' -> */,
|
||||
/* pos 03bc: 580 */ 0xF9 /* 'y' -> */,
|
||||
/* pos 03bd: 581 */ 0xBA /* ':' -> */,
|
||||
/* pos 03be: 582 */ 0x00, 0x43 /* - terminal marker 67 - */,
|
||||
/* pos 03c0: 583 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 03c1: 584 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 03c2: 585 */ 0xEE /* 'n' -> */,
|
||||
/* pos 03c3: 586 */ 0xF3 /* 's' -> */,
|
||||
/* pos 03c4: 587 */ 0xE6 /* 'f' -> */,
|
||||
/* pos 03c5: 588 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 03c6: 589 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 03c7: 590 */ 0xAD /* '-' -> */,
|
||||
/* pos 03c8: 591 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 03c9: 592 */ 0xEE /* 'n' -> */,
|
||||
/* pos 03ca: 593 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 03cb: 594 */ 0xEF /* 'o' -> */,
|
||||
/* pos 03cc: 595 */ 0xE4 /* 'd' -> */,
|
||||
/* pos 03cd: 596 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 03ce: 597 */ 0xEE /* 'n' -> */,
|
||||
/* pos 03cf: 598 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 03d0: 599 */ 0xBA /* ':' -> */,
|
||||
/* pos 03d1: 600 */ 0x00, 0x44 /* - terminal marker 68 - */,
|
||||
/* pos 03d3: 601 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 03d4: 602 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 03d5: 603 */ 0xAD /* '-' -> */,
|
||||
/* pos 03d6: 604 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 03d7: 605 */ 0xE7 /* 'g' -> */,
|
||||
/* pos 03d8: 606 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 03d9: 607 */ 0xEE /* 'n' -> */,
|
||||
/* pos 03da: 608 */ 0xF4 /* 't' -> */,
|
||||
/* pos 03db: 609 */ 0xBA /* ':' -> */,
|
||||
/* pos 03dc: 610 */ 0x00, 0x45 /* - terminal marker 69 - */,
|
||||
/* pos 03de: 611 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x03E5 state 612) */,
|
||||
0x69 /* 'i' */, 0x09, 0x00 /* (to 0x03EA state 616) */,
|
||||
0x08, /* fail */
|
||||
/* pos 03d8: 603 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 03d9: 604 */ 0xF9 /* 'y' -> */,
|
||||
/* pos 03da: 605 */ 0xBA /* ':' -> */,
|
||||
/* pos 03db: 606 */ 0x00, 0x45 /* - terminal marker 69 - */,
|
||||
/* pos 03dd: 607 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 03de: 608 */ 0xBA /* ':' -> */,
|
||||
/* pos 03df: 609 */ 0x00, 0x46 /* - terminal marker 70 - */,
|
||||
/* pos 03e1: 610 */ 0xF7 /* 'w' -> */,
|
||||
/* pos 03e2: 611 */ 0xF7 /* 'w' -> */,
|
||||
/* pos 03e3: 612 */ 0xAD /* '-' -> */,
|
||||
/* pos 03e4: 613 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 03e5: 614 */ 0xF5 /* 'u' -> */,
|
||||
/* pos 03e6: 615 */ 0xF4 /* 't' -> */,
|
||||
/* pos 03e7: 616 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 03e8: 617 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 03e9: 618 */ 0xEE /* 'n' -> */,
|
||||
/* pos 03ea: 619 */ 0xF4 /* 't' -> */,
|
||||
/* pos 03eb: 620 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 03ec: 621 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 03ed: 622 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 03ee: 623 */ 0xF4 /* 't' -> */,
|
||||
/* pos 03ef: 624 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 03f0: 625 */ 0xBA /* ':' -> */,
|
||||
/* pos 03f1: 626 */ 0x00, 0x47 /* - terminal marker 71 - */,
|
||||
/* total size 1011 bytes */
|
||||
/* pos 03e5: 612 */ 0xF2 /* 'r' -> */,
|
||||
/* pos 03e6: 613 */ 0xF9 /* 'y' -> */,
|
||||
/* pos 03e7: 614 */ 0xBA /* ':' -> */,
|
||||
/* pos 03e8: 615 */ 0x00, 0x46 /* - terminal marker 70 - */,
|
||||
/* pos 03ea: 616 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 03eb: 617 */ 0xBA /* ':' -> */,
|
||||
/* pos 03ec: 618 */ 0x00, 0x47 /* - terminal marker 71 - */,
|
||||
/* pos 03ee: 619 */ 0xF7 /* 'w' -> */,
|
||||
/* pos 03ef: 620 */ 0xF7 /* 'w' -> */,
|
||||
/* pos 03f0: 621 */ 0xAD /* '-' -> */,
|
||||
/* pos 03f1: 622 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 03f2: 623 */ 0xF5 /* 'u' -> */,
|
||||
/* pos 03f3: 624 */ 0xF4 /* 't' -> */,
|
||||
/* pos 03f4: 625 */ 0xE8 /* 'h' -> */,
|
||||
/* pos 03f5: 626 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 03f6: 627 */ 0xEE /* 'n' -> */,
|
||||
/* pos 03f7: 628 */ 0xF4 /* 't' -> */,
|
||||
/* pos 03f8: 629 */ 0xE9 /* 'i' -> */,
|
||||
/* pos 03f9: 630 */ 0xE3 /* 'c' -> */,
|
||||
/* pos 03fa: 631 */ 0xE1 /* 'a' -> */,
|
||||
/* pos 03fb: 632 */ 0xF4 /* 't' -> */,
|
||||
/* pos 03fc: 633 */ 0xE5 /* 'e' -> */,
|
||||
/* pos 03fd: 634 */ 0xBA /* ':' -> */,
|
||||
/* pos 03fe: 635 */ 0x00, 0x48 /* - terminal marker 72 - */,
|
||||
/* total size 1024 bytes */
|
||||
|
|
|
@ -326,18 +326,7 @@ enum lws_token_indexes {
|
|||
WSI_TOKEN_KEY,
|
||||
WSI_TOKEN_VERSION,
|
||||
WSI_TOKEN_SWORIGIN,
|
||||
|
||||
WSI_TOKEN_HTTP_URI_ARGS,
|
||||
|
||||
/* use token storage to stash these */
|
||||
|
||||
_WSI_TOKEN_CLIENT_SENT_PROTOCOLS,
|
||||
_WSI_TOKEN_CLIENT_PEER_ADDRESS,
|
||||
_WSI_TOKEN_CLIENT_URI,
|
||||
_WSI_TOKEN_CLIENT_HOST,
|
||||
_WSI_TOKEN_CLIENT_ORIGIN,
|
||||
|
||||
#ifdef LWS_USE_HTTP2
|
||||
WSI_TOKEN_HTTP_COLON_AUTHORITY,
|
||||
WSI_TOKEN_HTTP_COLON_METHOD,
|
||||
WSI_TOKEN_HTTP_COLON_PATH,
|
||||
|
@ -377,7 +366,16 @@ enum lws_token_indexes {
|
|||
WSI_TOKEN_HTTP_VARY,
|
||||
WSI_TOKEN_HTTP_VIA,
|
||||
WSI_TOKEN_HTTP_WWW_AUTHENTICATE,
|
||||
#endif
|
||||
|
||||
WSI_TOKEN_HTTP_URI_ARGS,
|
||||
|
||||
/* use token storage to stash these */
|
||||
|
||||
_WSI_TOKEN_CLIENT_SENT_PROTOCOLS,
|
||||
_WSI_TOKEN_CLIENT_PEER_ADDRESS,
|
||||
_WSI_TOKEN_CLIENT_URI,
|
||||
_WSI_TOKEN_CLIENT_HOST,
|
||||
_WSI_TOKEN_CLIENT_ORIGIN,
|
||||
|
||||
/* always last real token index*/
|
||||
WSI_TOKEN_COUNT,
|
||||
|
@ -1044,6 +1042,37 @@ libwebsocket_service(struct libwebsocket_context *context, int timeout_ms);
|
|||
LWS_VISIBLE LWS_EXTERN void
|
||||
libwebsocket_cancel_service(struct libwebsocket_context *context);
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN const unsigned char *
|
||||
lws_token_to_string(enum lws_token_indexes token);
|
||||
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_add_http_header_by_name(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi,
|
||||
const unsigned char *name,
|
||||
const unsigned char *value,
|
||||
int length,
|
||||
unsigned char **p,
|
||||
unsigned char *end);
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_finalize_http_header(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi,
|
||||
unsigned char **p,
|
||||
unsigned char *end);
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_add_http_header_by_token(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi,
|
||||
enum lws_token_indexes token,
|
||||
const unsigned char *value,
|
||||
int length,
|
||||
unsigned char **p,
|
||||
unsigned char *end);
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
lws_add_http_header_status(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi,
|
||||
unsigned int code,
|
||||
unsigned char **p,
|
||||
unsigned char *end);
|
||||
|
||||
#ifdef LWS_USE_LIBEV
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
libwebsocket_initloop(
|
||||
|
@ -1126,7 +1155,8 @@ libwebsocket_write(struct libwebsocket *wsi, unsigned char *buf, size_t len,
|
|||
LWS_VISIBLE LWS_EXTERN int
|
||||
libwebsockets_serve_http_file(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi, const char *file,
|
||||
const char *content_type, const char *other_headers);
|
||||
const char *content_type, const char *other_headers,
|
||||
int other_headers_len);
|
||||
LWS_VISIBLE LWS_EXTERN int
|
||||
libwebsockets_serve_http_file_fragment(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi);
|
||||
|
|
|
@ -16,90 +16,7 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* set of parsable strings -- ALL LOWER CASE */
|
||||
|
||||
const char *set[] = {
|
||||
"get ",
|
||||
"post ",
|
||||
"options ",
|
||||
"host:",
|
||||
"connection:",
|
||||
"upgrade:",
|
||||
"origin:",
|
||||
"sec-websocket-draft:",
|
||||
"\x0d\x0a",
|
||||
|
||||
"sec-websocket-extensions:",
|
||||
"sec-websocket-key1:",
|
||||
"sec-websocket-key2:",
|
||||
"sec-websocket-protocol:",
|
||||
|
||||
"sec-websocket-accept:",
|
||||
"sec-websocket-nonce:",
|
||||
"http/1.1 ",
|
||||
"http2-settings:",
|
||||
|
||||
"accept:",
|
||||
"access-control-request-headers:",
|
||||
"if-modified-since:",
|
||||
"if-none-match:",
|
||||
"accept-encoding:",
|
||||
"accept-language:",
|
||||
"pragma:",
|
||||
"cache-control:",
|
||||
"authorization:",
|
||||
"cookie:",
|
||||
"content-length:",
|
||||
"content-type:",
|
||||
"date:",
|
||||
"range:",
|
||||
"referer:",
|
||||
"sec-websocket-key:",
|
||||
"sec-websocket-version:",
|
||||
"sec-websocket-origin:",
|
||||
|
||||
":authority:",
|
||||
":method:",
|
||||
":path:",
|
||||
":scheme:",
|
||||
":status:",
|
||||
|
||||
"accept-charset:",
|
||||
"accept-ranges:",
|
||||
"access-control-allow-origin:",
|
||||
"age:",
|
||||
"allow:",
|
||||
"content-disposition:",
|
||||
"content-language:",
|
||||
"content-location:",
|
||||
"content-range:",
|
||||
"etag:",
|
||||
"expect:",
|
||||
"expires:",
|
||||
"from:",
|
||||
"if-match:",
|
||||
"if-range:",
|
||||
"if-unmodified-since:",
|
||||
"last-modified:",
|
||||
"link:",
|
||||
"location:",
|
||||
"max-forwards:",
|
||||
"proxy-authenticate:",
|
||||
"proxy-authorization:",
|
||||
"refresh:",
|
||||
"retry-after:",
|
||||
"server:",
|
||||
"set-cookie:",
|
||||
"strict-transport-security:",
|
||||
"transfer-encoding:",
|
||||
"user-agent:",
|
||||
"vary:",
|
||||
"via:",
|
||||
"www-authenticate:",
|
||||
|
||||
"", /* not matchable */
|
||||
|
||||
};
|
||||
#include "lextable-strings.h"
|
||||
|
||||
/*
|
||||
* b7 = 0 = 1-byte seq
|
||||
|
|
|
@ -923,6 +923,28 @@ lws_http2_wsi_from_id(struct libwebsocket *wsi, unsigned int sid);
|
|||
LWS_EXTERN int lws_hpack_interpret(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi,
|
||||
unsigned char c);
|
||||
LWS_EXTERN int
|
||||
lws_add_http2_header_by_name(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi,
|
||||
const unsigned char *name,
|
||||
const unsigned char *value,
|
||||
int length,
|
||||
unsigned char **p,
|
||||
unsigned char *end);
|
||||
LWS_EXTERN int
|
||||
lws_add_http2_header_by_token(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi,
|
||||
enum lws_token_indexes token,
|
||||
const unsigned char *value,
|
||||
int length,
|
||||
unsigned char **p,
|
||||
unsigned char *end);
|
||||
LWS_EXTERN int
|
||||
lws_add_http2_header_status(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi,
|
||||
unsigned int code,
|
||||
unsigned char **p,
|
||||
unsigned char *end);
|
||||
#endif
|
||||
|
||||
LWS_EXTERN int
|
||||
|
|
178
lib/server.c
178
lib/server.c
|
@ -834,6 +834,87 @@ fail:
|
|||
return 1;
|
||||
}
|
||||
|
||||
#include "lextable-strings.h"
|
||||
|
||||
const unsigned char *lws_token_to_string(enum lws_token_indexes token)
|
||||
{
|
||||
if ((unsigned int)token >= ARRAY_SIZE(set))
|
||||
return NULL;
|
||||
|
||||
return (unsigned char *)set[token];
|
||||
}
|
||||
|
||||
int lws_add_http_header_by_name(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi,
|
||||
const unsigned char *name,
|
||||
const unsigned char *value,
|
||||
int length,
|
||||
unsigned char **p,
|
||||
unsigned char *end)
|
||||
{
|
||||
#ifdef LWS_USE_HTTP2
|
||||
if (wsi->mode == LWS_CONNMODE_HTTP2_SERVING)
|
||||
return lws_add_http2_header_by_name(context, wsi, name, value, length, p, end);
|
||||
#endif
|
||||
if (name) {
|
||||
while (*p < end && *name)
|
||||
*((*p)++) = *name++;
|
||||
|
||||
if (*p == end)
|
||||
return 1;
|
||||
|
||||
*((*p)++) = ' ';
|
||||
}
|
||||
if (*p + length + 3 >= end)
|
||||
return 1;
|
||||
|
||||
memcpy(*p, value, length);
|
||||
*p += length;
|
||||
|
||||
*((*p)++) = '\x0d';
|
||||
*((*p)++) = '\x0a';
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lws_finalize_http_header(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi,
|
||||
unsigned char **p,
|
||||
unsigned char *end)
|
||||
{
|
||||
#ifdef LWS_USE_HTTP2
|
||||
if (wsi->mode == LWS_CONNMODE_HTTP2_SERVING)
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
if ((long)(end - *p) < 3)
|
||||
return 1;
|
||||
|
||||
*((*p)++) = '\x0d';
|
||||
*((*p)++) = '\x0a';
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lws_add_http_header_by_token(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi,
|
||||
enum lws_token_indexes token,
|
||||
const unsigned char *value,
|
||||
int length,
|
||||
unsigned char **p,
|
||||
unsigned char *end)
|
||||
{
|
||||
const unsigned char *name;
|
||||
#ifdef LWS_USE_HTTP2
|
||||
if (wsi->mode == LWS_CONNMODE_HTTP2_SERVING)
|
||||
return lws_add_http2_header_by_token(context, wsi, token, value, length, p, end);
|
||||
#endif
|
||||
name = lws_token_to_string(token);
|
||||
if (!name)
|
||||
return 1;
|
||||
|
||||
return lws_add_http_header_by_name(context, wsi, name, value, length, p, end);
|
||||
}
|
||||
|
||||
static const char *err400[] = {
|
||||
"Bad Request",
|
||||
|
@ -865,12 +946,36 @@ static const char *err500[] = {
|
|||
"HTTP Version Not Supported"
|
||||
};
|
||||
|
||||
int lws_add_http_header_status(struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi,
|
||||
unsigned int code,
|
||||
unsigned char **p,
|
||||
unsigned char *end)
|
||||
{
|
||||
unsigned char code_and_desc[60];
|
||||
const char *description = "";
|
||||
int n;
|
||||
|
||||
#ifdef LWS_USE_HTTP2
|
||||
if (wsi->mode == LWS_CONNMODE_HTTP2_SERVING)
|
||||
return lws_add_http2_header_status(context, wsi, code, p, end);
|
||||
#endif
|
||||
if (code >= 400 && code < (400 + ARRAY_SIZE(err400)))
|
||||
description = err400[code - 400];
|
||||
if (code >= 500 && code < (500 + ARRAY_SIZE(err500)))
|
||||
description = err500[code - 500];
|
||||
|
||||
n = sprintf((char *)code_and_desc, "HTTP/1.0 %u %s", code, description);
|
||||
|
||||
return lws_add_http_header_by_name(context, wsi, NULL, code_and_desc, n, p, end);
|
||||
}
|
||||
|
||||
/**
|
||||
* libwebsockets_return_http_status() - Return simple http status
|
||||
* @context: libwebsockets context
|
||||
* @wsi: Websocket instance (available from user callback)
|
||||
* @code: Status index, eg, 404
|
||||
* @html_body: User-readable HTML description, or NULL
|
||||
* @html_body: User-readable HTML description < 1KB, or NULL
|
||||
*
|
||||
* Helper to report HTTP errors back to the client cleanly and
|
||||
* consistently
|
||||
|
@ -880,30 +985,30 @@ LWS_VISIBLE int libwebsockets_return_http_status(
|
|||
unsigned int code, const char *html_body)
|
||||
{
|
||||
int n, m;
|
||||
const char *description = "";
|
||||
|
||||
unsigned char *p = context->service_buffer + LWS_SEND_BUFFER_PRE_PADDING;
|
||||
unsigned char *start = p;
|
||||
unsigned char *end = p + sizeof(context->service_buffer) -
|
||||
LWS_SEND_BUFFER_PRE_PADDING;
|
||||
|
||||
if (!html_body)
|
||||
html_body = "";
|
||||
|
||||
if (code >= 400 && code < (400 + ARRAY_SIZE(err400)))
|
||||
description = err400[code - 400];
|
||||
if (code >= 500 && code < (500 + ARRAY_SIZE(err500)))
|
||||
description = err500[code - 500];
|
||||
if (lws_add_http_header_status(context, wsi, code, &p, end))
|
||||
return 1;
|
||||
if (lws_add_http_header_by_token(context, wsi, WSI_TOKEN_HTTP_SERVER, (unsigned char *)"libwebsockets", 13, &p, end))
|
||||
return 1;
|
||||
if (lws_add_http_header_by_token(context, wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)"text/html", 9, &p, end))
|
||||
return 1;
|
||||
if (lws_finalize_http_header(context, wsi, &p, end))
|
||||
return 1;
|
||||
|
||||
n = sprintf((char *)context->service_buffer +
|
||||
LWS_SEND_BUFFER_PRE_PADDING,
|
||||
"HTTP/1.0 %u %s\x0d\x0a"
|
||||
"Server: libwebsockets\x0d\x0a"
|
||||
"Content-Type: text/html\x0d\x0a\x0d\x0a"
|
||||
"<h1>%u %s</h1>%s",
|
||||
code, description, code, description, html_body);
|
||||
m = libwebsocket_write(wsi, start, p - start, LWS_WRITE_HTTP_HEADERS);
|
||||
if (m)
|
||||
return m;
|
||||
|
||||
lwsl_info((const char *)context->service_buffer +
|
||||
LWS_SEND_BUFFER_PRE_PADDING);
|
||||
|
||||
m = libwebsocket_write(wsi, context->service_buffer +
|
||||
LWS_SEND_BUFFER_PRE_PADDING, n,
|
||||
LWS_WRITE_HTTP_HEADERS);
|
||||
n = sprintf((char *)start, "<html><body><h1>%u</h1>%s</body></html>", code, html_body);
|
||||
m = libwebsocket_write(wsi, start, n, LWS_WRITE_HTTP);
|
||||
|
||||
return m;
|
||||
}
|
||||
|
@ -929,10 +1034,14 @@ LWS_VISIBLE int libwebsockets_return_http_status(
|
|||
LWS_VISIBLE int libwebsockets_serve_http_file(
|
||||
struct libwebsocket_context *context,
|
||||
struct libwebsocket *wsi, const char *file,
|
||||
const char *content_type, const char *other_headers)
|
||||
const char *content_type, const char *other_headers,
|
||||
int other_headers_len)
|
||||
{
|
||||
unsigned char *response = context->service_buffer + LWS_SEND_BUFFER_PRE_PADDING;
|
||||
unsigned char *p = response;
|
||||
unsigned char *end = p + sizeof(context->service_buffer) -
|
||||
LWS_SEND_BUFFER_PRE_PADDING;
|
||||
unsigned char clen[10];
|
||||
int ret = 0;
|
||||
int n;
|
||||
|
||||
|
@ -945,17 +1054,26 @@ LWS_VISIBLE int libwebsockets_serve_http_file(
|
|||
return -1;
|
||||
}
|
||||
|
||||
p += sprintf((char *)p, "HTTP/1.0 200 OK\x0d\x0a"
|
||||
"Server: libwebsockets\x0d\x0a"
|
||||
"Content-Type: %s\x0d\x0a", content_type);
|
||||
if (other_headers) {
|
||||
n = strlen(other_headers);
|
||||
memcpy(p, other_headers, n);
|
||||
p += n;
|
||||
}
|
||||
p += sprintf((char *)p,
|
||||
"Content-Length: %lu\x0d\x0a\x0d\x0a", wsi->u.http.filelen);
|
||||
if (lws_add_http_header_status(context, wsi, 200, &p, end))
|
||||
return 1;
|
||||
if (lws_add_http_header_by_token(context, wsi, WSI_TOKEN_HTTP_SERVER, (unsigned char *)"libwebsockets", 13, &p, end))
|
||||
return 1;
|
||||
if (lws_add_http_header_by_token(context, wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)content_type, strlen(content_type), &p, end))
|
||||
return 1;
|
||||
n = sprintf((char *)clen, "%lu", (unsigned long)wsi->u.http.filelen);
|
||||
if (lws_add_http_header_by_token(context, wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH, clen, n, &p, end))
|
||||
return 1;
|
||||
|
||||
if (other_headers) {
|
||||
if ((end - p) < other_headers_len)
|
||||
return -1;
|
||||
memcpy(p, other_headers, other_headers_len);
|
||||
p += other_headers_len;
|
||||
}
|
||||
|
||||
if (lws_finalize_http_header(context, wsi, &p, end))
|
||||
return 1;
|
||||
|
||||
ret = libwebsocket_write(wsi, response,
|
||||
p - response, LWS_WRITE_HTTP_HEADERS);
|
||||
if (ret != (p - response)) {
|
||||
|
|
|
@ -105,61 +105,27 @@ struct per_session_data__http {
|
|||
static void
|
||||
dump_handshake_info(struct libwebsocket *wsi)
|
||||
{
|
||||
int n;
|
||||
static const char *token_names[] = {
|
||||
/*[WSI_TOKEN_GET_URI] =*/ "GET URI",
|
||||
/*[WSI_TOKEN_POST_URI] =*/ "POST URI",
|
||||
/*[WSI_TOKEN_OPTIONS_URI] =*/ "options uri",
|
||||
/*[WSI_TOKEN_HOST] =*/ "Host",
|
||||
/*[WSI_TOKEN_CONNECTION] =*/ "Connection",
|
||||
/*[WSI_TOKEN_UPGRADE] =*/ "Upgrade",
|
||||
/*[WSI_TOKEN_ORIGIN] =*/ "Origin",
|
||||
/*[WSI_TOKEN_DRAFT] =*/ "Draft",
|
||||
/*[WSI_TOKEN_CHALLENGE] =*/ "Challenge",
|
||||
/* new for 05 */
|
||||
/*[WSI_TOKEN_EXTENSIONS] =*/ "Extensions",
|
||||
/*[WSI_TOKEN_KEY1] =*/ "key 1",
|
||||
/*[WSI_TOKEN_KEY2] =*/ "key 2",
|
||||
|
||||
/*[WSI_TOKEN_PROTOCOL] =*/ "Protocol",
|
||||
|
||||
/* client receives these */
|
||||
/*[WSI_TOKEN_ACCEPT] =*/ "Accept",
|
||||
/*[WSI_TOKEN_NONCE] =*/ "Nonce",
|
||||
/*[WSI_TOKEN_HTTP] =*/ "Http",
|
||||
"http2-settings",
|
||||
"Accept:",
|
||||
"a-c-request-headers:",
|
||||
"If-Modified-Since:",
|
||||
"if-none-match:",
|
||||
"Accept-Encoding:",
|
||||
"Accept-Language:",
|
||||
"Pragma:",
|
||||
"Cache-Control:",
|
||||
"Authorization:",
|
||||
"Cookie:",
|
||||
"Content-Length:",
|
||||
"Content-Type:",
|
||||
"Date:",
|
||||
"Range:",
|
||||
"Referer:",
|
||||
/* new for 04 */
|
||||
/*[WSI_TOKEN_KEY] =*/ "Key",
|
||||
/*[WSI_TOKEN_VERSION] =*/ "Version",
|
||||
/*[WSI_TOKEN_SWORIGIN] =*/ "Sworigin",
|
||||
"Uri-Args:",
|
||||
|
||||
};
|
||||
int n = 0;
|
||||
char buf[256];
|
||||
const unsigned char *c;
|
||||
|
||||
for (n = 0; n < sizeof(token_names) / sizeof(token_names[0]); n++) {
|
||||
if (!lws_hdr_total_length(wsi, n))
|
||||
do {
|
||||
c = lws_token_to_string(n);
|
||||
if (!c) {
|
||||
n++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!lws_hdr_total_length(wsi, n)) {
|
||||
n++;
|
||||
continue;
|
||||
}
|
||||
|
||||
lws_hdr_copy(wsi, buf, sizeof buf, n);
|
||||
|
||||
fprintf(stderr, " %s = %s\n", token_names[n], buf);
|
||||
}
|
||||
fprintf(stderr, " %s = %s\n", (char *)c, buf);
|
||||
n++;
|
||||
} while (c);
|
||||
}
|
||||
|
||||
const char * get_mimetype(const char *file)
|
||||
|
@ -207,7 +173,7 @@ static int callback_http(struct libwebsocket_context *context,
|
|||
#ifdef EXTERNAL_POLL
|
||||
struct libwebsocket_pollargs *pa = (struct libwebsocket_pollargs *)in;
|
||||
#endif
|
||||
|
||||
unsigned char *end;
|
||||
switch (reason) {
|
||||
case LWS_CALLBACK_HTTP:
|
||||
|
||||
|
@ -240,7 +206,7 @@ static int callback_http(struct libwebsocket_context *context,
|
|||
/* well, let's demonstrate how to send the hard way */
|
||||
|
||||
p = buffer + LWS_SEND_BUFFER_PRE_PADDING;
|
||||
|
||||
end = p + sizeof(buffer) - LWS_SEND_BUFFER_PRE_PADDING;
|
||||
#ifdef WIN32
|
||||
pss->fd = open(leaf_path, O_RDONLY | _O_BINARY);
|
||||
#else
|
||||
|
@ -256,20 +222,33 @@ static int callback_http(struct libwebsocket_context *context,
|
|||
* we will send a big jpeg file, but it could be
|
||||
* anything. Set the Content-Type: appropriately
|
||||
* so the browser knows what to do with it.
|
||||
*
|
||||
* Notice we use the APIs to build the header, which
|
||||
* will do the right thing for HTTP 1/1.1 and HTTP2
|
||||
* depending on what connection it happens to be working
|
||||
* on
|
||||
*/
|
||||
|
||||
p += sprintf((char *)p,
|
||||
"HTTP/1.0 200 OK\x0d\x0a"
|
||||
"Server: libwebsockets\x0d\x0a"
|
||||
"Content-Type: image/jpeg\x0d\x0a"
|
||||
"Content-Length: %u\x0d\x0a\x0d\x0a",
|
||||
(unsigned int)stat_buf.st_size);
|
||||
if (lws_add_http_header_status(context, wsi, 200, &p, end))
|
||||
return 1;
|
||||
if (lws_add_http_header_by_token(context, wsi, WSI_TOKEN_HTTP_SERVER, (unsigned char *)"libwebsockets", 13, &p, end))
|
||||
return 1;
|
||||
if (lws_add_http_header_by_token(context, wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)"image/jpeg", 10, &p, end))
|
||||
return 1;
|
||||
n = sprintf(b64, "%u", (unsigned int)stat_buf.st_size);
|
||||
if (lws_add_http_header_by_token(context, wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH, (unsigned char *)b64, n, &p, end))
|
||||
return 1;
|
||||
if (lws_finalize_http_header(context, wsi, &p, end))
|
||||
return 1;
|
||||
|
||||
/*
|
||||
* send the http headers...
|
||||
* this won't block since it's the first payload sent
|
||||
* on the connection since it was established
|
||||
* (too small for partial)
|
||||
*
|
||||
* Notice they are sent using LWS_WRITE_HTTP_HEADERS
|
||||
* which also means you can't send body too in one step,
|
||||
* this is mandated by changes in HTTP2
|
||||
*/
|
||||
|
||||
n = libwebsocket_write(wsi,
|
||||
|
@ -310,23 +289,25 @@ static int callback_http(struct libwebsocket_context *context,
|
|||
/* demostrates how to set a cookie on / */
|
||||
|
||||
other_headers = NULL;
|
||||
n = 0;
|
||||
if (!strcmp((const char *)in, "/") &&
|
||||
!lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COOKIE)) {
|
||||
/* this isn't very unguessable but it'll do for us */
|
||||
gettimeofday(&tv, NULL);
|
||||
sprintf(b64, "LWS_%u_%u_COOKIE",
|
||||
n = sprintf(b64, "test=LWS_%u_%u_COOKIE;Max-Age=360000",
|
||||
(unsigned int)tv.tv_sec,
|
||||
(unsigned int)tv.tv_usec);
|
||||
|
||||
sprintf(leaf_path,
|
||||
"Set-Cookie: test=LWS_%u_%u_COOKIE;Max-Age=360000\x0d\x0a",
|
||||
(unsigned int)tv.tv_sec, (unsigned int)tv.tv_usec);
|
||||
p = (unsigned char *)leaf_path;
|
||||
|
||||
if (lws_add_http_header_by_name(context, wsi, (unsigned char *)"set-cookie:", (unsigned char *)b64, n, &p, (unsigned char *)leaf_path + sizeof(leaf_path)))
|
||||
return 1;
|
||||
n = (char *)p - leaf_path;
|
||||
other_headers = leaf_path;
|
||||
lwsl_err(other_headers);
|
||||
}
|
||||
|
||||
if (libwebsockets_serve_http_file(context, wsi, buf,
|
||||
mimetype, other_headers))
|
||||
mimetype, other_headers, n))
|
||||
return -1; /* through completion or error, close the socket */
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Reference in a new issue