From 94f63787bb2be723151306d24e3b8d78cd353e04 Mon Sep 17 00:00:00 2001 From: Sergey Lyubka <valenok@gmail.com> Date: Mon, 24 Mar 2014 16:01:45 +0000 Subject: [PATCH] Restored void * parameter for iterate_over_connections() --- examples/websocket.c | 6 +++--- mongoose.c | 13 +++++++------ mongoose.h | 5 +++-- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/examples/websocket.c b/examples/websocket.c index 1cfb83dc4..8810e4387 100644 --- a/examples/websocket.c +++ b/examples/websocket.c @@ -9,10 +9,10 @@ extern const char *find_embedded_file(const char *, size_t *); static int iterate_callback(struct mg_connection *c, enum mg_event ev) { - static int counter = 0; if (ev == MG_POLL && c->is_websocket) { char buf[20]; - int len = snprintf(buf, sizeof(buf), "%d", counter++); + int len = snprintf(buf, sizeof(buf), "%lu", + (unsigned long) * (time_t *) c->callback_param); mg_websocket_write(c, 1, buf, len); } return MG_TRUE; @@ -58,7 +58,7 @@ int main(void) { current_timer = time(NULL); if (current_timer - last_timer > 0) { last_timer = current_timer; - mg_iterate_over_connections(server, iterate_callback); + mg_iterate_over_connections(server, iterate_callback, ¤t_timer); } } diff --git a/mongoose.c b/mongoose.c index f51d2ed22..e704b1e77 100644 --- a/mongoose.c +++ b/mongoose.c @@ -4254,20 +4254,21 @@ struct mg_iterator { mg_handler_t cb; void *param; }; -union variant { mg_handler_t cb; void *p; }; static void iter(struct ns_connection *nsconn, enum ns_event ev, void *param) { if (ev == NS_POLL) { - union variant *variant = (union variant *) param; + struct mg_iterator *it = (struct mg_iterator *) param; struct connection *c = (struct connection *) nsconn->connection_data; - variant->cb(&c->mg_conn, MG_POLL); + c->mg_conn.callback_param = it->param; + it->cb(&c->mg_conn, MG_POLL); } } // Apply function to all active connections. -void mg_iterate_over_connections(struct mg_server *server, mg_handler_t cb) { - union variant variant = { cb }; - ns_iterate(&server->ns_server, iter, &variant); +void mg_iterate_over_connections(struct mg_server *server, mg_handler_t cb, + void *param) { + struct mg_iterator it = { cb, param }; + ns_iterate(&server->ns_server, iter, &it); } static int get_var(const char *data, size_t data_len, const char *name, diff --git a/mongoose.h b/mongoose.h index ffee8ef62..954f44a94 100644 --- a/mongoose.h +++ b/mongoose.h @@ -48,13 +48,14 @@ struct mg_connection { } http_headers[30]; char *content; // POST (or websocket message) data, or NULL - size_t content_len; // content length + size_t content_len; // Data length int is_websocket; // Connection is a websocket connection int status_code; // HTTP status code for HTTP error handler int wsbits; // First byte of the websocket frame void *server_param; // Parameter passed to mg_add_uri_handler() void *connection_param; // Placeholder for connection-specific data + void *callback_param; // Needed by mg_iterate_over_connections() }; struct mg_server; // Opaque structure describing server instance @@ -80,7 +81,7 @@ const char **mg_get_valid_option_names(void); const char *mg_get_option(const struct mg_server *server, const char *name); void mg_set_listening_socket(struct mg_server *, int sock); int mg_get_listening_socket(struct mg_server *); -void mg_iterate_over_connections(struct mg_server *, mg_handler_t); +void mg_iterate_over_connections(struct mg_server *, mg_handler_t, void *); void mg_wakeup_server(struct mg_server *); struct mg_connection *mg_connect(struct mg_server *, const char *, int, int); -- GitLab