NGHTTP2_FLAG_END_STREAM
-NGHTTP2_FLAG_END_HEADERS
NGHTTP2_FLAG_PRIORITY
If flags includes NGHTTP2_FLAG_END_STREAM, this frame has
-END_STREAM flag set. The library does not support header
-continuation and the HEADERS frame always has
-NGHTTP2_FLAG_END_HEADERS flag set regardless of the flags
-value.
+END_STREAM flag set.
+The library handles the CONTINUATION frame internally and it
+correctly sets END_HEADERS to the last sequence of the PUSH_PROMISE
+or CONTINUATION frame.
If the stream_id is -1, this frame is assumed as request (i.e.,
request HEADERS frame which opens new stream). In this case, the
actual stream ID is assigned just before the frame is sent. For
@@ -2410,10 +2402,10 @@ strictly greater than (1 << 31) - 1.
-
int nghttp2_submit_push_promise(nghttp2_session *session, uint8_t flags, int32_t stream_id, const nghttp2_nv *nva, size_t nvlen)
-Submits PUSH_PROMISE frame. The flags is currently ignored and
-the resulting PUSH_PROMISE frame always has
-NGHTTP2_FLAG_END_PUSH_PROMISE flag set due to the lack of
-header continuation support in the library.
+Submits PUSH_PROMISE frame.
+The flags is currently ignored. The library handles the
+CONTINUATION frame internally and it correctly sets END_HEADERS to
+the last sequence of the PUSH_PROMISE or CONTINUATION frame.
The stream_id must be client initiated stream ID.
The nva is an array of name/value pair nghttp2_nv with
nvlen elements. The value is opaque sequence of bytes and
diff --git a/genindex.html b/genindex.html
index ca82c52d..4aa99cff 100644
--- a/genindex.html
+++ b/genindex.html
@@ -377,10 +377,6 @@
-
- NGHTTP2_FLAG_END_PUSH_PROMISE (C macro)
-
-
-
- NGHTTP2_FLAG_END_SEGMENT (C macro)
diff --git a/nghttp2.h.html b/nghttp2.h.html
index 09c48391..3df052f6 100644
--- a/nghttp2.h.html
+++ b/nghttp2.h.html
@@ -545,10 +545,6 @@
*/
NGHTTP2_FLAG_PRIORITY = 0x8,
/**
- * The END_PUSH_PROMISE flag.
- */
- NGHTTP2_FLAG_END_PUSH_PROMISE = 0x4,
- /**
* The ACK flag.
*/
NGHTTP2_FLAG_ACK = 0x1,
@@ -2132,14 +2128,14 @@
* following values:
*
* * :enum:`NGHTTP2_FLAG_END_STREAM`
- * * :enum:`NGHTTP2_FLAG_END_HEADERS`
* * :enum:`NGHTTP2_FLAG_PRIORITY`
*
* If |flags| includes :enum:`NGHTTP2_FLAG_END_STREAM`, this frame has
- * END_STREAM flag set. The library does not support header
- * continuation and the HEADERS frame always has
- * :enum:`NGHTTP2_FLAG_END_HEADERS` flag set regardless of the |flags|
- * value.
+ * END_STREAM flag set.
+ *
+ * The library handles the CONTINUATION frame internally and it
+ * correctly sets END_HEADERS to the last sequence of the PUSH_PROMISE
+ * or CONTINUATION frame.
*
* If the |stream_id| is -1, this frame is assumed as request (i.e.,
* request HEADERS frame which opens new stream). In this case, the
@@ -2276,10 +2272,11 @@
/**
* @function
*
- * Submits PUSH_PROMISE frame. The |flags| is currently ignored and
- * the resulting PUSH_PROMISE frame always has
- * :enum:`NGHTTP2_FLAG_END_PUSH_PROMISE` flag set due to the lack of
- * header continuation support in the library.
+ * Submits PUSH_PROMISE frame.
+ *
+ * The |flags| is currently ignored. The library handles the
+ * CONTINUATION frame internally and it correctly sets END_HEADERS to
+ * the last sequence of the PUSH_PROMISE or CONTINUATION frame.
*
* The |stream_id| must be client initiated stream ID.
*
diff --git a/objects.inv b/objects.inv
index 2a379bc1bd2fe8dbcb26bf231a3369853868d012..0bfd4292585d3de28e7b55f30aba26ef9973397f 100644
GIT binary patch
delta 2012
zcmV<22P6265r`3xfPcx7n@AA7`zsVNb2Sm}qi?h*sfl4Ti`(r>1%i@9Gy;Z2?e^DC
z7Ms?lvhbV~l2|IUGGD%zS%*AMvY7o^RCW9{4L2-ZeEza1-ajAuKa_oaNdH=xdEBII
zq4S?U?O1l_rs3EAj_%Tmg=MtAys-PNzs&0{aKat?lKKH)coQJLSlXLx_nRC`*K`5~#8k{wf)O}%NjD?2L3Fl`v-+KN>bHzx|ybQ4Ce
zl>%S3Wq4pT%RRaASv>xSwepFm8gc2;Hk}C@hdVst`?|IEhTDAg(IC{*e_|X2i`}y@
zX65-J>-U09+|%7qDMc6y96BtMy8#|Hw+^B)q|v^~UT+>JjD>a;%09-pWNGNc@?noH
zi!6QJwubF9h=s8EcI_2QA+soK3Z(l^YTc6$0vQNck@)e~V9~vkFajBWu-O-ZL0j`b
z^um3ZbBStFU7HmV@FmFr$ddSj{Fn!B{kBADUNOn1wGo=JUp2?%I*;-h8`P)CqhT-q
zk*xq?#QM;3ari>j$iT~3koRqynyU2zhOG=8{uqHAfsgzFj%)ii;#yPvF{?B{D%Oy<
z6=hjnzT?XRgdElff#n5%j$^w%(dc*LdH{nm1&>&*Jx<^~A?&%v5oC1$L)t2ii&RbZ
zRm57ld~Cr(9u8)apZ+r*(lsgCGCPVc9}CcE#N8XbS;Ia5W{N
z6K%(*4gsRVAs8ZJ8MrQ2NnN^n7})PL1irjitUQAH&Dh%mF6%C;Do*S1u+zv2K2VkM
z{0(zdEE*TDAMqAuHH2Ll?%UH{F2Z9J{2&s`<
zDGz=;CXf~iw@a#849GM)7Tfn%c~eG=UcVi$v~eLevLjzNi5>XT{9YNqCg_-cwgW@M
z3b70Nt@Pij(lNl
zx+b=@9!f{MX<2i?7~jco40Zsi+s*7?ekgl{fq?9v-cw|92s!#=sru9<--78z?}ZvA
zmL}mx&XL8Ij1LxyrSqU6_6lpGc)`QvLzS}vQ=%1rg5|R^t{`hc0^I-su)JNpmqBsf
zT;WlNL!7IMC7jXR<6muuhLRsTD&m%^wIl}OLYJ&SR%kM6yYs+~)iiJFP2K=$`?p~Y
zYl|YzA){76YWLA0))P03zSx1wnVTu21^4*Qk)uMc>gy+b+++5{HXWCEZI)o?No^AH
zJ|S#>l;_wMN&%iThHWgNe=mv_wvsA6l|fExlr$XQA}GCAt2;Gd5FDQ?G7ySt00g{m
zn)DQBR7-Js+#|TZ=Q3#IX|mTWfBQdwXRo)DXk<%IuJfE1HI7V5XxdYdoce=k
zD#^#A*bd>?wwRk57i@nhp|X7si5bt??f_FkxKOu%D}4in0EC_
z%;XBl1wKt99x5Bww)(8TP}P8>&|V=uaD)OvCa*>Zt
z4`D^LWm`l>+3|LS6m_dvc}Oxom^yWTc_q?LtO>7L2trang4=Wvx(U+h7`;c6Zzox3
zs(dz06(2TfYc~?ohkB&0CC)bGMF@hFVs**%;WW3+rB;X2a|HulcL;y+v$j!FmYfZBOc9lTz!y~(
zN0ZxyYP!c=s9`&&;f~4i-C;~8F982o`N_5a$7F`UKXJPvd{1-iWK9+~E=~fVeKZh5
zIpxs~3Eu#vm{ff`gEkrZHM02!DVxLqI(d>r5cD01L-MxuPu;;JMMbxedZ|n=Le=;o
zX*^o?^ak^M`FY3?O;K1&N<;5UDe&nt@>n>!`_h|yiPVS)>W^_^&xsD~4Ju_-BhT&J
ulvgTwD)nw#Yaaa^DPDg%8C4)~2S4bj(S&3Miq)YAAs@x#$NvB_7clLvx8A$}
delta 2017
zcmV<72Oju{5seX$fPYJKn@AA8=U1p|_Zq6=V{TZCWNLYZM;zxega=%09-pWNGNc^5Kjv
zi!6QJwua*~h=s8EcJCESA+snP3Z(l^YTuI&0vQO{k@)r3V9|Y(FajBWaM%}tL0j`b
z^um3ZbBStFU7HmV@Jo^bkR|a4`7saN`eTXGyke4XYa=vcziN)jbspt24yaF)N5fwJ
zBU=H)i1nf6;_!v4k%5=7An)5YHC5{c3|kpG{9^=i1U~W?IIiv6h-Xdp$E?x-saQka
zR+MFR`Hn9O5OP=_1eOj4bP6g*bns
zR}p*Z^05UEc{rFwe)^yBkiH43O05iaP1VUn8&9R%+|sZ;qG4U2jHO4omGRUeo^hmL
z!*YI8T^o-O}u5Y^t2TQL|l+NtOv56|B6dyaG#H&+pHF1(olYR8_E#?)-`}
z$;+gEm!L(gfzw}#|#2d7ZW_Ni)cqNyQ4cLfh~(&oFiA%UStp1?zb
zAMZ5Qj1=T|Qb2{@rVw>5^h1vday8M_?`)@Xfq(1RU#CCK`_jOPPXG9p6d*}98
zwnJDPK2<9r)5(KpB5c(DDCl
z2Zn|fZ5LEs>3^$|-wY5oD%k;cArsdns~P}Q?qghzpPhzMOau9iQ-@HHt75$21rVVI
zhCfT|&+JuyN%vNwJ&Rt4mSHb<5e^;njv}Q#IM33pK=pCDuoWxB(po{tfxy%~EQ1&%
zmg=qp6H*sT2YI)sJ!5n&Z8-vzob~{-=74cTC*LtR0%UMEv-A0(ToMKavhR9N$;qMR
z=#Qo9Qd@uA{bfho~K!SY}kSCF+J
zfo?zn*x|0;%OE;$%J8Veq0d$I63%w+@wT?JL&*;v6>&?|S`q{Cpi5RDM>H9g-g#ih
zYMM9oCU1c3{oAmHwFMIAkWphGHUH=k>xmmiU+lo;jL($Okb8W`$x$I!_4N}z?lEU#
zn~qC=yf#a)bEq~6+j0Uc9os@F$8+|ujU{yR1<%D+Ri&pj$SIGKhT~TRW%z1$r^XFJ
z8*n8D0#glujQ7o!o)86&hHGDT)(yEUgAP15dJ7xScM`#QJ%yy{Vvfc>vo=p?B2B|EG6RiQs(0V`Ml{ZA?C+_
z)=pQKWm2Xoc4ZhdxdL*5Pt%Bp%7(SAKC3TOH6SUp7YJ~)MAa=XSgq(|utE;Ah6#iy
zpgLA?mIpG#^WNPkVFdTHlq@--oAHCt#Xrpu#LYPSF
zIU}ozJgbmgT{3;?PEa;`r{O1AUDjOp
zJ(1In@jg~JIsOjxj^98*iihG>dV!dg-qdQX8*pOM$e(cPEcon_header_callback
}
stream_data = nghttp2_session_get_stream_user_data(session,
frame->hd.stream_id);
- if(stream_data->request_path) {
+ if(!stream_data || stream_data->request_path) {
break;
}
if(namelen == sizeof(PATH) - 1 && memcmp(PATH, name, namelen) == 0) {
@@ -706,6 +706,9 @@ is about to close:
http2_stream_data *stream_data;
stream_data = nghttp2_session_get_stream_user_data(session, stream_id);
+ if(!stream_data) {
+ return 0;
+ }
remove_stream(session_data, stream_data);
delete_http2_stream_data(stream_data);
return 0;
@@ -1128,7 +1131,7 @@ stream is about to close and we no longer use that object.
}
stream_data = nghttp2_session_get_stream_user_data(session,
frame->hd.stream_id);
- if(stream_data->request_path) {
+ if(!stream_data || stream_data->request_path) {
break;
}
if(namelen == sizeof(PATH) - 1 && memcmp(PATH, name, namelen) == 0) {
@@ -1247,6 +1250,9 @@ stream is about to close and we no longer use that object.
http2_stream_data *stream_data;
stream_data = nghttp2_session_get_stream_user_data(session, stream_id);
+ if(!stream_data) {
+ return 0;
+ }
remove_stream(session_data, stream_data);
delete_http2_stream_data(stream_data);
return 0;