nopoll_bool on_connection_opened (noPollCtx * ctx, noPollConn * conn, noPollPtr user_data)
{
	/* set connection close */
	nopoll_conn_set_on_close (conn, __nopoll_regression_on_close, NULL);

	if (! nopoll_conn_set_sock_block (nopoll_conn_socket (conn), nopoll_false)) {
		printf ("ERROR: failed to configure non-blocking state to connection..\n");
		return nopoll_false;
	} /* end if */

	/* check to reject */
	if (nopoll_cmp (nopoll_conn_get_origin (conn), "http://deny.aspl.es"))  {
		printf ("INFO: rejected connection from %s, with Host: %s and Origin: %s\n",
			nopoll_conn_host (conn), nopoll_conn_get_host_header (conn), nopoll_conn_get_origin (conn));
		return nopoll_false;
	} /* end if */

	/* get protocol to reply an especific case. This is an example
	   on how to detect protocols requested by the client and how
	   to reply with a particular value at the server. */
	printf ("Requested protocol: %s\n", nopoll_conn_get_requested_protocol (conn));
	if (nopoll_cmp (nopoll_conn_get_requested_protocol (conn), "hello-protocol")) {
		/* set hello-protocol-response */
		nopoll_conn_set_accepted_protocol (conn, "hello-protocol-response");
	} /* end if */

	/* notify connection accepted */
	/* printf ("INFO: connection received from %s, with Host: %s and Origin: %s\n",
	   nopoll_conn_host (conn), nopoll_conn_get_host_header (conn), nopoll_conn_get_origin (conn)); */
	return nopoll_true;
}
Beispiel #2
0
void __myqtt_web_socket_common_association (MyQttConn * conn, noPollConn * nopoll_conn)
{
	MyQttMutex * mutex;

	/* associate connection */
	myqtt_conn_set_data_full (conn, "__my:ws:conn", nopoll_conn, 
				  NULL, (axlDestroyFunc) __myqtt_web_socket_close_conn);

	/* configure default handlers */
	conn->receive = __myqtt_web_socket_receive;
	conn->send    = __myqtt_web_socket_send;

	/* setup I/O handlers */
	mutex = axl_new (MyQttMutex, 1);
	myqtt_mutex_create (mutex);
	myqtt_conn_set_data_full (conn, "ws:mutex", mutex,
				  NULL, (axlDestroyFunc) __myqtt_web_socket_free_mutex);

	/* setup on close handler to control sockets */
	nopoll_conn_set_on_close (nopoll_conn, __myqtt_web_socket_nopoll_on_close, conn);

	return;
}