Lines Matching refs:handler

88 static int nopoll_client_close(ws_handler_t *handler);
90 static void active_time_update(ws_handler_t *handler) in active_time_update() argument
92 handler->conn_active_time = os_current_time(); in active_time_update()
95 static int active_time_get(ws_handler_t *handler) in active_time_get() argument
97 return handler->conn_active_time / 1000; in active_time_get()
100 static void inline msg_count_add(ws_handler_t *handler) in msg_count_add() argument
102 os_mutex_lock(handler->lock, OS_WAIT_FOREVER); in msg_count_add()
103 handler->msg_count++; in msg_count_add()
104 os_mutex_unlock(handler->lock); in msg_count_add()
107 static void inline msg_count_dec(ws_handler_t *handler) in msg_count_dec() argument
109 os_mutex_lock(handler->lock, OS_WAIT_FOREVER); in msg_count_dec()
110 handler->msg_count--; in msg_count_dec()
111 os_mutex_unlock(handler->lock); in msg_count_dec()
114 static void nopoll_message_handle(ws_handler_t *handler, noPollMsg *msg) in nopoll_message_handle() argument
127 if (handler->prev_text_size > 0 && handler->prev_text) { in nopoll_message_handle()
129 handler->prev_text = snd_realloc(handler->prev_text, in nopoll_message_handle()
130 handler->prev_text_size + size, AFM_EXTN); in nopoll_message_handle()
131 if (!handler->prev_text) { in nopoll_message_handle()
133 handler->prev_text_size = 0; in nopoll_message_handle()
136 memcpy(handler->prev_text + handler->prev_text_size, in nopoll_message_handle()
138 handler->prev_text_size += size; in nopoll_message_handle()
140 handler->callback.recv_text_cb(handler->prev_text, in nopoll_message_handle()
141 handler->prev_text_size); in nopoll_message_handle()
142 snd_free(handler->prev_text); in nopoll_message_handle()
143 handler->prev_text = NULL; in nopoll_message_handle()
144 handler->prev_text_size = 0; in nopoll_message_handle()
149 handler->callback.recv_text_cb(handler->prev_text, in nopoll_message_handle()
150 handler->prev_text_size); in nopoll_message_handle()
151 snd_free(handler->prev_text); in nopoll_message_handle()
152 handler->prev_text = NULL; in nopoll_message_handle()
153 handler->prev_text_size = 0; in nopoll_message_handle()
156 if (handler->prev_text) { in nopoll_message_handle()
157 snd_free(handler->prev_text); in nopoll_message_handle()
158 handler->prev_text_size = 0; in nopoll_message_handle()
161 handler->prev_text = snd_zalloc(size, AFM_EXTN); in nopoll_message_handle()
162 if (!handler->prev_text) { in nopoll_message_handle()
166 handler->prev_text_size = size; in nopoll_message_handle()
167 memcpy(handler->prev_text, content, size); in nopoll_message_handle()
174 handler->prev_recv_type = NOPOLL_TEXT_FRAME; in nopoll_message_handle()
175 handler->callback.recv_text_cb(content, size); in nopoll_message_handle()
178 handler->prev_recv_type = NOPOLL_BINARY_FRAME; in nopoll_message_handle()
180 handler->callback.recv_binary_cb(content, in nopoll_message_handle()
183 handler->callback.recv_binary_cb(content, in nopoll_message_handle()
188 if (handler->prev_recv_type == NOPOLL_TEXT_FRAME) { in nopoll_message_handle()
189 handler->callback.recv_text_cb(content, size); in nopoll_message_handle()
192 handler->callback.recv_binary_cb(content, in nopoll_message_handle()
195 handler->callback.recv_binary_cb(content, in nopoll_message_handle()
200 handler->pong_recv = 1; in nopoll_message_handle()
207 static void __nopoll_conn_open(ws_handler_t *handler, in __nopoll_conn_open() argument
212 if (!handler) { in __nopoll_conn_open()
217 handler->conn_opts = nopoll_conn_opts_new(); in __nopoll_conn_open()
218 if (!handler->conn_opts) { in __nopoll_conn_open()
223 conn_info = &handler->conn_info; in __nopoll_conn_open()
227 handler->conn = nopoll_conn_new_opts(handler->ctx, in __nopoll_conn_open()
228 handler->conn_opts, in __nopoll_conn_open()
235 handler->conn = nopoll_conn_new(handler->ctx, in __nopoll_conn_open()
241 if (!nopoll_conn_opts_set_ssl_certs(handler->conn_opts, in __nopoll_conn_open()
251 nopoll_conn_opts_ssl_peer_verify(handler->conn_opts, in __nopoll_conn_open()
253 handler->conn = nopoll_conn_tls_new(handler->ctx, in __nopoll_conn_open()
254 handler->conn_opts, conn_info->server, in __nopoll_conn_open()
261 if (!handler->conn) { in __nopoll_conn_open()
263 handler->conn_opts = NULL; in __nopoll_conn_open()
268 handler->conn, 3)) { in __nopoll_conn_open()
273 handler->ws_conn_state = WS_CONN_STAT_CONNECTED; in __nopoll_conn_open()
274 handler->callback.connect_cb(); in __nopoll_conn_open()
278 nopoll_conn_unref(handler->conn); in __nopoll_conn_open()
279 nopoll_conn_opts_free(handler->conn_opts); in __nopoll_conn_open()
280 handler->conn = NULL; in __nopoll_conn_open()
281 handler->conn_opts = NULL; in __nopoll_conn_open()
282 handler->ws_conn_state = WS_CONN_STAT_DISCONNECTED; in __nopoll_conn_open()
285 static void __nopoll_conn_close(ws_handler_t *handler, void *data) in __nopoll_conn_close() argument
287 if (!handler) { in __nopoll_conn_close()
292 nopoll_conn_close(handler->conn); in __nopoll_conn_close()
293 handler->conn = NULL; in __nopoll_conn_close()
294 handler->conn_opts = NULL; in __nopoll_conn_close()
296 handler->ws_conn_state = WS_CONN_STAT_DISCONNECTED; in __nopoll_conn_close()
297 handler->callback.disconnect_cb(); in __nopoll_conn_close()
335 static void __nopoll_conn_send_text(ws_handler_t *handler, in __nopoll_conn_send_text() argument
340 ret = nopoll_conn_send_text(handler->conn, in __nopoll_conn_send_text()
343 if (__nopoll_conn_complete_pending_write(handler->conn)) in __nopoll_conn_send_text()
351 static void __nopoll_conn_send_binary(ws_handler_t *handler, in __nopoll_conn_send_binary() argument
358 ret = nopoll_conn_send_binary_fragment(handler->conn, in __nopoll_conn_send_binary()
362 ret = __nopoll_conn_send_continue_fragment(handler->conn, in __nopoll_conn_send_binary()
366 ret = __nopoll_conn_send_continue(handler->conn, in __nopoll_conn_send_binary()
375 if (__nopoll_conn_complete_pending_write(handler->conn)) in __nopoll_conn_send_binary()
383 static int __nopoll_conn_try_get_msg(ws_handler_t *handler) in __nopoll_conn_try_get_msg() argument
387 if (handler->recv_disable) in __nopoll_conn_try_get_msg()
390 if (!nopoll_conn_is_ok(handler->conn)) { in __nopoll_conn_try_get_msg()
391 if (handler->ws_conn_state == WS_CONN_STAT_CONNECTED) { in __nopoll_conn_try_get_msg()
393 __nopoll_conn_close(handler, NULL); in __nopoll_conn_try_get_msg()
398 msg = nopoll_conn_get_msg(handler->conn); in __nopoll_conn_try_get_msg()
402 active_time_update(handler); in __nopoll_conn_try_get_msg()
404 nopoll_message_handle(handler, msg); in __nopoll_conn_try_get_msg()
410 static int __nopoll_conn_ping_test(ws_handler_t *handler) in __nopoll_conn_ping_test() argument
415 if (!nopoll_conn_is_ok(handler->conn)) { in __nopoll_conn_ping_test()
416 if (handler->ws_conn_state == WS_CONN_STAT_CONNECTED) { in __nopoll_conn_ping_test()
418 __nopoll_conn_close(handler, NULL); in __nopoll_conn_ping_test()
426 time_active = active_time_get(handler); in __nopoll_conn_ping_test()
431 nopoll_conn_send_ping(handler->conn); in __nopoll_conn_ping_test()
432 active_time_update(handler); in __nopoll_conn_ping_test()
436 static void __nopoll_conn_pong_check(ws_handler_t *handler) in __nopoll_conn_pong_check() argument
438 if (handler->pong_recv) in __nopoll_conn_pong_check()
441 __nopoll_conn_close(handler, NULL); in __nopoll_conn_pong_check()
446 ws_handler_t *handler = (ws_handler_t *)arg; in nopoll_client_task() local
464 ret = os_queue_recv(&handler->queue, 30, &msg, &msg_size); in nopoll_client_task()
467 if (handler->ws_conn_state == WS_CONN_STAT_CONNECTED) { in nopoll_client_task()
469 __nopoll_conn_close(handler, NULL); in nopoll_client_task()
473 if (__nopoll_conn_try_get_msg(handler)) { in nopoll_client_task()
481 if (handler->heartbeat_type != 0) { in nopoll_client_task()
484 if (!__nopoll_conn_ping_test(handler)) { in nopoll_client_task()
485 if (handler->heartbeat_type == 2) in nopoll_client_task()
488 handler->pong_recv = 0; in nopoll_client_task()
494 if (!handler->recv_disable) { in nopoll_client_task()
496 __nopoll_conn_pong_check(handler); in nopoll_client_task()
513 msg_count_dec(handler); in nopoll_client_task()
520 __nopoll_conn_open(handler, msg.data); in nopoll_client_task()
523 active_time_update(handler); in nopoll_client_task()
524 __nopoll_conn_send_text(handler, msg.data); in nopoll_client_task()
527 active_time_update(handler); in nopoll_client_task()
528 __nopoll_conn_send_binary(handler, msg.data); in nopoll_client_task()
531 __nopoll_conn_close(handler, msg.data); in nopoll_client_task()
538 os_sem_signal(handler->exit_sem); in nopoll_client_task()
541 static int nopoll_client_open(ws_handler_t *handler, in nopoll_client_open() argument
548 if (!handler) { in nopoll_client_open()
553 if (!handler->ctx) { in nopoll_client_open()
558 if (handler->conn) { in nopoll_client_open()
560 nopoll_client_close(handler); in nopoll_client_open()
563 conn_info = &handler->conn_info; in nopoll_client_open()
607 memcpy(&handler->callback, &info->callback, in nopoll_client_open()
613 ret = os_queue_send(&handler->queue, &msg, in nopoll_client_open()
617 ret, handler->msg_count); in nopoll_client_open()
621 msg_count_add(handler); in nopoll_client_open()
625 static int nopoll_client_close(ws_handler_t *handler) in nopoll_client_close() argument
631 if (!handler) { in nopoll_client_close()
636 info = &handler->conn_info; in nopoll_client_close()
647 if (!handler->conn) { in nopoll_client_close()
655 ret = os_queue_send(&handler->queue, &msg, in nopoll_client_close()
659 ret, handler->msg_count); in nopoll_client_close()
663 msg_count_add(handler); in nopoll_client_close()
667 static int nopoll_client_send_text(ws_handler_t *handler, in nopoll_client_send_text() argument
674 if (!handler) { in nopoll_client_send_text()
703 ret = os_queue_send(&handler->queue, &msg, in nopoll_client_send_text()
707 ret, handler->msg_count); in nopoll_client_send_text()
713 msg_count_add(handler); in nopoll_client_send_text()
717 static int nopoll_client_send_binary(ws_handler_t *handler, in nopoll_client_send_binary() argument
724 if (!handler) { in nopoll_client_send_binary()
757 ret = os_queue_send(&handler->queue, &msg, in nopoll_client_send_binary()
761 ret, handler->msg_count); in nopoll_client_send_binary()
767 msg_count_add(handler); in nopoll_client_send_binary()
771 static int nopoll_client_create(ws_handler_t *handler) in nopoll_client_create() argument
773 if (!handler) in nopoll_client_create()
776 if (handler->ctx) { in nopoll_client_create()
781 handler->ctx = nopoll_ctx_new(); in nopoll_client_create()
782 if (!handler->ctx) { in nopoll_client_create()
787 if (os_task_create(&handler->task, in nopoll_client_create()
790 handler, in nopoll_client_create()
803 static int nopoll_client_release(ws_handler_t *handler) in nopoll_client_release() argument
808 if (!handler) { in nopoll_client_release()
813 nopoll_ctx_unref(handler->ctx); in nopoll_client_release()
814 handler->ctx = NULL; in nopoll_client_release()
819 ret = os_queue_send(&handler->queue, &msg, in nopoll_client_release()
823 ret, handler->msg_count); in nopoll_client_release()
827 msg_count_add(handler); in nopoll_client_release()
829 if (os_sem_wait(handler->exit_sem, 5000)) { in nopoll_client_release()
840 ws_handler_t *handler = g_ws_handler; in uvoice_ws_connect() local
842 if (!handler) { in uvoice_ws_connect()
857 if (handler->ws_conn_state != WS_CONN_STAT_DISCONNECTED) { in uvoice_ws_connect()
862 handler->ws_conn_state = WS_CONN_STAT_CONNECTING; in uvoice_ws_connect()
870 if (nopoll_client_create(handler)) { in uvoice_ws_connect()
872 handler->ws_conn_state = WS_CONN_STAT_DISCONNECTED; in uvoice_ws_connect()
876 if (nopoll_client_open(handler, info)) { in uvoice_ws_connect()
878 nopoll_client_release(handler); in uvoice_ws_connect()
879 handler->ws_conn_state = WS_CONN_STAT_DISCONNECTED; in uvoice_ws_connect()
889 ws_handler_t *handler = g_ws_handler; in uvoice_ws_disconnect() local
891 if (!handler) { in uvoice_ws_disconnect()
896 if (handler->ws_conn_state != WS_CONN_STAT_CONNECTED) { in uvoice_ws_disconnect()
903 nopoll_client_close(handler); in uvoice_ws_disconnect()
905 nopoll_client_release(handler); in uvoice_ws_disconnect()
912 ws_handler_t *handler = g_ws_handler; in uvoice_ws_conn_state() local
914 if (!handler) { in uvoice_ws_conn_state()
924 *state = handler->ws_conn_state; in uvoice_ws_conn_state()
930 ws_handler_t *handler = g_ws_handler; in uvoice_ws_send_text() local
932 if (!handler) { in uvoice_ws_send_text()
937 if (handler->ws_conn_state != WS_CONN_STAT_CONNECTED) { in uvoice_ws_send_text()
942 return nopoll_client_send_text(handler, text, len); in uvoice_ws_send_text()
947 ws_handler_t *handler = g_ws_handler; in uvoice_ws_send_binary() local
949 if (!handler) { in uvoice_ws_send_binary()
954 if (handler->ws_conn_state != WS_CONN_STAT_CONNECTED) { in uvoice_ws_send_binary()
959 return nopoll_client_send_binary(handler, data, len, type); in uvoice_ws_send_binary()
964 ws_handler_t *handler = g_ws_handler; in uvoice_ws_recv_disable() local
966 if (!handler) { in uvoice_ws_recv_disable()
972 handler->recv_disable = 1; in uvoice_ws_recv_disable()
974 handler->recv_disable = 0; in uvoice_ws_recv_disable()
976 M_LOGD("set recv_disable %d\n", handler->recv_disable); in uvoice_ws_recv_disable()
988 ws_handler_t *handler = g_ws_handler; in uvoice_ws_heartbeat_set() local
990 if (!handler) { in uvoice_ws_heartbeat_set()
1000 if (handler->heartbeat_type != type) { in uvoice_ws_heartbeat_set()
1001 handler->heartbeat_type = type; in uvoice_ws_heartbeat_set()
1003 handler->heartbeat_type); in uvoice_ws_heartbeat_set()
1010 ws_handler_t *handler = g_ws_handler; in uvoice_ws_init() local
1013 if (handler) in uvoice_ws_init()
1016 handler = snd_zalloc(sizeof(ws_handler_t), AFM_EXTN); in uvoice_ws_init()
1017 if (!handler) { in uvoice_ws_init()
1022 handler->msg_buffer = snd_zalloc(sizeof(nopoll_msg_t) * 8, in uvoice_ws_init()
1024 if (!handler->msg_buffer) { in uvoice_ws_init()
1026 snd_free(handler); in uvoice_ws_init()
1030 ret = os_queue_new(&handler->queue, handler->msg_buffer, in uvoice_ws_init()
1035 snd_free(handler->msg_buffer); in uvoice_ws_init()
1036 snd_free(handler); in uvoice_ws_init()
1040 handler->exit_sem = os_sem_new(0); in uvoice_ws_init()
1041 handler->lock = os_mutex_new(); in uvoice_ws_init()
1043 handler->ws_conn_state = WS_CONN_STAT_DISCONNECTED; in uvoice_ws_init()
1045 g_ws_handler = handler; in uvoice_ws_init()
1053 ws_handler_t *handler = g_ws_handler; in uvoice_ws_deinit() local
1055 if (!handler) { in uvoice_ws_deinit()
1060 if (handler->ws_conn_state != WS_CONN_STAT_DISCONNECTED) in uvoice_ws_deinit()
1063 os_mutex_free(handler->lock); in uvoice_ws_deinit()
1064 os_sem_free(handler->exit_sem); in uvoice_ws_deinit()
1065 os_queue_free(&handler->queue); in uvoice_ws_deinit()
1066 snd_free(handler->msg_buffer); in uvoice_ws_deinit()
1067 snd_free(handler); in uvoice_ws_deinit()