コード例 #1
0
BOOL cg_http_server_start(CgHttpServer *httpServer)
{
	cg_log_debug_l4("Entering...\n");

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

	httpServer->acceptThread = cg_thread_new();
	cg_thread_setaction(httpServer->acceptThread, cg_http_server_thread);
	cg_thread_setuserdata(httpServer->acceptThread, httpServer);

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

	if (cg_thread_start(httpServer->acceptThread) == FALSE) {
		cg_thread_delete(httpServer->acceptThread);
		httpServer->acceptThread = NULL;

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

		return FALSE;
	}

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

	return TRUE;
}
コード例 #2
0
/**
 * cg_upnp_device_advertiser_start
 *
 * Start the advertiser thread for the given device
 *
 * \param dev The device that is to be advertised
 */
BOOL cg_upnp_device_advertiser_start(CgUpnpDevice *dev)
{
    CgThread *advertiser;

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

  /* Get the already existing (created in device_new) advertiser thread */
  advertiser = cg_upnp_device_getadvertiserthead(dev);

  /* Store the device into the advertiser thread struct's user data */
  cg_thread_setuserdata(advertiser, dev);

  /* Set the function that will run the thread */
  cg_thread_setaction(advertiser, cg_upnp_device_advertiser_action);

  /* Start the thread */
  return cg_thread_start(advertiser);

    cg_log_debug_l4("Leaving...\n");
}
コード例 #3
0
ファイル: cssdp_server.c プロジェクト: BelkinMike/CyberLink4C
BOOL cg_upnp_ssdp_server_start(CgUpnpSSDPServer *server)
{
	if (server->recvThread != NULL)
		return FALSE;
		
	cg_log_debug_l4("Entering...\n");

	server->recvThread = cg_thread_new();
	cg_thread_setaction(server->recvThread, cg_upnp_ssdp_server_thread);
	cg_thread_setuserdata(server->recvThread, server);
	if (cg_thread_start(server->recvThread) == FALSE) {	
		cg_thread_delete(server->recvThread);
		server->recvThread = NULL;
		return FALSE;
	}

	return TRUE;

	cg_log_debug_l4("Leaving...\n");
}
コード例 #4
0
static void cg_http_server_thread(CgThread *thread)
{
	CgHttpServer *httpServer;
	CgThread *httpClientThread;
	CgHttpServerClientData *clientData;
	CgSocket *serverSock;
	CgSocket *clientSock;

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

	httpServer = (CgHttpServer *)cg_thread_getuserdata(thread);

	if (cg_http_server_isopened(httpServer) == FALSE)
		return;

	serverSock = httpServer->sock;
	while (cg_thread_isrunnable(thread) == TRUE) {
		clientSock = cg_socket_stream_new();
		if (cg_socket_accept(serverSock, clientSock) == FALSE) {
			cg_socket_delete(clientSock);
			break;
		}

		cg_socket_settimeout(clientSock, cg_http_server_gettimeout(httpServer));
		clientData = cg_http_server_clientdata_new(httpServer, clientSock);
		httpClientThread = cg_thread_new();
		cg_thread_setaction(httpClientThread, cg_http_server_clientthread);
		cg_thread_setuserdata(httpClientThread, clientData);

		/**** Thanks for Makela Aapo (10/31/05) ****/
		cg_http_server_lock(httpServer);
		cg_threadlist_add(httpServer->clientThreads, httpClientThread);
		cg_http_server_unlock(httpServer);

		cg_thread_start(httpClientThread);
	}

	cg_log_debug_l4("Leaving...\n");
}
コード例 #5
0
ファイル: ccontrolpoint.c プロジェクト: RbBtSn0w/CyberLink4C
/**
 * 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 cg_upnp_controlpoint_start(CgUpnpControlPoint *ctrlPoint)
{
	CgHttpServerList *httpServerList;
	CG_HTTP_LISTENER httpListener;
	int httpEventPort;
	CgUpnpSSDPServerList *ssdpServerList;
	CgUpnpSSDPResponseServerList *ssdpResServerList;
	int ssdpResPort;
	int ssdpMaxResPort;
	
	cg_log_debug_l4("Entering...\n");

	cg_upnp_controlpoint_stop(ctrlPoint);

	/* Expiration handling */
	cg_thread_start(ctrlPoint->expThread);
	
	/**** Cache current interfaces ****/
	cg_net_gethostinterfaces(ctrlPoint->ifCache);
	
	/**** HTTP Server ****/
	httpEventPort = cg_upnp_controlpoint_geteventport(ctrlPoint);
	httpServerList = cg_upnp_controlpoint_gethttpserverlist(ctrlPoint);
	/* Opening HTTP server may fail, so try many ports */
	while(cg_http_serverlist_open(httpServerList, httpEventPort) == FALSE) {
		cg_upnp_controlpoint_seteventport(ctrlPoint, httpEventPort + 1);
		httpEventPort = cg_upnp_controlpoint_geteventport(ctrlPoint);
	}
	cg_http_serverlist_setuserdata(httpServerList, ctrlPoint);
	httpListener = cg_upnp_controlpoint_gethttplistener(ctrlPoint);
	if (httpListener == NULL)
		httpListener = cg_upnp_controlpoint_httprequestreceived;
	cg_http_serverlist_setlistener(httpServerList, httpListener);
	cg_http_serverlist_start(httpServerList);

	/**** SSDP Server ****/
	ssdpServerList = cg_upnp_controlpoint_getssdpserverlist(ctrlPoint);
	if (cg_upnp_ssdp_serverlist_open(ssdpServerList) == FALSE)
		return FALSE;
	cg_upnp_ssdp_serverlist_setlistener(ssdpServerList, cg_upnp_controlpoint_ssdplistner);
	cg_upnp_ssdp_serverlist_setuserdata(ssdpServerList, ctrlPoint);
	if (cg_upnp_ssdp_serverlist_start(ssdpServerList) == FALSE)
		return FALSE;

	/**** SSDP Response Server ****/
	ssdpResPort = cg_upnp_controlpoint_getssdpresponseport(ctrlPoint);
	/* below is the max SSDP Response port number to assign (rosfran.borges) */
	ssdpMaxResPort = ssdpResPort + CG_UPNP_CONTROLPOINT_SSDP_RESPONSE_PORT_MAX_TRIES_INDEX;
	ssdpResServerList = cg_upnp_controlpoint_getssdpresponseserverlist(ctrlPoint);
	/* Opening SSDP response server may fail, so try many ports */
	while(cg_upnp_ssdpresponse_serverlist_open(ssdpResServerList, ssdpResPort) == FALSE &&
		(ssdpResPort < ssdpMaxResPort) ) {
		cg_upnp_controlpoint_setssdpresponseport(ctrlPoint, ssdpResPort + 1);
		ssdpResPort = cg_upnp_controlpoint_getssdpresponseport(ctrlPoint);
	}

	cg_upnp_ssdpresponse_serverlist_setlistener(ssdpResServerList, cg_upnp_controlpoint_ssdpresponselistner);
	cg_upnp_ssdpresponse_serverlist_setuserdata(ssdpResServerList, ctrlPoint);
	if (cg_upnp_ssdpresponse_serverlist_start(ssdpResServerList) == FALSE)
		return FALSE;

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

	return TRUE;
}