Exemplo n.º 1
0
bool mupnp_http_server_start(mUpnpHttpServer *httpServer)
{
	mupnp_log_debug_l4("Entering...\n");

	if (httpServer->acceptThread != NULL)
		return false;

	httpServer->acceptThread = mupnp_thread_new();
	mupnp_thread_setaction(httpServer->acceptThread, mupnp_http_server_thread);
	mupnp_thread_setuserdata(httpServer->acceptThread, httpServer);

	/**** Thanks for Makela Aapo (10/31/05) ****/
	httpServer->clientThreads = mupnp_threadlist_new();

	if (mupnp_thread_start(httpServer->acceptThread) == false) {
		mupnp_thread_delete(httpServer->acceptThread);
		httpServer->acceptThread = NULL;

		/**** Thanks for Makela Aapo (10/31/05) ****/
		mupnp_threadlist_delete(httpServer->clientThreads);
		httpServer->clientThreads = NULL;

		return false;
	}

	mupnp_log_debug_l4("Leaving...\n");

	return true;
}
Exemplo n.º 2
0
void mupnp_service_createnotifyallthread(mUpnpService* service, mUpnpTime waitTime)
{
  mUpnpThread* thread;

  thread = mupnp_thread_new();
  mupnp_thread_setaction(thread, mupnp_service_notifyall_thread);
  mupnp_thread_setuserdata(thread, service);

  mupnp_wait(waitTime);
  mupnp_thread_start(thread);
}
Exemplo n.º 3
0
bool mupnp_ssdpresponse_server_start(mUpnpSSDPResponseServer* server)
{
  mupnp_log_debug_l4("Entering...\n");

  if (server->recvThread != NULL)
    return false;

  server->recvThread = mupnp_thread_new();
  mupnp_thread_setaction(server->recvThread, mupnp_ssdpresponse_server_thread);
  mupnp_thread_setuserdata(server->recvThread, server);
  if (mupnp_thread_start(server->recvThread) == false) {
    mupnp_thread_delete(server->recvThread);
    server->recvThread = NULL;
    return false;
  }

  return true;

  mupnp_log_debug_l4("Leaving...\n");
}
Exemplo n.º 4
0
static void mupnp_http_server_thread(mUpnpThread *thread)
{
	mUpnpHttpServer *httpServer;
	mUpnpThread *httpClientThread;
	mUpnpHttpServerClientData *clientData;
	mUpnpSocket *serverSock;
	mUpnpSocket *clientSock;

	mupnp_log_debug_l4("Entering...\n");

	httpServer = (mUpnpHttpServer *)mupnp_thread_getuserdata(thread);

	if (mupnp_http_server_isopened(httpServer) == false)
		return;

	serverSock = httpServer->sock;
	while (mupnp_thread_isrunnable(thread) == true) {
		clientSock = mupnp_socket_stream_new();
		if (mupnp_socket_accept(serverSock, clientSock) == false) {
			mupnp_socket_delete(clientSock);
			break;
		}

		mupnp_socket_settimeout(clientSock, mupnp_http_server_gettimeout(httpServer));
		clientData = mupnp_http_server_clientdata_new(httpServer, clientSock);
		httpClientThread = mupnp_thread_new();
		mupnp_thread_setaction(httpClientThread, mupnp_http_server_clientthread);
		mupnp_thread_setuserdata(httpClientThread, clientData);

		/**** Thanks for Makela Aapo (10/31/05) ****/
		mupnp_http_server_lock(httpServer);
		mupnp_threadlist_add(httpServer->clientThreads, httpClientThread);
		mupnp_http_server_unlock(httpServer);

		mupnp_thread_start(httpClientThread);
	}

	mupnp_log_debug_l4("Leaving...\n");
}
Exemplo n.º 5
0
/**
 * Activate the control point. Starts listening for SSDP messages etc.
 * You must call this function before you can actually use a control point.
 *
 * @param ctrlPoint The control point to start
 *
 * @return true if successful; otherwise false
 *
 */
bool mupnp_controlpoint_start(mUpnpControlPoint *ctrlPoint)
{
	mUpnpHttpServerList *httpServerList;
	MUPNP_HTTP_LISTENER httpListener;
	int httpEventPort;
	mUpnpSSDPServerList *ssdpServerList;
	mUpnpSSDPResponseServerList *ssdpResServerList;
	int ssdpResPort;
	int ssdpMaxResPort;
	
	mupnp_log_debug_l4("Entering...\n");

	mupnp_controlpoint_stop(ctrlPoint);

	/* Expiration handling */
	mupnp_thread_start(ctrlPoint->expThread);
	
	/**** Cache current interfaces ****/
	mupnp_net_gethostinterfaces(ctrlPoint->ifCache);
	
	/**** HTTP Server ****/
	httpEventPort = mupnp_controlpoint_geteventport(ctrlPoint);
	httpServerList = mupnp_controlpoint_gethttpserverlist(ctrlPoint);
	/* Opening HTTP server may fail, so try many ports */
	while(mupnp_http_serverlist_open(httpServerList, httpEventPort) == false) {
		mupnp_controlpoint_seteventport(ctrlPoint, httpEventPort + 1);
		httpEventPort = mupnp_controlpoint_geteventport(ctrlPoint);
	}
	mupnp_http_serverlist_setuserdata(httpServerList, ctrlPoint);
	httpListener = mupnp_controlpoint_gethttplistener(ctrlPoint);
	if (httpListener == NULL)
		httpListener = mupnp_controlpoint_httprequestreceived;
	mupnp_http_serverlist_setlistener(httpServerList, httpListener);
	mupnp_http_serverlist_start(httpServerList);

	/**** SSDP Server ****/
	ssdpServerList = mupnp_controlpoint_getssdpserverlist(ctrlPoint);
	if (mupnp_ssdp_serverlist_open(ssdpServerList) == false)
		return false;
	mupnp_ssdp_serverlist_setlistener(ssdpServerList, mupnp_controlpoint_ssdplistner);
	mupnp_ssdp_serverlist_setuserdata(ssdpServerList, ctrlPoint);
	if (mupnp_ssdp_serverlist_start(ssdpServerList) == false)
		return false;

	/**** SSDP Response Server ****/
	ssdpResPort = mupnp_controlpoint_getssdpresponseport(ctrlPoint);
	/* below is the max SSDP Response port number to assign (rosfran.borges) */
	ssdpMaxResPort = ssdpResPort + MUPNP_CONTROLPOINT_SSDP_RESPONSE_PORT_MAX_TRIES_INDEX;
	ssdpResServerList = mupnp_controlpoint_getssdpresponseserverlist(ctrlPoint);
	/* Opening SSDP response server may fail, so try many ports */
	while(mupnp_ssdpresponse_serverlist_open(ssdpResServerList, ssdpResPort) == false &&
		(ssdpResPort < ssdpMaxResPort) ) {
		mupnp_controlpoint_setssdpresponseport(ctrlPoint, ssdpResPort + 1);
		ssdpResPort = mupnp_controlpoint_getssdpresponseport(ctrlPoint);
	}
	mupnp_ssdpresponse_serverlist_setlistener(ssdpResServerList, mupnp_controlpoint_ssdpresponselistner);
	mupnp_ssdpresponse_serverlist_setuserdata(ssdpResServerList, ctrlPoint);
	if (mupnp_ssdpresponse_serverlist_start(ssdpResServerList) == false)
		return false;

	mupnp_log_debug_l4("Leaving...\n");

	return true;
}