F(bool is_server, uint32_t buffer_length) { websocket_init_random(); br_close_called = false; got_error = false; text_message_received_called = false; binary_message_received_called = false; ping_received_called = false; close_received_called = false; pong_received_called = false; status_code_received = (enum ws_status_code)0; write_buffer_ptr = write_buffer; read_buffer = (uint8_t *)::malloc(buffer_length); read_buffer_ptr = read_buffer; readback_buffer_length = 0; struct http_connection *connection = alloc_http_connection(); connection->br.writev = writev; connection->br.read_exactly = read_exactly; connection->br.close = close; websocket_init(&ws, connection, is_server, ws_on_error, "jet"); ws.upgrade_complete = true; ws.text_message_received = text_message_received; ws.binary_message_received = binary_message_received; ws.ping_received = ping_received; ws.pong_received = pong_received; ws.close_received = close_received; }
static int init_ab_ws_peer(struct ab_ws_peer *ws_peer, struct http_connection *connection) { static const char *sub_protocol = NULL; init_ab_ab_ws_peer(ws_peer); struct buffered_reader *br = &connection->br; br->set_error_handler(br->this_ptr, free_ab_ws_peer_on_error, ws_peer); int ret = websocket_init(&ws_peer->websocket, connection, true, free_ab_ws_peer_callback, sub_protocol); if (ret < 0) { return -1; } ws_peer->websocket.text_message_received = text_message_callback; ws_peer->websocket.text_frame_received = text_frame_callback; ws_peer->websocket.binary_message_received = binary_message_callback; ws_peer->websocket.binary_frame_received = binary_frame_callback; ws_peer->websocket.close_received = close_callback; ws_peer->websocket.pong_received = pong_received; br->read_until(br->this_ptr, "\r\n", websocket_read_header_line, &ws_peer->websocket); return 0; }
int default_websocket_run(void *arg, int socket, char *filepath, http_message_t *request) { pid_t pid; int wssock = _websocket_socket(filepath); if (wssock > 0) { _websocket_main_t info = {.socket = socket, .client = wssock}; http_client_t *ctl = httpmessage_client(request); info.ctx = httpclient_context(ctl); info.recvreq = httpclient_addreceiver(ctl, NULL, NULL); info.sendresp = httpclient_addsender(ctl, NULL, NULL); websocket_init(&_wsdefaul_config); if ((pid = fork()) == 0) { _websocket_main(&info); err("websocket: process died"); exit(0); } close(wssock); }