You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
We have an application that uses both MG_EV_HTTP_MSG and MG_EV_READ events to process both complete HTTP requests and partial requests depending on the URL. In mongoose 7.12, we have observed that MG_EV_READ is called before MG_EV_HTTP_MSG which makes sense to us because we have a chance to process a partial HTTP request if needed. Also in this case, if we consume all of the data, MG_EV_HTTP_MSG does not fire.
In 7.13 I am seeing MG_EV_HTTP_MSG event before MG_EV_READ and it consumes all of the received data before we have a chance to process it with MG_EV_READ. Look at this example program below, for 7.12:
sitecntrl:~/mongoose$ git checkout 7.12
HEAD is now at 32559f15 fix Github editor line ending creativity
sitecntrl:~/mongoose$ cat test.c
#include <err.h>
#include "mongoose.h"
static void
fn(struct mg_connection *c, int ev, void *ev_data, void *)
{
if (ev == MG_EV_HTTP_MSG) {
printf(">>> MG_EV_HTTP_MSG\n");
}
else if (ev == MG_EV_READ) {
printf(">>> MG_EV_READ, c->recv.len = %d\n", c->recv.len);
c->recv.len = 0;
}
}
int
main(int argc, char *argv[])
{
struct mg_mgr mgr;
mg_mgr_init(&mgr);
mg_http_listen(&mgr, "http://0.0.0.0:8000", fn, &mgr);
while (1)
mg_mgr_poll(&mgr, 1000);
mg_mgr_free(&mgr);
return 0;
}
sitecntrl:~/mongoose$ cc -o read test.c mongoose.c
sitecntrl:~/mongoose$ ./read
(switch to other terminal)
sitecntrl:~/mongoose$ curl http://127.0.0.1:8000
(switch back)
>>> MG_EV_READ, c->recv.len = 78
This makes sense to me. MG_EV_READ is called, consumes that data (sets recv.len = 0), then MG_EV_HTTP_MSG is not called because there is no more data.
But look at what happens in 7.13. Example program slightly modified to cope with signature change:
sitecntrl:~/mongoose$ git checkout 7.13
HEAD is now at 52997c6c update version
sitecntrl:~/mongoose$ cat test.c
#include <err.h>
#include "mongoose.h"
static void
fn(struct mg_connection *c, int ev, void *ev_data)
{
if (ev == MG_EV_HTTP_MSG) {
printf(">>> MG_EV_HTTP_MSG\n");
}
else if (ev == MG_EV_READ) {
printf(">>> MG_EV_READ, c->recv.len = %d\n", c->recv.len);
c->recv.len = 0;
}
}
int
main(int argc, char *argv[])
{
struct mg_mgr mgr;
mg_mgr_init(&mgr);
mg_http_listen(&mgr, "http://0.0.0.0:8000", fn, &mgr);
while (1)
mg_mgr_poll(&mgr, 1000);
mg_mgr_free(&mgr);
return 0;
}
sitecntrl:~/mongoose$ cc -o read test.c mongoose.c
sitecntrl:~/mongoose$ ./read
(switch to other terminal)
sitecntrl:~/mongoose$ curl http://127.0.0.1:8000
(switch back)
>>> MG_EV_HTTP_MSG
>>> MG_EV_READ, c->recv.len = 0
You can see that MG_EV_HTTP_MSG has fired before MG_EV_READ and presumably consumed all of the recv buffer data. Is this expected behavior?
Environment
mongoose version: 7.12/7.13
Compiler/IDE and SDK: gcc 11.3.0
Target hardware/board: Arm Cortex A7
Target RTOS/OS (if applicable): Linux 5.15
The text was updated successfully, but these errors were encountered:
Hi,
We have an application that uses both
MG_EV_HTTP_MSG
andMG_EV_READ
events to process both complete HTTP requests and partial requests depending on the URL. In mongoose 7.12, we have observed thatMG_EV_READ
is called beforeMG_EV_HTTP_MSG
which makes sense to us because we have a chance to process a partial HTTP request if needed. Also in this case, if we consume all of the data,MG_EV_HTTP_MSG
does not fire.In 7.13 I am seeing
MG_EV_HTTP_MSG
event beforeMG_EV_READ
and it consumes all of the received data before we have a chance to process it withMG_EV_READ
. Look at this example program below, for 7.12:This makes sense to me.
MG_EV_READ
is called, consumes that data (setsrecv.len = 0
), thenMG_EV_HTTP_MSG
is not called because there is no more data.But look at what happens in 7.13. Example program slightly modified to cope with signature change:
You can see that
MG_EV_HTTP_MSG
has fired beforeMG_EV_READ
and presumably consumed all of the recv buffer data. Is this expected behavior?Environment
The text was updated successfully, but these errors were encountered: