Exemplo n.º 1
0
/* Dispatch UPnP incoming messages. */
int
upnp_dispatch(UPNP_CONTEXT *context)
{
	UPNP_INTERFACE	*ifp;
	struct timeval tv = {1, 0};    /* timed out every second */
	int n;
	fd_set  fds;

	FD_ZERO(&fds);

	/* Set select sockets */
	FD_SET(context->ssdp_sock, &fds);

	for (ifp = context->iflist; ifp; ifp = ifp->next) {
		FD_SET(ifp->http_sock, &fds);
		FD_SET(ifp->req_sock, &fds);
	}

	/* select sockets */
	n = select(FD_SETSIZE, &fds, (fd_set *)NULL, (fd_set *)NULL, &tv);
	if (n > 0) {
		/* process ssdp multicast packet */
		if (FD_ISSET(context->ssdp_sock, &fds)) {
			ssdp_process(context, context->ssdp_sock);
		}

		/* 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_accept(context);
			}

			/* process message */
			if (FD_ISSET(ifp->req_sock, &fds)) {
				upnp_request_handler(context);
			}
		}
	}

	upnp_timeout(context);

	return 0;
}
Exemplo n.º 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;
}