libnghttp2-sys 0.1.13+1.68.1

FFI bindings for libnghttp2 (nghttp2)
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
#![allow(bad_style)]
#![allow(rustdoc::bare_urls)]
/* automatically generated by rust-bindgen 0.72.1 */

#[doc = " @typedef\n\n :type:`nghttp2_ssize` is a signed counterpart of size_t."]
pub type nghttp2_ssize = isize;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_session {
    _unused: [u8; 0],
}
#[doc = " @struct\n\n This struct is what `nghttp2_version()` returns.  It holds\n information about the particular nghttp2 version."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_info {
    #[doc = " Age of this struct.  This instance of nghttp2 sets it to\n :macro:`NGHTTP2_VERSION_AGE` but a future version may bump it and\n add more struct fields at the bottom"]
    pub age: ::std::os::raw::c_int,
    #[doc = " the :macro:`NGHTTP2_VERSION_NUM` number (since age ==1)"]
    pub version_num: ::std::os::raw::c_int,
    #[doc = " points to the :macro:`NGHTTP2_VERSION` string (since age ==1)"]
    pub version_str: *const ::std::os::raw::c_char,
    #[doc = " points to the :macro:`NGHTTP2_PROTO_VERSION_ID` string this\n instance implements (since age ==1)"]
    pub proto_str: *const ::std::os::raw::c_char,
}
#[doc = " Invalid argument passed."]
pub const NGHTTP2_ERR_INVALID_ARGUMENT: nghttp2_error = -501;
#[doc = " Out of buffer space."]
pub const NGHTTP2_ERR_BUFFER_ERROR: nghttp2_error = -502;
#[doc = " The specified protocol version is not supported."]
pub const NGHTTP2_ERR_UNSUPPORTED_VERSION: nghttp2_error = -503;
#[doc = " Used as a return value from :type:`nghttp2_send_callback2`,\n :type:`nghttp2_recv_callback` and\n :type:`nghttp2_send_data_callback` to indicate that the operation\n would block."]
pub const NGHTTP2_ERR_WOULDBLOCK: nghttp2_error = -504;
#[doc = " General protocol error"]
pub const NGHTTP2_ERR_PROTO: nghttp2_error = -505;
#[doc = " The frame is invalid."]
pub const NGHTTP2_ERR_INVALID_FRAME: nghttp2_error = -506;
#[doc = " The peer performed a shutdown on the connection."]
pub const NGHTTP2_ERR_EOF: nghttp2_error = -507;
#[doc = " Used as a return value from\n :func:`nghttp2_data_source_read_callback2` to indicate that data\n transfer is postponed.  See\n :func:`nghttp2_data_source_read_callback2` for details."]
pub const NGHTTP2_ERR_DEFERRED: nghttp2_error = -508;
#[doc = " Stream ID has reached the maximum value.  Therefore no stream ID\n is available."]
pub const NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE: nghttp2_error = -509;
#[doc = " The stream is already closed; or the stream ID is invalid."]
pub const NGHTTP2_ERR_STREAM_CLOSED: nghttp2_error = -510;
#[doc = " RST_STREAM has been added to the outbound queue.  The stream is\n in closing state."]
pub const NGHTTP2_ERR_STREAM_CLOSING: nghttp2_error = -511;
#[doc = " The transmission is not allowed for this stream (e.g., a frame\n with END_STREAM flag set has already sent)."]
pub const NGHTTP2_ERR_STREAM_SHUT_WR: nghttp2_error = -512;
#[doc = " The stream ID is invalid."]
pub const NGHTTP2_ERR_INVALID_STREAM_ID: nghttp2_error = -513;
#[doc = " The state of the stream is not valid (e.g., DATA cannot be sent\n to the stream if response HEADERS has not been sent)."]
pub const NGHTTP2_ERR_INVALID_STREAM_STATE: nghttp2_error = -514;
#[doc = " Another DATA frame has already been deferred."]
pub const NGHTTP2_ERR_DEFERRED_DATA_EXIST: nghttp2_error = -515;
#[doc = " Starting new stream is not allowed (e.g., GOAWAY has been sent\n and/or received)."]
pub const NGHTTP2_ERR_START_STREAM_NOT_ALLOWED: nghttp2_error = -516;
#[doc = " GOAWAY has already been sent."]
pub const NGHTTP2_ERR_GOAWAY_ALREADY_SENT: nghttp2_error = -517;
#[doc = " The received frame contains the invalid header block (e.g., There\n are duplicate header names; or the header names are not encoded\n in US-ASCII character set and not lower cased; or the header name\n is zero-length string; or the header value contains multiple\n in-sequence NUL bytes)."]
pub const NGHTTP2_ERR_INVALID_HEADER_BLOCK: nghttp2_error = -518;
#[doc = " Indicates that the context is not suitable to perform the\n requested operation."]
pub const NGHTTP2_ERR_INVALID_STATE: nghttp2_error = -519;
#[doc = " The user callback function failed due to the temporal error."]
pub const NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE: nghttp2_error = -521;
#[doc = " The length of the frame is invalid, either too large or too small."]
pub const NGHTTP2_ERR_FRAME_SIZE_ERROR: nghttp2_error = -522;
#[doc = " Header block inflate/deflate error."]
pub const NGHTTP2_ERR_HEADER_COMP: nghttp2_error = -523;
#[doc = " Flow control error"]
pub const NGHTTP2_ERR_FLOW_CONTROL: nghttp2_error = -524;
#[doc = " Insufficient buffer size given to function."]
pub const NGHTTP2_ERR_INSUFF_BUFSIZE: nghttp2_error = -525;
#[doc = " Callback was paused by the application"]
pub const NGHTTP2_ERR_PAUSE: nghttp2_error = -526;
#[doc = " There are too many in-flight SETTING frame and no more\n transmission of SETTINGS is allowed."]
pub const NGHTTP2_ERR_TOO_MANY_INFLIGHT_SETTINGS: nghttp2_error = -527;
#[doc = " The server push is disabled."]
pub const NGHTTP2_ERR_PUSH_DISABLED: nghttp2_error = -528;
#[doc = " DATA or HEADERS frame for a given stream has been already\n submitted and has not been fully processed yet.  Application\n should wait for the transmission of the previously submitted\n frame before submitting another."]
pub const NGHTTP2_ERR_DATA_EXIST: nghttp2_error = -529;
#[doc = " The current session is closing due to a connection error or\n `nghttp2_session_terminate_session()` is called."]
pub const NGHTTP2_ERR_SESSION_CLOSING: nghttp2_error = -530;
#[doc = " Invalid HTTP header field was received and stream is going to be\n closed."]
pub const NGHTTP2_ERR_HTTP_HEADER: nghttp2_error = -531;
#[doc = " Violation in HTTP messaging rule."]
pub const NGHTTP2_ERR_HTTP_MESSAGING: nghttp2_error = -532;
#[doc = " Stream was refused."]
pub const NGHTTP2_ERR_REFUSED_STREAM: nghttp2_error = -533;
#[doc = " Unexpected internal error, but recovered."]
pub const NGHTTP2_ERR_INTERNAL: nghttp2_error = -534;
#[doc = " Indicates that a processing was canceled."]
pub const NGHTTP2_ERR_CANCEL: nghttp2_error = -535;
#[doc = " When a local endpoint expects to receive SETTINGS frame, it\n receives an other type of frame."]
pub const NGHTTP2_ERR_SETTINGS_EXPECTED: nghttp2_error = -536;
#[doc = " When a local endpoint receives too many settings entries\n in a single SETTINGS frame."]
pub const NGHTTP2_ERR_TOO_MANY_SETTINGS: nghttp2_error = -537;
#[doc = " The errors < :enum:`nghttp2_error.NGHTTP2_ERR_FATAL` mean that\n the library is under unexpected condition and processing was\n terminated (e.g., out of memory).  If application receives this\n error code, it must stop using that :type:`nghttp2_session`\n object and only allowed operation for that object is deallocate\n it using `nghttp2_session_del()`."]
pub const NGHTTP2_ERR_FATAL: nghttp2_error = -900;
#[doc = " Out of memory.  This is a fatal error."]
pub const NGHTTP2_ERR_NOMEM: nghttp2_error = -901;
#[doc = " The user callback function failed.  This is a fatal error."]
pub const NGHTTP2_ERR_CALLBACK_FAILURE: nghttp2_error = -902;
#[doc = " Invalid client magic (see :macro:`NGHTTP2_CLIENT_MAGIC`) was\n received and further processing is not possible."]
pub const NGHTTP2_ERR_BAD_CLIENT_MAGIC: nghttp2_error = -903;
#[doc = " Possible flooding by peer was detected in this HTTP/2 session.\n Flooding is measured by how many PING and SETTINGS frames with\n ACK flag set are queued for transmission.  These frames are\n response for the peer initiated frames, and peer can cause memory\n exhaustion on server side to send these frames forever and does\n not read network."]
pub const NGHTTP2_ERR_FLOODED: nghttp2_error = -904;
#[doc = " When a local endpoint receives too many CONTINUATION frames\n following a HEADER frame."]
pub const NGHTTP2_ERR_TOO_MANY_CONTINUATIONS: nghttp2_error = -905;
#[doc = " @enum\n\n Error codes used in this library.  The code range is [-999, -500],\n inclusive. The following values are defined:"]
pub type nghttp2_error = ::std::os::raw::c_int;
#[doc = " @struct\n\n The object representing single contiguous buffer."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_vec {
    #[doc = " The pointer to the buffer."]
    pub base: *mut u8,
    #[doc = " The length of the buffer."]
    pub len: usize,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_rcbuf {
    _unused: [u8; 0],
}
unsafe extern "C" {
    #[doc = " @function\n\n Increments the reference count of |rcbuf| by 1."]
    pub fn nghttp2_rcbuf_incref(rcbuf: *mut nghttp2_rcbuf);
}
unsafe extern "C" {
    #[doc = " @function\n\n Decrements the reference count of |rcbuf| by 1.  If the reference\n count becomes zero, the object pointed by |rcbuf| will be freed.\n In this case, application must not use |rcbuf| again."]
    pub fn nghttp2_rcbuf_decref(rcbuf: *mut nghttp2_rcbuf);
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the underlying buffer managed by |rcbuf|."]
    pub fn nghttp2_rcbuf_get_buf(rcbuf: *mut nghttp2_rcbuf) -> nghttp2_vec;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns nonzero if the underlying buffer is statically allocated,\n and 0 otherwise. This can be useful for language bindings that wish\n to avoid creating duplicate strings for these buffers."]
    pub fn nghttp2_rcbuf_is_static(rcbuf: *const nghttp2_rcbuf) -> ::std::os::raw::c_int;
}
#[doc = " No flag set."]
pub const NGHTTP2_NV_FLAG_NONE: nghttp2_nv_flag = 0;
#[doc = " Indicates that this name/value pair must not be indexed (\"Literal\n Header Field never Indexed\" representation must be used in HPACK\n encoding).  Other implementation calls this bit as \"sensitive\"."]
pub const NGHTTP2_NV_FLAG_NO_INDEX: nghttp2_nv_flag = 1;
#[doc = " This flag is set solely by application.  If this flag is set, the\n library does not make a copy of header field name.  This could\n improve performance."]
pub const NGHTTP2_NV_FLAG_NO_COPY_NAME: nghttp2_nv_flag = 2;
#[doc = " This flag is set solely by application.  If this flag is set, the\n library does not make a copy of header field value.  This could\n improve performance."]
pub const NGHTTP2_NV_FLAG_NO_COPY_VALUE: nghttp2_nv_flag = 4;
#[doc = " @enum\n\n The flags for header field name/value pair."]
pub type nghttp2_nv_flag = ::std::os::raw::c_uint;
#[doc = " @struct\n\n The name/value pair, which mainly used to represent header fields."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_nv {
    #[doc = " The |name| byte string.  If this struct is presented from library\n (e.g., :type:`nghttp2_on_frame_recv_callback`), |name| is\n guaranteed to be NULL-terminated.  For some callbacks\n (:type:`nghttp2_before_frame_send_callback`,\n :type:`nghttp2_on_frame_send_callback`, and\n :type:`nghttp2_on_frame_not_send_callback`), it may not be\n NULL-terminated if header field is passed from application with\n the flag :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME`).\n When application is constructing this struct, |name| is not\n required to be NULL-terminated."]
    pub name: *mut u8,
    #[doc = " The |value| byte string.  If this struct is presented from\n library (e.g., :type:`nghttp2_on_frame_recv_callback`), |value|\n is guaranteed to be NULL-terminated.  For some callbacks\n (:type:`nghttp2_before_frame_send_callback`,\n :type:`nghttp2_on_frame_send_callback`, and\n :type:`nghttp2_on_frame_not_send_callback`), it may not be\n NULL-terminated if header field is passed from application with\n the flag :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_VALUE`).\n When application is constructing this struct, |value| is not\n required to be NULL-terminated."]
    pub value: *mut u8,
    #[doc = " The length of the |name|, excluding terminating NULL."]
    pub namelen: usize,
    #[doc = " The length of the |value|, excluding terminating NULL."]
    pub valuelen: usize,
    #[doc = " Bitwise OR of one or more of :type:`nghttp2_nv_flag`."]
    pub flags: u8,
}
#[doc = " The DATA frame."]
pub const NGHTTP2_DATA: nghttp2_frame_type = 0;
#[doc = " The HEADERS frame."]
pub const NGHTTP2_HEADERS: nghttp2_frame_type = 1;
#[doc = " The PRIORITY frame."]
pub const NGHTTP2_PRIORITY: nghttp2_frame_type = 2;
#[doc = " The RST_STREAM frame."]
pub const NGHTTP2_RST_STREAM: nghttp2_frame_type = 3;
#[doc = " The SETTINGS frame."]
pub const NGHTTP2_SETTINGS: nghttp2_frame_type = 4;
#[doc = " The PUSH_PROMISE frame."]
pub const NGHTTP2_PUSH_PROMISE: nghttp2_frame_type = 5;
#[doc = " The PING frame."]
pub const NGHTTP2_PING: nghttp2_frame_type = 6;
#[doc = " The GOAWAY frame."]
pub const NGHTTP2_GOAWAY: nghttp2_frame_type = 7;
#[doc = " The WINDOW_UPDATE frame."]
pub const NGHTTP2_WINDOW_UPDATE: nghttp2_frame_type = 8;
#[doc = " The CONTINUATION frame.  This frame type won't be passed to any\n callbacks because the library processes this frame type and its\n preceding HEADERS/PUSH_PROMISE as a single frame."]
pub const NGHTTP2_CONTINUATION: nghttp2_frame_type = 9;
#[doc = " The ALTSVC frame, which is defined in `RFC 7383\n <https://tools.ietf.org/html/rfc7838#section-4>`_."]
pub const NGHTTP2_ALTSVC: nghttp2_frame_type = 10;
#[doc = " The ORIGIN frame, which is defined by `RFC 8336\n <https://tools.ietf.org/html/rfc8336>`_."]
pub const NGHTTP2_ORIGIN: nghttp2_frame_type = 12;
#[doc = " The PRIORITY_UPDATE frame, which is defined by :rfc:`9218`."]
pub const NGHTTP2_PRIORITY_UPDATE: nghttp2_frame_type = 16;
#[doc = " @enum\n\n The frame types in HTTP/2 specification."]
pub type nghttp2_frame_type = ::std::os::raw::c_uint;
#[doc = " No flag set."]
pub const NGHTTP2_FLAG_NONE: nghttp2_flag = 0;
#[doc = " The END_STREAM flag."]
pub const NGHTTP2_FLAG_END_STREAM: nghttp2_flag = 1;
#[doc = " The END_HEADERS flag."]
pub const NGHTTP2_FLAG_END_HEADERS: nghttp2_flag = 4;
#[doc = " The ACK flag."]
pub const NGHTTP2_FLAG_ACK: nghttp2_flag = 1;
#[doc = " The PADDED flag."]
pub const NGHTTP2_FLAG_PADDED: nghttp2_flag = 8;
#[doc = " The PRIORITY flag."]
pub const NGHTTP2_FLAG_PRIORITY: nghttp2_flag = 32;
#[doc = " @enum\n\n The flags for HTTP/2 frames.  This enum defines all flags for all\n frames."]
pub type nghttp2_flag = ::std::os::raw::c_uint;
#[doc = " SETTINGS_HEADER_TABLE_SIZE"]
pub const NGHTTP2_SETTINGS_HEADER_TABLE_SIZE: nghttp2_settings_id = 1;
#[doc = " SETTINGS_ENABLE_PUSH"]
pub const NGHTTP2_SETTINGS_ENABLE_PUSH: nghttp2_settings_id = 2;
#[doc = " SETTINGS_MAX_CONCURRENT_STREAMS"]
pub const NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS: nghttp2_settings_id = 3;
#[doc = " SETTINGS_INITIAL_WINDOW_SIZE"]
pub const NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE: nghttp2_settings_id = 4;
#[doc = " SETTINGS_MAX_FRAME_SIZE"]
pub const NGHTTP2_SETTINGS_MAX_FRAME_SIZE: nghttp2_settings_id = 5;
#[doc = " SETTINGS_MAX_HEADER_LIST_SIZE"]
pub const NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE: nghttp2_settings_id = 6;
#[doc = " SETTINGS_ENABLE_CONNECT_PROTOCOL\n (`RFC 8441 <https://tools.ietf.org/html/rfc8441>`_)"]
pub const NGHTTP2_SETTINGS_ENABLE_CONNECT_PROTOCOL: nghttp2_settings_id = 8;
#[doc = " SETTINGS_NO_RFC7540_PRIORITIES (:rfc:`9218`)"]
pub const NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES: nghttp2_settings_id = 9;
#[doc = " @enum\n The SETTINGS ID."]
pub type nghttp2_settings_id = ::std::os::raw::c_uint;
#[doc = " No errors."]
pub const NGHTTP2_NO_ERROR: nghttp2_error_code = 0;
#[doc = " PROTOCOL_ERROR"]
pub const NGHTTP2_PROTOCOL_ERROR: nghttp2_error_code = 1;
#[doc = " INTERNAL_ERROR"]
pub const NGHTTP2_INTERNAL_ERROR: nghttp2_error_code = 2;
#[doc = " FLOW_CONTROL_ERROR"]
pub const NGHTTP2_FLOW_CONTROL_ERROR: nghttp2_error_code = 3;
#[doc = " SETTINGS_TIMEOUT"]
pub const NGHTTP2_SETTINGS_TIMEOUT: nghttp2_error_code = 4;
#[doc = " STREAM_CLOSED"]
pub const NGHTTP2_STREAM_CLOSED: nghttp2_error_code = 5;
#[doc = " FRAME_SIZE_ERROR"]
pub const NGHTTP2_FRAME_SIZE_ERROR: nghttp2_error_code = 6;
#[doc = " REFUSED_STREAM"]
pub const NGHTTP2_REFUSED_STREAM: nghttp2_error_code = 7;
#[doc = " CANCEL"]
pub const NGHTTP2_CANCEL: nghttp2_error_code = 8;
#[doc = " COMPRESSION_ERROR"]
pub const NGHTTP2_COMPRESSION_ERROR: nghttp2_error_code = 9;
#[doc = " CONNECT_ERROR"]
pub const NGHTTP2_CONNECT_ERROR: nghttp2_error_code = 10;
#[doc = " ENHANCE_YOUR_CALM"]
pub const NGHTTP2_ENHANCE_YOUR_CALM: nghttp2_error_code = 11;
#[doc = " INADEQUATE_SECURITY"]
pub const NGHTTP2_INADEQUATE_SECURITY: nghttp2_error_code = 12;
#[doc = " HTTP_1_1_REQUIRED"]
pub const NGHTTP2_HTTP_1_1_REQUIRED: nghttp2_error_code = 13;
#[doc = " @enum\n The status codes for the RST_STREAM and GOAWAY frames."]
pub type nghttp2_error_code = ::std::os::raw::c_uint;
#[doc = " @struct\n The frame header."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_frame_hd {
    #[doc = " The length field of this frame, excluding frame header."]
    pub length: usize,
    #[doc = " The stream identifier (aka, stream ID)"]
    pub stream_id: i32,
    #[doc = " The type of this frame.  See `nghttp2_frame_type`."]
    pub type_: u8,
    #[doc = " The flags."]
    pub flags: u8,
    #[doc = " Reserved bit in frame header.  Currently, this is always set to 0\n and application should not expect something useful in here."]
    pub reserved: u8,
}
#[doc = " @union\n\n This union represents the some kind of data source passed to\n :type:`nghttp2_data_source_read_callback2`."]
#[repr(C)]
#[derive(Copy, Clone)]
pub union nghttp2_data_source {
    #[doc = " The integer field, suitable for a file descriptor."]
    pub fd: ::std::os::raw::c_int,
    #[doc = " The pointer to an arbitrary object."]
    pub ptr: *mut ::std::os::raw::c_void,
}
#[doc = " No flag set."]
pub const NGHTTP2_DATA_FLAG_NONE: nghttp2_data_flag = 0;
#[doc = " Indicates EOF was sensed."]
pub const NGHTTP2_DATA_FLAG_EOF: nghttp2_data_flag = 1;
#[doc = " Indicates that END_STREAM flag must not be set even if\n NGHTTP2_DATA_FLAG_EOF is set.  Usually this flag is used to send\n trailer fields with `nghttp2_submit_request2()` or\n `nghttp2_submit_response2()`."]
pub const NGHTTP2_DATA_FLAG_NO_END_STREAM: nghttp2_data_flag = 2;
#[doc = " Indicates that application will send complete DATA frame in\n :type:`nghttp2_send_data_callback`."]
pub const NGHTTP2_DATA_FLAG_NO_COPY: nghttp2_data_flag = 4;
#[doc = " @enum\n\n The flags used to set in |data_flags| output parameter in\n :type:`nghttp2_data_source_read_callback2`."]
pub type nghttp2_data_flag = ::std::os::raw::c_uint;
#[doc = " @functypedef\n\n .. warning::\n\n   Deprecated.  Use :type:`nghttp2_data_source_read_callback2`\n   instead.\n\n Callback function invoked when the library wants to read data from\n the |source|.  The read data is sent in the stream |stream_id|.\n The implementation of this function must read at most |length|\n bytes of data from |source| (or possibly other places) and store\n them in |buf| and return number of data stored in |buf|.  If EOF is\n reached, set :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_EOF` flag\n in |*data_flags|.\n\n Sometime it is desirable to avoid copying data into |buf| and let\n application to send data directly.  To achieve this, set\n :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_NO_COPY` to\n |*data_flags| (and possibly other flags, just like when we do\n copy), and return the number of bytes to send without copying data\n into |buf|.  The library, seeing\n :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_NO_COPY`, will invoke\n :type:`nghttp2_send_data_callback`.  The application must send\n complete DATA frame in that callback.\n\n If this callback is set by `nghttp2_submit_request()`,\n `nghttp2_submit_response()` or `nghttp2_submit_headers()` and\n `nghttp2_submit_data()` with flag parameter\n :enum:`nghttp2_flag.NGHTTP2_FLAG_END_STREAM` set, and\n :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_EOF` flag is set to\n |*data_flags|, DATA frame will have END_STREAM flag set.  Usually,\n this is expected behaviour and all are fine.  One exception is send\n trailer fields.  You cannot send trailer fields after sending frame\n with END_STREAM set.  To avoid this problem, one can set\n :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_NO_END_STREAM` along\n with :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_EOF` to signal the\n library not to set END_STREAM in DATA frame.  Then application can\n use `nghttp2_submit_trailer()` to send trailer fields.\n `nghttp2_submit_trailer()` can be called inside this callback.\n\n If the application wants to postpone DATA frames (e.g.,\n asynchronous I/O, or reading data blocks for long time), it is\n achieved by returning :enum:`nghttp2_error.NGHTTP2_ERR_DEFERRED`\n without reading any data in this invocation.  The library removes\n DATA frame from the outgoing queue temporarily.  To move back\n deferred DATA frame to outgoing queue, call\n `nghttp2_session_resume_data()`.\n\n By default, |length| is limited to 16KiB at maximum.  If peer\n allows larger frames, application can enlarge transmission buffer\n size.  See :type:`nghttp2_data_source_read_length_callback` for\n more details.\n\n If the application just wants to return from\n `nghttp2_session_send()` or `nghttp2_session_mem_send()` without\n sending anything, return :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE`.\n\n In case of error, there are 2 choices. Returning\n :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE` will\n close the stream by issuing RST_STREAM with\n :enum:`nghttp2_error_code.NGHTTP2_INTERNAL_ERROR`.  If a different\n error code is desirable, use `nghttp2_submit_rst_stream()` with a\n desired error code and then return\n :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`.\n Returning :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` will\n signal the entire session failure."]
pub type nghttp2_data_source_read_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        stream_id: i32,
        buf: *mut u8,
        length: usize,
        data_flags: *mut u32,
        source: *mut nghttp2_data_source,
        user_data: *mut ::std::os::raw::c_void,
    ) -> isize,
>;
#[doc = " @functypedef\n\n Callback function invoked when the library wants to read data from\n the |source|.  The read data is sent in the stream |stream_id|.\n The implementation of this function must read at most |length|\n bytes of data from |source| (or possibly other places) and store\n them in |buf| and return number of data stored in |buf|.  If EOF is\n reached, set :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_EOF` flag\n in |*data_flags|.\n\n Sometime it is desirable to avoid copying data into |buf| and let\n application to send data directly.  To achieve this, set\n :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_NO_COPY` to\n |*data_flags| (and possibly other flags, just like when we do\n copy), and return the number of bytes to send without copying data\n into |buf|.  The library, seeing\n :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_NO_COPY`, will invoke\n :type:`nghttp2_send_data_callback`.  The application must send\n complete DATA frame in that callback.\n\n If this callback is set by `nghttp2_submit_request2()`,\n `nghttp2_submit_response2()` or `nghttp2_submit_headers()` and\n `nghttp2_submit_data2()` with flag parameter\n :enum:`nghttp2_flag.NGHTTP2_FLAG_END_STREAM` set, and\n :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_EOF` flag is set to\n |*data_flags|, DATA frame will have END_STREAM flag set.  Usually,\n this is expected behaviour and all are fine.  One exception is send\n trailer fields.  You cannot send trailer fields after sending frame\n with END_STREAM set.  To avoid this problem, one can set\n :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_NO_END_STREAM` along\n with :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_EOF` to signal the\n library not to set END_STREAM in DATA frame.  Then application can\n use `nghttp2_submit_trailer()` to send trailer fields.\n `nghttp2_submit_trailer()` can be called inside this callback.\n\n If the application wants to postpone DATA frames (e.g.,\n asynchronous I/O, or reading data blocks for long time), it is\n achieved by returning :enum:`nghttp2_error.NGHTTP2_ERR_DEFERRED`\n without reading any data in this invocation.  The library removes\n DATA frame from the outgoing queue temporarily.  To move back\n deferred DATA frame to outgoing queue, call\n `nghttp2_session_resume_data()`.\n\n By default, |length| is limited to 16KiB at maximum.  If peer\n allows larger frames, application can enlarge transmission buffer\n size.  See :type:`nghttp2_data_source_read_length_callback` for\n more details.\n\n If the application just wants to return from\n `nghttp2_session_send()` or `nghttp2_session_mem_send2()` without\n sending anything, return :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE`.\n\n In case of error, there are 2 choices. Returning\n :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE` will\n close the stream by issuing RST_STREAM with\n :enum:`nghttp2_error_code.NGHTTP2_INTERNAL_ERROR`.  If a different\n error code is desirable, use `nghttp2_submit_rst_stream()` with a\n desired error code and then return\n :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`.\n Returning :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` will\n signal the entire session failure."]
pub type nghttp2_data_source_read_callback2 = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        stream_id: i32,
        buf: *mut u8,
        length: usize,
        data_flags: *mut u32,
        source: *mut nghttp2_data_source,
        user_data: *mut ::std::os::raw::c_void,
    ) -> nghttp2_ssize,
>;
#[doc = " @struct\n\n .. warning::\n\n   Deprecated.  Use :type:`nghttp2_data_provider2` instead.\n\n This struct represents the data source and the way to read a chunk\n of data from it."]
#[repr(C)]
#[derive(Copy, Clone)]
pub struct nghttp2_data_provider {
    #[doc = " The data source."]
    pub source: nghttp2_data_source,
    #[doc = " The callback function to read a chunk of data from the |source|."]
    pub read_callback: nghttp2_data_source_read_callback,
}
#[doc = " @struct\n\n This struct represents the data source and the way to read a chunk\n of data from it."]
#[repr(C)]
#[derive(Copy, Clone)]
pub struct nghttp2_data_provider2 {
    #[doc = " The data source."]
    pub source: nghttp2_data_source,
    #[doc = " The callback function to read a chunk of data from the |source|."]
    pub read_callback: nghttp2_data_source_read_callback2,
}
#[doc = " @struct\n\n The DATA frame.  The received data is delivered via\n :type:`nghttp2_on_data_chunk_recv_callback`."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_data {
    pub hd: nghttp2_frame_hd,
    #[doc = " The length of the padding in this frame.  This includes PAD_HIGH\n and PAD_LOW."]
    pub padlen: usize,
}
#[doc = " The HEADERS frame is opening new stream, which is analogous to\n SYN_STREAM in SPDY."]
pub const NGHTTP2_HCAT_REQUEST: nghttp2_headers_category = 0;
#[doc = " The HEADERS frame is the first response headers, which is\n analogous to SYN_REPLY in SPDY."]
pub const NGHTTP2_HCAT_RESPONSE: nghttp2_headers_category = 1;
#[doc = " The HEADERS frame is the first headers sent against reserved\n stream."]
pub const NGHTTP2_HCAT_PUSH_RESPONSE: nghttp2_headers_category = 2;
#[doc = " The HEADERS frame which does not apply for the above categories,\n which is analogous to HEADERS in SPDY.  If non-final response\n (e.g., status 1xx) is used, final response HEADERS frame will be\n categorized here."]
pub const NGHTTP2_HCAT_HEADERS: nghttp2_headers_category = 3;
#[doc = " @enum\n\n The category of HEADERS, which indicates the role of the frame.  In\n HTTP/2 spec, request, response, push response and other arbitrary\n headers (e.g., trailer fields) are all called just HEADERS.  To\n give the application the role of incoming HEADERS frame, we define\n several categories."]
pub type nghttp2_headers_category = ::std::os::raw::c_uint;
#[doc = " @struct\n\n .. warning::\n\n   Deprecated.  :rfc:`7540` priorities are deprecated by\n   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible\n   prioritization scheme.\n\n The structure to specify stream dependency."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_priority_spec {
    #[doc = " The stream ID of the stream to depend on.  Specifying 0 makes\n stream not depend any other stream."]
    pub stream_id: i32,
    #[doc = " The weight of this dependency."]
    pub weight: i32,
    #[doc = " nonzero means exclusive dependency"]
    pub exclusive: u8,
}
#[doc = " @struct\n\n The HEADERS frame.  It has the following members:"]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_headers {
    #[doc = " The frame header."]
    pub hd: nghttp2_frame_hd,
    #[doc = " The length of the padding in this frame.  This includes PAD_HIGH\n and PAD_LOW."]
    pub padlen: usize,
    #[doc = " .. warning::\n\n   Deprecated.  :rfc:`7540` priorities are deprecated by\n   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible\n   prioritization scheme.\n\n The priority specification"]
    pub pri_spec: nghttp2_priority_spec,
    #[doc = " The name/value pairs."]
    pub nva: *mut nghttp2_nv,
    #[doc = " The number of name/value pairs in |nva|."]
    pub nvlen: usize,
    #[doc = " The category of this HEADERS frame."]
    pub cat: nghttp2_headers_category,
}
#[doc = " @struct\n\n .. warning::\n\n   Deprecated.  :rfc:`7540` priorities are deprecated by\n   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible\n   prioritization scheme.\n\n The PRIORITY frame.  It has the following members:"]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_priority {
    #[doc = " The frame header."]
    pub hd: nghttp2_frame_hd,
    #[doc = " The priority specification."]
    pub pri_spec: nghttp2_priority_spec,
}
#[doc = " @struct\n\n The RST_STREAM frame.  It has the following members:"]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_rst_stream {
    #[doc = " The frame header."]
    pub hd: nghttp2_frame_hd,
    #[doc = " The error code.  See :type:`nghttp2_error_code`."]
    pub error_code: u32,
}
#[doc = " @struct\n\n The SETTINGS ID/Value pair.  It has the following members:"]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_settings_entry {
    #[doc = " The SETTINGS ID.  See :type:`nghttp2_settings_id`."]
    pub settings_id: i32,
    #[doc = " The value of this entry."]
    pub value: u32,
}
#[doc = " @struct\n\n The SETTINGS frame.  It has the following members:"]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_settings {
    #[doc = " The frame header."]
    pub hd: nghttp2_frame_hd,
    #[doc = " The number of SETTINGS ID/Value pairs in |iv|."]
    pub niv: usize,
    #[doc = " The pointer to the array of SETTINGS ID/Value pair."]
    pub iv: *mut nghttp2_settings_entry,
}
#[doc = " @struct\n\n The PUSH_PROMISE frame.  It has the following members:"]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_push_promise {
    #[doc = " The frame header."]
    pub hd: nghttp2_frame_hd,
    #[doc = " The length of the padding in this frame.  This includes PAD_HIGH\n and PAD_LOW."]
    pub padlen: usize,
    #[doc = " The name/value pairs."]
    pub nva: *mut nghttp2_nv,
    #[doc = " The number of name/value pairs in |nva|."]
    pub nvlen: usize,
    #[doc = " The promised stream ID"]
    pub promised_stream_id: i32,
    #[doc = " Reserved bit.  Currently this is always set to 0 and application\n should not expect something useful in here."]
    pub reserved: u8,
}
#[doc = " @struct\n\n The PING frame.  It has the following members:"]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_ping {
    #[doc = " The frame header."]
    pub hd: nghttp2_frame_hd,
    #[doc = " The opaque data"]
    pub opaque_data: [u8; 8usize],
}
#[doc = " @struct\n\n The GOAWAY frame.  It has the following members:"]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_goaway {
    #[doc = " The frame header."]
    pub hd: nghttp2_frame_hd,
    #[doc = " The last stream stream ID."]
    pub last_stream_id: i32,
    #[doc = " The error code.  See :type:`nghttp2_error_code`."]
    pub error_code: u32,
    #[doc = " The additional debug data"]
    pub opaque_data: *mut u8,
    #[doc = " The length of |opaque_data| member."]
    pub opaque_data_len: usize,
    #[doc = " Reserved bit.  Currently this is always set to 0 and application\n should not expect something useful in here."]
    pub reserved: u8,
}
#[doc = " @struct\n\n The WINDOW_UPDATE frame.  It has the following members:"]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_window_update {
    #[doc = " The frame header."]
    pub hd: nghttp2_frame_hd,
    #[doc = " The window size increment."]
    pub window_size_increment: i32,
    #[doc = " Reserved bit.  Currently this is always set to 0 and application\n should not expect something useful in here."]
    pub reserved: u8,
}
#[doc = " @struct\n\n The extension frame.  It has following members:"]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_extension {
    #[doc = " The frame header."]
    pub hd: nghttp2_frame_hd,
    #[doc = " The pointer to extension payload.  The exact pointer type is\n determined by hd.type.\n\n Currently, no extension is supported.  This is a place holder for\n the future extensions."]
    pub payload: *mut ::std::os::raw::c_void,
}
#[doc = " @union\n\n This union includes all frames to pass them to various function\n calls as nghttp2_frame type.  The CONTINUATION frame is omitted\n from here because the library deals with it internally."]
#[repr(C)]
#[derive(Copy, Clone)]
pub union nghttp2_frame {
    #[doc = " The frame header, which is convenient to inspect frame header."]
    pub hd: nghttp2_frame_hd,
    #[doc = " The DATA frame."]
    pub data: nghttp2_data,
    #[doc = " The HEADERS frame."]
    pub headers: nghttp2_headers,
    #[doc = " The PRIORITY frame."]
    pub priority: nghttp2_priority,
    #[doc = " The RST_STREAM frame."]
    pub rst_stream: nghttp2_rst_stream,
    #[doc = " The SETTINGS frame."]
    pub settings: nghttp2_settings,
    #[doc = " The PUSH_PROMISE frame."]
    pub push_promise: nghttp2_push_promise,
    #[doc = " The PING frame."]
    pub ping: nghttp2_ping,
    #[doc = " The GOAWAY frame."]
    pub goaway: nghttp2_goaway,
    #[doc = " The WINDOW_UPDATE frame."]
    pub window_update: nghttp2_window_update,
    #[doc = " The extension frame."]
    pub ext: nghttp2_extension,
}
#[doc = " @functypedef\n\n .. warning::\n\n   Deprecated.  Use :type:`nghttp2_send_callback2` instead.\n\n Callback function invoked when |session| wants to send data to the\n remote peer.  The implementation of this function must send at most\n |length| bytes of data stored in |data|.  The |flags| is currently\n not used and always 0. It must return the number of bytes sent if\n it succeeds.  If it cannot send any single byte without blocking,\n it must return :enum:`nghttp2_error.NGHTTP2_ERR_WOULDBLOCK`.  For\n other errors, it must return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  The\n |user_data| pointer is the third argument passed in to the call to\n `nghttp2_session_client_new()` or `nghttp2_session_server_new()`.\n\n This callback is required if the application uses\n `nghttp2_session_send()` to send data to the remote endpoint.  If\n the application uses solely `nghttp2_session_mem_send()` instead,\n this callback function is unnecessary.\n\n To set this callback to :type:`nghttp2_session_callbacks`, use\n `nghttp2_session_callbacks_set_send_callback()`.\n\n .. note::\n\n   The |length| may be very small.  If that is the case, and\n   application disables Nagle algorithm (``TCP_NODELAY``), then just\n   writing |data| to the network stack leads to very small packet,\n   and it is very inefficient.  An application should be responsible\n   to buffer up small chunks of data as necessary to avoid this\n   situation."]
pub type nghttp2_send_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        data: *const u8,
        length: usize,
        flags: ::std::os::raw::c_int,
        user_data: *mut ::std::os::raw::c_void,
    ) -> isize,
>;
#[doc = " @functypedef\n\n Callback function invoked when |session| wants to send data to the\n remote peer.  The implementation of this function must send at most\n |length| bytes of data stored in |data|.  The |flags| is currently\n not used and always 0. It must return the number of bytes sent if\n it succeeds.  If it cannot send any single byte without blocking,\n it must return :enum:`nghttp2_error.NGHTTP2_ERR_WOULDBLOCK`.  For\n other errors, it must return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  The\n |user_data| pointer is the third argument passed in to the call to\n `nghttp2_session_client_new()` or `nghttp2_session_server_new()`.\n\n This callback is required if the application uses\n `nghttp2_session_send()` to send data to the remote endpoint.  If\n the application uses solely `nghttp2_session_mem_send2()` instead,\n this callback function is unnecessary.\n\n To set this callback to :type:`nghttp2_session_callbacks`, use\n `nghttp2_session_callbacks_set_send_callback2()`.\n\n .. note::\n\n   The |length| may be very small.  If that is the case, and\n   application disables Nagle algorithm (``TCP_NODELAY``), then just\n   writing |data| to the network stack leads to very small packet,\n   and it is very inefficient.  An application should be responsible\n   to buffer up small chunks of data as necessary to avoid this\n   situation."]
pub type nghttp2_send_callback2 = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        data: *const u8,
        length: usize,
        flags: ::std::os::raw::c_int,
        user_data: *mut ::std::os::raw::c_void,
    ) -> nghttp2_ssize,
>;
#[doc = " @functypedef\n\n Callback function invoked when\n :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_NO_COPY` is used in\n :type:`nghttp2_data_source_read_callback` to send complete DATA\n frame.\n\n The |frame| is a DATA frame to send.  The |framehd| is the\n serialized frame header (9 bytes). The |length| is the length of\n application data to send (this does not include padding).  The\n |source| is the same pointer passed to\n :type:`nghttp2_data_source_read_callback`.\n\n The application first must send frame header |framehd| of length 9\n bytes.  If ``frame->data.padlen > 0``, send 1 byte of value\n ``frame->data.padlen - 1``.  Then send exactly |length| bytes of\n application data.  Finally, if ``frame->data.padlen > 1``, send\n ``frame->data.padlen - 1`` bytes of zero as padding.\n\n The application has to send complete DATA frame in this callback.\n If all data were written successfully, return 0.\n\n If it cannot send any data at all, just return\n :enum:`nghttp2_error.NGHTTP2_ERR_WOULDBLOCK`; the library will call\n this callback with the same parameters later (It is recommended to\n send complete DATA frame at once in this function to deal with\n error; if partial frame data has already sent, it is impossible to\n send another data in that state, and all we can do is tear down\n connection).  When data is fully processed, but application wants\n to make `nghttp2_session_mem_send2()` or `nghttp2_session_send()`\n return immediately without processing next frames, return\n :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE`.  If application decided to\n reset this stream, return\n :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`, then\n the library will send RST_STREAM with INTERNAL_ERROR as error code.\n The application can also return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`, which will\n result in connection closure.  Returning any other value is treated\n as :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` is returned."]
pub type nghttp2_send_data_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        frame: *mut nghttp2_frame,
        framehd: *const u8,
        length: usize,
        source: *mut nghttp2_data_source,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
#[doc = " @functypedef\n\n .. warning::\n\n   Deprecated.  Use :type:`nghttp2_recv_callback2` instead.\n\n Callback function invoked when |session| wants to receive data from\n the remote peer.  The implementation of this function must read at\n most |length| bytes of data and store it in |buf|.  The |flags| is\n currently not used and always 0.  It must return the number of\n bytes written in |buf| if it succeeds.  If it cannot read any\n single byte without blocking, it must return\n :enum:`nghttp2_error.NGHTTP2_ERR_WOULDBLOCK`.  If it gets EOF\n before it reads any single byte, it must return\n :enum:`nghttp2_error.NGHTTP2_ERR_EOF`.  For other errors, it must\n return :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.\n Returning 0 is treated as\n :enum:`nghttp2_error.NGHTTP2_ERR_WOULDBLOCK`.  The |user_data|\n pointer is the third argument passed in to the call to\n `nghttp2_session_client_new()` or `nghttp2_session_server_new()`.\n\n This callback is required if the application uses\n `nghttp2_session_recv()` to receive data from the remote endpoint.\n If the application uses solely `nghttp2_session_mem_recv()`\n instead, this callback function is unnecessary.\n\n To set this callback to :type:`nghttp2_session_callbacks`, use\n `nghttp2_session_callbacks_set_recv_callback()`."]
pub type nghttp2_recv_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        buf: *mut u8,
        length: usize,
        flags: ::std::os::raw::c_int,
        user_data: *mut ::std::os::raw::c_void,
    ) -> isize,
>;
#[doc = " @functypedef\n\n Callback function invoked when |session| wants to receive data from\n the remote peer.  The implementation of this function must read at\n most |length| bytes of data and store it in |buf|.  The |flags| is\n currently not used and always 0.  It must return the number of\n bytes written in |buf| if it succeeds.  If it cannot read any\n single byte without blocking, it must return\n :enum:`nghttp2_error.NGHTTP2_ERR_WOULDBLOCK`.  If it gets EOF\n before it reads any single byte, it must return\n :enum:`nghttp2_error.NGHTTP2_ERR_EOF`.  For other errors, it must\n return :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.\n Returning 0 is treated as\n :enum:`nghttp2_error.NGHTTP2_ERR_WOULDBLOCK`.  The |user_data|\n pointer is the third argument passed in to the call to\n `nghttp2_session_client_new()` or `nghttp2_session_server_new()`.\n\n This callback is required if the application uses\n `nghttp2_session_recv()` to receive data from the remote endpoint.\n If the application uses solely `nghttp2_session_mem_recv2()`\n instead, this callback function is unnecessary.\n\n To set this callback to :type:`nghttp2_session_callbacks`, use\n `nghttp2_session_callbacks_set_recv_callback2()`."]
pub type nghttp2_recv_callback2 = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        buf: *mut u8,
        length: usize,
        flags: ::std::os::raw::c_int,
        user_data: *mut ::std::os::raw::c_void,
    ) -> nghttp2_ssize,
>;
#[doc = " @functypedef\n\n Callback function invoked by `nghttp2_session_recv()` and\n `nghttp2_session_mem_recv2()` when a frame is received.  The\n |user_data| pointer is the third argument passed in to the call to\n `nghttp2_session_client_new()` or `nghttp2_session_server_new()`.\n\n If frame is HEADERS or PUSH_PROMISE, the ``nva`` and ``nvlen``\n member of their data structure are always ``NULL`` and 0\n respectively.  The header name/value pairs are emitted via\n :type:`nghttp2_on_header_callback`.\n\n Only HEADERS and DATA frame can signal the end of incoming data.\n If ``frame->hd.flags & NGHTTP2_FLAG_END_STREAM`` is nonzero, the\n |frame| is the last frame from the remote peer in this stream.\n\n This callback won't be called for CONTINUATION frames.\n HEADERS/PUSH_PROMISE + CONTINUATIONs are treated as single frame.\n\n The implementation of this function must return 0 if it succeeds.\n If nonzero value is returned, it is treated as fatal error and\n `nghttp2_session_recv()` and `nghttp2_session_mem_recv2()`\n functions immediately return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.\n\n To set this callback to :type:`nghttp2_session_callbacks`, use\n `nghttp2_session_callbacks_set_on_frame_recv_callback()`."]
pub type nghttp2_on_frame_recv_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        frame: *const nghttp2_frame,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
#[doc = " @functypedef\n\n Callback function invoked by `nghttp2_session_recv()` and\n `nghttp2_session_mem_recv2()` when an invalid non-DATA frame is\n received.  The error is indicated by the |lib_error_code|, which is\n one of the values defined in :type:`nghttp2_error`.  When this\n callback function is invoked, the library automatically submits\n either RST_STREAM or GOAWAY frame.  The |user_data| pointer is the\n third argument passed in to the call to\n `nghttp2_session_client_new()` or `nghttp2_session_server_new()`.\n\n If frame is HEADERS or PUSH_PROMISE, the ``nva`` and ``nvlen``\n member of their data structure are always ``NULL`` and 0\n respectively.\n\n The implementation of this function must return 0 if it succeeds.\n If nonzero is returned, it is treated as fatal error and\n `nghttp2_session_recv()` and `nghttp2_session_mem_recv2()`\n functions immediately return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.\n\n To set this callback to :type:`nghttp2_session_callbacks`, use\n `nghttp2_session_callbacks_set_on_invalid_frame_recv_callback()`."]
pub type nghttp2_on_invalid_frame_recv_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        frame: *const nghttp2_frame,
        lib_error_code: ::std::os::raw::c_int,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
#[doc = " @functypedef\n\n Callback function invoked when a chunk of data in DATA frame is\n received.  The |stream_id| is the stream ID this DATA frame belongs\n to.  The |flags| is the flags of DATA frame which this data chunk\n is contained.  ``(flags & NGHTTP2_FLAG_END_STREAM) != 0`` does not\n necessarily mean this chunk of data is the last one in the stream.\n You should use :type:`nghttp2_on_frame_recv_callback` to know all\n data frames are received.  The |user_data| pointer is the third\n argument passed in to the call to `nghttp2_session_client_new()` or\n `nghttp2_session_server_new()`.\n\n If the application uses `nghttp2_session_mem_recv2()`, it can\n return :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE` to make\n `nghttp2_session_mem_recv2()` return without processing further\n input bytes.  The memory by pointed by the |data| is retained until\n `nghttp2_session_mem_recv2()` or `nghttp2_session_recv()` is\n called.  The application must retain the input bytes which was used\n to produce the |data| parameter, because it may refer to the memory\n region included in the input bytes.\n\n The implementation of this function must return 0 if it succeeds.\n If nonzero is returned, it is treated as fatal error, and\n `nghttp2_session_recv()` and `nghttp2_session_mem_recv2()`\n functions immediately return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.\n\n To set this callback to :type:`nghttp2_session_callbacks`, use\n `nghttp2_session_callbacks_set_on_data_chunk_recv_callback()`."]
pub type nghttp2_on_data_chunk_recv_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        flags: u8,
        stream_id: i32,
        data: *const u8,
        len: usize,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
#[doc = " @functypedef\n\n Callback function invoked just before the non-DATA frame |frame| is\n sent.  The |user_data| pointer is the third argument passed in to\n the call to `nghttp2_session_client_new()` or\n `nghttp2_session_server_new()`.\n\n The implementation of this function must return 0 if it succeeds.\n It can also return :enum:`nghttp2_error.NGHTTP2_ERR_CANCEL` to\n cancel the transmission of the given frame.\n\n If there is a fatal error while executing this callback, the\n implementation should return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`, which makes\n `nghttp2_session_send()` and `nghttp2_session_mem_send2()`\n functions immediately return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.\n\n If the other value is returned, it is treated as if\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` is returned.\n But the implementation should not rely on this since the library\n may define new return value to extend its capability.\n\n To set this callback to :type:`nghttp2_session_callbacks`, use\n `nghttp2_session_callbacks_set_before_frame_send_callback()`."]
pub type nghttp2_before_frame_send_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        frame: *const nghttp2_frame,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
#[doc = " @functypedef\n\n Callback function invoked after the frame |frame| is sent.  The\n |user_data| pointer is the third argument passed in to the call to\n `nghttp2_session_client_new()` or `nghttp2_session_server_new()`.\n\n The implementation of this function must return 0 if it succeeds.\n If nonzero is returned, it is treated as fatal error and\n `nghttp2_session_send()` and `nghttp2_session_mem_send2()`\n functions immediately return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.\n\n To set this callback to :type:`nghttp2_session_callbacks`, use\n `nghttp2_session_callbacks_set_on_frame_send_callback()`."]
pub type nghttp2_on_frame_send_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        frame: *const nghttp2_frame,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
#[doc = " @functypedef\n\n Callback function invoked after the non-DATA frame |frame| is not\n sent because of the error.  The error is indicated by the\n |lib_error_code|, which is one of the values defined in\n :type:`nghttp2_error`.  The |user_data| pointer is the third\n argument passed in to the call to `nghttp2_session_client_new()` or\n `nghttp2_session_server_new()`.\n\n The implementation of this function must return 0 if it succeeds.\n If nonzero is returned, it is treated as fatal error and\n `nghttp2_session_send()` and `nghttp2_session_mem_send2()`\n functions immediately return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.\n\n `nghttp2_session_get_stream_user_data()` can be used to get\n associated data.\n\n To set this callback to :type:`nghttp2_session_callbacks`, use\n `nghttp2_session_callbacks_set_on_frame_not_send_callback()`."]
pub type nghttp2_on_frame_not_send_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        frame: *const nghttp2_frame,
        lib_error_code: ::std::os::raw::c_int,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
#[doc = " @functypedef\n\n Callback function invoked when the stream |stream_id| is closed.\n The reason of closure is indicated by the |error_code|.  The\n |error_code| is usually one of :enum:`nghttp2_error_code`, but that\n is not guaranteed.  The stream_user_data, which was specified in\n `nghttp2_submit_request2()` or `nghttp2_submit_headers()`, is still\n available in this function.  The |user_data| pointer is the third\n argument passed in to the call to `nghttp2_session_client_new()` or\n `nghttp2_session_server_new()`.\n\n This function is also called for a stream in reserved state.\n\n The implementation of this function must return 0 if it succeeds.\n If nonzero is returned, it is treated as fatal error and\n `nghttp2_session_recv()`, `nghttp2_session_mem_recv2()`,\n `nghttp2_session_send()`, and `nghttp2_session_mem_send2()`\n functions immediately return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.\n\n To set this callback to :type:`nghttp2_session_callbacks`, use\n `nghttp2_session_callbacks_set_on_stream_close_callback()`."]
pub type nghttp2_on_stream_close_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        stream_id: i32,
        error_code: u32,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
#[doc = " @functypedef\n\n Callback function invoked when the reception of header block in\n HEADERS or PUSH_PROMISE is started.  Each header name/value pair\n will be emitted by :type:`nghttp2_on_header_callback`.\n\n The ``frame->hd.flags`` may not have\n :enum:`nghttp2_flag.NGHTTP2_FLAG_END_HEADERS` flag set, which\n indicates that one or more CONTINUATION frames are involved.  But\n the application does not need to care about that because the header\n name/value pairs are emitted transparently regardless of\n CONTINUATION frames.\n\n The server applications probably create an object to store\n information about new stream if ``frame->hd.type ==\n NGHTTP2_HEADERS`` and ``frame->headers.cat ==\n NGHTTP2_HCAT_REQUEST``.  If |session| is configured as server side,\n ``frame->headers.cat`` is either ``NGHTTP2_HCAT_REQUEST``\n containing request headers or ``NGHTTP2_HCAT_HEADERS`` containing\n trailer fields and never get PUSH_PROMISE in this callback.\n\n For the client applications, ``frame->hd.type`` is either\n ``NGHTTP2_HEADERS`` or ``NGHTTP2_PUSH_PROMISE``.  In case of\n ``NGHTTP2_HEADERS``, ``frame->headers.cat ==\n NGHTTP2_HCAT_RESPONSE`` means that it is the first response\n headers, but it may be non-final response which is indicated by 1xx\n status code.  In this case, there may be zero or more HEADERS frame\n with ``frame->headers.cat == NGHTTP2_HCAT_HEADERS`` which has\n non-final response code and finally client gets exactly one HEADERS\n frame with ``frame->headers.cat == NGHTTP2_HCAT_HEADERS``\n containing final response headers (non-1xx status code).  The\n trailer fields also has ``frame->headers.cat ==\n NGHTTP2_HCAT_HEADERS`` which does not contain any status code.\n\n Returning\n :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE` will\n close the stream (promised stream if frame is PUSH_PROMISE) by\n issuing RST_STREAM with\n :enum:`nghttp2_error_code.NGHTTP2_INTERNAL_ERROR`.  In this case,\n :type:`nghttp2_on_header_callback` and\n :type:`nghttp2_on_frame_recv_callback` will not be invoked.  If a\n different error code is desirable, use\n `nghttp2_submit_rst_stream()` with a desired error code and then\n return :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`.\n Again, use ``frame->push_promise.promised_stream_id`` as stream_id\n parameter in `nghttp2_submit_rst_stream()` if frame is\n PUSH_PROMISE.\n\n The implementation of this function must return 0 if it succeeds.\n It can return\n :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE` to\n reset the stream (promised stream if frame is PUSH_PROMISE).  For\n critical errors, it must return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  If the other\n value is returned, it is treated as if\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` is returned.  If\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` is returned,\n `nghttp2_session_mem_recv2()` function will immediately return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.\n\n To set this callback to :type:`nghttp2_session_callbacks`, use\n `nghttp2_session_callbacks_set_on_begin_headers_callback()`."]
pub type nghttp2_on_begin_headers_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        frame: *const nghttp2_frame,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
#[doc = " @functypedef\n\n Callback function invoked when a header name/value pair is received\n for the |frame|.  The |name| of length |namelen| is header name.\n The |value| of length |valuelen| is header value.  The |flags| is\n bitwise OR of one or more of :type:`nghttp2_nv_flag`.\n\n If :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_INDEX` is set in\n |flags|, the receiver must not index this name/value pair when\n forwarding it to the next hop.  More specifically, \"Literal Header\n Field never Indexed\" representation must be used in HPACK encoding.\n\n When this callback is invoked, ``frame->hd.type`` is either\n :enum:`nghttp2_frame_type.NGHTTP2_HEADERS` or\n :enum:`nghttp2_frame_type.NGHTTP2_PUSH_PROMISE`.  After all header\n name/value pairs are processed with this callback, and no error has\n been detected, :type:`nghttp2_on_frame_recv_callback` will be\n invoked.  If there is an error in decompression,\n :type:`nghttp2_on_frame_recv_callback` for the |frame| will not be\n invoked.\n\n Both |name| and |value| are guaranteed to be NULL-terminated.  The\n |namelen| and |valuelen| do not include terminal NULL.  If\n `nghttp2_option_set_no_http_messaging()` is used with nonzero\n value, NULL character may be included in |name| or |value| before\n terminating NULL.\n\n Please note that unless `nghttp2_option_set_no_http_messaging()` is\n used, nghttp2 library does perform validation against the |name|\n and the |value| using `nghttp2_check_header_name()` and\n `nghttp2_check_header_value()`.  In addition to this, nghttp2\n performs validation based on HTTP Messaging rule, which is briefly\n explained in :ref:`http-messaging` section.\n\n If the application uses `nghttp2_session_mem_recv2()`, it can\n return :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE` to make\n `nghttp2_session_mem_recv2()` return without processing further\n input bytes.  The memory pointed by |frame|, |name| and |value|\n parameters are retained until `nghttp2_session_mem_recv2()` or\n `nghttp2_session_recv()` is called.  The application must retain\n the input bytes which was used to produce these parameters, because\n it may refer to the memory region included in the input bytes.\n\n Returning\n :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE` will\n close the stream (promised stream if frame is PUSH_PROMISE) by\n issuing RST_STREAM with\n :enum:`nghttp2_error_code.NGHTTP2_INTERNAL_ERROR`.  In this case,\n :type:`nghttp2_on_header_callback` and\n :type:`nghttp2_on_frame_recv_callback` will not be invoked.  If a\n different error code is desirable, use\n `nghttp2_submit_rst_stream()` with a desired error code and then\n return :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`.\n Again, use ``frame->push_promise.promised_stream_id`` as stream_id\n parameter in `nghttp2_submit_rst_stream()` if frame is\n PUSH_PROMISE.\n\n The implementation of this function must return 0 if it succeeds.\n It may return :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE` or\n :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`.  For\n other critical failures, it must return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  If the other\n nonzero value is returned, it is treated as\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  If\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` is returned,\n `nghttp2_session_recv()` and `nghttp2_session_mem_recv2()`\n functions immediately return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.\n\n To set this callback to :type:`nghttp2_session_callbacks`, use\n `nghttp2_session_callbacks_set_on_header_callback()`.\n\n .. warning::\n\n   Application should properly limit the total buffer size to store\n   incoming header fields.  Without it, peer may send large number\n   of header fields or large header fields to cause out of memory in\n   local endpoint.  Due to how HPACK works, peer can do this\n   effectively without using much memory on their own."]
pub type nghttp2_on_header_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        frame: *const nghttp2_frame,
        name: *const u8,
        namelen: usize,
        value: *const u8,
        valuelen: usize,
        flags: u8,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
#[doc = " @functypedef\n\n Callback function invoked when a header name/value pair is received\n for the |frame|.  The |name| is header name.  The |value| is header\n value.  The |flags| is bitwise OR of one or more of\n :type:`nghttp2_nv_flag`.\n\n This callback behaves like :type:`nghttp2_on_header_callback`,\n except that |name| and |value| are stored in reference counted\n buffer.  If application wishes to keep these references without\n copying them, use `nghttp2_rcbuf_incref()` to increment their\n reference count.  It is the application's responsibility to call\n `nghttp2_rcbuf_decref()` if they called `nghttp2_rcbuf_incref()` so\n as not to leak memory.  If the |session| is created by\n `nghttp2_session_server_new3()` or `nghttp2_session_client_new3()`,\n the function to free memory is the one belongs to the mem\n parameter.  As long as this free function alives, |name| and\n |value| can live after |session| was destroyed."]
pub type nghttp2_on_header_callback2 = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        frame: *const nghttp2_frame,
        name: *mut nghttp2_rcbuf,
        value: *mut nghttp2_rcbuf,
        flags: u8,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
#[doc = " @functypedef\n\n Callback function invoked when an invalid header name/value pair is\n received for the |frame|.\n\n The parameter and behaviour are similar to\n :type:`nghttp2_on_header_callback`.  The difference is that this\n callback is only invoked when an invalid header name/value pair is\n received which is treated as stream error if this callback returns\n :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE` and\n :type:`nghttp2_on_invalid_header_callback2` is not set.  Only\n invalid regular header field are passed to this callback.  In other\n words, invalid pseudo header field is not passed to this callback.\n Also header fields which includes upper cased latter are also\n treated as error without passing them to this callback.\n\n This callback is only considered if HTTP messaging validation is\n turned on (which is on by default, see\n `nghttp2_option_set_no_http_messaging()`).\n\n With this callback, application inspects the incoming invalid\n field, and it also can reset stream from this callback by returning\n :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`.  By\n default, the error code is\n :enum:`nghttp2_error_code.NGHTTP2_PROTOCOL_ERROR`.  To change the\n error code, call `nghttp2_submit_rst_stream()` with the error code\n of choice in addition to returning\n :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`.\n\n If 0 is returned, the header field is ignored, and the stream is\n not reset."]
pub type nghttp2_on_invalid_header_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        frame: *const nghttp2_frame,
        name: *const u8,
        namelen: usize,
        value: *const u8,
        valuelen: usize,
        flags: u8,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
#[doc = " @functypedef\n\n Callback function invoked when an invalid header name/value pair is\n received for the |frame|.\n\n The parameter and behaviour are similar to\n :type:`nghttp2_on_header_callback2`.  The difference is that this\n callback is only invoked when an invalid header name/value pair is\n received which is silently ignored if neither this callback nor\n :type:`nghttp2_on_invalid_header_callback` is set.  Only invalid\n regular header field are passed to this callback.  In other words,\n invalid pseudo header field is not passed to this callback.  Also\n header fields which includes upper cased latter are also treated as\n error without passing them to this callback.\n\n This callback is only considered if HTTP messaging validation is\n turned on (which is on by default, see\n `nghttp2_option_set_no_http_messaging()`).\n\n With this callback, application inspects the incoming invalid\n field, and it also can reset stream from this callback by returning\n :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`.  By\n default, the error code is\n :enum:`nghttp2_error_code.NGHTTP2_INTERNAL_ERROR`.  To change the\n error code, call `nghttp2_submit_rst_stream()` with the error code\n of choice in addition to returning\n :enum:`nghttp2_error.NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE`."]
pub type nghttp2_on_invalid_header_callback2 = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        frame: *const nghttp2_frame,
        name: *mut nghttp2_rcbuf,
        value: *mut nghttp2_rcbuf,
        flags: u8,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
#[doc = " @functypedef\n\n .. warning::\n\n   Deprecated.  Use :type:`nghttp2_select_padding_callback2`\n   instead.\n\n Callback function invoked when the library asks application how\n many padding bytes are required for the transmission of the\n |frame|.  The application must choose the total length of payload\n including padded bytes in range [frame->hd.length, max_payloadlen],\n inclusive.  Choosing number not in this range will be treated as\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  Returning\n ``frame->hd.length`` means no padding is added.  Returning\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` will make\n `nghttp2_session_send()` and `nghttp2_session_mem_send()` functions\n immediately return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.\n\n To set this callback to :type:`nghttp2_session_callbacks`, use\n `nghttp2_session_callbacks_set_select_padding_callback()`."]
pub type nghttp2_select_padding_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        frame: *const nghttp2_frame,
        max_payloadlen: usize,
        user_data: *mut ::std::os::raw::c_void,
    ) -> isize,
>;
#[doc = " @functypedef\n\n Callback function invoked when the library asks application how\n many padding bytes are required for the transmission of the\n |frame|.  The application must choose the total length of payload\n including padded bytes in range [frame->hd.length, max_payloadlen],\n inclusive.  Choosing number not in this range will be treated as\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  Returning\n ``frame->hd.length`` means no padding is added.  Returning\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` will make\n `nghttp2_session_send()` and `nghttp2_session_mem_send2()`\n functions immediately return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.\n\n To set this callback to :type:`nghttp2_session_callbacks`, use\n `nghttp2_session_callbacks_set_select_padding_callback2()`."]
pub type nghttp2_select_padding_callback2 = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        frame: *const nghttp2_frame,
        max_payloadlen: usize,
        user_data: *mut ::std::os::raw::c_void,
    ) -> nghttp2_ssize,
>;
#[doc = " @functypedef\n\n .. warning::\n\n   Deprecated.  Use\n   :type:`nghttp2_data_source_read_length_callback2` instead.\n\n Callback function invoked when library wants to get max length of\n data to send data to the remote peer.  The implementation of this\n function should return a value in the following range.  [1,\n min(|session_remote_window_size|, |stream_remote_window_size|,\n |remote_max_frame_size|)].  If a value greater than this range is\n returned than the max allow value will be used.  Returning a value\n smaller than this range is treated as\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  The\n |frame_type| is provided for future extensibility and identifies\n the type of frame (see :type:`nghttp2_frame_type`) for which to get\n the length for.  Currently supported frame types are:\n :enum:`nghttp2_frame_type.NGHTTP2_DATA`.\n\n This callback can be used to control the length in bytes for which\n :type:`nghttp2_data_source_read_callback` is allowed to send to the\n remote endpoint.  This callback is optional.  Returning\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` will signal the\n entire session failure.\n\n To set this callback to :type:`nghttp2_session_callbacks`, use\n `nghttp2_session_callbacks_set_data_source_read_length_callback()`."]
pub type nghttp2_data_source_read_length_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        frame_type: u8,
        stream_id: i32,
        session_remote_window_size: i32,
        stream_remote_window_size: i32,
        remote_max_frame_size: u32,
        user_data: *mut ::std::os::raw::c_void,
    ) -> isize,
>;
#[doc = " @functypedef\n\n Callback function invoked when library wants to get max length of\n data to send data to the remote peer.  The implementation of this\n function should return a value in the following range.  [1,\n min(|session_remote_window_size|, |stream_remote_window_size|,\n |remote_max_frame_size|)].  If a value greater than this range is\n returned than the max allow value will be used.  Returning a value\n smaller than this range is treated as\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  The\n |frame_type| is provided for future extensibility and identifies\n the type of frame (see :type:`nghttp2_frame_type`) for which to get\n the length for.  Currently supported frame types are:\n :enum:`nghttp2_frame_type.NGHTTP2_DATA`.\n\n This callback can be used to control the length in bytes for which\n :type:`nghttp2_data_source_read_callback` is allowed to send to the\n remote endpoint.  This callback is optional.  Returning\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE` will signal the\n entire session failure.\n\n To set this callback to :type:`nghttp2_session_callbacks`, use\n `nghttp2_session_callbacks_set_data_source_read_length_callback2()`."]
pub type nghttp2_data_source_read_length_callback2 = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        frame_type: u8,
        stream_id: i32,
        session_remote_window_size: i32,
        stream_remote_window_size: i32,
        remote_max_frame_size: u32,
        user_data: *mut ::std::os::raw::c_void,
    ) -> nghttp2_ssize,
>;
#[doc = " @functypedef\n\n Callback function invoked when a frame header is received.  The\n |hd| points to received frame header.\n\n Unlike :type:`nghttp2_on_frame_recv_callback`, this callback will\n also be called when frame header of CONTINUATION frame is received.\n\n If both :type:`nghttp2_on_begin_frame_callback` and\n :type:`nghttp2_on_begin_headers_callback` are set and HEADERS or\n PUSH_PROMISE is received, :type:`nghttp2_on_begin_frame_callback`\n will be called first.\n\n The implementation of this function must return 0 if it succeeds.\n If nonzero value is returned, it is treated as fatal error and\n `nghttp2_session_recv()` and `nghttp2_session_mem_recv2()`\n functions immediately return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.\n\n To set this callback to :type:`nghttp2_session_callbacks`, use\n `nghttp2_session_callbacks_set_on_begin_frame_callback()`."]
pub type nghttp2_on_begin_frame_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        hd: *const nghttp2_frame_hd,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
#[doc = " @functypedef\n\n Callback function invoked when chunk of extension frame payload is\n received.  The |hd| points to frame header.  The received\n chunk is |data| of length |len|.\n\n The implementation of this function must return 0 if it succeeds.\n\n To abort processing this extension frame, return\n :enum:`nghttp2_error.NGHTTP2_ERR_CANCEL`.\n\n If fatal error occurred, application should return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  In this case,\n `nghttp2_session_recv()` and `nghttp2_session_mem_recv2()`\n functions immediately return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  If the other\n values are returned, currently they are treated as\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`."]
pub type nghttp2_on_extension_chunk_recv_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        hd: *const nghttp2_frame_hd,
        data: *const u8,
        len: usize,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
#[doc = " @functypedef\n\n Callback function invoked when library asks the application to\n unpack extension payload from its wire format.  The extension\n payload has been passed to the application using\n :type:`nghttp2_on_extension_chunk_recv_callback`.  The frame header\n is already unpacked by the library and provided as |hd|.\n\n To receive extension frames, the application must tell desired\n extension frame type to the library using\n `nghttp2_option_set_user_recv_extension_type()`.\n\n The implementation of this function may store the pointer to the\n created object as a result of unpacking in |*payload|, and returns\n 0.  The pointer stored in |*payload| is opaque to the library, and\n the library does not own its pointer.  |*payload| is initialized as\n ``NULL``.  The |*payload| is available as ``frame->ext.payload`` in\n :type:`nghttp2_on_frame_recv_callback`.  Therefore if application\n can free that memory inside :type:`nghttp2_on_frame_recv_callback`\n callback.  Of course, application has a liberty not to use\n |*payload|, and do its own mechanism to process extension frames.\n\n To abort processing this extension frame, return\n :enum:`nghttp2_error.NGHTTP2_ERR_CANCEL`.\n\n If fatal error occurred, application should return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  In this case,\n `nghttp2_session_recv()` and `nghttp2_session_mem_recv2()`\n functions immediately return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  If the other\n values are returned, currently they are treated as\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`."]
pub type nghttp2_unpack_extension_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        payload: *mut *mut ::std::os::raw::c_void,
        hd: *const nghttp2_frame_hd,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
#[doc = " @functypedef\n\n .. warning::\n\n   Deprecated.  Use :type:`nghttp2_pack_extension_callback2`\n   instead.\n\n Callback function invoked when library asks the application to pack\n extension payload in its wire format.  The frame header will be\n packed by library.  Application must pack payload only.\n ``frame->ext.payload`` is the object passed to\n `nghttp2_submit_extension()` as payload parameter.  Application\n must pack extension payload to the |buf| of its capacity |len|\n bytes.  The |len| is at least 16KiB.\n\n The implementation of this function should return the number of\n bytes written into |buf| when it succeeds.\n\n To abort processing this extension frame, return\n :enum:`nghttp2_error.NGHTTP2_ERR_CANCEL`, and\n :type:`nghttp2_on_frame_not_send_callback` will be invoked.\n\n If fatal error occurred, application should return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  In this case,\n `nghttp2_session_send()` and `nghttp2_session_mem_send()` functions\n immediately return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  If the other\n values are returned, currently they are treated as\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  If the return\n value is strictly larger than |len|, it is treated as\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`."]
pub type nghttp2_pack_extension_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        buf: *mut u8,
        len: usize,
        frame: *const nghttp2_frame,
        user_data: *mut ::std::os::raw::c_void,
    ) -> isize,
>;
#[doc = " @functypedef\n\n Callback function invoked when library asks the application to pack\n extension payload in its wire format.  The frame header will be\n packed by library.  Application must pack payload only.\n ``frame->ext.payload`` is the object passed to\n `nghttp2_submit_extension()` as payload parameter.  Application\n must pack extension payload to the |buf| of its capacity |len|\n bytes.  The |len| is at least 16KiB.\n\n The implementation of this function should return the number of\n bytes written into |buf| when it succeeds.\n\n To abort processing this extension frame, return\n :enum:`nghttp2_error.NGHTTP2_ERR_CANCEL`, and\n :type:`nghttp2_on_frame_not_send_callback` will be invoked.\n\n If fatal error occurred, application should return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  In this case,\n `nghttp2_session_send()` and `nghttp2_session_mem_send2()`\n functions immediately return\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  If the other\n values are returned, currently they are treated as\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  If the return\n value is strictly larger than |len|, it is treated as\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`."]
pub type nghttp2_pack_extension_callback2 = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        buf: *mut u8,
        len: usize,
        frame: *const nghttp2_frame,
        user_data: *mut ::std::os::raw::c_void,
    ) -> nghttp2_ssize,
>;
#[doc = " @functypedef\n\n .. warning::\n\n   Deprecated.  Use :type:`nghttp2_error_callback2` instead.\n\n Callback function invoked when library provides the error message\n intended for human consumption.  This callback is solely for\n debugging purpose.  The |msg| is typically NULL-terminated string\n of length |len|.  |len| does not include the sentinel NULL\n character.\n\n The format of error message may change between nghttp2 library\n versions.  The application should not depend on the particular\n format.\n\n Normally, application should return 0 from this callback.  If fatal\n error occurred while doing something in this callback, application\n should return :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.\n In this case, library will return immediately with return value\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  Currently, if\n nonzero value is returned from this callback, they are treated as\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`, but application\n should not rely on this details."]
pub type nghttp2_error_callback = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        msg: *const ::std::os::raw::c_char,
        len: usize,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
#[doc = " @functypedef\n\n Callback function invoked when library provides the error code, and\n message.  This callback is solely for debugging purpose.\n |lib_error_code| is one of error code defined in\n :enum:`nghttp2_error`.  The |msg| is typically NULL-terminated\n string of length |len|, and intended for human consumption.  |len|\n does not include the sentinel NULL character.\n\n The format of error message may change between nghttp2 library\n versions.  The application should not depend on the particular\n format.\n\n Normally, application should return 0 from this callback.  If fatal\n error occurred while doing something in this callback, application\n should return :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.\n In this case, library will return immediately with return value\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`.  Currently, if\n nonzero value is returned from this callback, they are treated as\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`, but application\n should not rely on this details."]
pub type nghttp2_error_callback2 = ::std::option::Option<
    unsafe extern "C" fn(
        session: *mut nghttp2_session,
        lib_error_code: ::std::os::raw::c_int,
        msg: *const ::std::os::raw::c_char,
        len: usize,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int,
>;
#[doc = " @functypedef\n\n Callback function invoked when unpredictable data of |destlen|\n bytes are needed.  The implementation must write unpredictable data\n of |destlen| bytes into the buffer pointed by |dest|."]
pub type nghttp2_rand_callback =
    ::std::option::Option<unsafe extern "C" fn(dest: *mut u8, destlen: usize)>;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_session_callbacks {
    _unused: [u8; 0],
}
unsafe extern "C" {
    #[doc = " @function\n\n Initializes |*callbacks_ptr| with NULL values.\n\n The initialized object can be used when initializing multiple\n :type:`nghttp2_session` objects.\n\n When the application finished using this object, it can use\n `nghttp2_session_callbacks_del()` to free its memory.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory."]
    pub fn nghttp2_session_callbacks_new(
        callbacks_ptr: *mut *mut nghttp2_session_callbacks,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Frees any resources allocated for |callbacks|.  If |callbacks| is\n ``NULL``, this function does nothing."]
    pub fn nghttp2_session_callbacks_del(callbacks: *mut nghttp2_session_callbacks);
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  Use `nghttp2_session_callbacks_set_send_callback2()`\n   with :type:`nghttp2_send_callback2` instead.\n\n Sets callback function invoked when a session wants to send data to\n the remote peer.  This callback is not necessary if the application\n uses solely `nghttp2_session_mem_send()` to serialize data to\n transmit."]
    pub fn nghttp2_session_callbacks_set_send_callback(
        cbs: *mut nghttp2_session_callbacks,
        send_callback: nghttp2_send_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked when a session wants to send data to\n the remote peer.  This callback is not necessary if the application\n uses solely `nghttp2_session_mem_send2()` to serialize data to\n transmit."]
    pub fn nghttp2_session_callbacks_set_send_callback2(
        cbs: *mut nghttp2_session_callbacks,
        send_callback: nghttp2_send_callback2,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  Use `nghttp2_session_callbacks_set_recv_callback2()`\n   with :type:`nghttp2_recv_callback2` instead.\n\n Sets callback function invoked when the a session wants to receive\n data from the remote peer.  This callback is not necessary if the\n application uses solely `nghttp2_session_mem_recv()` to process\n received data."]
    pub fn nghttp2_session_callbacks_set_recv_callback(
        cbs: *mut nghttp2_session_callbacks,
        recv_callback: nghttp2_recv_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked when the a session wants to receive\n data from the remote peer.  This callback is not necessary if the\n application uses solely `nghttp2_session_mem_recv2()` to process\n received data."]
    pub fn nghttp2_session_callbacks_set_recv_callback2(
        cbs: *mut nghttp2_session_callbacks,
        recv_callback: nghttp2_recv_callback2,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked by `nghttp2_session_recv()` and\n `nghttp2_session_mem_recv2()` when a frame is received."]
    pub fn nghttp2_session_callbacks_set_on_frame_recv_callback(
        cbs: *mut nghttp2_session_callbacks,
        on_frame_recv_callback: nghttp2_on_frame_recv_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked by `nghttp2_session_recv()` and\n `nghttp2_session_mem_recv2()` when an invalid non-DATA frame is\n received."]
    pub fn nghttp2_session_callbacks_set_on_invalid_frame_recv_callback(
        cbs: *mut nghttp2_session_callbacks,
        on_invalid_frame_recv_callback: nghttp2_on_invalid_frame_recv_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked when a chunk of data in DATA frame\n is received."]
    pub fn nghttp2_session_callbacks_set_on_data_chunk_recv_callback(
        cbs: *mut nghttp2_session_callbacks,
        on_data_chunk_recv_callback: nghttp2_on_data_chunk_recv_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked before a non-DATA frame is sent."]
    pub fn nghttp2_session_callbacks_set_before_frame_send_callback(
        cbs: *mut nghttp2_session_callbacks,
        before_frame_send_callback: nghttp2_before_frame_send_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked after a frame is sent."]
    pub fn nghttp2_session_callbacks_set_on_frame_send_callback(
        cbs: *mut nghttp2_session_callbacks,
        on_frame_send_callback: nghttp2_on_frame_send_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked when a non-DATA frame is not sent\n because of an error."]
    pub fn nghttp2_session_callbacks_set_on_frame_not_send_callback(
        cbs: *mut nghttp2_session_callbacks,
        on_frame_not_send_callback: nghttp2_on_frame_not_send_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked when the stream is closed."]
    pub fn nghttp2_session_callbacks_set_on_stream_close_callback(
        cbs: *mut nghttp2_session_callbacks,
        on_stream_close_callback: nghttp2_on_stream_close_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked when the reception of header block\n in HEADERS or PUSH_PROMISE is started."]
    pub fn nghttp2_session_callbacks_set_on_begin_headers_callback(
        cbs: *mut nghttp2_session_callbacks,
        on_begin_headers_callback: nghttp2_on_begin_headers_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked when a header name/value pair is\n received.  If both\n `nghttp2_session_callbacks_set_on_header_callback()` and\n `nghttp2_session_callbacks_set_on_header_callback2()` are used to\n set callbacks, the latter has the precedence."]
    pub fn nghttp2_session_callbacks_set_on_header_callback(
        cbs: *mut nghttp2_session_callbacks,
        on_header_callback: nghttp2_on_header_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked when a header name/value pair is\n received."]
    pub fn nghttp2_session_callbacks_set_on_header_callback2(
        cbs: *mut nghttp2_session_callbacks,
        on_header_callback2: nghttp2_on_header_callback2,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked when an invalid header name/value\n pair is received.  If both\n `nghttp2_session_callbacks_set_on_invalid_header_callback()` and\n `nghttp2_session_callbacks_set_on_invalid_header_callback2()` are\n used to set callbacks, the latter takes the precedence."]
    pub fn nghttp2_session_callbacks_set_on_invalid_header_callback(
        cbs: *mut nghttp2_session_callbacks,
        on_invalid_header_callback: nghttp2_on_invalid_header_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked when an invalid header name/value\n pair is received."]
    pub fn nghttp2_session_callbacks_set_on_invalid_header_callback2(
        cbs: *mut nghttp2_session_callbacks,
        on_invalid_header_callback2: nghttp2_on_invalid_header_callback2,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  Use\n   `nghttp2_session_callbacks_set_select_padding_callback2()` with\n   :type:`nghttp2_select_padding_callback2` instead.\n\n Sets callback function invoked when the library asks application\n how many padding bytes are required for the transmission of the\n given frame."]
    pub fn nghttp2_session_callbacks_set_select_padding_callback(
        cbs: *mut nghttp2_session_callbacks,
        select_padding_callback: nghttp2_select_padding_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked when the library asks application\n how many padding bytes are required for the transmission of the\n given frame."]
    pub fn nghttp2_session_callbacks_set_select_padding_callback2(
        cbs: *mut nghttp2_session_callbacks,
        select_padding_callback: nghttp2_select_padding_callback2,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  Use\n   `nghttp2_session_callbacks_set_data_source_read_length_callback2()`\n   with :type:`nghttp2_data_source_read_length_callback2` instead.\n\n Sets callback function determine the length allowed in\n :type:`nghttp2_data_source_read_callback`."]
    pub fn nghttp2_session_callbacks_set_data_source_read_length_callback(
        cbs: *mut nghttp2_session_callbacks,
        data_source_read_length_callback: nghttp2_data_source_read_length_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function determine the length allowed in\n :type:`nghttp2_data_source_read_callback2`."]
    pub fn nghttp2_session_callbacks_set_data_source_read_length_callback2(
        cbs: *mut nghttp2_session_callbacks,
        data_source_read_length_callback: nghttp2_data_source_read_length_callback2,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked when a frame header is received."]
    pub fn nghttp2_session_callbacks_set_on_begin_frame_callback(
        cbs: *mut nghttp2_session_callbacks,
        on_begin_frame_callback: nghttp2_on_begin_frame_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked when\n :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_NO_COPY` is used in\n :type:`nghttp2_data_source_read_callback2` to avoid data copy."]
    pub fn nghttp2_session_callbacks_set_send_data_callback(
        cbs: *mut nghttp2_session_callbacks,
        send_data_callback: nghttp2_send_data_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  Use\n   `nghttp2_session_callbacks_set_pack_extension_callback2()` with\n   :type:`nghttp2_pack_extension_callback2` instead.\n\n Sets callback function invoked when the library asks the\n application to pack extension frame payload in wire format."]
    pub fn nghttp2_session_callbacks_set_pack_extension_callback(
        cbs: *mut nghttp2_session_callbacks,
        pack_extension_callback: nghttp2_pack_extension_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked when the library asks the\n application to pack extension frame payload in wire format."]
    pub fn nghttp2_session_callbacks_set_pack_extension_callback2(
        cbs: *mut nghttp2_session_callbacks,
        pack_extension_callback: nghttp2_pack_extension_callback2,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked when the library asks the\n application to unpack extension frame payload from wire format."]
    pub fn nghttp2_session_callbacks_set_unpack_extension_callback(
        cbs: *mut nghttp2_session_callbacks,
        unpack_extension_callback: nghttp2_unpack_extension_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked when chunk of extension frame\n payload is received."]
    pub fn nghttp2_session_callbacks_set_on_extension_chunk_recv_callback(
        cbs: *mut nghttp2_session_callbacks,
        on_extension_chunk_recv_callback: nghttp2_on_extension_chunk_recv_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  Use\n   `nghttp2_session_callbacks_set_error_callback2()` with\n   :type:`nghttp2_error_callback2` instead.\n\n Sets callback function invoked when library tells error message to\n the application.\n\n If both :type:`nghttp2_error_callback` and\n :type:`nghttp2_error_callback2` are set, the latter takes\n precedence."]
    pub fn nghttp2_session_callbacks_set_error_callback(
        cbs: *mut nghttp2_session_callbacks,
        error_callback: nghttp2_error_callback,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked when library tells error code, and\n message to the application.\n\n If both :type:`nghttp2_error_callback` and\n :type:`nghttp2_error_callback2` are set, the latter takes\n precedence."]
    pub fn nghttp2_session_callbacks_set_error_callback2(
        cbs: *mut nghttp2_session_callbacks,
        error_callback2: nghttp2_error_callback2,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets callback function invoked when unpredictable data is needed.\n Although this callback is optional due to the backward\n compatibility, it is recommended to specify it to harden the\n runtime behavior against suspicious activities of a remote\n endpoint."]
    pub fn nghttp2_session_callbacks_set_rand_callback(
        cbs: *mut nghttp2_session_callbacks,
        rand_callback: nghttp2_rand_callback,
    );
}
#[doc = " @functypedef\n\n Custom memory allocator to replace malloc().  The |mem_user_data|\n is the mem_user_data member of :type:`nghttp2_mem` structure."]
pub type nghttp2_malloc = ::std::option::Option<
    unsafe extern "C" fn(
        size: usize,
        mem_user_data: *mut ::std::os::raw::c_void,
    ) -> *mut ::std::os::raw::c_void,
>;
#[doc = " @functypedef\n\n Custom memory allocator to replace free().  The |mem_user_data| is\n the mem_user_data member of :type:`nghttp2_mem` structure."]
pub type nghttp2_free = ::std::option::Option<
    unsafe extern "C" fn(
        ptr: *mut ::std::os::raw::c_void,
        mem_user_data: *mut ::std::os::raw::c_void,
    ),
>;
#[doc = " @functypedef\n\n Custom memory allocator to replace calloc().  The |mem_user_data|\n is the mem_user_data member of :type:`nghttp2_mem` structure."]
pub type nghttp2_calloc = ::std::option::Option<
    unsafe extern "C" fn(
        nmemb: usize,
        size: usize,
        mem_user_data: *mut ::std::os::raw::c_void,
    ) -> *mut ::std::os::raw::c_void,
>;
#[doc = " @functypedef\n\n Custom memory allocator to replace realloc().  The |mem_user_data|\n is the mem_user_data member of :type:`nghttp2_mem` structure."]
pub type nghttp2_realloc = ::std::option::Option<
    unsafe extern "C" fn(
        ptr: *mut ::std::os::raw::c_void,
        size: usize,
        mem_user_data: *mut ::std::os::raw::c_void,
    ) -> *mut ::std::os::raw::c_void,
>;
#[doc = " @struct\n\n Custom memory allocator functions and user defined pointer.  The\n |mem_user_data| member is passed to each allocator function.  This\n can be used, for example, to achieve per-session memory pool.\n\n In the following example code, ``my_malloc``, ``my_free``,\n ``my_calloc`` and ``my_realloc`` are the replacement of the\n standard allocators ``malloc``, ``free``, ``calloc`` and\n ``realloc`` respectively::\n\n     void *my_malloc_cb(size_t size, void *mem_user_data) {\n       return my_malloc(size);\n     }\n\n     void my_free_cb(void *ptr, void *mem_user_data) { my_free(ptr); }\n\n     void *my_calloc_cb(size_t nmemb, size_t size, void *mem_user_data) {\n       return my_calloc(nmemb, size);\n     }\n\n     void *my_realloc_cb(void *ptr, size_t size, void *mem_user_data) {\n       return my_realloc(ptr, size);\n     }\n\n     void session_new() {\n       nghttp2_session *session;\n       nghttp2_session_callbacks *callbacks;\n       nghttp2_mem mem = {NULL, my_malloc_cb, my_free_cb, my_calloc_cb,\n                          my_realloc_cb};\n\n       ...\n\n       nghttp2_session_client_new3(&session, callbacks, NULL, NULL, &mem);\n\n       ...\n     }"]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_mem {
    #[doc = " An arbitrary user supplied data.  This is passed to each\n allocator function."]
    pub mem_user_data: *mut ::std::os::raw::c_void,
    #[doc = " Custom allocator function to replace malloc()."]
    pub malloc: nghttp2_malloc,
    #[doc = " Custom allocator function to replace free()."]
    pub free: nghttp2_free,
    #[doc = " Custom allocator function to replace calloc()."]
    pub calloc: nghttp2_calloc,
    #[doc = " Custom allocator function to replace realloc()."]
    pub realloc: nghttp2_realloc,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_option {
    _unused: [u8; 0],
}
unsafe extern "C" {
    #[doc = " @function\n\n Initializes |*option_ptr| with default values.\n\n When the application finished using this object, it can use\n `nghttp2_option_del()` to free its memory.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory."]
    pub fn nghttp2_option_new(option_ptr: *mut *mut nghttp2_option) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Frees any resources allocated for |option|.  If |option| is\n ``NULL``, this function does nothing."]
    pub fn nghttp2_option_del(option: *mut nghttp2_option);
}
unsafe extern "C" {
    #[doc = " @function\n\n This option prevents the library from sending WINDOW_UPDATE for a\n connection automatically.  If this option is set to nonzero, the\n library won't send WINDOW_UPDATE for DATA until application calls\n `nghttp2_session_consume()` to indicate the consumed amount of\n data.  Don't use `nghttp2_submit_window_update()` for this purpose.\n By default, this option is set to zero."]
    pub fn nghttp2_option_set_no_auto_window_update(
        option: *mut nghttp2_option,
        val: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n This option sets the SETTINGS_MAX_CONCURRENT_STREAMS value of\n remote endpoint as if it is received in SETTINGS frame.  Without\n specifying this option, the maximum number of outgoing concurrent\n streams is initially limited to 100 to avoid issues when the local\n endpoint submits lots of requests before receiving initial SETTINGS\n frame from the remote endpoint, since sending them at once to the\n remote endpoint could lead to rejection of some of the requests.\n This value will be overwritten when the local endpoint receives\n initial SETTINGS frame from the remote endpoint, either to the\n value advertised in SETTINGS_MAX_CONCURRENT_STREAMS or to the\n default value (unlimited) if none was advertised."]
    pub fn nghttp2_option_set_peer_max_concurrent_streams(option: *mut nghttp2_option, val: u32);
}
unsafe extern "C" {
    #[doc = " @function\n\n By default, nghttp2 library, if configured as server, requires\n first 24 bytes of client magic byte string (MAGIC).  In most cases,\n this will simplify the implementation of server.  But sometimes\n server may want to detect the application protocol based on first\n few bytes on clear text communication.\n\n If this option is used with nonzero |val|, nghttp2 library does not\n handle MAGIC.  It still checks following SETTINGS frame.  This\n means that applications should deal with MAGIC by themselves.\n\n If this option is not used or used with zero value, if MAGIC does\n not match :macro:`NGHTTP2_CLIENT_MAGIC`, `nghttp2_session_recv()`\n and `nghttp2_session_mem_recv2()` will return error\n :enum:`nghttp2_error.NGHTTP2_ERR_BAD_CLIENT_MAGIC`, which is fatal\n error."]
    pub fn nghttp2_option_set_no_recv_client_magic(
        option: *mut nghttp2_option,
        val: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n By default, nghttp2 library enforces subset of HTTP Messaging rules\n described in `HTTP/2 specification, section 8\n <https://tools.ietf.org/html/rfc7540#section-8>`_.  See\n :ref:`http-messaging` section for details.  For those applications\n who use nghttp2 library as non-HTTP use, give nonzero to |val| to\n disable this enforcement.  Please note that disabling this feature\n does not change the fundamental client and server model of HTTP.\n That is, even if the validation is disabled, only client can send\n requests."]
    pub fn nghttp2_option_set_no_http_messaging(
        option: *mut nghttp2_option,
        val: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n RFC 7540 does not enforce any limit on the number of incoming\n reserved streams (in RFC 7540 terms, streams in reserved (remote)\n state).  This only affects client side, since only server can push\n streams.  Malicious server can push arbitrary number of streams,\n and make client's memory exhausted.  This option can set the\n maximum number of such incoming streams to avoid possible memory\n exhaustion.  If this option is set, and pushed streams are\n automatically closed on reception, without calling user provided\n callback, if they exceed the given limit.  The default value is\n 200.  If session is configured as server side, this option has no\n effect.  Server can control the number of streams to push."]
    pub fn nghttp2_option_set_max_reserved_remote_streams(option: *mut nghttp2_option, val: u32);
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets extension frame type the application is willing to handle with\n user defined callbacks (see\n :type:`nghttp2_on_extension_chunk_recv_callback` and\n :type:`nghttp2_unpack_extension_callback`).  The |type| is\n extension frame type, and must be strictly greater than 0x9.\n Otherwise, this function does nothing.  The application can call\n this function multiple times to set more than one frame type to\n receive.  The application does not have to call this function if it\n just sends extension frames."]
    pub fn nghttp2_option_set_user_recv_extension_type(option: *mut nghttp2_option, type_: u8);
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets extension frame type the application is willing to receive\n using builtin handler.  The |type| is the extension frame type to\n receive, and must be strictly greater than 0x9.  Otherwise, this\n function does nothing.  The application can call this function\n multiple times to set more than one frame type to receive.  The\n application does not have to call this function if it just sends\n extension frames.\n\n If same frame type is passed to both\n `nghttp2_option_set_builtin_recv_extension_type()` and\n `nghttp2_option_set_user_recv_extension_type()`, the latter takes\n precedence."]
    pub fn nghttp2_option_set_builtin_recv_extension_type(option: *mut nghttp2_option, type_: u8);
}
unsafe extern "C" {
    #[doc = " @function\n\n This option prevents the library from sending PING frame with ACK\n flag set automatically when PING frame without ACK flag set is\n received.  If this option is set to nonzero, the library won't send\n PING frame with ACK flag set in the response for incoming PING\n frame.  The application can send PING frame with ACK flag set using\n `nghttp2_submit_ping()` with :enum:`nghttp2_flag.NGHTTP2_FLAG_ACK`\n as flags parameter."]
    pub fn nghttp2_option_set_no_auto_ping_ack(
        option: *mut nghttp2_option,
        val: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n This option sets the maximum length of header block (a set of\n header fields per one HEADERS frame) to send.  The length of a\n given set of header fields is calculated using\n `nghttp2_hd_deflate_bound()`.  The default value is 64KiB.  If\n application attempts to send header fields larger than this limit,\n the transmission of the frame fails with error code\n :enum:`nghttp2_error.NGHTTP2_ERR_FRAME_SIZE_ERROR`."]
    pub fn nghttp2_option_set_max_send_header_block_length(option: *mut nghttp2_option, val: usize);
}
unsafe extern "C" {
    #[doc = " @function\n\n This option sets the maximum dynamic table size for deflating\n header fields.  The default value is 4KiB.  In HTTP/2, receiver of\n deflated header block can specify maximum dynamic table size.  The\n actual maximum size is the minimum of the size receiver specified\n and this option value."]
    pub fn nghttp2_option_set_max_deflate_dynamic_table_size(
        option: *mut nghttp2_option,
        val: usize,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  Closed streams are not retained anymore.\n\n This function works as before, but it does not take any effect\n against :type:`nghttp2_session`."]
    pub fn nghttp2_option_set_no_closed_streams(
        option: *mut nghttp2_option,
        val: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n This function sets the maximum number of outgoing SETTINGS ACK and\n PING ACK frames retained in :type:`nghttp2_session` object.  If\n more than those frames are retained, the peer is considered to be\n misbehaving and session will be closed.  The default value is 1000."]
    pub fn nghttp2_option_set_max_outbound_ack(option: *mut nghttp2_option, val: usize);
}
unsafe extern "C" {
    #[doc = " @function\n\n This function sets the maximum number of SETTINGS entries per\n SETTINGS frame that will be accepted. If more than those entries\n are received, the peer is considered to be misbehaving and session\n will be closed. The default value is 32."]
    pub fn nghttp2_option_set_max_settings(option: *mut nghttp2_option, val: usize);
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n    Deprecated.  :rfc:`7540` priorities have been removed.\n\n This function works as before, but it does not take any effect\n against :type:`nghttp2_session`."]
    pub fn nghttp2_option_set_server_fallback_rfc7540_priorities(
        option: *mut nghttp2_option,
        val: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n This option, if set to nonzero, turns off RFC 9113 leading and\n trailing white spaces validation against HTTP field value.  Some\n important fields, such as HTTP/2 pseudo header fields, are\n validated more strictly and this option does not apply to them."]
    pub fn nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation(
        option: *mut nghttp2_option,
        val: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n This function sets the rate limit for the incoming stream reset\n (RST_STREAM frame).  It is server use only.  It is a token-bucket\n based rate limiter.  |burst| specifies the number of tokens that is\n initially available.  The maximum number of tokens is capped to\n this value.  |rate| specifies the number of tokens that are\n regenerated per second.  An incoming RST_STREAM consumes one token.\n If there is no token available, GOAWAY is sent to tear down the\n connection.  |burst| and |rate| default to 1000 and 33\n respectively."]
    pub fn nghttp2_option_set_stream_reset_rate_limit(
        option: *mut nghttp2_option,
        burst: u64,
        rate: u64,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n This function sets the maximum number of CONTINUATION frames\n following an incoming HEADER frame.  If more than those frames are\n received, the remote endpoint is considered to be misbehaving and\n session will be closed.  The default value is 8."]
    pub fn nghttp2_option_set_max_continuations(option: *mut nghttp2_option, val: usize);
}
unsafe extern "C" {
    #[doc = " @function\n\n This function sets the rate limit for the \"glitches\", the\n suspicious activities from a remote endpoint.  It is a token-bucket\n based rate limiter.  |burst| specifies the number of tokens that is\n initially available.  The maximum number of tokens is capped to\n this value.  |rate| specifies the number of tokens that are\n regenerated per second.  When a suspicious activity is detected,\n some amount of tokens are consumed.  If there is no token\n available, GOAWAY is sent to tear down the connection.  |burst| and\n |rate| default to 1000 and 33 respectively."]
    pub fn nghttp2_option_set_glitch_rate_limit(option: *mut nghttp2_option, burst: u64, rate: u64);
}
unsafe extern "C" {
    #[doc = " @function\n\n Initializes |*session_ptr| for client use.  The all members of\n |callbacks| are copied to |*session_ptr|.  Therefore |*session_ptr|\n does not store |callbacks|.  The |user_data| is an arbitrary user\n supplied data, which will be passed to the callback functions.\n\n The :type:`nghttp2_send_callback2` must be specified.  If the\n application code uses `nghttp2_session_recv()`, the\n :type:`nghttp2_recv_callback` must be specified.  The other members\n of |callbacks| can be ``NULL``.\n\n If this function fails, |*session_ptr| is left untouched.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory."]
    pub fn nghttp2_session_client_new(
        session_ptr: *mut *mut nghttp2_session,
        callbacks: *const nghttp2_session_callbacks,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Initializes |*session_ptr| for server use.  The all members of\n |callbacks| are copied to |*session_ptr|. Therefore |*session_ptr|\n does not store |callbacks|.  The |user_data| is an arbitrary user\n supplied data, which will be passed to the callback functions.\n\n The :type:`nghttp2_send_callback2` must be specified.  If the\n application code uses `nghttp2_session_recv()`, the\n :type:`nghttp2_recv_callback` must be specified.  The other members\n of |callbacks| can be ``NULL``.\n\n If this function fails, |*session_ptr| is left untouched.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory."]
    pub fn nghttp2_session_server_new(
        session_ptr: *mut *mut nghttp2_session,
        callbacks: *const nghttp2_session_callbacks,
        user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Like `nghttp2_session_client_new()`, but with additional options\n specified in the |option|.\n\n The |option| can be ``NULL`` and the call is equivalent to\n `nghttp2_session_client_new()`.\n\n This function does not take ownership |option|.  The application is\n responsible for freeing |option| if it finishes using the object.\n\n The library code does not refer to |option| after this function\n returns.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory."]
    pub fn nghttp2_session_client_new2(
        session_ptr: *mut *mut nghttp2_session,
        callbacks: *const nghttp2_session_callbacks,
        user_data: *mut ::std::os::raw::c_void,
        option: *const nghttp2_option,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Like `nghttp2_session_server_new()`, but with additional options\n specified in the |option|.\n\n The |option| can be ``NULL`` and the call is equivalent to\n `nghttp2_session_server_new()`.\n\n This function does not take ownership |option|.  The application is\n responsible for freeing |option| if it finishes using the object.\n\n The library code does not refer to |option| after this function\n returns.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory."]
    pub fn nghttp2_session_server_new2(
        session_ptr: *mut *mut nghttp2_session,
        callbacks: *const nghttp2_session_callbacks,
        user_data: *mut ::std::os::raw::c_void,
        option: *const nghttp2_option,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Like `nghttp2_session_client_new2()`, but with additional custom\n memory allocator specified in the |mem|.\n\n The |mem| can be ``NULL`` and the call is equivalent to\n `nghttp2_session_client_new2()`.\n\n This function does not take ownership |mem|.  The application is\n responsible for freeing |mem|.\n\n The library code does not refer to |mem| pointer after this\n function returns, so the application can safely free it.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory."]
    pub fn nghttp2_session_client_new3(
        session_ptr: *mut *mut nghttp2_session,
        callbacks: *const nghttp2_session_callbacks,
        user_data: *mut ::std::os::raw::c_void,
        option: *const nghttp2_option,
        mem: *mut nghttp2_mem,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Like `nghttp2_session_server_new2()`, but with additional custom\n memory allocator specified in the |mem|.\n\n The |mem| can be ``NULL`` and the call is equivalent to\n `nghttp2_session_server_new2()`.\n\n This function does not take ownership |mem|.  The application is\n responsible for freeing |mem|.\n\n The library code does not refer to |mem| pointer after this\n function returns, so the application can safely free it.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory."]
    pub fn nghttp2_session_server_new3(
        session_ptr: *mut *mut nghttp2_session,
        callbacks: *const nghttp2_session_callbacks,
        user_data: *mut ::std::os::raw::c_void,
        option: *const nghttp2_option,
        mem: *mut nghttp2_mem,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Frees any resources allocated for |session|.  If |session| is\n ``NULL``, this function does nothing."]
    pub fn nghttp2_session_del(session: *mut nghttp2_session);
}
unsafe extern "C" {
    #[doc = " @function\n\n Sends pending frames to the remote peer.\n\n This function retrieves the highest prioritized frame from the\n outbound queue and sends it to the remote peer.  It does this as\n many times as possible until the user callback\n :type:`nghttp2_send_callback2` returns\n :enum:`nghttp2_error.NGHTTP2_ERR_WOULDBLOCK`, the outbound queue\n becomes empty or flow control is triggered (remote window size\n becomes depleted or maximum number of concurrent streams is\n reached).  This function calls several callback functions which are\n passed when initializing the |session|.  Here is the simple time\n chart which tells when each callback is invoked:\n\n 1. Get the next frame to send from outbound queue.\n\n 2. Prepare transmission of the frame.\n\n 3. If the control frame cannot be sent because some preconditions\n    are not met (e.g., request HEADERS cannot be sent after GOAWAY),\n    :type:`nghttp2_on_frame_not_send_callback` is invoked.  Abort\n    the following steps.\n\n 4. If the frame is HEADERS, PUSH_PROMISE or DATA,\n    :type:`nghttp2_select_padding_callback` is invoked.\n\n 5. If the frame is request HEADERS, the stream is opened here.\n\n 6. :type:`nghttp2_before_frame_send_callback` is invoked.\n\n 7. If :enum:`nghttp2_error.NGHTTP2_ERR_CANCEL` is returned from\n    :type:`nghttp2_before_frame_send_callback`, the current frame\n    transmission is canceled, and\n    :type:`nghttp2_on_frame_not_send_callback` is invoked.  Abort\n    the following steps.\n\n 8. :type:`nghttp2_send_callback2` is invoked one or more times to\n    send the frame.\n\n 9. :type:`nghttp2_on_frame_send_callback` is invoked.\n\n 10. If the transmission of the frame triggers closure of the\n     stream, the stream is closed and\n     :type:`nghttp2_on_stream_close_callback` is invoked.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`\n     The callback function failed."]
    pub fn nghttp2_session_send(session: *mut nghttp2_session) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  Use `nghttp2_session_mem_send2()` instead.\n\n Returns the serialized data to send.\n\n This function behaves like `nghttp2_session_send()` except that it\n does not use :type:`nghttp2_send_callback` to transmit data.\n Instead, it assigns the pointer to the serialized data to the\n |*data_ptr| and returns its length.  The other callbacks are called\n in the same way as they are in `nghttp2_session_send()`.\n\n If no data is available to send, this function returns 0.\n\n This function may not return all serialized data in one invocation.\n To get all data, call this function repeatedly until it returns 0\n or one of negative error codes.\n\n The assigned |*data_ptr| is valid until the next call of\n `nghttp2_session_mem_send()` or `nghttp2_session_send()`.\n\n The caller must send all data before sending the next chunk of\n data.\n\n This function returns the length of the data pointed by the\n |*data_ptr| if it succeeds, or one of the following negative error\n codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n\n .. note::\n\n   This function may produce very small byte string.  If that is the\n   case, and application disables Nagle algorithm (``TCP_NODELAY``),\n   then writing this small chunk leads to very small packet, and it\n   is very inefficient.  An application should be responsible to\n   buffer up small chunks of data as necessary to avoid this\n   situation."]
    pub fn nghttp2_session_mem_send(
        session: *mut nghttp2_session,
        data_ptr: *mut *const u8,
    ) -> isize;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the serialized data to send.\n\n This function behaves like `nghttp2_session_send()` except that it\n does not use :type:`nghttp2_send_callback2` to transmit data.\n Instead, it assigns the pointer to the serialized data to the\n |*data_ptr| and returns its length.  The other callbacks are called\n in the same way as they are in `nghttp2_session_send()`.\n\n If no data is available to send, this function returns 0.\n\n This function may not return all serialized data in one invocation.\n To get all data, call this function repeatedly until it returns 0\n or one of negative error codes.\n\n The assigned |*data_ptr| is valid until the next call of\n `nghttp2_session_mem_send2()` or `nghttp2_session_send()`.\n\n The caller must send all data before sending the next chunk of\n data.\n\n This function returns the length of the data pointed by the\n |*data_ptr| if it succeeds, or one of the following negative error\n codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n\n .. note::\n\n   This function may produce very small byte string.  If that is the\n   case, and application disables Nagle algorithm (``TCP_NODELAY``),\n   then writing this small chunk leads to very small packet, and it\n   is very inefficient.  An application should be responsible to\n   buffer up small chunks of data as necessary to avoid this\n   situation."]
    pub fn nghttp2_session_mem_send2(
        session: *mut nghttp2_session,
        data_ptr: *mut *const u8,
    ) -> nghttp2_ssize;
}
unsafe extern "C" {
    #[doc = " @function\n\n Receives frames from the remote peer.\n\n This function receives as many frames as possible until the user\n callback :type:`nghttp2_recv_callback` returns\n :enum:`nghttp2_error.NGHTTP2_ERR_WOULDBLOCK`.  This function calls\n several callback functions which are passed when initializing the\n |session|.  Here is the simple time chart which tells when each\n callback is invoked:\n\n 1. :type:`nghttp2_recv_callback` is invoked one or more times to\n    receive frame header.\n\n 2. When frame header is received,\n    :type:`nghttp2_on_begin_frame_callback` is invoked.\n\n 3. If the frame is DATA frame:\n\n    1. :type:`nghttp2_recv_callback` is invoked to receive DATA\n       payload. For each chunk of data,\n       :type:`nghttp2_on_data_chunk_recv_callback` is invoked.\n\n    2. If one DATA frame is completely received,\n       :type:`nghttp2_on_frame_recv_callback` is invoked.  If the\n       reception of the frame triggers the closure of the stream,\n       :type:`nghttp2_on_stream_close_callback` is invoked.\n\n 4. If the frame is the control frame:\n\n    1. :type:`nghttp2_recv_callback` is invoked one or more times to\n       receive whole frame.\n\n    2. If the received frame is valid, then following actions are\n       taken.  If the frame is either HEADERS or PUSH_PROMISE,\n       :type:`nghttp2_on_begin_headers_callback` is invoked.  Then\n       :type:`nghttp2_on_header_callback` is invoked for each header\n       name/value pair.  For invalid header field,\n       :type:`nghttp2_on_invalid_header_callback` is called.  After\n       all name/value pairs are emitted successfully,\n       :type:`nghttp2_on_frame_recv_callback` is invoked.  For other\n       frames, :type:`nghttp2_on_frame_recv_callback` is invoked.\n       If the reception of the frame triggers the closure of the\n       stream, :type:`nghttp2_on_stream_close_callback` is invoked.\n\n    3. If the received frame is unpacked but is interpreted as\n       invalid, :type:`nghttp2_on_invalid_frame_recv_callback` is\n       invoked.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_EOF`\n     The remote peer did shutdown on the connection.\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`\n     The callback function failed.\n :enum:`nghttp2_error.NGHTTP2_ERR_BAD_CLIENT_MAGIC`\n     Invalid client magic was detected.  This error only returns\n     when |session| was configured as server and\n     `nghttp2_option_set_no_recv_client_magic()` is not used with\n     nonzero value.\n :enum:`nghttp2_error.NGHTTP2_ERR_FLOODED`\n     Flooding was detected in this HTTP/2 session, and it must be\n     closed.  This is most likely caused by misbehaviour of peer."]
    pub fn nghttp2_session_recv(session: *mut nghttp2_session) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  Use `nghttp2_session_mem_recv2()` instead.\n\n Processes data |in| as an input from the remote endpoint.  The\n |inlen| indicates the number of bytes to receive in the |in|.\n\n This function behaves like `nghttp2_session_recv()` except that it\n does not use :type:`nghttp2_recv_callback` to receive data; the\n |in| is the only data for the invocation of this function.  If all\n bytes are processed, this function returns.  The other callbacks\n are called in the same way as they are in `nghttp2_session_recv()`.\n\n In the current implementation, this function always tries to\n processes |inlen| bytes of input data unless either an error occurs or\n :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE` is returned from\n :type:`nghttp2_on_header_callback` or\n :type:`nghttp2_on_data_chunk_recv_callback`.  If\n :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE` is used, the return value\n includes the number of bytes which was used to produce the data or\n frame for the callback.\n\n This function returns the number of processed bytes, or one of the\n following negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`\n     The callback function failed.\n :enum:`nghttp2_error.NGHTTP2_ERR_BAD_CLIENT_MAGIC`\n     Invalid client magic was detected.  This error only returns\n     when |session| was configured as server and\n     `nghttp2_option_set_no_recv_client_magic()` is not used with\n     nonzero value.\n :enum:`nghttp2_error.NGHTTP2_ERR_FLOODED`\n     Flooding was detected in this HTTP/2 session, and it must be\n     closed.  This is most likely caused by misbehaviour of peer."]
    pub fn nghttp2_session_mem_recv(
        session: *mut nghttp2_session,
        in_: *const u8,
        inlen: usize,
    ) -> isize;
}
unsafe extern "C" {
    #[doc = " @function\n\n Processes data |in| as an input from the remote endpoint.  The\n |inlen| indicates the number of bytes to receive in the |in|.\n\n This function behaves like `nghttp2_session_recv()` except that it\n does not use :type:`nghttp2_recv_callback` to receive data; the\n |in| is the only data for the invocation of this function.  If all\n bytes are processed, this function returns.  The other callbacks\n are called in the same way as they are in `nghttp2_session_recv()`.\n\n In the current implementation, this function always tries to\n processes |inlen| bytes of input data unless either an error occurs or\n :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE` is returned from\n :type:`nghttp2_on_header_callback` or\n :type:`nghttp2_on_data_chunk_recv_callback`.  If\n :enum:`nghttp2_error.NGHTTP2_ERR_PAUSE` is used, the return value\n includes the number of bytes which was used to produce the data or\n frame for the callback.\n\n This function returns the number of processed bytes, or one of the\n following negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_CALLBACK_FAILURE`\n     The callback function failed.\n :enum:`nghttp2_error.NGHTTP2_ERR_BAD_CLIENT_MAGIC`\n     Invalid client magic was detected.  This error only returns\n     when |session| was configured as server and\n     `nghttp2_option_set_no_recv_client_magic()` is not used with\n     nonzero value.\n :enum:`nghttp2_error.NGHTTP2_ERR_FLOODED`\n     Flooding was detected in this HTTP/2 session, and it must be\n     closed.  This is most likely caused by misbehaviour of peer."]
    pub fn nghttp2_session_mem_recv2(
        session: *mut nghttp2_session,
        in_: *const u8,
        inlen: usize,
    ) -> nghttp2_ssize;
}
unsafe extern "C" {
    #[doc = " @function\n\n Puts back previously deferred DATA frame in the stream |stream_id|\n to the outbound queue.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The stream does not exist; or no deferred data exist.\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory."]
    pub fn nghttp2_session_resume_data(
        session: *mut nghttp2_session,
        stream_id: i32,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns nonzero value if |session| wants to receive data from the\n remote peer.\n\n If both `nghttp2_session_want_read()` and\n `nghttp2_session_want_write()` return 0, the application should\n drop the connection."]
    pub fn nghttp2_session_want_read(session: *mut nghttp2_session) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns nonzero value if |session| wants to send data to the remote\n peer.\n\n If both `nghttp2_session_want_read()` and\n `nghttp2_session_want_write()` return 0, the application should\n drop the connection."]
    pub fn nghttp2_session_want_write(session: *mut nghttp2_session) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns stream_user_data for the stream |stream_id|.  The\n stream_user_data is provided by `nghttp2_submit_request2()`,\n `nghttp2_submit_headers()` or\n `nghttp2_session_set_stream_user_data()`.  Unless it is set using\n `nghttp2_session_set_stream_user_data()`, if the stream is\n initiated by the remote endpoint, stream_user_data is always\n ``NULL``.  If the stream does not exist, this function returns\n ``NULL``."]
    pub fn nghttp2_session_get_stream_user_data(
        session: *mut nghttp2_session,
        stream_id: i32,
    ) -> *mut ::std::os::raw::c_void;
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets the |stream_user_data| to the stream denoted by the\n |stream_id|.  If a stream user data is already set to the stream,\n it is replaced with the |stream_user_data|.  It is valid to specify\n ``NULL`` in the |stream_user_data|, which nullifies the associated\n data pointer.\n\n It is valid to set the |stream_user_data| to the stream reserved by\n PUSH_PROMISE frame.\n\n This function returns 0 if it succeeds, or one of following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The stream does not exist"]
    pub fn nghttp2_session_set_stream_user_data(
        session: *mut nghttp2_session,
        stream_id: i32,
        stream_user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Sets |user_data| to |session|, overwriting the existing user data\n specified in `nghttp2_session_client_new()`, or\n `nghttp2_session_server_new()`."]
    pub fn nghttp2_session_set_user_data(
        session: *mut nghttp2_session,
        user_data: *mut ::std::os::raw::c_void,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the number of frames in the outbound queue.  This does not\n include the deferred DATA frames."]
    pub fn nghttp2_session_get_outbound_queue_size(session: *mut nghttp2_session) -> usize;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the number of DATA payload in bytes received without\n WINDOW_UPDATE transmission for the stream |stream_id|.  The local\n (receive) window size can be adjusted by\n `nghttp2_submit_window_update()`.  This function takes into account\n that and returns effective data length.  In particular, if the\n local window size is reduced by submitting negative\n window_size_increment with `nghttp2_submit_window_update()`, this\n function returns the number of bytes less than actually received.\n\n This function returns -1 if it fails."]
    pub fn nghttp2_session_get_stream_effective_recv_data_length(
        session: *mut nghttp2_session,
        stream_id: i32,
    ) -> i32;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the local (receive) window size for the stream |stream_id|.\n The local window size can be adjusted by\n `nghttp2_submit_window_update()`.  This function takes into account\n that and returns effective window size.\n\n This function does not take into account the amount of received\n data from the remote endpoint.  Use\n `nghttp2_session_get_stream_local_window_size()` to know the amount\n of data the remote endpoint can send without receiving stream level\n WINDOW_UPDATE frame.  Note that each stream is still subject to the\n connection level flow control.\n\n This function returns -1 if it fails."]
    pub fn nghttp2_session_get_stream_effective_local_window_size(
        session: *mut nghttp2_session,
        stream_id: i32,
    ) -> i32;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the amount of flow-controlled payload (e.g., DATA) that the\n remote endpoint can send without receiving stream level\n WINDOW_UPDATE frame.  It is also subject to the connection level\n flow control.  So the actual amount of data to send is\n min(`nghttp2_session_get_stream_local_window_size()`,\n `nghttp2_session_get_local_window_size()`).\n\n This function returns -1 if it fails."]
    pub fn nghttp2_session_get_stream_local_window_size(
        session: *mut nghttp2_session,
        stream_id: i32,
    ) -> i32;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the number of DATA payload in bytes received without\n WINDOW_UPDATE transmission for a connection.  The local (receive)\n window size can be adjusted by `nghttp2_submit_window_update()`.\n This function takes into account that and returns effective data\n length.  In particular, if the local window size is reduced by\n submitting negative window_size_increment with\n `nghttp2_submit_window_update()`, this function returns the number\n of bytes less than actually received.\n\n This function returns -1 if it fails."]
    pub fn nghttp2_session_get_effective_recv_data_length(session: *mut nghttp2_session) -> i32;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the local (receive) window size for a connection.  The\n local window size can be adjusted by\n `nghttp2_submit_window_update()`.  This function takes into account\n that and returns effective window size.\n\n This function does not take into account the amount of received\n data from the remote endpoint.  Use\n `nghttp2_session_get_local_window_size()` to know the amount of\n data the remote endpoint can send without receiving\n connection-level WINDOW_UPDATE frame.  Note that each stream is\n still subject to the stream level flow control.\n\n This function returns -1 if it fails."]
    pub fn nghttp2_session_get_effective_local_window_size(session: *mut nghttp2_session) -> i32;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the amount of flow-controlled payload (e.g., DATA) that the\n remote endpoint can send without receiving connection level\n WINDOW_UPDATE frame.  Note that each stream is still subject to the\n stream level flow control (see\n `nghttp2_session_get_stream_local_window_size()`).\n\n This function returns -1 if it fails."]
    pub fn nghttp2_session_get_local_window_size(session: *mut nghttp2_session) -> i32;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the remote window size for a given stream |stream_id|.\n\n This is the amount of flow-controlled payload (e.g., DATA) that the\n local endpoint can send without stream level WINDOW_UPDATE.  There\n is also connection level flow control, so the effective size of\n payload that the local endpoint can actually send is\n min(`nghttp2_session_get_stream_remote_window_size()`,\n `nghttp2_session_get_remote_window_size()`).\n\n This function returns -1 if it fails."]
    pub fn nghttp2_session_get_stream_remote_window_size(
        session: *mut nghttp2_session,
        stream_id: i32,
    ) -> i32;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the remote window size for a connection.\n\n This function always succeeds."]
    pub fn nghttp2_session_get_remote_window_size(session: *mut nghttp2_session) -> i32;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns 1 if local peer half closed the given stream |stream_id|.\n Returns 0 if it did not.  Returns -1 if no such stream exists."]
    pub fn nghttp2_session_get_stream_local_close(
        session: *mut nghttp2_session,
        stream_id: i32,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns 1 if remote peer half closed the given stream |stream_id|.\n Returns 0 if it did not.  Returns -1 if no such stream exists."]
    pub fn nghttp2_session_get_stream_remote_close(
        session: *mut nghttp2_session,
        stream_id: i32,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the current dynamic table size of HPACK inflater, including\n the overhead 32 bytes per entry described in RFC 7541."]
    pub fn nghttp2_session_get_hd_inflate_dynamic_table_size(
        session: *mut nghttp2_session,
    ) -> usize;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the current dynamic table size of HPACK deflater including\n the overhead 32 bytes per entry described in RFC 7541."]
    pub fn nghttp2_session_get_hd_deflate_dynamic_table_size(
        session: *mut nghttp2_session,
    ) -> usize;
}
unsafe extern "C" {
    #[doc = " @function\n\n Signals the session so that the connection should be terminated.\n\n The last stream ID is the minimum value between the stream ID of a\n stream for which :type:`nghttp2_on_frame_recv_callback` was called\n most recently and the last stream ID we have sent to the peer\n previously.\n\n The |error_code| is the error code of this GOAWAY frame.  The\n pre-defined error code is one of :enum:`nghttp2_error_code`.\n\n After the transmission, both `nghttp2_session_want_read()` and\n `nghttp2_session_want_write()` return 0.\n\n This function should be called when the connection should be\n terminated after sending GOAWAY.  If the remaining streams should\n be processed after GOAWAY, use `nghttp2_submit_goaway()` instead.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory."]
    pub fn nghttp2_session_terminate_session(
        session: *mut nghttp2_session,
        error_code: u32,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Signals the session so that the connection should be terminated.\n\n This function behaves like `nghttp2_session_terminate_session()`,\n but the last stream ID can be specified by the application for fine\n grained control of stream.  The HTTP/2 specification does not allow\n last_stream_id to be increased.  So the actual value sent as\n last_stream_id is the minimum value between the given\n |last_stream_id| and the last_stream_id we have previously sent to\n the peer.\n\n The |last_stream_id| is peer's stream ID or 0.  So if |session| is\n initialized as client, |last_stream_id| must be even or 0.  If\n |session| is initialized as server, |last_stream_id| must be odd or\n 0.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |last_stream_id| is invalid."]
    pub fn nghttp2_session_terminate_session2(
        session: *mut nghttp2_session,
        last_stream_id: i32,
        error_code: u32,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Signals to the client that the server started graceful shutdown\n procedure.\n\n This function is only usable for server.  If this function is\n called with client side session, this function returns\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`.\n\n To gracefully shutdown HTTP/2 session, server should call this\n function to send GOAWAY with last_stream_id (1u << 31) - 1.  And\n after some delay (e.g., 1 RTT), send another GOAWAY with the stream\n ID that the server has some processing using\n `nghttp2_submit_goaway()`.  See also\n `nghttp2_session_get_last_proc_stream_id()`.\n\n Unlike `nghttp2_submit_goaway()`, this function just sends GOAWAY\n and does nothing more.  This is a mere indication to the client\n that session shutdown is imminent.  The application should call\n `nghttp2_submit_goaway()` with appropriate last_stream_id after\n this call.\n\n If one or more GOAWAY frame have been already sent by either\n `nghttp2_submit_goaway()` or `nghttp2_session_terminate_session()`,\n this function has no effect.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`\n     The |session| is initialized as client."]
    pub fn nghttp2_submit_shutdown_notice(session: *mut nghttp2_session) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the value of SETTINGS |id| notified by a remote endpoint.\n The |id| must be one of values defined in\n :enum:`nghttp2_settings_id`."]
    pub fn nghttp2_session_get_remote_settings(
        session: *mut nghttp2_session,
        id: nghttp2_settings_id,
    ) -> u32;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the value of SETTINGS |id| of local endpoint acknowledged\n by the remote endpoint.  The |id| must be one of the values defined\n in :enum:`nghttp2_settings_id`."]
    pub fn nghttp2_session_get_local_settings(
        session: *mut nghttp2_session,
        id: nghttp2_settings_id,
    ) -> u32;
}
unsafe extern "C" {
    #[doc = " @function\n\n Tells the |session| that next stream ID is |next_stream_id|.  The\n |next_stream_id| must be equal or greater than the value returned\n by `nghttp2_session_get_next_stream_id()`.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |next_stream_id| is strictly less than the value\n     `nghttp2_session_get_next_stream_id()` returns; or\n     |next_stream_id| is invalid (e.g., even integer for client, or\n     odd integer for server)."]
    pub fn nghttp2_session_set_next_stream_id(
        session: *mut nghttp2_session,
        next_stream_id: i32,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the next outgoing stream ID.  Notice that return type is\n uint32_t.  If we run out of stream ID for this session, this\n function returns 1 << 31."]
    pub fn nghttp2_session_get_next_stream_id(session: *mut nghttp2_session) -> u32;
}
unsafe extern "C" {
    #[doc = " @function\n\n Tells the |session| that |size| bytes for a stream denoted by\n |stream_id| were consumed by application and are ready to\n WINDOW_UPDATE.  The consumed bytes are counted towards both\n connection and stream level WINDOW_UPDATE (see\n `nghttp2_session_consume_connection()` and\n `nghttp2_session_consume_stream()` to update consumption\n independently).  This function is intended to be used without\n automatic window update (see\n `nghttp2_option_set_no_auto_window_update()`).\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |stream_id| is 0.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`\n     Automatic WINDOW_UPDATE is not disabled."]
    pub fn nghttp2_session_consume(
        session: *mut nghttp2_session,
        stream_id: i32,
        size: usize,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Like `nghttp2_session_consume()`, but this only tells library that\n |size| bytes were consumed only for connection level.  Note that\n HTTP/2 maintains connection and stream level flow control windows\n independently.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`\n     Automatic WINDOW_UPDATE is not disabled."]
    pub fn nghttp2_session_consume_connection(
        session: *mut nghttp2_session,
        size: usize,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Like `nghttp2_session_consume()`, but this only tells library that\n |size| bytes were consumed only for stream denoted by |stream_id|.\n Note that HTTP/2 maintains connection and stream level flow control\n windows independently.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |stream_id| is 0.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`\n     Automatic WINDOW_UPDATE is not disabled."]
    pub fn nghttp2_session_consume_stream(
        session: *mut nghttp2_session,
        stream_id: i32,
        size: usize,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  :rfc:`7540` priorities are deprecated by\n   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible\n   prioritization scheme.\n\n This function is noop.  It always returns 0."]
    pub fn nghttp2_session_change_stream_priority(
        session: *mut nghttp2_session,
        stream_id: i32,
        pri_spec: *const nghttp2_priority_spec,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  :rfc:`7540` priorities are deprecated by\n   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible\n   prioritization scheme.\n\n This function is noop.  It always returns 0."]
    pub fn nghttp2_session_create_idle_stream(
        session: *mut nghttp2_session,
        stream_id: i32,
        pri_spec: *const nghttp2_priority_spec,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   This function is deprecated in favor of\n   `nghttp2_session_upgrade2()`, because this function lacks the\n   parameter to tell the library the request method used in the\n   original HTTP request.  This information is required for client\n   to validate actual response body length against content-length\n   header field (see `nghttp2_option_set_no_http_messaging()`).  If\n   HEAD is used in request, the length of response body must be 0\n   regardless of value included in content-length header field.\n\n Performs post-process of HTTP Upgrade request.  This function can\n be called from both client and server, but the behavior is very\n different in each other.\n\n If called from client side, the |settings_payload| must be the\n value sent in ``HTTP2-Settings`` header field and must be decoded\n by base64url decoder.  The |settings_payloadlen| is the length of\n |settings_payload|.  The |settings_payload| is unpacked and its\n setting values will be submitted using `nghttp2_submit_settings()`.\n This means that the client application code does not need to submit\n SETTINGS by itself.  The stream with stream ID=1 is opened and the\n |stream_user_data| is used for its stream_user_data.  The opened\n stream becomes half-closed (local) state.\n\n If called from server side, the |settings_payload| must be the\n value received in ``HTTP2-Settings`` header field and must be\n decoded by base64url decoder.  The |settings_payloadlen| is the\n length of |settings_payload|.  It is treated as if the SETTINGS\n frame with that payload is received.  Thus, callback functions for\n the reception of SETTINGS frame will be invoked.  The stream with\n stream ID=1 is opened.  The |stream_user_data| is ignored.  The\n opened stream becomes half-closed (remote).\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |settings_payload| is badly formed.\n :enum:`nghttp2_error.NGHTTP2_ERR_PROTO`\n     The stream ID 1 is already used or closed; or is not available."]
    pub fn nghttp2_session_upgrade(
        session: *mut nghttp2_session,
        settings_payload: *const u8,
        settings_payloadlen: usize,
        stream_user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Performs post-process of HTTP Upgrade request.  This function can\n be called from both client and server, but the behavior is very\n different in each other.\n\n If called from client side, the |settings_payload| must be the\n value sent in ``HTTP2-Settings`` header field and must be decoded\n by base64url decoder.  The |settings_payloadlen| is the length of\n |settings_payload|.  The |settings_payload| is unpacked and its\n setting values will be submitted using `nghttp2_submit_settings()`.\n This means that the client application code does not need to submit\n SETTINGS by itself.  The stream with stream ID=1 is opened and the\n |stream_user_data| is used for its stream_user_data.  The opened\n stream becomes half-closed (local) state.\n\n If called from server side, the |settings_payload| must be the\n value received in ``HTTP2-Settings`` header field and must be\n decoded by base64url decoder.  The |settings_payloadlen| is the\n length of |settings_payload|.  It is treated as if the SETTINGS\n frame with that payload is received.  Thus, callback functions for\n the reception of SETTINGS frame will be invoked.  The stream with\n stream ID=1 is opened.  The |stream_user_data| is ignored.  The\n opened stream becomes half-closed (remote).\n\n If the request method is HEAD, pass nonzero value to\n |head_request|.  Otherwise, pass 0.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |settings_payload| is badly formed.\n :enum:`nghttp2_error.NGHTTP2_ERR_PROTO`\n     The stream ID 1 is already used or closed; or is not available."]
    pub fn nghttp2_session_upgrade2(
        session: *mut nghttp2_session,
        settings_payload: *const u8,
        settings_payloadlen: usize,
        head_request: ::std::os::raw::c_int,
        stream_user_data: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  Use `nghttp2_pack_settings_payload2()` instead.\n\n Serializes the SETTINGS values |iv| in the |buf|.  The size of the\n |buf| is specified by |buflen|.  The number of entries in the |iv|\n array is given by |niv|.  The required space in |buf| for the |niv|\n entries is ``6*niv`` bytes and if the given buffer is too small, an\n error is returned.  This function is used mainly for creating a\n SETTINGS payload to be sent with the ``HTTP2-Settings`` header\n field in an HTTP Upgrade request.  The data written in |buf| is NOT\n base64url encoded and the application is responsible for encoding.\n\n This function returns the number of bytes written in |buf|, or one\n of the following negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |iv| contains duplicate settings ID or invalid value.\n\n :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`\n     The provided |buflen| size is too small to hold the output."]
    pub fn nghttp2_pack_settings_payload(
        buf: *mut u8,
        buflen: usize,
        iv: *const nghttp2_settings_entry,
        niv: usize,
    ) -> isize;
}
unsafe extern "C" {
    #[doc = " @function\n\n Serializes the SETTINGS values |iv| in the |buf|.  The size of the\n |buf| is specified by |buflen|.  The number of entries in the |iv|\n array is given by |niv|.  The required space in |buf| for the |niv|\n entries is ``6*niv`` bytes and if the given buffer is too small, an\n error is returned.  This function is used mainly for creating a\n SETTINGS payload to be sent with the ``HTTP2-Settings`` header\n field in an HTTP Upgrade request.  The data written in |buf| is NOT\n base64url encoded and the application is responsible for encoding.\n\n This function returns the number of bytes written in |buf|, or one\n of the following negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |iv| contains duplicate settings ID or invalid value.\n\n :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`\n     The provided |buflen| size is too small to hold the output."]
    pub fn nghttp2_pack_settings_payload2(
        buf: *mut u8,
        buflen: usize,
        iv: *const nghttp2_settings_entry,
        niv: usize,
    ) -> nghttp2_ssize;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns string describing the |lib_error_code|.  The\n |lib_error_code| must be one of the :enum:`nghttp2_error`."]
    pub fn nghttp2_strerror(lib_error_code: ::std::os::raw::c_int)
        -> *const ::std::os::raw::c_char;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns string representation of HTTP/2 error code |error_code|\n (e.g., ``PROTOCOL_ERROR`` is returned if ``error_code ==\n NGHTTP2_PROTOCOL_ERROR``).  If string representation is unknown for\n given |error_code|, this function returns string ``unknown``."]
    pub fn nghttp2_http2_strerror(error_code: u32) -> *const ::std::os::raw::c_char;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  :rfc:`7540` priorities are deprecated by\n   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible\n   prioritization scheme.\n\n Initializes |pri_spec| with the |stream_id| of the stream to depend\n on with |weight| and its exclusive flag.  If |exclusive| is\n nonzero, exclusive flag is set.\n\n The |weight| must be in [:macro:`NGHTTP2_MIN_WEIGHT`,\n :macro:`NGHTTP2_MAX_WEIGHT`], inclusive."]
    pub fn nghttp2_priority_spec_init(
        pri_spec: *mut nghttp2_priority_spec,
        stream_id: i32,
        weight: i32,
        exclusive: ::std::os::raw::c_int,
    );
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  :rfc:`7540` priorities are deprecated by\n   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible\n   prioritization scheme.\n\n Initializes |pri_spec| with the default values.  The default values\n are: stream_id = 0, weight = :macro:`NGHTTP2_DEFAULT_WEIGHT` and\n exclusive = 0."]
    pub fn nghttp2_priority_spec_default_init(pri_spec: *mut nghttp2_priority_spec);
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  :rfc:`7540` priorities are deprecated by\n   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible\n   prioritization scheme.\n\n Returns nonzero if the |pri_spec| is filled with default values."]
    pub fn nghttp2_priority_spec_check_default(
        pri_spec: *const nghttp2_priority_spec,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  Use `nghttp2_submit_request2()` instead.\n\n Submits HEADERS frame and optionally one or more DATA frames.\n\n The |pri_spec| is ignored.\n\n The |nva| is an array of name/value pair :type:`nghttp2_nv` with\n |nvlen| elements.  The application is responsible to include\n required pseudo-header fields (header field whose name starts with\n \":\") in |nva| and must place pseudo-headers before regular header\n fields.\n\n This function creates copies of all name/value pairs in |nva|.  It\n also lower-cases all names in |nva|.  The order of elements in\n |nva| is preserved.  For header fields with\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME` and\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set,\n header field name and value are not copied respectively.  With\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME`, application\n is responsible to pass header field name in lowercase.  The\n application should maintain the references to them until\n :type:`nghttp2_on_frame_send_callback` or\n :type:`nghttp2_on_frame_not_send_callback` is called.\n\n HTTP/2 specification has requirement about header fields in the\n request HEADERS.  See the specification for more details.\n\n If |data_prd| is not ``NULL``, it provides data which will be sent\n in subsequent DATA frames.  In this case, a method that allows\n request message bodies\n (https://tools.ietf.org/html/rfc7231#section-4) must be specified\n with ``:method`` key in |nva| (e.g. ``POST``).  This function does\n not take ownership of the |data_prd|.  The function copies the\n members of the |data_prd|.  If |data_prd| is ``NULL``, HEADERS have\n END_STREAM set.  The |stream_user_data| is data associated to the\n stream opened by this request and can be an arbitrary pointer,\n which can be retrieved later by\n `nghttp2_session_get_stream_user_data()`.\n\n This function returns assigned stream ID if it succeeds, or one of\n the following negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE`\n     No stream ID is available because maximum stream ID was\n     reached.\n :enum:`nghttp2_error.NGHTTP2_ERR_PROTO`\n     The |session| is server session.\n\n .. warning::\n\n   This function returns assigned stream ID if it succeeds.  But\n   that stream is not created yet.  The application must not submit\n   frame to that stream ID before\n   :type:`nghttp2_before_frame_send_callback` is called for this\n   frame.  This means `nghttp2_session_get_stream_user_data()` does\n   not work before the callback.  But\n   `nghttp2_session_set_stream_user_data()` handles this situation\n   specially, and it can set data to a stream during this period.\n"]
    pub fn nghttp2_submit_request(
        session: *mut nghttp2_session,
        pri_spec: *const nghttp2_priority_spec,
        nva: *const nghttp2_nv,
        nvlen: usize,
        data_prd: *const nghttp2_data_provider,
        stream_user_data: *mut ::std::os::raw::c_void,
    ) -> i32;
}
unsafe extern "C" {
    #[doc = " @function\n\n Submits HEADERS frame and optionally one or more DATA frames.\n\n The |pri_spec| is ignored.\n\n The |nva| is an array of name/value pair :type:`nghttp2_nv` with\n |nvlen| elements.  The application is responsible to include\n required pseudo-header fields (header field whose name starts with\n \":\") in |nva| and must place pseudo-headers before regular header\n fields.\n\n This function creates copies of all name/value pairs in |nva|.  It\n also lower-cases all names in |nva|.  The order of elements in\n |nva| is preserved.  For header fields with\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME` and\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set,\n header field name and value are not copied respectively.  With\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME`, application\n is responsible to pass header field name in lowercase.  The\n application should maintain the references to them until\n :type:`nghttp2_on_frame_send_callback` or\n :type:`nghttp2_on_frame_not_send_callback` is called.\n\n HTTP/2 specification has requirement about header fields in the\n request HEADERS.  See the specification for more details.\n\n If |data_prd| is not ``NULL``, it provides data which will be sent\n in subsequent DATA frames.  In this case, a method that allows\n request message bodies\n (https://tools.ietf.org/html/rfc7231#section-4) must be specified\n with ``:method`` key in |nva| (e.g. ``POST``).  This function does\n not take ownership of the |data_prd|.  The function copies the\n members of the |data_prd|.  If |data_prd| is ``NULL``, HEADERS have\n END_STREAM set.  The |stream_user_data| is data associated to the\n stream opened by this request and can be an arbitrary pointer,\n which can be retrieved later by\n `nghttp2_session_get_stream_user_data()`.\n\n This function returns assigned stream ID if it succeeds, or one of\n the following negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE`\n     No stream ID is available because maximum stream ID was\n     reached.\n :enum:`nghttp2_error.NGHTTP2_ERR_PROTO`\n     The |session| is server session.\n\n .. warning::\n\n   This function returns assigned stream ID if it succeeds.  But\n   that stream is not created yet.  The application must not submit\n   frame to that stream ID before\n   :type:`nghttp2_before_frame_send_callback` is called for this\n   frame.  This means `nghttp2_session_get_stream_user_data()` does\n   not work before the callback.  But\n   `nghttp2_session_set_stream_user_data()` handles this situation\n   specially, and it can set data to a stream during this period.\n"]
    pub fn nghttp2_submit_request2(
        session: *mut nghttp2_session,
        pri_spec: *const nghttp2_priority_spec,
        nva: *const nghttp2_nv,
        nvlen: usize,
        data_prd: *const nghttp2_data_provider2,
        stream_user_data: *mut ::std::os::raw::c_void,
    ) -> i32;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  Use `nghttp2_submit_response2()` instead.\n\n Submits response HEADERS frame and optionally one or more DATA\n frames against the stream |stream_id|.\n\n The |nva| is an array of name/value pair :type:`nghttp2_nv` with\n |nvlen| elements.  The application is responsible to include\n required pseudo-header fields (header field whose name starts with\n \":\") in |nva| and must place pseudo-headers before regular header\n fields.\n\n This function creates copies of all name/value pairs in |nva|.  It\n also lower-cases all names in |nva|.  The order of elements in\n |nva| is preserved.  For header fields with\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME` and\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set,\n header field name and value are not copied respectively.  With\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME`, application\n is responsible to pass header field name in lowercase.  The\n application should maintain the references to them until\n :type:`nghttp2_on_frame_send_callback` or\n :type:`nghttp2_on_frame_not_send_callback` is called.\n\n HTTP/2 specification has requirement about header fields in the\n response HEADERS.  See the specification for more details.\n\n If |data_prd| is not ``NULL``, it provides data which will be sent\n in subsequent DATA frames.  This function does not take ownership\n of the |data_prd|.  The function copies the members of the\n |data_prd|.  If |data_prd| is ``NULL``, HEADERS will have\n END_STREAM flag set.\n\n This method can be used as normal HTTP response and push response.\n When pushing a resource using this function, the |session| must be\n configured using `nghttp2_session_server_new()` or its variants and\n the target stream denoted by the |stream_id| must be reserved using\n `nghttp2_submit_push_promise()`.\n\n To send non-final response headers (e.g., HTTP status 101), don't\n use this function because this function half-closes the outbound\n stream.  Instead, use `nghttp2_submit_headers()` for this purpose.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |stream_id| is 0.\n :enum:`nghttp2_error.NGHTTP2_ERR_DATA_EXIST`\n     DATA or HEADERS has been already submitted and not fully\n     processed yet.  Normally, this does not happen, but when\n     application wrongly calls `nghttp2_submit_response()` twice,\n     this may happen.\n :enum:`nghttp2_error.NGHTTP2_ERR_PROTO`\n     The |session| is client session.\n\n .. warning::\n\n   Calling this function twice for the same stream ID may lead to\n   program crash.  It is generally considered to a programming error\n   to commit response twice."]
    pub fn nghttp2_submit_response(
        session: *mut nghttp2_session,
        stream_id: i32,
        nva: *const nghttp2_nv,
        nvlen: usize,
        data_prd: *const nghttp2_data_provider,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Submits response HEADERS frame and optionally one or more DATA\n frames against the stream |stream_id|.\n\n The |nva| is an array of name/value pair :type:`nghttp2_nv` with\n |nvlen| elements.  The application is responsible to include\n required pseudo-header fields (header field whose name starts with\n \":\") in |nva| and must place pseudo-headers before regular header\n fields.\n\n This function creates copies of all name/value pairs in |nva|.  It\n also lower-cases all names in |nva|.  The order of elements in\n |nva| is preserved.  For header fields with\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME` and\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set,\n header field name and value are not copied respectively.  With\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME`, application\n is responsible to pass header field name in lowercase.  The\n application should maintain the references to them until\n :type:`nghttp2_on_frame_send_callback` or\n :type:`nghttp2_on_frame_not_send_callback` is called.\n\n HTTP/2 specification has requirement about header fields in the\n response HEADERS.  See the specification for more details.\n\n If |data_prd| is not ``NULL``, it provides data which will be sent\n in subsequent DATA frames.  This function does not take ownership\n of the |data_prd|.  The function copies the members of the\n |data_prd|.  If |data_prd| is ``NULL``, HEADERS will have\n END_STREAM flag set.\n\n This method can be used as normal HTTP response and push response.\n When pushing a resource using this function, the |session| must be\n configured using `nghttp2_session_server_new()` or its variants and\n the target stream denoted by the |stream_id| must be reserved using\n `nghttp2_submit_push_promise()`.\n\n To send non-final response headers (e.g., HTTP status 101), don't\n use this function because this function half-closes the outbound\n stream.  Instead, use `nghttp2_submit_headers()` for this purpose.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |stream_id| is 0.\n :enum:`nghttp2_error.NGHTTP2_ERR_DATA_EXIST`\n     DATA or HEADERS has been already submitted and not fully\n     processed yet.  Normally, this does not happen, but when\n     application wrongly calls `nghttp2_submit_response2()` twice,\n     this may happen.\n :enum:`nghttp2_error.NGHTTP2_ERR_PROTO`\n     The |session| is client session.\n\n .. warning::\n\n   Calling this function twice for the same stream ID may lead to\n   program crash.  It is generally considered to a programming error\n   to commit response twice."]
    pub fn nghttp2_submit_response2(
        session: *mut nghttp2_session,
        stream_id: i32,
        nva: *const nghttp2_nv,
        nvlen: usize,
        data_prd: *const nghttp2_data_provider2,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Submits trailer fields HEADERS against the stream |stream_id|.\n\n The |nva| is an array of name/value pair :type:`nghttp2_nv` with\n |nvlen| elements.  The application must not include pseudo-header\n fields (headers whose names starts with \":\") in |nva|.\n\n This function creates copies of all name/value pairs in |nva|.  It\n also lower-cases all names in |nva|.  The order of elements in\n |nva| is preserved.  For header fields with\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME` and\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set,\n header field name and value are not copied respectively.  With\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME`, application\n is responsible to pass header field name in lowercase.  The\n application should maintain the references to them until\n :type:`nghttp2_on_frame_send_callback` or\n :type:`nghttp2_on_frame_not_send_callback` is called.\n\n For server, trailer fields must follow response HEADERS or response\n DATA without END_STREAM flat set.  The library does not enforce\n this requirement, and applications should do this for themselves.\n If `nghttp2_submit_trailer()` is called before any response HEADERS\n submission (usually by `nghttp2_submit_response2()`), the content\n of |nva| will be sent as response headers, which will result in\n error.\n\n This function has the same effect with `nghttp2_submit_headers()`,\n with flags = :enum:`nghttp2_flag.NGHTTP2_FLAG_END_STREAM` and both\n pri_spec and stream_user_data to NULL.\n\n To submit trailer fields after `nghttp2_submit_response2()` is\n called, the application has to specify\n :type:`nghttp2_data_provider2` to `nghttp2_submit_response2()`.\n Inside of :type:`nghttp2_data_source_read_callback2`, when setting\n :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_EOF`, also set\n :enum:`nghttp2_data_flag.NGHTTP2_DATA_FLAG_NO_END_STREAM`.  After\n that, the application can send trailer fields using\n `nghttp2_submit_trailer()`.  `nghttp2_submit_trailer()` can be used\n inside :type:`nghttp2_data_source_read_callback2`.\n\n This function returns 0 if it succeeds and |stream_id| is -1.\n Otherwise, this function returns 0 if it succeeds, or one of the\n following negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |stream_id| is 0."]
    pub fn nghttp2_submit_trailer(
        session: *mut nghttp2_session,
        stream_id: i32,
        nva: *const nghttp2_nv,
        nvlen: usize,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Submits HEADERS frame. The |flags| is bitwise OR of the\n following values:\n\n * :enum:`nghttp2_flag.NGHTTP2_FLAG_END_STREAM`\n\n If |flags| includes :enum:`nghttp2_flag.NGHTTP2_FLAG_END_STREAM`,\n this frame has END_STREAM flag set.\n\n The library handles the CONTINUATION frame internally and it\n correctly sets END_HEADERS to the last sequence of the PUSH_PROMISE\n or CONTINUATION frame.\n\n If the |stream_id| is -1, this frame is assumed as request (i.e.,\n request HEADERS frame which opens new stream).  In this case, the\n assigned stream ID will be returned.  Otherwise, specify stream ID\n in |stream_id|.\n\n The |pri_spec| is ignored.\n\n The |nva| is an array of name/value pair :type:`nghttp2_nv` with\n |nvlen| elements.  The application is responsible to include\n required pseudo-header fields (header field whose name starts with\n \":\") in |nva| and must place pseudo-headers before regular header\n fields.\n\n This function creates copies of all name/value pairs in |nva|.  It\n also lower-cases all names in |nva|.  The order of elements in\n |nva| is preserved.  For header fields with\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME` and\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set,\n header field name and value are not copied respectively.  With\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME`, application\n is responsible to pass header field name in lowercase.  The\n application should maintain the references to them until\n :type:`nghttp2_on_frame_send_callback` or\n :type:`nghttp2_on_frame_not_send_callback` is called.\n\n The |stream_user_data| is a pointer to an arbitrary data which is\n associated to the stream this frame will open.  Therefore it is\n only used if this frame opens streams, in other words, it changes\n stream state from idle or reserved to open.\n\n This function is low-level in a sense that the application code can\n specify flags directly.  For usual HTTP request,\n `nghttp2_submit_request2()` is useful.  Likewise, for HTTP\n response, prefer `nghttp2_submit_response2()`.\n\n This function returns newly assigned stream ID if it succeeds and\n |stream_id| is -1.  Otherwise, this function returns 0 if it\n succeeds, or one of the following negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE`\n     No stream ID is available because maximum stream ID was\n     reached.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |stream_id| is 0.\n :enum:`nghttp2_error.NGHTTP2_ERR_DATA_EXIST`\n     DATA or HEADERS has been already submitted and not fully\n     processed yet.  This happens if stream denoted by |stream_id|\n     is in reserved state.\n :enum:`nghttp2_error.NGHTTP2_ERR_PROTO`\n     The |stream_id| is -1, and |session| is server session.\n\n .. warning::\n\n   This function returns assigned stream ID if it succeeds and\n   |stream_id| is -1.  But that stream is not opened yet.  The\n   application must not submit frame to that stream ID before\n   :type:`nghttp2_before_frame_send_callback` is called for this\n   frame.\n"]
    pub fn nghttp2_submit_headers(
        session: *mut nghttp2_session,
        flags: u8,
        stream_id: i32,
        pri_spec: *const nghttp2_priority_spec,
        nva: *const nghttp2_nv,
        nvlen: usize,
        stream_user_data: *mut ::std::os::raw::c_void,
    ) -> i32;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  Use `nghttp2_submit_data2()` instead.\n\n Submits one or more DATA frames to the stream |stream_id|.  The\n data to be sent are provided by |data_prd|.  If |flags| contains\n :enum:`nghttp2_flag.NGHTTP2_FLAG_END_STREAM`, the last DATA frame\n has END_STREAM flag set.\n\n This function does not take ownership of the |data_prd|.  The\n function copies the members of the |data_prd|.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_DATA_EXIST`\n     DATA or HEADERS has been already submitted and not fully\n     processed yet.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |stream_id| is 0.\n :enum:`nghttp2_error.NGHTTP2_ERR_STREAM_CLOSED`\n     The stream was already closed; or the |stream_id| is invalid.\n\n .. note::\n\n   Currently, only one DATA or HEADERS is allowed for a stream at a\n   time.  Submitting these frames more than once before first DATA\n   or HEADERS is finished results in\n   :enum:`nghttp2_error.NGHTTP2_ERR_DATA_EXIST` error code.  The\n   earliest callback which tells that previous frame is done is\n   :type:`nghttp2_on_frame_send_callback`.  In side that callback,\n   new data can be submitted using `nghttp2_submit_data()`.  Of\n   course, all data except for last one must not have\n   :enum:`nghttp2_flag.NGHTTP2_FLAG_END_STREAM` flag set in |flags|.\n   This sounds a bit complicated, and we recommend to use\n   `nghttp2_submit_request()` and `nghttp2_submit_response()` to\n   avoid this cascading issue.  The experience shows that for HTTP\n   use, these two functions are enough to implement both client and\n   server."]
    pub fn nghttp2_submit_data(
        session: *mut nghttp2_session,
        flags: u8,
        stream_id: i32,
        data_prd: *const nghttp2_data_provider,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Submits one or more DATA frames to the stream |stream_id|.  The\n data to be sent are provided by |data_prd|.  If |flags| contains\n :enum:`nghttp2_flag.NGHTTP2_FLAG_END_STREAM`, the last DATA frame\n has END_STREAM flag set.\n\n This function does not take ownership of the |data_prd|.  The\n function copies the members of the |data_prd|.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_DATA_EXIST`\n     DATA or HEADERS has been already submitted and not fully\n     processed yet.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |stream_id| is 0.\n :enum:`nghttp2_error.NGHTTP2_ERR_STREAM_CLOSED`\n     The stream was already closed; or the |stream_id| is invalid.\n\n .. note::\n\n   Currently, only one DATA or HEADERS is allowed for a stream at a\n   time.  Submitting these frames more than once before first DATA\n   or HEADERS is finished results in\n   :enum:`nghttp2_error.NGHTTP2_ERR_DATA_EXIST` error code.  The\n   earliest callback which tells that previous frame is done is\n   :type:`nghttp2_on_frame_send_callback`.  In side that callback,\n   new data can be submitted using `nghttp2_submit_data2()`.  Of\n   course, all data except for last one must not have\n   :enum:`nghttp2_flag.NGHTTP2_FLAG_END_STREAM` flag set in |flags|.\n   This sounds a bit complicated, and we recommend to use\n   `nghttp2_submit_request2()` and `nghttp2_submit_response2()` to\n   avoid this cascading issue.  The experience shows that for HTTP\n   use, these two functions are enough to implement both client and\n   server."]
    pub fn nghttp2_submit_data2(
        session: *mut nghttp2_session,
        flags: u8,
        stream_id: i32,
        data_prd: *const nghttp2_data_provider2,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  :rfc:`7540` priorities are deprecated by\n   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible\n   prioritization scheme.\n\n This function is noop.  It always returns 0."]
    pub fn nghttp2_submit_priority(
        session: *mut nghttp2_session,
        flags: u8,
        stream_id: i32,
        pri_spec: *const nghttp2_priority_spec,
    ) -> ::std::os::raw::c_int;
}
#[doc = " @struct\n\n :type:`nghttp2_extpri` is :rfc:`9218` extensible priorities\n specification for a stream."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_extpri {
    #[doc = " :member:`urgency` is the urgency of a stream, it must be in\n [:macro:`NGHTTP2_EXTPRI_URGENCY_HIGH`,\n :macro:`NGHTTP2_EXTPRI_URGENCY_LOW`], inclusive, and 0 is the\n highest urgency."]
    pub urgency: u32,
    #[doc = " :member:`inc` indicates that a content can be processed\n incrementally or not.  If inc is 0, it cannot be processed\n incrementally.  If inc is 1, it can be processed incrementally.\n Other value is not permitted."]
    pub inc: ::std::os::raw::c_int,
}
unsafe extern "C" {
    #[doc = " @function\n\n Submits RST_STREAM frame to cancel/reject the stream |stream_id|\n with the error code |error_code|.\n\n The pre-defined error code is one of :enum:`nghttp2_error_code`.\n\n The |flags| is currently ignored and should be\n :enum:`nghttp2_flag.NGHTTP2_FLAG_NONE`.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |stream_id| is 0."]
    pub fn nghttp2_submit_rst_stream(
        session: *mut nghttp2_session,
        flags: u8,
        stream_id: i32,
        error_code: u32,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Stores local settings and submits SETTINGS frame.  The |iv| is the\n pointer to the array of :type:`nghttp2_settings_entry`.  The |niv|\n indicates the number of :type:`nghttp2_settings_entry`.\n\n The |flags| is currently ignored and should be\n :enum:`nghttp2_flag.NGHTTP2_FLAG_NONE`.\n\n This function does not take ownership of the |iv|.  This function\n copies all the elements in the |iv|.\n\n While updating individual stream's local window size, if the window\n size becomes strictly larger than NGHTTP2_MAX_WINDOW_SIZE,\n RST_STREAM is issued against such a stream.\n\n SETTINGS with :enum:`nghttp2_flag.NGHTTP2_FLAG_ACK` is\n automatically submitted by the library and application could not\n send it at its will.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |iv| contains invalid value (e.g., initial window size\n     strictly greater than (1 << 31) - 1.\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory."]
    pub fn nghttp2_submit_settings(
        session: *mut nghttp2_session,
        flags: u8,
        iv: *const nghttp2_settings_entry,
        niv: usize,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Submits PUSH_PROMISE frame.\n\n The |flags| is currently ignored.  The library handles the\n CONTINUATION frame internally and it correctly sets END_HEADERS to\n the last sequence of the PUSH_PROMISE or CONTINUATION frame.\n\n The |stream_id| must be client initiated stream ID.\n\n The |nva| is an array of name/value pair :type:`nghttp2_nv` with\n |nvlen| elements.  The application is responsible to include\n required pseudo-header fields (header field whose name starts with\n \":\") in |nva| and must place pseudo-headers before regular header\n fields.\n\n This function creates copies of all name/value pairs in |nva|.  It\n also lower-cases all names in |nva|.  The order of elements in\n |nva| is preserved.  For header fields with\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME` and\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set,\n header field name and value are not copied respectively.  With\n :enum:`nghttp2_nv_flag.NGHTTP2_NV_FLAG_NO_COPY_NAME`, application\n is responsible to pass header field name in lowercase.  The\n application should maintain the references to them until\n :type:`nghttp2_on_frame_send_callback` or\n :type:`nghttp2_on_frame_not_send_callback` is called.\n\n The |promised_stream_user_data| is a pointer to an arbitrary data\n which is associated to the promised stream this frame will open and\n make it in reserved state.  It is available using\n `nghttp2_session_get_stream_user_data()`.  The application can\n access it in :type:`nghttp2_before_frame_send_callback` and\n :type:`nghttp2_on_frame_send_callback` of this frame.\n\n The client side is not allowed to use this function.\n\n To submit response headers and data, use\n `nghttp2_submit_response2()`.\n\n This function returns assigned promised stream ID if it succeeds,\n or one of the following negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_PROTO`\n     This function was invoked when |session| is initialized as\n     client.\n :enum:`nghttp2_error.NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE`\n     No stream ID is available because maximum stream ID was\n     reached.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |stream_id| is 0; The |stream_id| does not designate stream\n     that peer initiated.\n :enum:`nghttp2_error.NGHTTP2_ERR_STREAM_CLOSED`\n     The stream was already closed; or the |stream_id| is invalid.\n\n .. warning::\n\n   This function returns assigned promised stream ID if it succeeds.\n   As of 1.16.0, stream object for pushed resource is created when\n   this function succeeds.  In that case, the application can submit\n   push response for the promised frame.\n\n   In 1.15.0 or prior versions, pushed stream is not opened yet when\n   this function succeeds.  The application must not submit frame to\n   that stream ID before :type:`nghttp2_before_frame_send_callback`\n   is called for this frame.\n"]
    pub fn nghttp2_submit_push_promise(
        session: *mut nghttp2_session,
        flags: u8,
        stream_id: i32,
        nva: *const nghttp2_nv,
        nvlen: usize,
        promised_stream_user_data: *mut ::std::os::raw::c_void,
    ) -> i32;
}
unsafe extern "C" {
    #[doc = " @function\n\n Submits PING frame.  You don't have to send PING back when you\n received PING frame.  The library automatically submits PING frame\n in this case.\n\n The |flags| is bitwise OR of 0 or more of the following value.\n\n * :enum:`nghttp2_flag.NGHTTP2_FLAG_ACK`\n\n Unless `nghttp2_option_set_no_auto_ping_ack()` is used, the |flags|\n should be :enum:`nghttp2_flag.NGHTTP2_FLAG_NONE`.\n\n If the |opaque_data| is non ``NULL``, then it should point to the 8\n bytes array of memory to specify opaque data to send with PING\n frame.  If the |opaque_data| is ``NULL``, zero-cleared 8 bytes will\n be sent as opaque data.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory."]
    pub fn nghttp2_submit_ping(
        session: *mut nghttp2_session,
        flags: u8,
        opaque_data: *const u8,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Submits GOAWAY frame with the last stream ID |last_stream_id| and\n the error code |error_code|.\n\n The pre-defined error code is one of :enum:`nghttp2_error_code`.\n\n The |flags| is currently ignored and should be\n :enum:`nghttp2_flag.NGHTTP2_FLAG_NONE`.\n\n The |last_stream_id| is peer's stream ID or 0.  So if |session| is\n initialized as client, |last_stream_id| must be even or 0.  If\n |session| is initialized as server, |last_stream_id| must be odd or\n 0.\n\n The HTTP/2 specification says last_stream_id must not be increased\n from the value previously sent.  So the actual value sent as\n last_stream_id is the minimum value between the given\n |last_stream_id| and the last_stream_id previously sent to the\n peer.\n\n If the |opaque_data| is not ``NULL`` and |opaque_data_len| is not\n zero, those data will be sent as additional debug data.  The\n library makes a copy of the memory region pointed by |opaque_data|\n with the length |opaque_data_len|, so the caller does not need to\n keep this memory after the return of this function.  If the\n |opaque_data_len| is 0, the |opaque_data| could be ``NULL``.\n\n After successful transmission of GOAWAY, following things happen.\n All incoming streams having strictly more than |last_stream_id| are\n closed.  All incoming HEADERS which starts new stream are simply\n ignored.  After all active streams are handled, both\n `nghttp2_session_want_read()` and `nghttp2_session_want_write()`\n return 0 and the application can close session.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |opaque_data_len| is too large; the |last_stream_id| is\n     invalid."]
    pub fn nghttp2_submit_goaway(
        session: *mut nghttp2_session,
        flags: u8,
        last_stream_id: i32,
        error_code: u32,
        opaque_data: *const u8,
        opaque_data_len: usize,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the last stream ID of a stream for which\n :type:`nghttp2_on_frame_recv_callback` was invoked most recently.\n The returned value can be used as last_stream_id parameter for\n `nghttp2_submit_goaway()` and\n `nghttp2_session_terminate_session2()`.\n\n This function always succeeds."]
    pub fn nghttp2_session_get_last_proc_stream_id(session: *mut nghttp2_session) -> i32;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns nonzero if new request can be sent from local endpoint.\n\n This function return 0 if request is not allowed for this session.\n There are several reasons why request is not allowed.  Some of the\n reasons are: session is server; stream ID has been spent; GOAWAY\n has been sent or received.\n\n The application can call `nghttp2_submit_request2()` without\n consulting this function.  In that case,\n `nghttp2_submit_request2()` may return error.  Or, request is\n failed to sent, and :type:`nghttp2_on_stream_close_callback` is\n called."]
    pub fn nghttp2_session_check_request_allowed(
        session: *mut nghttp2_session,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns nonzero if |session| is initialized as server side session."]
    pub fn nghttp2_session_check_server_session(
        session: *mut nghttp2_session,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Submits WINDOW_UPDATE frame.\n\n The |flags| is currently ignored and should be\n :enum:`nghttp2_flag.NGHTTP2_FLAG_NONE`.\n\n The |stream_id| is the stream ID to send this WINDOW_UPDATE.  To\n send connection level WINDOW_UPDATE, specify 0 to |stream_id|.\n\n If the |window_size_increment| is positive, the WINDOW_UPDATE with\n that value as window_size_increment is queued.  If the\n |window_size_increment| is larger than the received bytes from the\n remote endpoint, the local window size is increased by that\n difference.  If the sole purpose is to increase the local window\n size, consider to use `nghttp2_session_set_local_window_size()`.\n\n If the |window_size_increment| is negative, the local window size\n is decreased by -|window_size_increment|.  If automatic\n WINDOW_UPDATE is enabled\n (`nghttp2_option_set_no_auto_window_update()`), and the library\n decided that the WINDOW_UPDATE should be submitted, then\n WINDOW_UPDATE is queued with the current received bytes count.  If\n the sole purpose is to decrease the local window size, consider to\n use `nghttp2_session_set_local_window_size()`.\n\n If the |window_size_increment| is 0, the function does nothing and\n returns 0.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_FLOW_CONTROL`\n     The local window size overflow or gets negative.\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory."]
    pub fn nghttp2_submit_window_update(
        session: *mut nghttp2_session,
        flags: u8,
        stream_id: i32,
        window_size_increment: i32,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Set local window size (local endpoints's window size) to the given\n |window_size| for the given stream denoted by |stream_id|.  To\n change connection level window size, specify 0 to |stream_id|.  To\n increase window size, this function may submit WINDOW_UPDATE frame\n to transmission queue.\n\n The |flags| is currently ignored and should be\n :enum:`nghttp2_flag.NGHTTP2_FLAG_NONE`.\n\n This sounds similar to `nghttp2_submit_window_update()`, but there\n are 2 differences.  The first difference is that this function\n takes the absolute value of window size to set, rather than the\n delta.  To change the window size, this may be easier to use since\n the application just declares the intended window size, rather than\n calculating delta.  The second difference is that\n `nghttp2_submit_window_update()` affects the received bytes count\n which has not acked yet.  By the specification of\n `nghttp2_submit_window_update()`, to strictly increase the local\n window size, we have to submit delta including all received bytes\n count, which might not be desirable in some cases.  On the other\n hand, this function does not affect the received bytes count.  It\n just sets the local window size to the given value.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |stream_id| is negative.\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory."]
    pub fn nghttp2_session_set_local_window_size(
        session: *mut nghttp2_session,
        flags: u8,
        stream_id: i32,
        window_size: i32,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Submits extension frame.\n\n Application can pass arbitrary frame flags and stream ID in |flags|\n and |stream_id| respectively.  The |payload| is opaque pointer, and\n it can be accessible though ``frame->ext.payload`` in\n :type:`nghttp2_pack_extension_callback2`.  The library will not own\n passed |payload| pointer.\n\n The application must set :type:`nghttp2_pack_extension_callback2`\n using `nghttp2_session_callbacks_set_pack_extension_callback2()`.\n\n The application should retain the memory pointed by |payload| until\n the transmission of extension frame is done (which is indicated by\n :type:`nghttp2_on_frame_send_callback`), or transmission fails\n (which is indicated by :type:`nghttp2_on_frame_not_send_callback`).\n If application does not touch this memory region after packing it\n into a wire format, application can free it inside\n :type:`nghttp2_pack_extension_callback2`.\n\n The standard HTTP/2 frame cannot be sent with this function, so\n |type| must be strictly grater than 0x9.  Otherwise, this function\n will fail with error code\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`\n     If :type:`nghttp2_pack_extension_callback2` is not set.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     If  |type| specifies  standard  HTTP/2 frame  type.  The  frame\n     types  in the  rage [0x0,  0x9], both  inclusive, are  standard\n     HTTP/2 frame type, and cannot be sent using this function.\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory"]
    pub fn nghttp2_submit_extension(
        session: *mut nghttp2_session,
        type_: u8,
        flags: u8,
        stream_id: i32,
        payload: *mut ::std::os::raw::c_void,
    ) -> ::std::os::raw::c_int;
}
#[doc = " @struct\n\n The payload of ALTSVC frame.  ALTSVC frame is a non-critical\n extension to HTTP/2.  If this frame is received, and\n `nghttp2_option_set_user_recv_extension_type()` is not set, and\n `nghttp2_option_set_builtin_recv_extension_type()` is set for\n :enum:`nghttp2_frame_type.NGHTTP2_ALTSVC`,\n ``nghttp2_extension.payload`` will point to this struct.\n\n It has the following members:"]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_ext_altsvc {
    #[doc = " The pointer to origin which this alternative service is\n associated with.  This is not necessarily NULL-terminated."]
    pub origin: *mut u8,
    #[doc = " The length of the |origin|."]
    pub origin_len: usize,
    #[doc = " The pointer to Alt-Svc field value contained in ALTSVC frame.\n This is not necessarily NULL-terminated."]
    pub field_value: *mut u8,
    #[doc = " The length of the |field_value|."]
    pub field_value_len: usize,
}
unsafe extern "C" {
    #[doc = " @function\n\n Submits ALTSVC frame.\n\n ALTSVC frame is a non-critical extension to HTTP/2, and defined in\n `RFC 7383 <https://tools.ietf.org/html/rfc7838#section-4>`_.\n\n The |flags| is currently ignored and should be\n :enum:`nghttp2_flag.NGHTTP2_FLAG_NONE`.\n\n The |origin| points to the origin this alternative service is\n associated with.  The |origin_len| is the length of the origin.  If\n |stream_id| is 0, the origin must be specified.  If |stream_id| is\n not zero, the origin must be empty (in other words, |origin_len|\n must be 0).\n\n The ALTSVC frame is only usable from server side.  If this function\n is invoked with client side session, this function returns\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`\n     The function is called from client side session\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The sum of |origin_len| and |field_value_len| is larger than\n     16382; or |origin_len| is 0 while |stream_id| is 0; or\n     |origin_len| is not 0 while |stream_id| is not 0."]
    pub fn nghttp2_submit_altsvc(
        session: *mut nghttp2_session,
        flags: u8,
        stream_id: i32,
        origin: *const u8,
        origin_len: usize,
        field_value: *const u8,
        field_value_len: usize,
    ) -> ::std::os::raw::c_int;
}
#[doc = " @struct\n\n The single entry of an origin."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_origin_entry {
    #[doc = " The pointer to origin.  No validation is made against this field\n by the library.  This is not necessarily NULL-terminated."]
    pub origin: *mut u8,
    #[doc = " The length of the |origin|."]
    pub origin_len: usize,
}
#[doc = " @struct\n\n The payload of ORIGIN frame.  ORIGIN frame is a non-critical\n extension to HTTP/2 and defined by `RFC 8336\n <https://tools.ietf.org/html/rfc8336>`_.\n\n If this frame is received, and\n `nghttp2_option_set_user_recv_extension_type()` is not set, and\n `nghttp2_option_set_builtin_recv_extension_type()` is set for\n :enum:`nghttp2_frame_type.NGHTTP2_ORIGIN`,\n ``nghttp2_extension.payload`` will point to this struct.\n\n It has the following members:"]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_ext_origin {
    #[doc = " The number of origins contained in |ov|."]
    pub nov: usize,
    #[doc = " The pointer to the array of origins contained in ORIGIN frame."]
    pub ov: *mut nghttp2_origin_entry,
}
unsafe extern "C" {
    #[doc = " @function\n\n Submits ORIGIN frame.\n\n ORIGIN frame is a non-critical extension to HTTP/2 and defined by\n `RFC 8336 <https://tools.ietf.org/html/rfc8336>`_.\n\n The |flags| is currently ignored and should be\n :enum:`nghttp2_flag.NGHTTP2_FLAG_NONE`.\n\n The |ov| points to the array of origins.  The |nov| specifies the\n number of origins included in |ov|.  This function creates copies\n of all elements in |ov|.\n\n The ORIGIN frame is only usable by a server.  If this function is\n invoked with client side session, this function returns\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`.\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`\n     The function is called from client side session.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     There are too many origins, or an origin is too large to fit\n     into a default frame payload."]
    pub fn nghttp2_submit_origin(
        session: *mut nghttp2_session,
        flags: u8,
        ov: *const nghttp2_origin_entry,
        nov: usize,
    ) -> ::std::os::raw::c_int;
}
#[doc = " @struct\n\n The payload of PRIORITY_UPDATE frame.  PRIORITY_UPDATE frame is a\n non-critical extension to HTTP/2.  If this frame is received, and\n `nghttp2_option_set_user_recv_extension_type()` is not set, and\n `nghttp2_option_set_builtin_recv_extension_type()` is set for\n :enum:`nghttp2_frame_type.NGHTTP2_PRIORITY_UPDATE`,\n ``nghttp2_extension.payload`` will point to this struct.\n\n It has the following members:"]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_ext_priority_update {
    #[doc = " The stream ID of the stream whose priority is updated."]
    pub stream_id: i32,
    #[doc = " The pointer to Priority field value.  It is not necessarily\n NULL-terminated."]
    pub field_value: *mut u8,
    #[doc = " The length of the :member:`field_value`."]
    pub field_value_len: usize,
}
unsafe extern "C" {
    #[doc = " @function\n\n Submits PRIORITY_UPDATE frame.\n\n PRIORITY_UPDATE frame is a non-critical extension to HTTP/2, and\n defined in :rfc:`9218#section-7.1`.\n\n The |flags| is currently ignored and should be\n :enum:`nghttp2_flag.NGHTTP2_FLAG_NONE`.\n\n The |stream_id| is the ID of stream which is prioritized.  The\n |field_value| points to the Priority field value.  The\n |field_value_len| is the length of the Priority field value.\n\n If this function is called by server,\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE` is returned.\n\n If\n :enum:`nghttp2_settings_id.NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES`\n of value of 0 is received by a remote endpoint (or it is omitted),\n this function does nothing and returns 0.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`\n     The function is called from server side session\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     The |field_value_len| is larger than 16380; or |stream_id| is\n     0."]
    pub fn nghttp2_submit_priority_update(
        session: *mut nghttp2_session,
        flags: u8,
        stream_id: i32,
        field_value: *const u8,
        field_value_len: usize,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Changes the priority of the existing stream denoted by |stream_id|.\n The new priority is |extpri|.  This function is meant to be used by\n server for :rfc:`9218` extensible prioritization scheme.\n\n If |session| is initialized as client, this function returns\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`.  For client, use\n `nghttp2_submit_priority_update()` instead.\n\n If :member:`extpri->urgency <nghttp2_extpri.urgency>` is out of\n bound, it is set to :macro:`NGHTTP2_EXTPRI_URGENCY_LOW`.\n\n If |ignore_client_signal| is nonzero, server starts to ignore\n client priority signals for this stream.\n\n If\n :enum:`nghttp2_settings_id.NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES`\n of value of 1 is not submitted via `nghttp2_submit_settings()`,\n this function does nothing and returns 0.\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`\n     The |session| is initialized as client.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     |stream_id| is zero; or a stream denoted by |stream_id| is not\n     found."]
    pub fn nghttp2_session_change_extpri_stream_priority(
        session: *mut nghttp2_session,
        stream_id: i32,
        extpri: *const nghttp2_extpri,
        ignore_client_signal: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Stores the stream priority of the existing stream denoted by\n |stream_id| in the object pointed by |extpri|.  This function is\n meant to be used by server for :rfc:`9218` extensible\n prioritization scheme.\n\n If |session| is initialized as client, this function returns\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`.\n\n If\n :enum:`nghttp2_settings_id.NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES`\n of value of 1 is not submitted via `nghttp2_submit_settings()`,\n this function does nothing and returns 0.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`\n     The |session| is initialized as client.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     |stream_id| is zero; or a stream denoted by |stream_id| is not\n     found."]
    pub fn nghttp2_session_get_extpri_stream_priority(
        session: *mut nghttp2_session,
        extpri: *mut nghttp2_extpri,
        stream_id: i32,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Parses Priority header field value pointed by |value| of length\n |len|, and stores the result in the object pointed by |extpri|.\n Priority header field is defined in :rfc:`9218`.\n\n This function does not initialize the object pointed by |extpri|\n before storing the result.  It only assigns the values that the\n parser correctly extracted to fields.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_ARGUMENT`\n     Failed to parse the header field value."]
    pub fn nghttp2_extpri_parse_priority(
        extpri: *mut nghttp2_extpri,
        value: *const u8,
        len: usize,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Compares ``lhs->name`` of length ``lhs->namelen`` bytes and\n ``rhs->name`` of length ``rhs->namelen`` bytes.  Returns negative\n integer if ``lhs->name`` is found to be less than ``rhs->name``; or\n returns positive integer if ``lhs->name`` is found to be greater\n than ``rhs->name``; or returns 0 otherwise."]
    pub fn nghttp2_nv_compare_name(
        lhs: *const nghttp2_nv,
        rhs: *const nghttp2_nv,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  Use `nghttp2_select_alpn` instead.\n\n A helper function for dealing with ALPN in server side.  The |in|\n contains peer's protocol list in preferable order.  The format of\n |in| is length-prefixed and not null-terminated.  For example,\n ``h2`` and ``http/1.1`` stored in |in| like this::\n\n     in[0] = 2\n     in[1..2] = \"h2\"\n     in[3] = 8\n     in[4..11] = \"http/1.1\"\n     inlen = 12\n\n The selection algorithm is as follows:\n\n 1. If peer's list contains HTTP/2 protocol the library supports,\n    it is selected and returns 1. The following step is not taken.\n\n 2. If peer's list contains ``http/1.1``, this function selects\n    ``http/1.1`` and returns 0.  The following step is not taken.\n\n 3. This function selects nothing and returns -1 (So called\n    non-overlap case).  In this case, |out| and |outlen| are left\n    untouched.\n\n Selecting ``h2`` means that ``h2`` is written into |*out| and its\n length (which is 2) is assigned to |*outlen|.\n\n For ALPN, refer to https://tools.ietf.org/html/rfc7301\n\n To use this method you should do something like::\n\n     static int alpn_select_proto_cb(SSL* ssl,\n                                     const unsigned char **out,\n                                     unsigned char *outlen,\n                                     const unsigned char *in,\n                                     unsigned int inlen,\n                                     void *arg)\n     {\n         int rv;\n         rv = nghttp2_select_next_protocol((unsigned char**)out, outlen,\n                                           in, inlen);\n         if (rv == -1) {\n             return SSL_TLSEXT_ERR_NOACK;\n         }\n         if (rv == 1) {\n             ((MyType*)arg)->http2_selected = 1;\n         }\n         return SSL_TLSEXT_ERR_OK;\n     }\n     ...\n     SSL_CTX_set_alpn_select_cb(ssl_ctx, alpn_select_proto_cb, my_obj);\n"]
    pub fn nghttp2_select_next_protocol(
        out: *mut *mut ::std::os::raw::c_uchar,
        outlen: *mut ::std::os::raw::c_uchar,
        in_: *const ::std::os::raw::c_uchar,
        inlen: ::std::os::raw::c_uint,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n A helper function for dealing with ALPN in server side.  The |in|\n contains peer's protocol list in preferable order.  The format of\n |in| is length-prefixed and not null-terminated.  For example,\n ``h2`` and ``http/1.1`` stored in |in| like this::\n\n     in[0] = 2\n     in[1..2] = \"h2\"\n     in[3] = 8\n     in[4..11] = \"http/1.1\"\n     inlen = 12\n\n The selection algorithm is as follows:\n\n 1. If peer's list contains HTTP/2 protocol the library supports,\n    it is selected and returns 1. The following step is not taken.\n\n 2. If peer's list contains ``http/1.1``, this function selects\n    ``http/1.1`` and returns 0.  The following step is not taken.\n\n 3. This function selects nothing and returns -1 (So called\n    non-overlap case).  In this case, |out| and |outlen| are left\n    untouched.\n\n Selecting ``h2`` means that ``h2`` is written into |*out| and its\n length (which is 2) is assigned to |*outlen|.\n\n For ALPN, refer to https://tools.ietf.org/html/rfc7301\n\n To use this method you should do something like::\n\n     static int alpn_select_proto_cb(SSL* ssl,\n                                     const unsigned char **out,\n                                     unsigned char *outlen,\n                                     const unsigned char *in,\n                                     unsigned int inlen,\n                                     void *arg)\n     {\n         int rv;\n         rv = nghttp2_select_alpn(out, outlen, in, inlen);\n         if (rv == -1) {\n             return SSL_TLSEXT_ERR_NOACK;\n         }\n         if (rv == 1) {\n             ((MyType*)arg)->http2_selected = 1;\n         }\n         return SSL_TLSEXT_ERR_OK;\n     }\n     ...\n     SSL_CTX_set_alpn_select_cb(ssl_ctx, alpn_select_proto_cb, my_obj);\n"]
    pub fn nghttp2_select_alpn(
        out: *mut *const ::std::os::raw::c_uchar,
        outlen: *mut ::std::os::raw::c_uchar,
        in_: *const ::std::os::raw::c_uchar,
        inlen: ::std::os::raw::c_uint,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns a pointer to a nghttp2_info struct with version information\n about the run-time library in use.  The |least_version| argument\n can be set to a 24 bit numerical value for the least accepted\n version number and if the condition is not met, this function will\n return a ``NULL``.  Pass in 0 to skip the version checking."]
    pub fn nghttp2_version(least_version: ::std::os::raw::c_int) -> *mut nghttp2_info;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns nonzero if the :type:`nghttp2_error` library error code\n |lib_error| is fatal."]
    pub fn nghttp2_is_fatal(lib_error_code: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns nonzero if HTTP header field name |name| of length |len| is\n valid according to http://tools.ietf.org/html/rfc7230#section-3.2\n\n Because this is a header field name in HTTP2, the upper cased alphabet\n is treated as error."]
    pub fn nghttp2_check_header_name(name: *const u8, len: usize) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns nonzero if HTTP header field value |value| of length |len|\n is valid according to\n http://tools.ietf.org/html/rfc7230#section-3.2\n\n This function is considered obsolete, and application should\n consider to use `nghttp2_check_header_value_rfc9113()` instead."]
    pub fn nghttp2_check_header_value(value: *const u8, len: usize) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns nonzero if HTTP header field value |value| of length |len|\n is valid according to\n http://tools.ietf.org/html/rfc7230#section-3.2, plus\n https://datatracker.ietf.org/doc/html/rfc9113#section-8.2.1"]
    pub fn nghttp2_check_header_value_rfc9113(
        value: *const u8,
        len: usize,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns nonzero if the |value| which is supposed to be the value of\n the :method header field is valid according to\n https://datatracker.ietf.org/doc/html/rfc7231#section-4 and\n https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.6"]
    pub fn nghttp2_check_method(value: *const u8, len: usize) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns nonzero if the |value| which is supposed to be the value of\n the :path header field is valid according to\n https://datatracker.ietf.org/doc/html/rfc7540#section-8.1.2.3\n\n |value| is valid if it merely consists of the allowed characters.\n In particular, it does not check whether |value| follows the syntax\n of path.  The allowed characters are all characters valid by\n `nghttp2_check_header_value` minus SPC and HT."]
    pub fn nghttp2_check_path(value: *const u8, len: usize) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns nonzero if the |value| which is supposed to be the value of the\n :authority or host header field is valid according to\n https://tools.ietf.org/html/rfc3986#section-3.2\n\n Note that :authority and host field values are not authority.  They\n do not include userinfo in RFC 3986, see\n https://datatracker.ietf.org/doc/html/rfc3986#section-3.2.2, that\n is, it does not include '@'.  This function treats '@' as a valid\n character.\n\n |value| is valid if it merely consists of the allowed characters.\n In particular, it does not check whether |value| follows the syntax\n of authority."]
    pub fn nghttp2_check_authority(value: *const u8, len: usize) -> ::std::os::raw::c_int;
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_hd_deflater {
    _unused: [u8; 0],
}
unsafe extern "C" {
    #[doc = " @function\n\n Initializes |*deflater_ptr| for deflating name/values pairs.\n\n The |max_deflate_dynamic_table_size| is the upper bound of header\n table size the deflater will use.\n\n If this function fails, |*deflater_ptr| is left untouched.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory."]
    pub fn nghttp2_hd_deflate_new(
        deflater_ptr: *mut *mut nghttp2_hd_deflater,
        max_deflate_dynamic_table_size: usize,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Like `nghttp2_hd_deflate_new()`, but with additional custom memory\n allocator specified in the |mem|.\n\n The |mem| can be ``NULL`` and the call is equivalent to\n `nghttp2_hd_deflate_new()`.\n\n This function does not take ownership |mem|.  The application is\n responsible for freeing |mem|.\n\n The library code does not refer to |mem| pointer after this\n function returns, so the application can safely free it."]
    pub fn nghttp2_hd_deflate_new2(
        deflater_ptr: *mut *mut nghttp2_hd_deflater,
        max_deflate_dynamic_table_size: usize,
        mem: *mut nghttp2_mem,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Deallocates any resources allocated for |deflater|."]
    pub fn nghttp2_hd_deflate_del(deflater: *mut nghttp2_hd_deflater);
}
unsafe extern "C" {
    #[doc = " @function\n\n Changes header table size of the |deflater| to\n |settings_max_dynamic_table_size| bytes.  This may trigger eviction\n in the dynamic table.\n\n The |settings_max_dynamic_table_size| should be the value received\n in SETTINGS_HEADER_TABLE_SIZE.\n\n The deflater never uses more memory than\n ``max_deflate_dynamic_table_size`` bytes specified in\n `nghttp2_hd_deflate_new()`.  Therefore, if\n |settings_max_dynamic_table_size| >\n ``max_deflate_dynamic_table_size``, resulting maximum table size\n becomes ``max_deflate_dynamic_table_size``.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory."]
    pub fn nghttp2_hd_deflate_change_table_size(
        deflater: *mut nghttp2_hd_deflater,
        settings_max_dynamic_table_size: usize,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  Use `nghttp2_hd_deflate_hd2()` instead.\n\n Deflates the |nva|, which has the |nvlen| name/value pairs, into\n the |buf| of length |buflen|.\n\n If |buf| is not large enough to store the deflated header block,\n this function fails with\n :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`.  The caller\n should use `nghttp2_hd_deflate_bound()` to know the upper bound of\n buffer size required to deflate given header name/value pairs.\n\n Once this function fails, subsequent call of this function always\n returns :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`.\n\n After this function returns, it is safe to delete the |nva|.\n\n This function returns the number of bytes written to |buf| if it\n succeeds, or one of the following negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`\n     Deflation process has failed.\n :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`\n     The provided |buflen| size is too small to hold the output."]
    pub fn nghttp2_hd_deflate_hd(
        deflater: *mut nghttp2_hd_deflater,
        buf: *mut u8,
        buflen: usize,
        nva: *const nghttp2_nv,
        nvlen: usize,
    ) -> isize;
}
unsafe extern "C" {
    #[doc = " @function\n\n Deflates the |nva|, which has the |nvlen| name/value pairs, into\n the |buf| of length |buflen|.\n\n If |buf| is not large enough to store the deflated header block,\n this function fails with\n :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`.  The caller\n should use `nghttp2_hd_deflate_bound()` to know the upper bound of\n buffer size required to deflate given header name/value pairs.\n\n Once this function fails, subsequent call of this function always\n returns :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`.\n\n After this function returns, it is safe to delete the |nva|.\n\n This function returns the number of bytes written to |buf| if it\n succeeds, or one of the following negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`\n     Deflation process has failed.\n :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`\n     The provided |buflen| size is too small to hold the output."]
    pub fn nghttp2_hd_deflate_hd2(
        deflater: *mut nghttp2_hd_deflater,
        buf: *mut u8,
        buflen: usize,
        nva: *const nghttp2_nv,
        nvlen: usize,
    ) -> nghttp2_ssize;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  Use `nghttp2_hd_deflate_hd_vec2()` instead.\n\n Deflates the |nva|, which has the |nvlen| name/value pairs, into\n the |veclen| size of buf vector |vec|.  The each size of buffer\n must be set in len field of :type:`nghttp2_vec`.  If and only if\n one chunk is filled up completely, next chunk will be used.  If\n |vec| is not large enough to store the deflated header block, this\n function fails with\n :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`.  The caller\n should use `nghttp2_hd_deflate_bound()` to know the upper bound of\n buffer size required to deflate given header name/value pairs.\n\n Once this function fails, subsequent call of this function always\n returns :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`.\n\n After this function returns, it is safe to delete the |nva|.\n\n This function returns the number of bytes written to |vec| if it\n succeeds, or one of the following negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`\n     Deflation process has failed.\n :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`\n     The provided |buflen| size is too small to hold the output."]
    pub fn nghttp2_hd_deflate_hd_vec(
        deflater: *mut nghttp2_hd_deflater,
        vec: *const nghttp2_vec,
        veclen: usize,
        nva: *const nghttp2_nv,
        nvlen: usize,
    ) -> isize;
}
unsafe extern "C" {
    #[doc = " @function\n\n Deflates the |nva|, which has the |nvlen| name/value pairs, into\n the |veclen| size of buf vector |vec|.  The each size of buffer\n must be set in len field of :type:`nghttp2_vec`.  If and only if\n one chunk is filled up completely, next chunk will be used.  If\n |vec| is not large enough to store the deflated header block, this\n function fails with\n :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`.  The caller\n should use `nghttp2_hd_deflate_bound()` to know the upper bound of\n buffer size required to deflate given header name/value pairs.\n\n Once this function fails, subsequent call of this function always\n returns :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`.\n\n After this function returns, it is safe to delete the |nva|.\n\n This function returns the number of bytes written to |vec| if it\n succeeds, or one of the following negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`\n     Deflation process has failed.\n :enum:`nghttp2_error.NGHTTP2_ERR_INSUFF_BUFSIZE`\n     The provided |buflen| size is too small to hold the output."]
    pub fn nghttp2_hd_deflate_hd_vec2(
        deflater: *mut nghttp2_hd_deflater,
        vec: *const nghttp2_vec,
        veclen: usize,
        nva: *const nghttp2_nv,
        nvlen: usize,
    ) -> nghttp2_ssize;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns an upper bound on the compressed size after deflation of\n |nva| of length |nvlen|."]
    pub fn nghttp2_hd_deflate_bound(
        deflater: *mut nghttp2_hd_deflater,
        nva: *const nghttp2_nv,
        nvlen: usize,
    ) -> usize;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the number of entries that header table of |deflater|\n contains.  This is the sum of the number of static table and\n dynamic table, so the return value is at least 61."]
    pub fn nghttp2_hd_deflate_get_num_table_entries(deflater: *mut nghttp2_hd_deflater) -> usize;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the table entry denoted by |idx| from header table of\n |deflater|.  The |idx| is 1-based, and idx=1 returns first entry of\n static table.  idx=62 returns first entry of dynamic table if it\n exists.  Specifying idx=0 is error, and this function returns NULL.\n If |idx| is strictly greater than the number of entries the tables\n contain, this function returns NULL."]
    pub fn nghttp2_hd_deflate_get_table_entry(
        deflater: *mut nghttp2_hd_deflater,
        idx: usize,
    ) -> *const nghttp2_nv;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the used dynamic table size, including the overhead 32\n bytes per entry described in RFC 7541."]
    pub fn nghttp2_hd_deflate_get_dynamic_table_size(deflater: *mut nghttp2_hd_deflater) -> usize;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the maximum dynamic table size."]
    pub fn nghttp2_hd_deflate_get_max_dynamic_table_size(
        deflater: *mut nghttp2_hd_deflater,
    ) -> usize;
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_hd_inflater {
    _unused: [u8; 0],
}
unsafe extern "C" {
    #[doc = " @function\n\n Initializes |*inflater_ptr| for inflating name/values pairs.\n\n If this function fails, |*inflater_ptr| is left untouched.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory."]
    pub fn nghttp2_hd_inflate_new(
        inflater_ptr: *mut *mut nghttp2_hd_inflater,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Like `nghttp2_hd_inflate_new()`, but with additional custom memory\n allocator specified in the |mem|.\n\n The |mem| can be ``NULL`` and the call is equivalent to\n `nghttp2_hd_inflate_new()`.\n\n This function does not take ownership |mem|.  The application is\n responsible for freeing |mem|.\n\n The library code does not refer to |mem| pointer after this\n function returns, so the application can safely free it."]
    pub fn nghttp2_hd_inflate_new2(
        inflater_ptr: *mut *mut nghttp2_hd_inflater,
        mem: *mut nghttp2_mem,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Deallocates any resources allocated for |inflater|."]
    pub fn nghttp2_hd_inflate_del(inflater: *mut nghttp2_hd_inflater);
}
unsafe extern "C" {
    #[doc = " @function\n\n Changes header table size in the |inflater|.  This may trigger\n eviction in the dynamic table.\n\n The |settings_max_dynamic_table_size| should be the value\n transmitted in SETTINGS_HEADER_TABLE_SIZE.\n\n This function must not be called while header block is being\n inflated.  In other words, this function must be called after\n initialization of |inflater|, but before calling\n `nghttp2_hd_inflate_hd3()`, or after\n `nghttp2_hd_inflate_end_headers()`.  Otherwise,\n `NGHTTP2_ERR_INVALID_STATE` was returned.\n\n This function returns 0 if it succeeds, or one of the following\n negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_INVALID_STATE`\n     The function is called while header block is being inflated.\n     Probably, application missed to call\n     `nghttp2_hd_inflate_end_headers()`."]
    pub fn nghttp2_hd_inflate_change_table_size(
        inflater: *mut nghttp2_hd_inflater,
        settings_max_dynamic_table_size: usize,
    ) -> ::std::os::raw::c_int;
}
#[doc = " No flag set."]
pub const NGHTTP2_HD_INFLATE_NONE: nghttp2_hd_inflate_flag = 0;
#[doc = " Indicates all headers were inflated."]
pub const NGHTTP2_HD_INFLATE_FINAL: nghttp2_hd_inflate_flag = 1;
#[doc = " Indicates a header was emitted."]
pub const NGHTTP2_HD_INFLATE_EMIT: nghttp2_hd_inflate_flag = 2;
#[doc = " @enum\n\n The flags for header inflation."]
pub type nghttp2_hd_inflate_flag = ::std::os::raw::c_uint;
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  Use `nghttp2_hd_inflate_hd2()` instead.\n\n Inflates name/value block stored in |in| with length |inlen|.  This\n function performs decompression.  For each successful emission of\n header name/value pair,\n :enum:`nghttp2_hd_inflate_flag.NGHTTP2_HD_INFLATE_EMIT` is set in\n |*inflate_flags| and name/value pair is assigned to the |nv_out|\n and the function returns.  The caller must not free the members of\n |nv_out|.\n\n The |nv_out| may include pointers to the memory region in the |in|.\n The caller must retain the |in| while the |nv_out| is used.\n\n The application should call this function repeatedly until the\n ``(*inflate_flags) & NGHTTP2_HD_INFLATE_FINAL`` is nonzero and\n return value is non-negative.  This means the all input values are\n processed successfully.  Then the application must call\n `nghttp2_hd_inflate_end_headers()` to prepare for the next header\n block input.\n\n The caller can feed complete compressed header block.  It also can\n feed it in several chunks.  The caller must set |in_final| to\n nonzero if the given input is the last block of the compressed\n header.\n\n This function returns the number of bytes processed if it succeeds,\n or one of the following negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`\n     Inflation process has failed.\n :enum:`nghttp2_error.NGHTTP2_ERR_BUFFER_ERROR`\n     The header field name or value is too large.\n\n Example follows::\n\n     int inflate_header_block(nghttp2_hd_inflater *hd_inflater,\n                              uint8_t *in, size_t inlen, int final)\n     {\n         ssize_t rv;\n\n         for(;;) {\n             nghttp2_nv nv;\n             int inflate_flags = 0;\n\n             rv = nghttp2_hd_inflate_hd(hd_inflater, &nv, &inflate_flags,\n                                        in, inlen, final);\n\n             if(rv < 0) {\n                 fprintf(stderr, \"inflate failed with error code %zd\", rv);\n                 return -1;\n             }\n\n             in += rv;\n             inlen -= rv;\n\n             if(inflate_flags & NGHTTP2_HD_INFLATE_EMIT) {\n                 fwrite(nv.name, nv.namelen, 1, stderr);\n                 fprintf(stderr, \": \");\n                 fwrite(nv.value, nv.valuelen, 1, stderr);\n                 fprintf(stderr, \"\\n\");\n             }\n             if(inflate_flags & NGHTTP2_HD_INFLATE_FINAL) {\n                 nghttp2_hd_inflate_end_headers(hd_inflater);\n                 break;\n             }\n             if((inflate_flags & NGHTTP2_HD_INFLATE_EMIT) == 0 &&\n                inlen == 0) {\n                break;\n             }\n         }\n\n         return 0;\n     }\n"]
    pub fn nghttp2_hd_inflate_hd(
        inflater: *mut nghttp2_hd_inflater,
        nv_out: *mut nghttp2_nv,
        inflate_flags: *mut ::std::os::raw::c_int,
        in_: *mut u8,
        inlen: usize,
        in_final: ::std::os::raw::c_int,
    ) -> isize;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  Use `nghttp2_hd_inflate_hd3()` instead.\n\n Inflates name/value block stored in |in| with length |inlen|.  This\n function performs decompression.  For each successful emission of\n header name/value pair,\n :enum:`nghttp2_hd_inflate_flag.NGHTTP2_HD_INFLATE_EMIT` is set in\n |*inflate_flags| and name/value pair is assigned to the |nv_out|\n and the function returns.  The caller must not free the members of\n |nv_out|.\n\n The |nv_out| may include pointers to the memory region in the |in|.\n The caller must retain the |in| while the |nv_out| is used.\n\n The application should call this function repeatedly until the\n ``(*inflate_flags) & NGHTTP2_HD_INFLATE_FINAL`` is nonzero and\n return value is non-negative.  If that happens, all given input\n data (|inlen| bytes) are processed successfully.  Then the\n application must call `nghttp2_hd_inflate_end_headers()` to prepare\n for the next header block input.\n\n In other words, if |in_final| is nonzero, and this function returns\n |inlen|, you can assert that\n :enum:`nghttp2_hd_inflate_final.NGHTTP2_HD_INFLATE_FINAL` is set in\n |*inflate_flags|.\n\n The caller can feed complete compressed header block.  It also can\n feed it in several chunks.  The caller must set |in_final| to\n nonzero if the given input is the last block of the compressed\n header.\n\n This function returns the number of bytes processed if it succeeds,\n or one of the following negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`\n     Inflation process has failed.\n :enum:`nghttp2_error.NGHTTP2_ERR_BUFFER_ERROR`\n     The header field name or value is too large.\n\n Example follows::\n\n     int inflate_header_block(nghttp2_hd_inflater *hd_inflater,\n                              uint8_t *in, size_t inlen, int final)\n     {\n         ssize_t rv;\n\n         for(;;) {\n             nghttp2_nv nv;\n             int inflate_flags = 0;\n\n             rv = nghttp2_hd_inflate_hd2(hd_inflater, &nv, &inflate_flags,\n                                         in, inlen, final);\n\n             if(rv < 0) {\n                 fprintf(stderr, \"inflate failed with error code %zd\", rv);\n                 return -1;\n             }\n\n             in += rv;\n             inlen -= rv;\n\n             if(inflate_flags & NGHTTP2_HD_INFLATE_EMIT) {\n                 fwrite(nv.name, nv.namelen, 1, stderr);\n                 fprintf(stderr, \": \");\n                 fwrite(nv.value, nv.valuelen, 1, stderr);\n                 fprintf(stderr, \"\\n\");\n             }\n             if(inflate_flags & NGHTTP2_HD_INFLATE_FINAL) {\n                 nghttp2_hd_inflate_end_headers(hd_inflater);\n                 break;\n             }\n             if((inflate_flags & NGHTTP2_HD_INFLATE_EMIT) == 0 &&\n                inlen == 0) {\n                break;\n             }\n         }\n\n         return 0;\n     }\n"]
    pub fn nghttp2_hd_inflate_hd2(
        inflater: *mut nghttp2_hd_inflater,
        nv_out: *mut nghttp2_nv,
        inflate_flags: *mut ::std::os::raw::c_int,
        in_: *const u8,
        inlen: usize,
        in_final: ::std::os::raw::c_int,
    ) -> isize;
}
unsafe extern "C" {
    #[doc = " @function\n\n Inflates name/value block stored in |in| with length |inlen|.  This\n function performs decompression.  For each successful emission of\n header name/value pair,\n :enum:`nghttp2_hd_inflate_flag.NGHTTP2_HD_INFLATE_EMIT` is set in\n |*inflate_flags| and name/value pair is assigned to the |nv_out|\n and the function returns.  The caller must not free the members of\n |nv_out|.\n\n The |nv_out| may include pointers to the memory region in the |in|.\n The caller must retain the |in| while the |nv_out| is used.\n\n The application should call this function repeatedly until the\n ``(*inflate_flags) & NGHTTP2_HD_INFLATE_FINAL`` is nonzero and\n return value is non-negative.  If that happens, all given input\n data (|inlen| bytes) are processed successfully.  Then the\n application must call `nghttp2_hd_inflate_end_headers()` to prepare\n for the next header block input.\n\n In other words, if |in_final| is nonzero, and this function returns\n |inlen|, you can assert that\n :enum:`nghttp2_hd_inflate_final.NGHTTP2_HD_INFLATE_FINAL` is set in\n |*inflate_flags|.\n\n The caller can feed complete compressed header block.  It also can\n feed it in several chunks.  The caller must set |in_final| to\n nonzero if the given input is the last block of the compressed\n header.\n\n This function returns the number of bytes processed if it succeeds,\n or one of the following negative error codes:\n\n :enum:`nghttp2_error.NGHTTP2_ERR_NOMEM`\n     Out of memory.\n :enum:`nghttp2_error.NGHTTP2_ERR_HEADER_COMP`\n     Inflation process has failed.\n :enum:`nghttp2_error.NGHTTP2_ERR_BUFFER_ERROR`\n     The header field name or value is too large.\n\n Example follows::\n\n     int inflate_header_block(nghttp2_hd_inflater *hd_inflater,\n                              uint8_t *in, size_t inlen, int final)\n     {\n         nghttp2_ssize rv;\n\n         for(;;) {\n             nghttp2_nv nv;\n             int inflate_flags = 0;\n\n             rv = nghttp2_hd_inflate_hd3(hd_inflater, &nv, &inflate_flags,\n                                         in, inlen, final);\n\n             if(rv < 0) {\n                 fprintf(stderr, \"inflate failed with error code %td\", rv);\n                 return -1;\n             }\n\n             in += rv;\n             inlen -= rv;\n\n             if(inflate_flags & NGHTTP2_HD_INFLATE_EMIT) {\n                 fwrite(nv.name, nv.namelen, 1, stderr);\n                 fprintf(stderr, \": \");\n                 fwrite(nv.value, nv.valuelen, 1, stderr);\n                 fprintf(stderr, \"\\n\");\n             }\n             if(inflate_flags & NGHTTP2_HD_INFLATE_FINAL) {\n                 nghttp2_hd_inflate_end_headers(hd_inflater);\n                 break;\n             }\n             if((inflate_flags & NGHTTP2_HD_INFLATE_EMIT) == 0 &&\n                inlen == 0) {\n                break;\n             }\n         }\n\n         return 0;\n     }\n"]
    pub fn nghttp2_hd_inflate_hd3(
        inflater: *mut nghttp2_hd_inflater,
        nv_out: *mut nghttp2_nv,
        inflate_flags: *mut ::std::os::raw::c_int,
        in_: *const u8,
        inlen: usize,
        in_final: ::std::os::raw::c_int,
    ) -> nghttp2_ssize;
}
unsafe extern "C" {
    #[doc = " @function\n\n Signals the end of decompression for one header block.\n\n This function returns 0 if it succeeds. Currently this function\n always succeeds."]
    pub fn nghttp2_hd_inflate_end_headers(
        inflater: *mut nghttp2_hd_inflater,
    ) -> ::std::os::raw::c_int;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the number of entries that header table of |inflater|\n contains.  This is the sum of the number of static table and\n dynamic table, so the return value is at least 61."]
    pub fn nghttp2_hd_inflate_get_num_table_entries(inflater: *mut nghttp2_hd_inflater) -> usize;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the table entry denoted by |idx| from header table of\n |inflater|.  The |idx| is 1-based, and idx=1 returns first entry of\n static table.  idx=62 returns first entry of dynamic table if it\n exists.  Specifying idx=0 is error, and this function returns NULL.\n If |idx| is strictly greater than the number of entries the tables\n contain, this function returns NULL."]
    pub fn nghttp2_hd_inflate_get_table_entry(
        inflater: *mut nghttp2_hd_inflater,
        idx: usize,
    ) -> *const nghttp2_nv;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the used dynamic table size, including the overhead 32\n bytes per entry described in RFC 7541."]
    pub fn nghttp2_hd_inflate_get_dynamic_table_size(inflater: *mut nghttp2_hd_inflater) -> usize;
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns the maximum dynamic table size."]
    pub fn nghttp2_hd_inflate_get_max_dynamic_table_size(
        inflater: *mut nghttp2_hd_inflater,
    ) -> usize;
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct nghttp2_stream {
    _unused: [u8; 0],
}
unsafe extern "C" {
    #[doc = " @function\n\n Returns pointer to :type:`nghttp2_stream` object denoted by\n |stream_id|.  If stream was not found, returns NULL.\n\n Returns imaginary root stream (see\n `nghttp2_session_get_root_stream()`) if 0 is given in |stream_id|.\n\n Unless |stream_id| == 0, the returned pointer is valid until next\n call of `nghttp2_session_send()`, `nghttp2_session_mem_send2()`,\n `nghttp2_session_recv()`, and `nghttp2_session_mem_recv2()`."]
    pub fn nghttp2_session_find_stream(
        session: *mut nghttp2_session,
        stream_id: i32,
    ) -> *mut nghttp2_stream;
}
#[doc = " idle state."]
pub const NGHTTP2_STREAM_STATE_IDLE: nghttp2_stream_proto_state = 1;
#[doc = " open state."]
pub const NGHTTP2_STREAM_STATE_OPEN: nghttp2_stream_proto_state = 2;
#[doc = " reserved (local) state."]
pub const NGHTTP2_STREAM_STATE_RESERVED_LOCAL: nghttp2_stream_proto_state = 3;
#[doc = " reserved (remote) state."]
pub const NGHTTP2_STREAM_STATE_RESERVED_REMOTE: nghttp2_stream_proto_state = 4;
#[doc = " half closed (local) state."]
pub const NGHTTP2_STREAM_STATE_HALF_CLOSED_LOCAL: nghttp2_stream_proto_state = 5;
#[doc = " half closed (remote) state."]
pub const NGHTTP2_STREAM_STATE_HALF_CLOSED_REMOTE: nghttp2_stream_proto_state = 6;
#[doc = " closed state."]
pub const NGHTTP2_STREAM_STATE_CLOSED: nghttp2_stream_proto_state = 7;
#[doc = " @enum\n\n State of stream as described in RFC 7540."]
pub type nghttp2_stream_proto_state = ::std::os::raw::c_uint;
unsafe extern "C" {
    #[doc = " @function\n\n Returns state of |stream|.  The root stream retrieved by\n `nghttp2_session_get_root_stream()` will have stream state\n :enum:`nghttp2_stream_proto_state.NGHTTP2_STREAM_STATE_IDLE`."]
    pub fn nghttp2_stream_get_state(stream: *mut nghttp2_stream) -> nghttp2_stream_proto_state;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  :rfc:`7540` priorities are deprecated by\n   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible\n   prioritization scheme.\n\n Returns root of dependency tree, which is imaginary stream with\n stream ID 0.  The returned pointer is valid until |session| is\n freed by `nghttp2_session_del()`."]
    pub fn nghttp2_session_get_root_stream(session: *mut nghttp2_session) -> *mut nghttp2_stream;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  :rfc:`7540` priorities are deprecated by\n   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible\n   prioritization scheme.\n\n This function always returns NULL."]
    pub fn nghttp2_stream_get_parent(stream: *mut nghttp2_stream) -> *mut nghttp2_stream;
}
unsafe extern "C" {
    pub fn nghttp2_stream_get_stream_id(stream: *mut nghttp2_stream) -> i32;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  :rfc:`7540` priorities are deprecated by\n   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible\n   prioritization scheme.\n\n This function always returns NULL."]
    pub fn nghttp2_stream_get_next_sibling(stream: *mut nghttp2_stream) -> *mut nghttp2_stream;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  :rfc:`7540` priorities are deprecated by\n   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible\n   prioritization scheme.\n\n This function always returns NULL."]
    pub fn nghttp2_stream_get_previous_sibling(stream: *mut nghttp2_stream) -> *mut nghttp2_stream;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  :rfc:`7540` priorities are deprecated by\n   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible\n   prioritization scheme.\n\n This function always returns NULL."]
    pub fn nghttp2_stream_get_first_child(stream: *mut nghttp2_stream) -> *mut nghttp2_stream;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  :rfc:`7540` priorities are deprecated by\n   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible\n   prioritization scheme.\n\n This function always returns :macro:`NGHTTP2_DEFAULT_WEIGHT`."]
    pub fn nghttp2_stream_get_weight(stream: *mut nghttp2_stream) -> i32;
}
unsafe extern "C" {
    #[doc = " @function\n\n .. warning::\n\n   Deprecated.  :rfc:`7540` priorities are deprecated by\n   :rfc:`9113`.  Consider migrating to :rfc:`9218` extensible\n   prioritization scheme.\n\n This function always returns 0."]
    pub fn nghttp2_stream_get_sum_dependency_weight(stream: *mut nghttp2_stream) -> i32;
}