diff --git a/libs/esl/ivrd.c b/libs/esl/ivrd.c index 9e4326d58a..865016506b 100644 --- a/libs/esl/ivrd.c +++ b/libs/esl/ivrd.c @@ -45,7 +45,7 @@ static void handle_SIGCHLD(int sig) return; } -static void my_forking_callback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr) +static void my_forking_callback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr, void *user_data) { esl_handle_t handle = {{0}}; char path_buffer[1024] = { 0 }; @@ -91,7 +91,7 @@ static void my_forking_callback(esl_socket_t server_sock, esl_socket_t client_so exit(0); } -static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr) +static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr, void *user_data) { esl_handle_t handle = {{0}}; const char *path; @@ -162,11 +162,11 @@ int main(int argc, char *argv[]) if (thread) { printf("Starting threaded listener.\n"); fflush(stdout); - esl_listen_threaded(ip, port, mycallback, 100000); + esl_listen_threaded(ip, port, mycallback, NULL, 100000); } else { printf("Starting forking listener.\n"); fflush(stdout); - esl_listen(ip, port, my_forking_callback, NULL); + esl_listen(ip, port, my_forking_callback, NULL, NULL); } return 0; diff --git a/libs/esl/src/esl.c b/libs/esl/src/esl.c index f264f24d73..587db6c75e 100644 --- a/libs/esl/src/esl.c +++ b/libs/esl/src/esl.c @@ -645,13 +645,14 @@ struct thread_handler { esl_socket_t server_sock; esl_socket_t client_sock; struct sockaddr_in addr; + void *user_data; }; static void *client_thread(esl_thread_t *me, void *obj) { struct thread_handler *handler = (struct thread_handler *) obj; - handler->callback(handler->server_sock, handler->client_sock, &handler->addr); + handler->callback(handler->server_sock, handler->client_sock, &handler->addr, handler->user_data); free(handler); return NULL; @@ -679,7 +680,7 @@ static int prepare_sock(esl_socket_t sock) } -ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback, esl_socket_t *server_sockP) +ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback, void *user_data, esl_socket_t *server_sockP) { esl_socket_t server_sock = ESL_SOCK_INVALID; struct sockaddr_in addr; @@ -728,7 +729,7 @@ ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_list goto end; } prepare_sock(client_sock); - callback(server_sock, client_sock, &echoClntAddr); + callback(server_sock, client_sock, &echoClntAddr, user_data); } end: @@ -742,7 +743,7 @@ ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_list } -ESL_DECLARE(esl_status_t) esl_listen_threaded(const char *host, esl_port_t port, esl_listen_callback_t callback, int max) +ESL_DECLARE(esl_status_t) esl_listen_threaded(const char *host, esl_port_t port, esl_listen_callback_t callback, void *user_data, int max) { esl_socket_t server_sock = ESL_SOCK_INVALID; struct sockaddr_in addr; @@ -796,6 +797,7 @@ ESL_DECLARE(esl_status_t) esl_listen_threaded(const char *host, esl_port_t port, handler->server_sock = server_sock; handler->client_sock = client_sock; handler->addr = echoClntAddr; + handler->user_data = user_data; esl_thread_create_detached(client_thread, handler); } diff --git a/libs/esl/src/include/esl.h b/libs/esl/src/include/esl.h index 144918eacd..1abdd241f6 100644 --- a/libs/esl/src/include/esl.h +++ b/libs/esl/src/include/esl.h @@ -379,7 +379,7 @@ ESL_DECLARE(int) esl_tolower(int c); ESL_DECLARE(int) esl_snprintf(char *buffer, size_t count, const char *fmt, ...); -typedef void (*esl_listen_callback_t)(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr); +typedef void (*esl_listen_callback_t)(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr, void *user_data); /*! \brief Attach a handle to an established socket connection \param handle Handle to be attached @@ -394,8 +394,8 @@ ESL_DECLARE(esl_status_t) esl_attach_handle(esl_handle_t *handle, esl_socket_t s \param callback Callback that will be called upon data received */ -ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback, esl_socket_t *server_sockP); -ESL_DECLARE(esl_status_t) esl_listen_threaded(const char *host, esl_port_t port, esl_listen_callback_t callback, int max); +ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback, void *user_data, esl_socket_t *server_sockP); +ESL_DECLARE(esl_status_t) esl_listen_threaded(const char *host, esl_port_t port, esl_listen_callback_t callback, void *user_data, int max); /*! \brief Executes application with sendmsg to a specific UUID. Used for outbound socket. \param handle Handle that the msg will be sent diff --git a/libs/esl/testserver.c b/libs/esl/testserver.c index 13df29c332..3bf23139e6 100644 --- a/libs/esl/testserver.c +++ b/libs/esl/testserver.c @@ -2,7 +2,7 @@ #include #include -static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr) +static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr, void *user_data) { esl_handle_t handle = {{0}}; int done = 0; @@ -48,7 +48,7 @@ static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struc int main(void) { esl_global_set_default_logger(7); - esl_listen_threaded("localhost", 8040, mycallback, 100000); + esl_listen_threaded("localhost", 8040, mycallback, NULL, 100000); return 0; } diff --git a/libs/esl/testserver_fork.c b/libs/esl/testserver_fork.c index 54c0238a3c..eb377cc668 100644 --- a/libs/esl/testserver_fork.c +++ b/libs/esl/testserver_fork.c @@ -2,7 +2,7 @@ #include #include -static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr) +static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr, void *user_data) { esl_handle_t handle = {{0}}; int done = 0; @@ -66,7 +66,7 @@ int main(void) signal(SIGCHLD, SIG_IGN); esl_global_set_default_logger(7); - esl_listen("localhost", 8040, mycallback, &server_sock); + esl_listen("localhost", 8040, mycallback, NULL, &server_sock); return 0; }