Latest changes

- Add support for Q041; drop support for Q040
This commit is contained in:
Dmitri Tikhonov 2017-09-28 14:50:30 -04:00
parent fc214ce40d
commit 1b97e4af1f
22 changed files with 87 additions and 94 deletions

View file

@ -1,3 +1,7 @@
2017-09-28
- Add support for Q041; drop support for Q040
2017-09-27
- Fix CMakeLists.txt: BoringSSL include and lib was mixed up

View file

@ -11,7 +11,7 @@ our own products: LiteSpeed Web Server and ADC. We think it is free of
major problems. Nevertheless, do not hesitate to report bugs back to us.
Even better, send us fixes and improvements!
Currently supported QUIC versions are Q035, Q037, Q038, Q039, and Q040.
Currently supported QUIC versions are Q035, Q037, Q038, Q039, and Q041.
Support for newer versions will be added soon after they are released.
The version(s) specified by IETF QUIC WG will be added once the IETF
version of the protocol settles down a little.

View file

@ -335,8 +335,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<li>LSQVER_039
: <a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbaa9b8bed8ca169e8a3762308cbf0f3af3">lsquic.h</a>
</li>
<li>LSQVER_040
: <a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac17f226a6a4c61377a5e50710d5ef12f">lsquic.h</a>
<li>LSQVER_041
: <a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac673a00564784af03b3b9cb747ed8af3">lsquic.h</a>
</li>
</ul>
</div><!-- contents -->

View file

@ -118,8 +118,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<li>LSQVER_039
: <a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbaa9b8bed8ca169e8a3762308cbf0f3af3">lsquic.h</a>
</li>
<li>LSQVER_040
: <a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac17f226a6a4c61377a5e50710d5ef12f">lsquic.h</a>
<li>LSQVER_041
: <a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac673a00564784af03b3b9cb747ed8af3">lsquic.h</a>
</li>
</ul>
</div><!-- contents -->

View file

@ -142,7 +142,7 @@ Macros</h2></td></tr>
<tr class="memitem:a0420e68d347462080cf2e583b77d61a0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a0420e68d347462080cf2e583b77d61a0">LSQUIC_SUPPORTED_VERSIONS</a></td></tr>
<tr class="separator:a0420e68d347462080cf2e583b77d61a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9c4ad08207bd7865f40eeb18a23e04ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9c4ad08207bd7865f40eeb18a23e04ed"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>LSQUIC_EXPERIMENTAL_VERSIONS</b>&#160;&#160;&#160;((1 &lt;&lt; <a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac17f226a6a4c61377a5e50710d5ef12f">LSQVER_040</a>))</td></tr>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>LSQUIC_EXPERIMENTAL_VERSIONS</b>&#160;&#160;&#160;((1 &lt;&lt; <a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac673a00564784af03b3b9cb747ed8af3">LSQVER_041</a>))</td></tr>
<tr class="separator:a9c4ad08207bd7865f40eeb18a23e04ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6fd9104d1ffa8c391dede0a714a5919b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lsquic_8h.html#a6fd9104d1ffa8c391dede0a714a5919b">LSQUIC_MIN_FCW</a>&#160;&#160;&#160;(16 * 1024)</td></tr>
<tr class="separator:a6fd9104d1ffa8c391dede0a714a5919b"><td class="memSeparator" colspan="2">&#160;</td></tr>
@ -232,7 +232,7 @@ Enumerations</h2></td></tr>
<a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba2d39809298e0c7866b21fc7932504966">LSQVER_038</a>,
<a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbaa9b8bed8ca169e8a3762308cbf0f3af3">LSQVER_039</a>,
<br />
&#160;&#160;<a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac17f226a6a4c61377a5e50710d5ef12f">LSQVER_040</a>,
&#160;&#160;<a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac673a00564784af03b3b9cb747ed8af3">LSQVER_041</a>,
<b>N_LSQVER</b>
<br />
}</td></tr>
@ -599,11 +599,11 @@ int&#160;</td><td class="memItemRight" valign="bottom"><b>lsquic_conn_get_sockad
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">((1 &lt;&lt; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba1956abef5d785f45310599e4fcd39c32">LSQVER_035</a>) | (1 &lt;&lt; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba5c2aa78b22ea462ae839566e19a87ea7">LSQVER_037</a>) | \</div><div class="line"> (1 &lt;&lt; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba2d39809298e0c7866b21fc7932504966">LSQVER_038</a>) | (1 &lt;&lt; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbaa9b8bed8ca169e8a3762308cbf0f3af3">LSQVER_039</a>) | (1 &lt;&lt; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac17f226a6a4c61377a5e50710d5ef12f">LSQVER_040</a>))</div><div class="ttc" id="lsquic_8h_html_a2633ae9ee8d564f4c499f6eb0913d4dba5c2aa78b22ea462ae839566e19a87ea7"><div class="ttname"><a href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba5c2aa78b22ea462ae839566e19a87ea7">LSQVER_037</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:54</div></div>
<div class="ttc" id="lsquic_8h_html_a2633ae9ee8d564f4c499f6eb0913d4dbac17f226a6a4c61377a5e50710d5ef12f"><div class="ttname"><a href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac17f226a6a4c61377a5e50710d5ef12f">LSQVER_040</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:72</div></div>
<b>Value:</b><div class="fragment"><div class="line">((1 &lt;&lt; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba1956abef5d785f45310599e4fcd39c32">LSQVER_035</a>) | (1 &lt;&lt; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba5c2aa78b22ea462ae839566e19a87ea7">LSQVER_037</a>) | \</div><div class="line"> (1 &lt;&lt; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba2d39809298e0c7866b21fc7932504966">LSQVER_038</a>) | (1 &lt;&lt; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbaa9b8bed8ca169e8a3762308cbf0f3af3">LSQVER_039</a>) | (1 &lt;&lt; <a class="code" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac673a00564784af03b3b9cb747ed8af3">LSQVER_041</a>))</div><div class="ttc" id="lsquic_8h_html_a2633ae9ee8d564f4c499f6eb0913d4dba5c2aa78b22ea462ae839566e19a87ea7"><div class="ttname"><a href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba5c2aa78b22ea462ae839566e19a87ea7">LSQVER_037</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:54</div></div>
<div class="ttc" id="lsquic_8h_html_a2633ae9ee8d564f4c499f6eb0913d4dbaa9b8bed8ca169e8a3762308cbf0f3af3"><div class="ttname"><a href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbaa9b8bed8ca169e8a3762308cbf0f3af3">LSQVER_039</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:67</div></div>
<div class="ttc" id="lsquic_8h_html_a2633ae9ee8d564f4c499f6eb0913d4dba1956abef5d785f45310599e4fcd39c32"><div class="ttname"><a href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba1956abef5d785f45310599e4fcd39c32">LSQVER_035</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:46</div></div>
<div class="ttc" id="lsquic_8h_html_a2633ae9ee8d564f4c499f6eb0913d4dba2d39809298e0c7866b21fc7932504966"><div class="ttname"><a href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba2d39809298e0c7866b21fc7932504966">LSQVER_038</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:60</div></div>
<div class="ttc" id="lsquic_8h_html_a2633ae9ee8d564f4c499f6eb0913d4dbac673a00564784af03b3b9cb747ed8af3"><div class="ttname"><a href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac673a00564784af03b3b9cb747ed8af3">LSQVER_041</a></div><div class="ttdef"><b>Definition:</b> lsquic.h:72</div></div>
</div><!-- fragment --><p>We currently support versions 35, 37, 38, 39, and 40. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4db">lsquic_version</a> </dd></dl>
</div>
@ -678,8 +678,8 @@ int&#160;</td><td class="memItemRight" valign="bottom"><b>lsquic_conn_get_sockad
<tr><td class="fieldname"><a class="anchor" id="a2633ae9ee8d564f4c499f6eb0913d4dbaa9b8bed8ca169e8a3762308cbf0f3af3"></a>LSQVER_039&#160;</td><td class="fielddoc">
<p>Q039. Switch to big endian. Do not ack acks. Send connection level WINDOW_UPDATE frame every 20 sent packets which do not contain retransmittable frames. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="a2633ae9ee8d564f4c499f6eb0913d4dbac17f226a6a4c61377a5e50710d5ef12f"></a>LSQVER_040&#160;</td><td class="fielddoc">
<p>Q040. RST_STREAM, ACK and STREAM frames match IETF format. </p>
<tr><td class="fieldname"><a class="anchor" id="a2633ae9ee8d564f4c499f6eb0913d4dbac673a00564784af03b3b9cb747ed8af3"></a>LSQVER_041&#160;</td><td class="fielddoc">
<p>Q041. RST_STREAM, ACK and STREAM frames match IETF format. </p>
</td></tr>
</table>

File diff suppressed because one or more lines are too long

View file

@ -95,8 +95,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
Include dependency graph for lsquic_types.h:</div>
<div class="dyncontent">
<div class="center"><img src="lsquic__types_8h__incl.png" border="0" usemap="#include_2lsquic__types_8h" alt=""/></div>
<map name="include_2lsquic__types_8h" id="include_2lsquic__types_8h">
</map>
</div>
</div><div class="textblock"><div class="dynheader">
This graph shows which files directly or indirectly include this file:</div>

View file

@ -89,5 +89,5 @@ var searchData=
['lsqver_5f037',['LSQVER_037',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba5c2aa78b22ea462ae839566e19a87ea7',1,'lsquic.h']]],
['lsqver_5f038',['LSQVER_038',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba2d39809298e0c7866b21fc7932504966',1,'lsquic.h']]],
['lsqver_5f039',['LSQVER_039',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbaa9b8bed8ca169e8a3762308cbf0f3af3',1,'lsquic.h']]],
['lsqver_5f040',['LSQVER_040',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac17f226a6a4c61377a5e50710d5ef12f',1,'lsquic.h']]]
['lsqver_5f041',['LSQVER_041',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac673a00564784af03b3b9cb747ed8af3',1,'lsquic.h']]]
];

View file

@ -9,5 +9,5 @@ var searchData=
['lsqver_5f037',['LSQVER_037',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba5c2aa78b22ea462ae839566e19a87ea7',1,'lsquic.h']]],
['lsqver_5f038',['LSQVER_038',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba2d39809298e0c7866b21fc7932504966',1,'lsquic.h']]],
['lsqver_5f039',['LSQVER_039',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbaa9b8bed8ca169e8a3762308cbf0f3af3',1,'lsquic.h']]],
['lsqver_5f040',['LSQVER_040',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac17f226a6a4c61377a5e50710d5ef12f',1,'lsquic.h']]]
['lsqver_5f041',['LSQVER_041',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac673a00564784af03b3b9cb747ed8af3',1,'lsquic.h']]]
];

View file

@ -67,9 +67,9 @@ enum lsquic_version
LSQVER_039,
/**
* Q040. RST_STREAM, ACK and STREAM frames match IETF format.
* Q041. RST_STREAM, ACK and STREAM frames match IETF format.
*/
LSQVER_040,
LSQVER_041,
N_LSQVER
};
@ -79,9 +79,9 @@ enum lsquic_version
* @see lsquic_version
*/
#define LSQUIC_SUPPORTED_VERSIONS ((1 << LSQVER_035) | (1 << LSQVER_037) | \
(1 << LSQVER_038) | (1 << LSQVER_039) | (1 << LSQVER_040))
(1 << LSQVER_038) | (1 << LSQVER_039) | (1 << LSQVER_041))
#define LSQUIC_EXPERIMENTAL_VERSIONS ((1 << LSQVER_040))
#define LSQUIC_EXPERIMENTAL_VERSIONS ((1 << LSQVER_041))
/**
* @struct lsquic_stream_if

View file

@ -8,7 +8,7 @@ SET(lsquic_STAT_SRCS
lsquic_parse_gquic_common.c
lsquic_parse_gquic_le.c
lsquic_parse_gquic_be.c
lsquic_parse_gquic_Q040.c
lsquic_parse_gquic_Q041.c
lsquic_packet_in.c
lsquic_packet_out.c
lsquic_crypto.c

View file

@ -20,11 +20,6 @@
#include <unistd.h>
#include <netdb.h>
#ifndef NDEBUG
#include <sys/types.h>
#include <regex.h> /* For code that loses packets */
#endif
#include "lsquic.h"

View file

@ -158,7 +158,7 @@ struct parse_funcs
extern const struct parse_funcs lsquic_parse_funcs_gquic_le;
/* Q039 and later are big-endian: */
extern const struct parse_funcs lsquic_parse_funcs_gquic_Q039;
extern const struct parse_funcs lsquic_parse_funcs_gquic_Q040;
extern const struct parse_funcs lsquic_parse_funcs_gquic_Q041;
#define select_pf_by_ver(ver) ( \
((1 << (ver)) & ((1 << LSQVER_035) | \
@ -166,7 +166,7 @@ extern const struct parse_funcs lsquic_parse_funcs_gquic_Q040;
? &lsquic_parse_funcs_gquic_le : \
((1 << (ver)) & (1 << LSQVER_039)) \
? &lsquic_parse_funcs_gquic_Q039 \
: &lsquic_parse_funcs_gquic_Q040)
: &lsquic_parse_funcs_gquic_Q041)
/* This function is QUIC-version independent */
int
@ -177,7 +177,7 @@ enum QUIC_FRAME_TYPE
parse_frame_type_gquic_Q035_thru_Q039 (unsigned char first_byte);
enum QUIC_FRAME_TYPE
parse_frame_type_gquic_Q040 (unsigned char first_byte);
parse_frame_type_gquic_Q041 (unsigned char first_byte);
unsigned
parse_stream_frame_header_sz_gquic (unsigned char type);

View file

@ -101,12 +101,6 @@ gquic_ietf_parse_stream_frame (const unsigned char *buf, size_t rem_packet_sz,
stream_frame->data_frame.df_fin = !!(type & 0x20);
if (data_len)
{
READ_UINT(stream_frame->data_frame.df_size, 16, p, data_len);
p += data_len;
}
READ_UINT(stream_frame->stream_id, 32, p, stream_id_len);
p += stream_id_len;
@ -115,6 +109,8 @@ gquic_ietf_parse_stream_frame (const unsigned char *buf, size_t rem_packet_sz,
if (data_len)
{
READ_UINT(stream_frame->data_frame.df_size, 16, p, data_len);
p += data_len;
CHECK_SPACE(stream_frame->data_frame.df_size, p, pend);
stream_frame->data_frame.df_data = p;
p += stream_frame->data_frame.df_size;
@ -198,8 +194,6 @@ gquic_ietf_gen_stream_frame (unsigned char *buf, size_t buf_len, uint32_t stream
CHECK_SPACE(1 + olen + slen + dlen +
+ 1 /* We need to write at least 1 byte */, buf, buf + buf_len);
p += dlen; /* Save room for data length */
#if __BYTE_ORDER == __LITTLE_ENDIAN
stream_id = bswap_32(stream_id);
#endif
@ -213,7 +207,7 @@ gquic_ietf_gen_stream_frame (unsigned char *buf, size_t buf_len, uint32_t stream
p += olen;
/* Read as much as we can */
nr = gsf_read(stream, p, n_avail, &fin);
nr = gsf_read(stream, p + dlen, n_avail, &fin);
assert(nr != 0);
if (dlen)
@ -222,17 +216,15 @@ gquic_ietf_gen_stream_frame (unsigned char *buf, size_t buf_len, uint32_t stream
#if __BYTE_ORDER == __LITTLE_ENDIAN
nr_copy = bswap_16(nr_copy);
#endif
memcpy(p - slen - olen - 2, &nr_copy, 2);
memcpy(p, &nr_copy, 2);
}
p += nr;
p += dlen + nr;
}
else
{
dlen = 2;
CHECK_SPACE(1 + slen + olen + 2, buf, buf + buf_len);
memset(p, 0, 2);
p += 2;
#if __BYTE_ORDER == __LITTLE_ENDIAN
stream_id = bswap_32(stream_id);
#endif
@ -243,6 +235,8 @@ gquic_ietf_gen_stream_frame (unsigned char *buf, size_t buf_len, uint32_t stream
#endif
memcpy(p, (unsigned char *) &offset + 8 - olen, olen);
p += olen;
memset(p, 0, 2);
p += 2;
}
/* Convert slen to bit representation: 0 - 3: */
@ -279,7 +273,7 @@ gquic_ietf_parse_ack_high (const unsigned char *buf, size_t buf_len)
type = buf[0];
largest_obs_len = twobit_to_1248((type >> 2) & 3);
n_blocks_len = !!(type & 0x10);
assert(parse_frame_type_gquic_Q040(type) == QUIC_FRAME_ACK);
assert(parse_frame_type_gquic_Q041(type) == QUIC_FRAME_ACK);
assert(buf_len >= 1 + n_blocks_len + 1 + largest_obs_len);
READ_UINT(packno, 64, buf + 1 + n_blocks_len + 1, largest_obs_len);
return packno;
@ -540,7 +534,7 @@ gquic_ietf_gen_ack_frame (unsigned char *outbuf, size_t outbuf_sz,
}
const struct parse_funcs lsquic_parse_funcs_gquic_Q040 =
const struct parse_funcs lsquic_parse_funcs_gquic_Q041 =
{
.pf_gen_ver_nego_pkt = gquic_be_gen_ver_nego_pkt,
.pf_gen_reg_pkt_header = gquic_be_gen_reg_pkt_header,
@ -570,5 +564,5 @@ const struct parse_funcs lsquic_parse_funcs_gquic_Q040 =
.pf_write_float_time16 = gquic_be_write_float_time16,
.pf_read_float_time16 = gquic_be_read_float_time16,
#endif
.pf_parse_frame_type = parse_frame_type_gquic_Q040,
.pf_parse_frame_type = parse_frame_type_gquic_Q041,
};

View file

@ -389,7 +389,7 @@ static const enum QUIC_FRAME_TYPE byte2frame_type_Q035_thru_Q039[0x100] =
};
static const enum QUIC_FRAME_TYPE byte2frame_type_Q040[0x100] =
static const enum QUIC_FRAME_TYPE byte2frame_type_Q041[0x100] =
{
[0x00] = QUIC_FRAME_PADDING,
[0x01] = QUIC_FRAME_RST_STREAM,
@ -658,9 +658,9 @@ parse_frame_type_gquic_Q035_thru_Q039 (unsigned char b)
enum QUIC_FRAME_TYPE
parse_frame_type_gquic_Q040 (unsigned char b)
parse_frame_type_gquic_Q041 (unsigned char b)
{
return byte2frame_type_Q040[b];
return byte2frame_type_Q041[b];
}

View file

@ -12,7 +12,7 @@ static const unsigned char version_tags[N_LSQVER][4] =
[LSQVER_037] = { 'Q', '0', '3', '7', },
[LSQVER_038] = { 'Q', '0', '3', '8', },
[LSQVER_039] = { 'Q', '0', '3', '9', },
[LSQVER_040] = { 'Q', '0', '4', '0', },
[LSQVER_041] = { 'Q', '0', '4', '1', },
};
@ -61,7 +61,7 @@ const char *const lsquic_ver2str[N_LSQVER] = {
[LSQVER_037] = "Q037",
[LSQVER_038] = "Q038",
[LSQVER_039] = "Q039",
[LSQVER_040] = "Q040",
[LSQVER_041] = "Q041",
};

View file

@ -916,9 +916,9 @@ set_engine_option (struct lsquic_engine_settings *settings,
settings->es_versions |= 1 << LSQVER_039;
return 0;
}
if (0 == strcmp(val, "Q040"))
if (0 == strcmp(val, "Q041"))
{
settings->es_versions |= 1 << LSQVER_040;
settings->es_versions |= 1 << LSQVER_041;
return 0;
}
}

View file

@ -17,7 +17,7 @@
#include "lsquic_logger.h"
#include "lsquic.h"
static const struct parse_funcs *const pf = select_pf_by_ver(LSQVER_040);
static const struct parse_funcs *const pf = select_pf_by_ver(LSQVER_041);
static void
test1 (void) /* Inverse of quic_framer_test.cc -- NewAckFrameOneAckBlock */

View file

@ -11,7 +11,7 @@
#include "lsquic_util.h"
#include "lsquic.h"
static const struct parse_funcs *const pf = select_pf_by_ver(LSQVER_040);
static const struct parse_funcs *const pf = select_pf_by_ver(LSQVER_041);
static lsquic_packno_t

View file

@ -10,7 +10,7 @@
#include "lsquic_alarmset.h"
#include "lsquic_parse.h"
static const struct parse_funcs *const pf = select_pf_by_ver(LSQVER_040);
static const struct parse_funcs *const pf = select_pf_by_ver(LSQVER_041);
/* The test is both for generation and parsing: */

View file

@ -506,7 +506,7 @@ static const struct test tests[] = {
* IETF:
*/
{ .lineno = __LINE__,
.pf = select_pf_by_ver(LSQVER_040),
.pf = select_pf_by_ver(LSQVER_041),
.fin = { 0, 1, },
.offset = 0x0807060504030201UL,
.stream_id = 0x210,
@ -517,9 +517,9 @@ static const struct test tests[] = {
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 1 << 5 | 1 << 3 | 3 << 1 | 1,
0x00, 0x0A, /* Data length */
0x02, 0x10, /* Stream ID */
0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, /* Offset */
0x00, 0x0A, /* Data length */
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
},
.len = 1 + 2 + 8 + 2 + 10,
@ -527,7 +527,7 @@ static const struct test tests[] = {
},
{ .lineno = __LINE__,
.pf = select_pf_by_ver(LSQVER_040),
.pf = select_pf_by_ver(LSQVER_041),
.fin = { 0, 0, },
.offset = 0x0807060504030201UL,
.stream_id = 0x210,
@ -538,9 +538,9 @@ static const struct test tests[] = {
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 0 << 5 | 1 << 3 | 3 << 1 | 1,
0x00, 0x0A, /* Data length */
0x02, 0x10, /* Stream ID */
0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, /* Offset */
0x00, 0x0A, /* Data length */
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
},
.len = 1 + 2 + 8 + 2 + 10,
@ -548,7 +548,7 @@ static const struct test tests[] = {
},
{ .lineno = __LINE__,
.pf = select_pf_by_ver(LSQVER_040),
.pf = select_pf_by_ver(LSQVER_041),
.fin = { 1, 0, },
.offset = 0x0807060504030201UL,
.stream_id = 0x210,
@ -559,9 +559,9 @@ static const struct test tests[] = {
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 1 << 5 | 1 << 3 | 3 << 1 | 1,
0x00, 0x00, /* Data length */
0x02, 0x10, /* Stream ID */
0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, /* Offset */
0x00, 0x00, /* Data length */
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
},
.len = 1 + 2 + 8 + 2,
@ -569,7 +569,7 @@ static const struct test tests[] = {
},
{ .lineno = __LINE__,
.pf = select_pf_by_ver(LSQVER_040),
.pf = select_pf_by_ver(LSQVER_041),
.fin = { 1, 0, },
.offset = 0x0807060504030201UL,
.stream_id = 0x21,
@ -580,9 +580,9 @@ static const struct test tests[] = {
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 1 << 5 | 0 << 3 | 3 << 1 | 1,
0x00, 0x00, /* Data length */
0x21, /* Stream ID */
0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, /* Offset */
0x00, 0x00, /* Data length */
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
},
.len = 1 + 1 + 8 + 2,
@ -590,7 +590,7 @@ static const struct test tests[] = {
},
{ .lineno = __LINE__,
.pf = select_pf_by_ver(LSQVER_040),
.pf = select_pf_by_ver(LSQVER_041),
.fin = { 0, 0, },
.offset = 0x77,
.stream_id = 0x210,
@ -601,9 +601,9 @@ static const struct test tests[] = {
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 0 << 5 | 1 << 3 | 1 << 1 | 1,
0x00, 0x0A, /* Data length */
0x02, 0x10, /* Stream ID */
0x00, 0x77, /* Offset */
0x00, 0x0A, /* Data length */
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
},
.len = 1 + 2 + 2 + 2 + 10,
@ -611,7 +611,7 @@ static const struct test tests[] = {
},
{ .lineno = __LINE__,
.pf = select_pf_by_ver(LSQVER_040),
.pf = select_pf_by_ver(LSQVER_041),
.fin = { 0, 0, },
.offset = 0x0,
.stream_id = 0x210,
@ -622,9 +622,9 @@ static const struct test tests[] = {
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 0 << 5 | 1 << 3 | 0 << 1 | 1,
0x00, 0x0A, /* Data length */
0x02, 0x10, /* Stream ID */
/* Offset */
0x00, 0x0A, /* Data length */
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
},
.len = 1 + 2 + 0 + 2 + 10,
@ -632,7 +632,7 @@ static const struct test tests[] = {
},
{ .lineno = __LINE__,
.pf = select_pf_by_ver(LSQVER_040),
.pf = select_pf_by_ver(LSQVER_041),
.fin = { 0, 1, },
.offset = 0x0,
.stream_id = 0x210,
@ -643,9 +643,9 @@ static const struct test tests[] = {
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 1 << 5 | 1 << 3 | 0 << 1 | 1,
0x00, 0x01, /* Data length */
0x02, 0x10, /* Stream ID */
/* Offset */
0x00, 0x01, /* Data length */
'0',
},
.len = 1 + 2 + 0 + 2 + 1,
@ -653,7 +653,7 @@ static const struct test tests[] = {
},
{ .lineno = __LINE__,
.pf = select_pf_by_ver(LSQVER_040),
.pf = select_pf_by_ver(LSQVER_041),
.fin = { 0, 0, },
.offset = 0xFFFFFF,
.stream_id = 0x210,
@ -664,9 +664,9 @@ static const struct test tests[] = {
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 0 << 5 | 1 << 3 | 2 << 1 | 1,
0x00, 0x0A, /* Data length */
0x02, 0x10, /* Stream ID */
0x00, 0xFF, 0xFF, 0xFF, /* Offset */
0x00, 0x0A, /* Data length */
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
},
.len = 1 + 2 + 4 + 2 + 10,
@ -674,7 +674,7 @@ static const struct test tests[] = {
},
{ .lineno = __LINE__,
.pf = select_pf_by_ver(LSQVER_040),
.pf = select_pf_by_ver(LSQVER_041),
.fin = { 0, 0, },
.offset = 0xFFFFFFFFULL + 1,
.stream_id = 0x210,
@ -685,9 +685,9 @@ static const struct test tests[] = {
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 0 << 5 | 1 << 3 | 3 << 1 | 1,
0x00, 0x0A, /* Data length */
0x02, 0x10, /* Stream ID */
0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, /* Offset */
0x00, 0x0A, /* Data length */
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
},
.len = 1 + 2 + 8 + 2 + 10,
@ -695,7 +695,7 @@ static const struct test tests[] = {
},
{ .lineno = __LINE__,
.pf = select_pf_by_ver(LSQVER_040),
.pf = select_pf_by_ver(LSQVER_041),
.fin = { 0, 0, },
.offset = 0xFFFFFFFFULL + 1,
.stream_id = 0x210,
@ -715,7 +715,7 @@ static const struct test tests[] = {
},
{ .lineno = __LINE__,
.pf = select_pf_by_ver(LSQVER_040),
.pf = select_pf_by_ver(LSQVER_041),
.fin = { 1, 0, },
.offset = 0xB4,
.stream_id = 0x01,
@ -726,9 +726,9 @@ static const struct test tests[] = {
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 1 << 5 | 0 << 3 | 1 << 1 | 1,
0x00, 0x00, /* Data length */
0x01, /* Stream ID */
0x00, 0xB4, /* Offset */
0x00, 0x00, /* Data length */
},
.len = 6,
.min_sz = 6,

View file

@ -444,13 +444,13 @@ static const struct test tests[] = {
*/
{ "Balls to the wall: every possible bit is set",
__LINE__,
select_pf_by_ver(LSQVER_040),
select_pf_by_ver(LSQVER_041),
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 1 << 5 | 3 << 3 | 3 << 1 | 1,
0x01, 0xC4, /* Data length */
0x00, 0x00, 0x02, 0x10, /* Stream ID */
0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, /* Offset */
0x01, 0xC4, /* Data length */
},
1 + 4 + 8 + 2,
0x200,
@ -464,13 +464,13 @@ static const struct test tests[] = {
{ "Balls to the wall #2: every possible bit is set, except FIN",
__LINE__,
select_pf_by_ver(LSQVER_040),
select_pf_by_ver(LSQVER_041),
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 0 << 5 | 3 << 3 | 3 << 1 | 1,
0x01, 0xC4, /* Data length */
0x00, 0x00, 0x02, 0x10, /* Stream ID */
0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, /* Offset */
0x01, 0xC4, /* Data length */
},
1 + 4 + 8 + 2,
0x200,
@ -484,12 +484,13 @@ static const struct test tests[] = {
{ "Data length is zero",
__LINE__,
select_pf_by_ver(LSQVER_040),
select_pf_by_ver(LSQVER_041),
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 1 << 5 | 3 << 3 | 3 << 1 | 0,
0x00, 0x00, 0x02, 0x10, /* Stream ID */
0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, /* Offset */
0xC4, 0x01, /* Data length: note this does not matter */
},
1 + 4 + 8 + 0,
0x200,
@ -503,13 +504,13 @@ static const struct test tests[] = {
{ "Stream ID length is 1",
__LINE__,
select_pf_by_ver(LSQVER_040),
select_pf_by_ver(LSQVER_041),
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 1 << 5 | 0 << 3 | 3 << 1 | 1,
0x01, 0xC4, /* Data length */
0xF0, /* Stream ID */
0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, /* Offset */
0x01, 0xC4, /* Data length */
},
1 + 1 + 8 + 2,
0x200,
@ -523,12 +524,13 @@ static const struct test tests[] = {
{ "All bits are zero save offset length",
__LINE__,
select_pf_by_ver(LSQVER_040),
select_pf_by_ver(LSQVER_041),
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 0 << 5 | 0 << 3 | 1 << 1 | 0,
0xF0, /* Stream ID */
0x02, 0x55, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, /* Offset */
0xC4, 0x01, /* Data length */
},
1 + 1 + 2 + 0,
0x200,
@ -542,7 +544,7 @@ static const struct test tests[] = {
{ "Sanity check: either FIN must be set or data length is not zero #1",
__LINE__,
select_pf_by_ver(LSQVER_040),
select_pf_by_ver(LSQVER_041),
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 0 << 5 | 0 << 3 | 1 << 1 | 0,
@ -564,13 +566,13 @@ static const struct test tests[] = {
{ "Sanity check: either FIN must be set or data length is not zero #2",
__LINE__,
select_pf_by_ver(LSQVER_040),
select_pf_by_ver(LSQVER_041),
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 0 << 5 | 0 << 3 | 1 << 1 | 1,
0x00, 0x00,
0xF0, /* Stream ID */
0x02, 0x55, /* Offset */
0x00, 0x00,
},
1 + 1 + 2 + 2,
200,
@ -584,13 +586,13 @@ static const struct test tests[] = {
{ "Sanity check: either FIN must be set or data length is not zero #3",
__LINE__,
select_pf_by_ver(LSQVER_040),
select_pf_by_ver(LSQVER_041),
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 1 << 5 | 0 << 3 | 1 << 1 | 1,
0x00, 0x00,
0xF0, /* Stream ID */
0x02, 0x55, /* Offset */
0x00, 0x00,
},
1 + 1 + 2 + 2,
200,
@ -604,13 +606,13 @@ static const struct test tests[] = {
{ "Check data bounds #1",
__LINE__,
select_pf_by_ver(LSQVER_040),
select_pf_by_ver(LSQVER_041),
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 0 << 5 | 0 << 3 | 1 << 1 | 1,
0x01, 0xFA, /* Data length */
0xF0, /* Stream ID */
0x02, 0x55, /* Offset */
0x01, 0xFA, /* Data length */
},
1 + 1 + 2 + 2,
0x200,
@ -624,13 +626,13 @@ static const struct test tests[] = {
{ "Check data bounds #2",
__LINE__,
select_pf_by_ver(LSQVER_040),
select_pf_by_ver(LSQVER_041),
/* 11 F SS OO D 11FSSOOD */
/* TYPE FIN SLEN OLEN DLEN */
{ 0xC0 | 0 << 5 | 0 << 3 | 1 << 1 | 1,
0x01, 0xFB, /* <--- One byte too many */
0xF0, /* Stream ID */
0x02, 0x55, /* Offset */
0x01, 0xFB, /* <--- One byte too many */
},
1 + 1 + 2 + 2,
0x200,