mirror of
https://gitea.invidious.io/iv-org/litespeed-quic.git
synced 2024-08-15 00:53:43 +00:00
Release 2.6.6
- [BUGFIX] Using HTTP/3 to HTTP/1.x converter. - [BUGFIX] Truncate log messages instead of throwing them away.
This commit is contained in:
parent
be8bc27c5b
commit
55f8042d41
5 changed files with 98 additions and 10 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2019-11-20
|
||||||
|
- 2.6.6
|
||||||
|
- [BUGFIX] Using HTTP/3 to HTTP/1.x converter.
|
||||||
|
- [BUGFIX] Truncate log messages instead of throwing them away.
|
||||||
|
|
||||||
2019-11-15
|
2019-11-15
|
||||||
- 2.6.5
|
- 2.6.5
|
||||||
- [BUGFIX] High priority buffered packet queue length.
|
- [BUGFIX] High priority buffered packet queue length.
|
||||||
|
|
|
@ -25,7 +25,7 @@ extern "C" {
|
||||||
|
|
||||||
#define LSQUIC_MAJOR_VERSION 2
|
#define LSQUIC_MAJOR_VERSION 2
|
||||||
#define LSQUIC_MINOR_VERSION 6
|
#define LSQUIC_MINOR_VERSION 6
|
||||||
#define LSQUIC_PATCH_VERSION 5
|
#define LSQUIC_PATCH_VERSION 6
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Engine flags:
|
* Engine flags:
|
||||||
|
|
|
@ -20,7 +20,12 @@
|
||||||
#include "lsquic_logger.h"
|
#include "lsquic_logger.h"
|
||||||
|
|
||||||
#define MAX_LINE_LEN 8192
|
#define MAX_LINE_LEN 8192
|
||||||
#define FORMAT_PROBLEM(lb, len, max) (((ssize_t)lb < 0) || ((ssize_t)lb + (ssize_t)len >= (ssize_t)max))
|
/* Expanded TRUNC_FMT should not exceed TRUNC_SZ bytes. At the same time,
|
||||||
|
* TRUNC_SZ should be significantly smaller than MAX_LINE_LEN.
|
||||||
|
*/
|
||||||
|
#define TRUNC_FMT "<truncated, need %d bytes>"
|
||||||
|
#define TRUNC_SZ 40
|
||||||
|
#define FORMAT_PROBLEM(lb, len, max) ((lb < 0) || (lb + len >= max))
|
||||||
|
|
||||||
/* TODO: display GQUIC CIDs in Chrome-compatible format */
|
/* TODO: display GQUIC CIDs in Chrome-compatible format */
|
||||||
|
|
||||||
|
@ -241,7 +246,7 @@ lsquic_logger_log3 (enum lsq_log_level log_level,
|
||||||
const int saved_errno = errno;
|
const int saved_errno = errno;
|
||||||
char cidbuf_[MAX_CID_LEN * 2 + 1];
|
char cidbuf_[MAX_CID_LEN * 2 + 1];
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
size_t lb;
|
int lb;
|
||||||
size_t max = MAX_LINE_LEN;
|
size_t max = MAX_LINE_LEN;
|
||||||
char buf[MAX_LINE_LEN];
|
char buf[MAX_LINE_LEN];
|
||||||
|
|
||||||
|
@ -262,6 +267,11 @@ lsquic_logger_log3 (enum lsq_log_level log_level,
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
lb = vsnprintf(buf + len, max - len, fmt, ap);
|
lb = vsnprintf(buf + len, max - len, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
if (lb > 0 && (size_t) lb >= max - len && max - len >= TRUNC_SZ)
|
||||||
|
{
|
||||||
|
len = max - TRUNC_SZ;
|
||||||
|
lb = snprintf(buf + max - TRUNC_SZ, TRUNC_SZ, TRUNC_FMT, lb);
|
||||||
|
}
|
||||||
if (FORMAT_PROBLEM(lb, len, max))
|
if (FORMAT_PROBLEM(lb, len, max))
|
||||||
goto end;
|
goto end;
|
||||||
len += lb;
|
len += lb;
|
||||||
|
@ -283,7 +293,7 @@ lsquic_logger_log2 (enum lsq_log_level log_level,
|
||||||
const int saved_errno = errno;
|
const int saved_errno = errno;
|
||||||
char cidbuf_[MAX_CID_LEN * 2 + 1];
|
char cidbuf_[MAX_CID_LEN * 2 + 1];
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
size_t lb;
|
int lb;
|
||||||
size_t max = MAX_LINE_LEN;
|
size_t max = MAX_LINE_LEN;
|
||||||
char buf[MAX_LINE_LEN];
|
char buf[MAX_LINE_LEN];
|
||||||
|
|
||||||
|
@ -304,6 +314,11 @@ lsquic_logger_log2 (enum lsq_log_level log_level,
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
lb = vsnprintf(buf + len, max - len, fmt, ap);
|
lb = vsnprintf(buf + len, max - len, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
if (lb > 0 && (size_t) lb >= max - len && max - len >= TRUNC_SZ)
|
||||||
|
{
|
||||||
|
len = max - TRUNC_SZ;
|
||||||
|
lb = snprintf(buf + max - TRUNC_SZ, TRUNC_SZ, TRUNC_FMT, lb);
|
||||||
|
}
|
||||||
if (FORMAT_PROBLEM(lb, len, max))
|
if (FORMAT_PROBLEM(lb, len, max))
|
||||||
goto end;
|
goto end;
|
||||||
len += lb;
|
len += lb;
|
||||||
|
@ -324,7 +339,7 @@ lsquic_logger_log1 (enum lsq_log_level log_level,
|
||||||
{
|
{
|
||||||
const int saved_errno = errno;
|
const int saved_errno = errno;
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
size_t lb;
|
int lb;
|
||||||
size_t max = MAX_LINE_LEN;
|
size_t max = MAX_LINE_LEN;
|
||||||
char buf[MAX_LINE_LEN];
|
char buf[MAX_LINE_LEN];
|
||||||
|
|
||||||
|
@ -344,6 +359,11 @@ lsquic_logger_log1 (enum lsq_log_level log_level,
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
lb = vsnprintf(buf + len, max - len, fmt, ap);
|
lb = vsnprintf(buf + len, max - len, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
if (lb > 0 && (size_t) lb >= max - len && max - len >= TRUNC_SZ)
|
||||||
|
{
|
||||||
|
len = max - TRUNC_SZ;
|
||||||
|
lb = snprintf(buf + max - TRUNC_SZ, TRUNC_SZ, TRUNC_FMT, lb);
|
||||||
|
}
|
||||||
if (FORMAT_PROBLEM(lb, len, max))
|
if (FORMAT_PROBLEM(lb, len, max))
|
||||||
goto end;
|
goto end;
|
||||||
len += lb;
|
len += lb;
|
||||||
|
@ -362,7 +382,7 @@ lsquic_logger_log0 (enum lsq_log_level log_level, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
const int saved_errno = errno;
|
const int saved_errno = errno;
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
size_t lb;
|
int lb;
|
||||||
size_t max = MAX_LINE_LEN;
|
size_t max = MAX_LINE_LEN;
|
||||||
char buf[MAX_LINE_LEN];
|
char buf[MAX_LINE_LEN];
|
||||||
|
|
||||||
|
@ -382,6 +402,11 @@ lsquic_logger_log0 (enum lsq_log_level log_level, const char *fmt, ...)
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
lb = vsnprintf(buf + len, max - len, fmt, ap);
|
lb = vsnprintf(buf + len, max - len, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
if (lb > 0 && (size_t) lb >= max - len && max - len >= TRUNC_SZ)
|
||||||
|
{
|
||||||
|
len = max - TRUNC_SZ;
|
||||||
|
lb = snprintf(buf + max - TRUNC_SZ, TRUNC_SZ, TRUNC_FMT, lb);
|
||||||
|
}
|
||||||
if (FORMAT_PROBLEM(lb, len, max))
|
if (FORMAT_PROBLEM(lb, len, max))
|
||||||
goto end;
|
goto end;
|
||||||
len += lb;
|
len += lb;
|
||||||
|
|
|
@ -1435,10 +1435,16 @@ lsquic_stream_readf (struct lsquic_stream *stream,
|
||||||
errno = EBADF;
|
errno = EBADF;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if ((stream->stream_flags & STREAM_FIN_REACHED)
|
if (stream->stream_flags & STREAM_FIN_REACHED)
|
||||||
&& 0 == (!!(stream->stream_flags & STREAM_HAVE_UH)
|
{
|
||||||
^ !!(stream->sm_bflags & SMBF_USE_HEADERS)))
|
if (stream->sm_bflags & SMBF_USE_HEADERS)
|
||||||
return 0;
|
{
|
||||||
|
if ((stream->stream_flags & STREAM_HAVE_UH) && !stream->uh)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return stream_readf(stream, readf, ctx);
|
return stream_readf(stream, readf, ctx);
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,8 @@
|
||||||
#include "lsquic_enc_sess.h"
|
#include "lsquic_enc_sess.h"
|
||||||
#include "lsqpack.h"
|
#include "lsqpack.h"
|
||||||
#include "lsquic_frab_list.h"
|
#include "lsquic_frab_list.h"
|
||||||
|
#include "lsquic_http1x_if.h"
|
||||||
|
#include "lsquic_qdec_hdl.h"
|
||||||
#include "lsquic_qenc_hdl.h"
|
#include "lsquic_qenc_hdl.h"
|
||||||
#include "lsquic_varint.h"
|
#include "lsquic_varint.h"
|
||||||
#include "lsquic_hq.h"
|
#include "lsquic_hq.h"
|
||||||
|
@ -122,6 +124,7 @@ struct test_objs {
|
||||||
unsigned initial_stream_window;
|
unsigned initial_stream_window;
|
||||||
enum stream_ctor_flags ctor_flags;
|
enum stream_ctor_flags ctor_flags;
|
||||||
struct qpack_enc_hdl qeh;
|
struct qpack_enc_hdl qeh;
|
||||||
|
struct qpack_dec_hdl qdh;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -189,6 +192,11 @@ init_test_objs (struct test_objs *tobjs, unsigned initial_conn_window,
|
||||||
s = lsquic_qeh_settings(&tobjs->qeh, 0, 0, 0, 0);
|
s = lsquic_qeh_settings(&tobjs->qeh, 0, 0, 0, 0);
|
||||||
assert(0 == s);
|
assert(0 == s);
|
||||||
tobjs->conn_pub.u.ietf.qeh = &tobjs->qeh;
|
tobjs->conn_pub.u.ietf.qeh = &tobjs->qeh;
|
||||||
|
tobjs->conn_pub.enpub->enp_hsi_if = lsquic_http1x_if;
|
||||||
|
s = lsquic_qdh_init(&tobjs->qdh, &tobjs->lconn, 0,
|
||||||
|
tobjs->conn_pub.enpub, 0, 0);
|
||||||
|
tobjs->conn_pub.u.ietf.qdh = &tobjs->qdh;
|
||||||
|
assert(0 == s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -201,7 +209,10 @@ deinit_test_objs (struct test_objs *tobjs)
|
||||||
lsquic_malo_destroy(tobjs->conn_pub.packet_out_malo);
|
lsquic_malo_destroy(tobjs->conn_pub.packet_out_malo);
|
||||||
lsquic_mm_cleanup(&tobjs->eng_pub.enp_mm);
|
lsquic_mm_cleanup(&tobjs->eng_pub.enp_mm);
|
||||||
if ((1 << tobjs->lconn.cn_version) & LSQUIC_IETF_VERSIONS)
|
if ((1 << tobjs->lconn.cn_version) & LSQUIC_IETF_VERSIONS)
|
||||||
|
{
|
||||||
lsquic_qeh_cleanup(&tobjs->qeh);
|
lsquic_qeh_cleanup(&tobjs->qeh);
|
||||||
|
lsquic_qdh_cleanup(&tobjs->qdh);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -583,6 +594,46 @@ test_read_headers (int ietf, int use_hset)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_read_headers_http1x (void)
|
||||||
|
{
|
||||||
|
struct test_objs tobjs;
|
||||||
|
struct lsquic_stream *stream;
|
||||||
|
struct stream_frame *frame;
|
||||||
|
int s;
|
||||||
|
const unsigned char headers_frame[5] = {
|
||||||
|
0x01, /* Headers frame */
|
||||||
|
0x03, /* Frame length */
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0xC0 | 25 /* :status 200 */,
|
||||||
|
};
|
||||||
|
ssize_t nr;
|
||||||
|
unsigned char buf[0x100];
|
||||||
|
|
||||||
|
init_test_objs(&tobjs, 0x1000, 0x1000, SCF_IETF);
|
||||||
|
|
||||||
|
stream = new_stream(&tobjs, 0, 0x1000);
|
||||||
|
frame = new_frame_in(&tobjs, 0, sizeof(headers_frame), 1);
|
||||||
|
memcpy((unsigned char *) frame->data_frame.df_data, headers_frame,
|
||||||
|
sizeof(headers_frame));
|
||||||
|
s = lsquic_stream_frame_in(stream, frame);
|
||||||
|
assert(s == 0);
|
||||||
|
|
||||||
|
assert(stream->stream_flags & STREAM_FIN_REACHED);
|
||||||
|
s = lsquic_stream_readable(stream);
|
||||||
|
|
||||||
|
nr = lsquic_stream_read(stream, buf, sizeof(buf));
|
||||||
|
assert(nr > 0);
|
||||||
|
assert(nr == 19);
|
||||||
|
assert(0 == memcmp(buf, "HTTP/1.1 200 OK\r\n\r\n", nr));
|
||||||
|
|
||||||
|
lsquic_stream_destroy(stream);
|
||||||
|
|
||||||
|
deinit_test_objs(&tobjs);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc, char **argv)
|
main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
@ -612,6 +663,7 @@ main (int argc, char **argv)
|
||||||
test_read_headers(0, 1);
|
test_read_headers(0, 1);
|
||||||
test_read_headers(1, 0);
|
test_read_headers(1, 0);
|
||||||
test_read_headers(1, 1);
|
test_read_headers(1, 1);
|
||||||
|
test_read_headers_http1x();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue