/** * Parse the service description from the service's SCPD URL. Do not call * this from user applications. * * @param service The service in question * @return true if successful; otherwise false */ bool mupnp_controlpoint_parsescservicescpd(mUpnpService *service) { mUpnpNetURL *scpdURL; bool scpdParseSuccess; mupnp_log_debug_l4("Entering...\n"); scpdURL = mupnp_service_getscpdurl(service); if ( NULL == scpdURL ) return false; mupnp_log_debug_s("SCPD URL: %s\n", mupnp_net_url_getrequest(scpdURL)); scpdParseSuccess = mupnp_service_parsedescriptionurl(service, scpdURL); mupnp_net_url_delete(scpdURL); if (scpdParseSuccess == true) return true; #if defined(MUPNP_USE_STDDCP) if (mupnp_service_hasstddcp(service)) { char *stdDCP = mupnp_service_getstddcp(service); scpdParseSuccess = mupnp_service_parsedescription(service, stdDCP, mupnp_strlen(stdDCP)); } #endif mupnp_log_debug_l4("Leaving...\n"); return scpdParseSuccess; }
bool mupnp_upnpav_dms_condir_init(mUpnpAvServer *dms) { mUpnpDevice *dev; mUpnpService *service; mUpnpAction* action; dev = mupnp_upnpav_dms_getdevice(dms); if (!dev) return false; service = mupnp_device_getservicebytype(dev, CG_UPNPAV_DMS_CONTENTDIRECTORY_SERVICE_TYPE); if (!service) return false; if (mupnp_service_parsedescription(service, CG_UPNPAV_DMS_CONTENTDIRECTORY_SERVICE_DESCRIPTION, mupnp_strlen(CG_UPNPAV_DMS_CONTENTDIRECTORY_SERVICE_DESCRIPTION)) == false) return false; mupnp_service_setactionlistener(service, mupnp_upnpav_dms_condir_actionreceived); for (action=mupnp_service_getactions(service); action; action=mupnp_action_next(action)) mupnp_action_setuserdata(action, dms); mupnp_upnpav_dms_condir_setsystemupdateid(dms, 1); return true; }
mUpnpDevice *upnp_clock_device_new() { mUpnpDevice *clockDev; mUpnpService *timeService; clockDev = mupnp_device_new(); if (mupnp_device_parsedescription(clockDev, CLOCK_DEVICE_DESCRIPTION, strlen(CLOCK_DEVICE_DESCRIPTION)) == FALSE) { mupnp_device_delete(clockDev); return NULL; } timeService = mupnp_device_getservicebyexacttype(clockDev, "urn:schemas-upnp-org:service:timer:1"); if (timeService == NULL) { mupnp_device_delete(clockDev); return NULL; } if (mupnp_service_parsedescription(timeService, CLOCK_SERVICE_DESCRIPTION, strlen(CLOCK_SERVICE_DESCRIPTION)) == FALSE) { mupnp_device_delete(clockDev); return NULL; } mupnp_device_setactionlistener(clockDev, upnp_clock_actionreceived); mupnp_device_setquerylistener(clockDev, upnp_clock_queryreceived); mupnp_device_sethttplistener(clockDev, upnp_clock_device_httprequestrecieved); return clockDev; }
RoundUpnpServer* round_upnp_server_new(void) { RoundUpnpServer* server = (RoundUpnpServer*)malloc(sizeof(RoundUpnpServer)); if (!server) return NULL; server->dev = mupnp_device_new(); if (!server->dev) { round_upnp_server_delete(server); return NULL; } // Setup UPnP Device if (!mupnp_device_parsedescription(server->dev, ROUND_UPNP_SERVER_DEVICE_DESCRIPTION, strlen(ROUND_UPNP_SERVER_DEVICE_DESCRIPTION))) { mupnp_device_delete(server->dev); return NULL; } mUpnpService* upnpSrv = mupnp_device_getservicebyexacttype(server->dev, ROUND_UPNP_SERVICE_TYPE); if (upnpSrv == NULL) { mupnp_device_delete(server->dev); return NULL; } if (!mupnp_service_parsedescription(upnpSrv, ROUND_UPNP_SERVER_SERVICE_DESCRIPTION, strlen(ROUND_UPNP_SERVER_SERVICE_DESCRIPTION))) { mupnp_device_delete(server->dev); return NULL; } mupnp_device_setactionlistener(server->dev, round_upnp_server_actionreceived); mupnp_device_setquerylistener(server->dev, round_upnp_server_queryreceived); mupnp_device_sethttplistener(server->dev, round_upnp_server_httprequestrecieved); // Set Listener round_upnp_server_setrpcrequestlistener(server, NULL); return server; }