void t03_websocket_server_receive_small_packet() { INIT_LOCAL(); int length = 0; char *buffer = NULL, buffer2[115]; memset(&ws_status, 0, sizeof(ws_status)); onion *o = websocket_server_new(); onion_request *req = websocket_start_handshake(o); req->connection.listen_point->read = (lpreader_sig_t *) websocket_data_buffer_read; onion_response *res = onion_response_new(req); onion_websocket *ws = onion_websocket_new(req, res); length = websocket_forge_small_packet((char **)&buffer); websocket_data_buffer_write(req, buffer, length); onion_websocket_read(ws, (char *)&buffer2, 120); buffer2[114] = '\0'; FAIL_IF_NOT_EQUAL_STR(buffer2, "Some UTF-8-encoded chars which will be cut at the 117th char so I write some gap-filling text with no meaning unti"); onion_websocket_free(ws); onion_request_free(req); onion_free(o); END_LOCAL(); }
void t04_websocket_server_close_handshake() { INIT_LOCAL(); int length = 0; unsigned char *buffer = NULL, buffer2[8]; onion *o = websocket_server_new(); onion_request *req = websocket_start_handshake(o); req->connection.listen_point->read = (lpreader_sig_t *) websocket_data_buffer_read; req->connection.listen_point->write = (lpwriter_sig_t *) websocket_data_buffer_write; onion_response *res = onion_response_new(req); onion_websocket *ws = onion_websocket_new(req, res); length = websocket_forge_close_packet((char **)&buffer); websocket_data_buffer_write(req, (char *)buffer, length); onion_connection_status ret = onion_websocket_call(ws); FAIL_IF(ret != -2); websocket_data_buffer_read(req, (char *)&buffer2, 8); FAIL_IF_NOT(buffer2[0] == 0x88); FAIL_IF_NOT(buffer2[1] == 0x02); FAIL_IF_NOT(buffer2[2] == 0x03); FAIL_IF_NOT(buffer2[3] == 0xE8); onion_websocket_free(ws); onion_request_free(req); onion_free(o); END_LOCAL(); }
onion_connection_status ws_handler(void *priv, onion_request * req, onion_response * res) { onion_websocket *ws = onion_websocket_new(req, res); ws_status.connected++; ws_status.is_connected = (ws != NULL); if (ws_status.is_connected) { onion_websocket_set_callback(ws, ws_callback); return OCS_WEBSOCKET; } return OCS_NOT_IMPLEMENTED; }
onion_connection_status websocket_example(void *data, onion_request *req, onion_response *res){ onion_websocket *ws=onion_websocket_new(req, res); if (!ws){ onion_response_write0(res, "<html><body><h1>Easy echo</h1><pre id=\"chat\"></pre>" " <script>\ninit = function(){\nmsg=document.getElementById('msg');\nmsg.focus();\n\nws=new WebSocket('ws://'+window.location.host);\nws.onmessage=function(ev){\n document.getElementById('chat').textContent+=ev.data+'\\n';\n};}\n" "window.addEventListener('load', init, false);\n</script>" "<input type=\"text\" id=\"msg\" onchange=\"javascript:ws.send(msg.value); msg.select(); msg.focus();\"/>\n" "</body></html>"); return OCS_PROCESSED; } onion_websocket_printf(ws,"Hello from server. Write something to echo it"); onion_websocket_set_callback(ws, websocket_example_cont); return OCS_WEBSOCKET; }