Mercurial > hg > nginx
comparison src/http/v3/ngx_http_v3_parse.c @ 8295:5649079a41f4 quic
Parsing HTTP/3 request body.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Fri, 27 Mar 2020 19:41:06 +0300 |
parents | 36af1dab65e5 |
children | 032cb35ce758 |
comparison
equal
deleted
inserted
replaced
8294:32db41d603cd | 8295:5649079a41f4 |
---|---|
1419 "http3 parse decoder instruction done"); | 1419 "http3 parse decoder instruction done"); |
1420 | 1420 |
1421 st->state = sw_start; | 1421 st->state = sw_start; |
1422 return NGX_DONE; | 1422 return NGX_DONE; |
1423 } | 1423 } |
1424 | |
1425 | |
1426 ngx_int_t | |
1427 ngx_http_v3_parse_data(ngx_connection_t *c, ngx_http_v3_parse_data_t *st, | |
1428 u_char ch) | |
1429 { | |
1430 enum { | |
1431 sw_start = 0, | |
1432 sw_type, | |
1433 sw_length | |
1434 }; | |
1435 | |
1436 switch (st->state) { | |
1437 | |
1438 case sw_start: | |
1439 | |
1440 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http3 parse data"); | |
1441 | |
1442 st->state = sw_type; | |
1443 | |
1444 /* fall through */ | |
1445 | |
1446 case sw_type: | |
1447 | |
1448 if (ngx_http_v3_parse_varlen_int(c, &st->vlint, ch) != NGX_DONE) { | |
1449 break; | |
1450 } | |
1451 | |
1452 if (st->vlint.value != NGX_HTTP_V3_FRAME_DATA) { | |
1453 return NGX_ERROR; | |
1454 } | |
1455 | |
1456 st->state = sw_length; | |
1457 break; | |
1458 | |
1459 case sw_length: | |
1460 | |
1461 if (ngx_http_v3_parse_varlen_int(c, &st->vlint, ch) != NGX_DONE) { | |
1462 break; | |
1463 } | |
1464 | |
1465 st->length = st->vlint.value; | |
1466 | |
1467 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0, | |
1468 "http3 parse data frame len:%ui", st->length); | |
1469 | |
1470 goto done; | |
1471 } | |
1472 | |
1473 return NGX_AGAIN; | |
1474 | |
1475 done: | |
1476 | |
1477 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http3 parse data done"); | |
1478 | |
1479 st->state = sw_start; | |
1480 return NGX_DONE; | |
1481 } |