From 316cc74716b94adcd3cb3f72b8bd909e617c644b Mon Sep 17 00:00:00 2001 From: bossjisu Date: Fri, 7 Jul 2017 03:51:53 -0700 Subject: [PATCH] netutils/websocket: add websocket state add state to let application know websocket_handler is stopped for error. Change-Id: I6d21fe8f68e6947fbf2000253ad767ccb04a330c Signed-off-by: bossjisu --- apps/examples/websocket/websocket_main.c | 6 +++--- apps/include/netutils/websocket.h | 5 +++-- apps/netutils/websocket/websocket.c | 12 ++++++++---- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/apps/examples/websocket/websocket_main.c b/apps/examples/websocket/websocket_main.c index b9e074e..86a0db3 100644 --- a/apps/examples/websocket/websocket_main.c +++ b/apps/examples/websocket/websocket_main.c @@ -555,11 +555,11 @@ int websocket_client(void *arg) /* wait for server echoes back */ while (received_cnt != i) { - if (websocket_cli->state == WEBSOCKET_STOP) { - printf("websocket client terminated during the test\n"); + if (websocket_cli->state == WEBSOCKET_ERROR) { + printf("websocket client handler is stopped during the test\n"); goto WEB_CLI_EXIT; } - usleep(100000); + usleep(100000); // 100 msec } } diff --git a/apps/include/netutils/websocket.h b/apps/include/netutils/websocket.h index da6b544..b92cb3c 100644 --- a/apps/include/netutils/websocket.h +++ b/apps/include/netutils/websocket.h @@ -309,8 +309,9 @@ typedef enum { */ enum websocket_state { WEBSOCKET_STOP, ///< stopped - WEBSOCKET_RUN_CLIENT, ///< client is running - WEBSOCKET_RUN_SERVER, ///< server is running + WEBSOCKET_ERROR, ///< websocket handler is stopped for an error. + WEBSOCKET_RUN_CLIENT, ///< client is running + WEBSOCKET_RUN_SERVER, ///< server is running WEBSOCKET_MAX_STATE ///< websocket number of max state. }; diff --git a/apps/netutils/websocket/websocket.c b/apps/netutils/websocket/websocket.c index 1673b50..c174763 100644 --- a/apps/netutils/websocket/websocket.c +++ b/apps/netutils/websocket/websocket.c @@ -224,15 +224,19 @@ int websocket_handler(websocket_t *websocket) timeout = 0; if (FD_ISSET(fd, &read_fds)) { - if (wslay_event_recv(ctx) != WEBSOCKET_SUCCESS) { - WEBSOCKET_DEBUG("fail to process recv event\n"); + r = wslay_event_recv(ctx); + if (r != WEBSOCKET_SUCCESS) { + WEBSOCKET_DEBUG("fail to process recv event, result : %d\n", r); + websocket_update_state(websocket, WEBSOCKET_ERROR); return WEBSOCKET_SOCKET_ERROR; } } if (FD_ISSET(fd, &write_fds)) { - if (wslay_event_send(ctx) != WEBSOCKET_SUCCESS) { - WEBSOCKET_DEBUG("fail to process send event\n"); + r = wslay_event_send(ctx); + if (r != WEBSOCKET_SUCCESS) { + WEBSOCKET_DEBUG("fail to process send event, result : %d\n", r); + websocket_update_state(websocket, WEBSOCKET_ERROR); return WEBSOCKET_SOCKET_ERROR; } } -- 2.7.4