Ejemplo n.º 1
0
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();
}
Ejemplo n.º 2
0
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();
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
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;
}