/* * 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; }
/* 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; }