예제 #1
0
/*
 * Accept a connection and to handle the new http connection.
 */
static void
upnp_http_accept(UPNP_CONTEXT *context)
{
	struct sockaddr_in addr;
	socklen_t addr_len;
	int ns;

	/* accept new upnp_http socket */
	addr_len = sizeof(struct sockaddr_in);
	ns = accept(context->focus_ifp->http_sock, (struct sockaddr *)&addr, &addr_len);
	if (ns == -1)
		return;

	upnp_http_process(context, ns);
	return;
}
예제 #2
0
/* Dispatch UPnP incoming messages. */
void
upnp_dispatch(UPNP_CONTEXT *context, fd_set *fds)
{
	UPNP_INTERFACE	*ifp;

	/* process ssdp multicast packet */
	if (context->ssdp_sock != -1 && FD_ISSET(context->ssdp_sock, fds)) {
		ssdp_process(context);
	}

	/* process upnp_http */
	for (ifp = context->iflist; ifp; ifp = ifp->next) {
		context->focus_ifp = ifp;

		/* process http */
		if (FD_ISSET(ifp->http_sock, fds)) {
			upnp_http_process(context);
		}
	}

	return;
}