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 }