Exemple #1
0
	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;
	}
Exemple #2
0
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);
	}