mirror of
https://github.com/cesanta/mongoose.git
synced 2026-11-09 16:21:45 +00:00
Adjust recv.len after stripping chunked body
This commit is contained in:
1 parent
a1862986b8
commit
9009cbc528
2 files changed
+8
-6
No files matched your search
+4
-3
@@ -1273,11 +1273,13 @@ static void walkchunks(struct mg_connection *c, struct mg_http_message *hm,
|
|||||||
size_t memo = c->recv.len;
|
size_t memo = c->recv.len;
|
||||||
size_t cl = get_chunk_length(&buf[off], memo - reqlen - off, &ll);
|
size_t cl = get_chunk_length(&buf[off], memo - reqlen - off, &ll);
|
||||||
size_t n = cl < ll + 2 ? 0 : cl - ll - 2;
|
size_t n = cl < ll + 2 ? 0 : cl - ll - 2;
|
||||||
if (cl <= 5) break;
|
|
||||||
memmove(buf + bl, buf + off + ll, n);
|
memmove(buf + bl, buf + off + ll, n);
|
||||||
bl += n;
|
bl += n;
|
||||||
off += cl;
|
off += cl;
|
||||||
|
if (cl <= 5) break;
|
||||||
}
|
}
|
||||||
|
// LOG(LL_INFO, ("BL->%d del %d off %d", (int) bl, (int) del, (int) off));
|
||||||
|
c->recv.len -= off - bl;
|
||||||
// Set message length to indicate we've received
|
// Set message length to indicate we've received
|
||||||
// everything, to fire MG_EV_HTTP_MSG
|
// everything, to fire MG_EV_HTTP_MSG
|
||||||
hm->message.len = bl + reqlen;
|
hm->message.len = bl + reqlen;
|
||||||
@@ -1325,8 +1327,7 @@ static void http_cb(struct mg_connection *c, int ev, void *evd, void *fnd) {
|
|||||||
// LOG(LL_INFO,
|
// LOG(LL_INFO,
|
||||||
//("---->%d %d\n%.*s", n, is_chunked, (int) c->recv.len, c->recv.buf));
|
//("---->%d %d\n%.*s", n, is_chunked, (int) c->recv.len, c->recv.buf));
|
||||||
if (n < 0 && ev == MG_EV_READ) {
|
if (n < 0 && ev == MG_EV_READ) {
|
||||||
LOG(LL_ERROR, ("%lu HTTP parse error", c->id));
|
mg_error(c, "HTTP parse:\n%.*s", (int) c->recv.len, c->recv.buf);
|
||||||
c->is_closing = 1;
|
|
||||||
break;
|
break;
|
||||||
} else if (n > 0 && (size_t) c->recv.len >= hm.message.len) {
|
} else if (n > 0 && (size_t) c->recv.len >= hm.message.len) {
|
||||||
mg_call(c, MG_EV_HTTP_MSG, &hm);
|
mg_call(c, MG_EV_HTTP_MSG, &hm);
|
||||||
|
|||||||
+4
-3
@@ -854,11 +854,13 @@ static void walkchunks(struct mg_connection *c, struct mg_http_message *hm,
|
|||||||
size_t memo = c->recv.len;
|
size_t memo = c->recv.len;
|
||||||
size_t cl = get_chunk_length(&buf[off], memo - reqlen - off, &ll);
|
size_t cl = get_chunk_length(&buf[off], memo - reqlen - off, &ll);
|
||||||
size_t n = cl < ll + 2 ? 0 : cl - ll - 2;
|
size_t n = cl < ll + 2 ? 0 : cl - ll - 2;
|
||||||
if (cl <= 5) break;
|
|
||||||
memmove(buf + bl, buf + off + ll, n);
|
memmove(buf + bl, buf + off + ll, n);
|
||||||
bl += n;
|
bl += n;
|
||||||
off += cl;
|
off += cl;
|
||||||
|
if (cl <= 5) break;
|
||||||
}
|
}
|
||||||
|
// LOG(LL_INFO, ("BL->%d del %d off %d", (int) bl, (int) del, (int) off));
|
||||||
|
c->recv.len -= off - bl;
|
||||||
// Set message length to indicate we've received
|
// Set message length to indicate we've received
|
||||||
// everything, to fire MG_EV_HTTP_MSG
|
// everything, to fire MG_EV_HTTP_MSG
|
||||||
hm->message.len = bl + reqlen;
|
hm->message.len = bl + reqlen;
|
||||||
@@ -906,8 +908,7 @@ static void http_cb(struct mg_connection *c, int ev, void *evd, void *fnd) {
|
|||||||
// LOG(LL_INFO,
|
// LOG(LL_INFO,
|
||||||
//("---->%d %d\n%.*s", n, is_chunked, (int) c->recv.len, c->recv.buf));
|
//("---->%d %d\n%.*s", n, is_chunked, (int) c->recv.len, c->recv.buf));
|
||||||
if (n < 0 && ev == MG_EV_READ) {
|
if (n < 0 && ev == MG_EV_READ) {
|
||||||
LOG(LL_ERROR, ("%lu HTTP parse error", c->id));
|
mg_error(c, "HTTP parse:\n%.*s", (int) c->recv.len, c->recv.buf);
|
||||||
c->is_closing = 1;
|
|
||||||
break;
|
break;
|
||||||
} else if (n > 0 && (size_t) c->recv.len >= hm.message.len) {
|
} else if (n > 0 && (size_t) c->recv.len >= hm.message.len) {
|
||||||
mg_call(c, MG_EV_HTTP_MSG, &hm);
|
mg_call(c, MG_EV_HTTP_MSG, &hm);
|
||||||
|
|||||||
Reference in new issue
Block a user