mirror of
https://github.com/cesanta/mongoose.git
synced 2026-11-14 19:03:20 +00:00
Merge pull request #1889 from cesanta/mippoll
MG_EV_POLL generation on MIP
This commit is contained in:
5 files changed
+49
-3
No files matched your search
@@ -925,6 +925,10 @@ void mg_mgr_poll(struct mg_mgr *mgr, int ms) {
|
|||||||
mg_timer_poll(&mgr->timers, now);
|
mg_timer_poll(&mgr->timers, now);
|
||||||
for (c = mgr->conns; c != NULL; c = tmp) {
|
for (c = mgr->conns; c != NULL; c = tmp) {
|
||||||
tmp = c->next;
|
tmp = c->next;
|
||||||
|
mg_call(c, MG_EV_POLL, &now);
|
||||||
|
MG_VERBOSE(("%lu .. %c%c%c%c%c", c->id, c->is_tls ? 'T' : 't',
|
||||||
|
c->is_connecting ? 'C' : 'c', c->is_tls_hs ? 'H' : 'h',
|
||||||
|
c->is_resolving ? 'R' : 'r', c->is_closing ? 'C' : 'c'));
|
||||||
if (c->is_tls_hs) mg_tls_handshake(c);
|
if (c->is_tls_hs) mg_tls_handshake(c);
|
||||||
if (can_write(c)) write_conn(c);
|
if (can_write(c)) write_conn(c);
|
||||||
if (c->is_draining && c->send.len == 0) c->is_closing = 1;
|
if (c->is_draining && c->send.len == 0) c->is_closing = 1;
|
||||||
|
|||||||
@@ -7451,6 +7451,10 @@ void mg_mgr_poll(struct mg_mgr *mgr, int ms) {
|
|||||||
mg_timer_poll(&mgr->timers, now);
|
mg_timer_poll(&mgr->timers, now);
|
||||||
for (c = mgr->conns; c != NULL; c = tmp) {
|
for (c = mgr->conns; c != NULL; c = tmp) {
|
||||||
tmp = c->next;
|
tmp = c->next;
|
||||||
|
mg_call(c, MG_EV_POLL, &now);
|
||||||
|
MG_VERBOSE(("%lu .. %c%c%c%c%c", c->id, c->is_tls ? 'T' : 't',
|
||||||
|
c->is_connecting ? 'C' : 'c', c->is_tls_hs ? 'H' : 'h',
|
||||||
|
c->is_resolving ? 'R' : 'r', c->is_closing ? 'C' : 'c'));
|
||||||
if (c->is_tls_hs) mg_tls_handshake(c);
|
if (c->is_tls_hs) mg_tls_handshake(c);
|
||||||
if (can_write(c)) write_conn(c);
|
if (can_write(c)) write_conn(c);
|
||||||
if (c->is_draining && c->send.len == 0) c->is_closing = 1;
|
if (c->is_draining && c->send.len == 0) c->is_closing = 1;
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@ static size_t mock_tx(const void *buf, size_t len, void *data) {
|
|||||||
|
|
||||||
static size_t mock_rx(void *buf, size_t len, void *data) {
|
static size_t mock_rx(void *buf, size_t len, void *data) {
|
||||||
(void) buf, (void) len, (void) data;
|
(void) buf, (void) len, (void) data;
|
||||||
return len;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool mock_up(void *data) {
|
static bool mock_up(void *data) {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#define MG_ENABLE_PACKED_FS 0
|
#define MG_ENABLE_PACKED_FS 0
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
#include <linux/if.h>
|
#include <linux/if.h>
|
||||||
#include <linux/if_tun.h>
|
#include <linux/if_tun.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
@@ -259,10 +260,31 @@ static void test_http_fetch(void) {
|
|||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ph(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
|
||||||
|
if (ev == MG_EV_POLL) ++(*(int *) fn_data);
|
||||||
|
(void) c, (void) ev_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_poll(void) {
|
||||||
|
int count = 0, i;
|
||||||
|
struct mg_mgr mgr;
|
||||||
|
mg_mgr_init(&mgr);
|
||||||
|
struct mip_if mif;
|
||||||
|
memset(&mif, 0, sizeof(mif));
|
||||||
|
mif.driver = &mip_driver_mock;
|
||||||
|
mip_init(&mgr, &mif);
|
||||||
|
mg_http_listen(&mgr, "http://127.0.0.1:12346", ph, &count);
|
||||||
|
for (i = 0; i < 10; i++) mg_mgr_poll(&mgr, 0);
|
||||||
|
ASSERT(count == 10);
|
||||||
|
mip_free(&mif);
|
||||||
|
mg_mgr_free(&mgr);
|
||||||
|
}
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
test_queue();
|
test_queue();
|
||||||
test_statechange();
|
test_statechange();
|
||||||
test_http_fetch();
|
test_http_fetch();
|
||||||
|
test_poll();
|
||||||
printf("SUCCESS. Total tests: %d\n", s_num_tests);
|
printf("SUCCESS. Total tests: %d\n", s_num_tests);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
+18
-2
@@ -333,7 +333,7 @@ static void test_sntp(void) {
|
|||||||
ASSERT(mg_sntp_parse(NULL, 0) == -1);
|
ASSERT(mg_sntp_parse(NULL, 0) == -1);
|
||||||
// NOTE(cpq): temporarily disabled until Github Actions fix their NTP
|
// NOTE(cpq): temporarily disabled until Github Actions fix their NTP
|
||||||
// port blockage issue, https://github.com/actions/runner-images/issues/5615
|
// port blockage issue, https://github.com/actions/runner-images/issues/5615
|
||||||
//test_sntp_server("udp://time.apple.com:123");
|
// test_sntp_server("udp://time.apple.com:123");
|
||||||
test_sntp_server("udp://time.windows.com:123");
|
test_sntp_server("udp://time.windows.com:123");
|
||||||
test_sntp_server(NULL);
|
test_sntp_server(NULL);
|
||||||
}
|
}
|
||||||
@@ -2304,7 +2304,7 @@ static void w2(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
|
|||||||
} else if (ev == MG_EV_WS_MSG) {
|
} else if (ev == MG_EV_WS_MSG) {
|
||||||
struct mg_ws_message *wm = (struct mg_ws_message *) ev_data;
|
struct mg_ws_message *wm = (struct mg_ws_message *) ev_data;
|
||||||
MG_INFO(("Got WS, %lu", wm->data.len));
|
MG_INFO(("Got WS, %lu", wm->data.len));
|
||||||
//mg_hexdump(wm->data.ptr, wm->data.len);
|
// mg_hexdump(wm->data.ptr, wm->data.len);
|
||||||
if (wm->data.len == 9) {
|
if (wm->data.len == 9) {
|
||||||
ASSERT(mg_strcmp(wm->data, mg_str("hi there!")) == 0);
|
ASSERT(mg_strcmp(wm->data, mg_str("hi there!")) == 0);
|
||||||
} else if (wm->data.len == 3) {
|
} else if (wm->data.len == 3) {
|
||||||
@@ -2625,6 +2625,21 @@ static void test_rpc(void) {
|
|||||||
ASSERT(head == NULL);
|
ASSERT(head == NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ph(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
|
||||||
|
if (ev == MG_EV_POLL) ++(*(int *) fn_data);
|
||||||
|
(void) c, (void) ev_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_poll(void) {
|
||||||
|
int count = 0, i;
|
||||||
|
struct mg_mgr mgr;
|
||||||
|
mg_mgr_init(&mgr);
|
||||||
|
mg_http_listen(&mgr, "http://127.0.0.1:12346", ph, &count);
|
||||||
|
for (i = 0; i < 10; i++) mg_mgr_poll(&mgr, 0);
|
||||||
|
ASSERT(count == 10);
|
||||||
|
mg_mgr_free(&mgr);
|
||||||
|
}
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
const char *debug_level = getenv("V");
|
const char *debug_level = getenv("V");
|
||||||
if (debug_level == NULL) debug_level = "3";
|
if (debug_level == NULL) debug_level = "3";
|
||||||
@@ -2666,6 +2681,7 @@ int main(void) {
|
|||||||
test_http_range();
|
test_http_range();
|
||||||
test_sntp();
|
test_sntp();
|
||||||
test_mqtt();
|
test_mqtt();
|
||||||
|
test_poll();
|
||||||
printf("SUCCESS. Total tests: %d\n", s_num_tests);
|
printf("SUCCESS. Total tests: %d\n", s_num_tests);
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|||||||
Reference in new issue
Block a user