bool round_finder_stop(RoundFinder* finder) { if (!finder) return false; return mupnp_controlpoint_stop(finder->cp); }
/** * Destroy the given control point * * @param ctrlPoint The control point struct to destroy */ void mupnp_controlpoint_delete(mUpnpControlPoint *ctrlPoint) { mupnp_log_debug_l4("Entering...\n"); mupnp_controlpoint_stop(ctrlPoint); /* Delete cached interfaces */ mupnp_net_interfacelist_delete(ctrlPoint->ifCache); /* Delete expiration handlers */ mupnp_thread_delete(ctrlPoint->expThread); mupnp_mutex_delete(ctrlPoint->expMutex); mupnp_cond_delete(ctrlPoint->expCond); /* Delete others */ mupnp_mutex_delete(ctrlPoint->mutex); mupnp_xml_nodelist_delete(ctrlPoint->deviceRootNodeList); mupnp_devicelist_delete(ctrlPoint->deviceList); mupnp_ssdp_serverlist_delete(ctrlPoint->ssdpServerList); mupnp_ssdpresponse_serverlist_delete(ctrlPoint->ssdpResServerList); mupnp_http_serverlist_delete(ctrlPoint->httpServerList); mupnp_string_delete(ctrlPoint->httpEventURI); mupnp_eventlistenerlist_delete(ctrlPoint->eventListeners); #ifdef MUPNP_HTTP_USE_PERSISTENT_CONNECTIONS mupnp_http_persistentconnection_clear(); #endif free(ctrlPoint); mupnp_log_debug_l4("Leaving...\n"); }
MBEG #else int main(int argc, char* argv[]) #endif { mUpnpControlPoint* ctrlPoint; ctrlPoint = mupnp_controlpoint_new(); if (!mupnp_controlpoint_start(ctrlPoint)) { printf("Couldn't start this control point !!"); exit(1); } mupnp_controlpoint_search(ctrlPoint, MUPNP_ST_ROOT_DEVICE); mupnp_sleep(mupnp_controlpoint_getssdpsearchmx(ctrlPoint) * 1000); PrintDMSInfos(ctrlPoint); mupnp_controlpoint_stop(ctrlPoint); mupnp_controlpoint_delete(ctrlPoint); return (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; }
MBEG #else int main( int argc, char* argv[] ) #endif { mUpnpControlPoint *ctrlPoint; int key; ctrlPoint = mupnp_controlpoint_new(); mupnp_controlpoint_setssdplistener(ctrlPoint, SSDPNotifyListner); mupnp_controlpoint_seteventlistener(ctrlPoint, EventListener); if (mupnp_controlpoint_start(ctrlPoint) == false) { printf("Couldn't start this control point !!"); exit(1); } PrintKeyMessage(); #if (!defined(WIN32) || defined(__CYGWIN__)) && !defined(TENGINE) kbinit(); #endif key = 0; do { #if !defined(TENGINE) key = kbgetkey(); key = toupper(key); switch (key) { case 'P': PrintControlPointDevice(ctrlPoint); break; #if !defined(MUPNP_NOUSE_ACTIONCTRL) case 'C': ControlDeviceAlter(ctrlPoint, CMD_NO_ALTERATIONS); break; case 'O': ControlDeviceAlter(ctrlPoint, CMD_LOOP_ACTION_CALLS); break; #endif #if !defined(MUPNP_NOUSE_QUERYCTRL) case 'Q': QueryDevice(ctrlPoint); break; #endif #if !defined(MUPNP_NOUSE_SUBSCRIPTION) case 'S': SubscribeService(ctrlPoint); break; case 'U': UnsubscribeService(ctrlPoint); break; #endif case 'M': SetMXValue(ctrlPoint); break; case 'R': printf("M-Search upnp::rootdevice\n"); mupnp_controlpoint_search(ctrlPoint, MUPNP_ST_ROOT_DEVICE); break; case 'H': printf("M-Search ssdp:all\n"); mupnp_controlpoint_search(ctrlPoint, "ssdp:all"); break; case 'V': printf("M-Search device type\n"); mupnp_controlpoint_search(ctrlPoint, "urn:schemas-upnp-org:device:clock:1"); break; case 'T': printf("M-Search service type\n"); mupnp_controlpoint_search(ctrlPoint, "urn:schemas-upnp-org:service:timer:1"); break; case 'A': { int i; printf("Doing all searches four times...\n"); for (i=0; i<4; i++) { mupnp_controlpoint_search(ctrlPoint, MUPNP_ST_ROOT_DEVICE); mupnp_controlpoint_search(ctrlPoint, "ssdp:all"); mupnp_controlpoint_search(ctrlPoint, "urn:schemas-upnp-org:device:clock:1"); mupnp_controlpoint_search(ctrlPoint, "urn:schemas-upnp-org:service:timer:1"); } printf("Done (doing all searches four times).\n"); } break; case 'X': break; default: PrintKeyMessage(); } #else mupnp_wait(1000); #endif } while( key != 'X'); #if (!defined(WIN32) || defined(__CYGWIN__)) && !defined(TENGINE) kbexit(); #endif mupnp_controlpoint_stop(ctrlPoint); mupnp_controlpoint_delete(ctrlPoint); return(0); }