Commit 94f63787 authored by Sergey Lyubka's avatar Sergey Lyubka

Restored void * parameter for iterate_over_connections()

parent 367f5df3
......@@ -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, &current_timer);
}
}
......
......@@ -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,
......
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment