From dd91c79319e4fdffe86b7455a2f1d33916849e04 Mon Sep 17 00:00:00 2001 From: Omar Kallel Date: Fri, 7 Feb 2020 16:33:53 +0100 Subject: [PATCH] Ticket refs #1334: TR-181: Device.UPnP. object --- dmtree/tr181/upnp.c | 1218 +++++++++++++++++++++++++++++++++++++++-- dmtree/tr181/upnp.h | 178 +++++- libbbf_api/dmcommon.c | 38 ++ libbbf_api/dmcommon.h | 1 + 4 files changed, 1388 insertions(+), 47 deletions(-) diff --git a/dmtree/tr181/upnp.c b/dmtree/tr181/upnp.c index 25500814..dd8104fb 100644 --- a/dmtree/tr181/upnp.c +++ b/dmtree/tr181/upnp.c @@ -1,52 +1,499 @@ /* - * Copyright (C) 2019 iopsys Software Solutions AB - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1 - * as published by the Free Software Foundation - * - * Author Imen Bhiri - * - */ +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 2 of the License, or +* (at your option) any later version. +* +* Copyright (C) 2019 iopsys Software Solutions AB +* Author: Omar Kallel +* Imen Bhiri +*/ -#include -#include -#include -#include -#include #include #include +#include +#include +#include +#include "dmentry.h" #include "upnp.h" +#include + +static int fetch_discovery_devices = 0; +static int fetch_files_infos = 0; +LIST_HEAD(file_info_list); /* *** Device.UPnP. *** */ DMOBJ tUPnPObj[] = { -/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/ -{"Device", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tUPnPDeviceParams, NULL, BBFDM_BOTH}, +/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/ +{"Device", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tUPnPDeviceObj, tUPnPDeviceParams, NULL, BBFDM_BOTH}, +{"Discovery", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tUPnPDiscoveryObj, tUPnPDiscoveryParams, NULL, BBFDM_BOTH}, +{"Description", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tUPnPDescriptionObj, tUPnPDescriptionParams, NULL, BBFDM_BOTH}, {0} }; /* *** Device.UPnP.Device. *** */ -DMLEAF tUPnPDeviceParams[] = { -/* PARAM, permission, type, getvalue, setvalue, forced_inform, notification, bbfdm_type*/ -{"Enable", &DMWRITE, DMT_BOOL, get_upnp_enable, set_upnp_enable, NULL, NULL, BBFDM_BOTH}, -{CUSTOM_PREFIX"Status", &DMREAD, DMT_STRING, get_upnp_status, NULL, NULL, NULL, BBFDM_BOTH}, +DMOBJ tUPnPDeviceObj[] = { +/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/ +{"Capabilities", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tUPnPDeviceCapabilitiesParams, NULL, BBFDM_BOTH}, {0} }; -/*#Device.UPnP.Device.Enable!UCI:upnpd/upnpd,config/enabled*/ -int get_upnp_enable(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +DMLEAF tUPnPDeviceParams[] = { +/* PARAM, permission, type, getvalue, setvalue, forced_inform, notification, bbfdm_type*/ +{CUSTOM_PREFIX"Status", &DMREAD, DMT_STRING, get_upnp_status, NULL, NULL, NULL, BBFDM_BOTH}, +{"Enable", &DMWRITE, DMT_BOOL, get_UPnPDevice_Enable, set_UPnPDevice_Enable, NULL, NULL, BBFDM_BOTH}, +{"UPnPMediaServer", &DMWRITE, DMT_BOOL, get_UPnPDevice_UPnPMediaServer, set_UPnPDevice_UPnPMediaServer, NULL, NULL, BBFDM_BOTH}, +{"UPnPMediaRenderer", &DMWRITE, DMT_BOOL, get_UPnPDevice_UPnPMediaRenderer, set_UPnPDevice_UPnPMediaRenderer, NULL, NULL, BBFDM_BOTH}, +{"UPnPWLANAccessPoint", &DMWRITE, DMT_BOOL, get_UPnPDevice_UPnPWLANAccessPoint, set_UPnPDevice_UPnPWLANAccessPoint, NULL, NULL, BBFDM_BOTH}, +{"UPnPQoSDevice ", &DMWRITE, DMT_BOOL, get_UPnPDevice_UPnPQoSDevice , set_UPnPDevice_UPnPQoSDevice , NULL, NULL, BBFDM_BOTH}, +{"UPnPQoSPolicyHolder", &DMWRITE, DMT_BOOL, get_UPnPDevice_UPnPQoSPolicyHolder, set_UPnPDevice_UPnPQoSPolicyHolder, NULL, NULL, BBFDM_BOTH}, +{"UPnPIGD", &DMWRITE, DMT_BOOL, get_UPnPDevice_UPnPIGD, set_UPnPDevice_UPnPIGD, NULL, NULL, BBFDM_BOTH}, +{"UPnPDMBasicMgmt", &DMWRITE, DMT_BOOL, get_UPnPDevice_UPnPDMBasicMgmt, set_UPnPDevice_UPnPDMBasicMgmt, NULL, NULL, BBFDM_BOTH}, +{"UPnPDMConfigurationMgmt", &DMWRITE, DMT_BOOL, get_UPnPDevice_UPnPDMConfigurationMgmt, set_UPnPDevice_UPnPDMConfigurationMgmt, NULL, NULL, BBFDM_BOTH}, +{"UPnPDMSoftwareMgmt", &DMWRITE, DMT_BOOL, get_UPnPDevice_UPnPDMSoftwareMgmt, set_UPnPDevice_UPnPDMSoftwareMgmt, NULL, NULL, BBFDM_BOTH}, +{0} +}; + +/* *** Device.UPnP.Device.Capabilities. *** */ +DMLEAF tUPnPDeviceCapabilitiesParams[] = { +/* PARAM, permission, type, getvalue, setvalue, forced_inform, notification, bbfdm_type*/ +{"UPnPArchitecture", &DMREAD, DMT_UNINT, get_UPnPDeviceCapabilities_UPnPArchitecture, NULL, NULL, NULL, BBFDM_BOTH}, +{"UPnPArchitectureMinorVer", &DMREAD, DMT_UNINT, get_UPnPDeviceCapabilities_UPnPArchitectureMinorVer, NULL, NULL, NULL, BBFDM_BOTH}, +{"UPnPMediaServer", &DMREAD, DMT_UNINT, get_UPnPDeviceCapabilities_UPnPMediaServer, NULL, NULL, NULL, BBFDM_BOTH}, +{"UPnPMediaRenderer", &DMREAD, DMT_UNINT, get_UPnPDeviceCapabilities_UPnPMediaRenderer, NULL, NULL, NULL, BBFDM_BOTH}, +{"UPnPWLANAccessPoint", &DMREAD, DMT_UNINT, get_UPnPDeviceCapabilities_UPnPWLANAccessPoint, NULL, NULL, NULL, BBFDM_BOTH}, +{"UPnPBasicDevice", &DMREAD, DMT_UNINT, get_UPnPDeviceCapabilities_UPnPBasicDevice, NULL, NULL, NULL, BBFDM_BOTH}, +{"UPnPQoSDevice", &DMREAD, DMT_UNINT, get_UPnPDeviceCapabilities_UPnPQoSDevice, NULL, NULL, NULL, BBFDM_BOTH}, +{"UPnPQoSPolicyHolder", &DMREAD, DMT_UNINT, get_UPnPDeviceCapabilities_UPnPQoSPolicyHolder, NULL, NULL, NULL, BBFDM_BOTH}, +{"UPnPIGD", &DMREAD, DMT_UNINT, get_UPnPDeviceCapabilities_UPnPIGD, NULL, NULL, NULL, BBFDM_BOTH}, +{"UPnPDMBasicMgmt", &DMREAD, DMT_UNINT, get_UPnPDeviceCapabilities_UPnPDMBasicMgmt, NULL, NULL, NULL, BBFDM_BOTH}, +{"UPnPDMConfigurationMgmt", &DMREAD, DMT_UNINT, get_UPnPDeviceCapabilities_UPnPDMConfigurationMgmt, NULL, NULL, NULL, BBFDM_BOTH}, +{"UPnPDMSoftwareMgmt", &DMREAD, DMT_UNINT, get_UPnPDeviceCapabilities_UPnPDMSoftwareMgmt, NULL, NULL, NULL, BBFDM_BOTH}, +{0} +}; + +/* *** Device.UPnP.Discovery. *** */ +DMOBJ tUPnPDiscoveryObj[] = { +/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/ +{"RootDevice", &DMREAD, NULL, NULL, NULL, browseUPnPDiscoveryRootDeviceInst, NULL, NULL, NULL, NULL, tUPnPDiscoveryRootDeviceParams, get_root_device_linker, BBFDM_BOTH}, +{"Device", &DMREAD, NULL, NULL, NULL, browseUPnPDiscoveryDeviceInst, NULL, NULL, NULL, NULL, tUPnPDiscoveryDeviceParams, get_device_linker, BBFDM_BOTH}, +{"Service", &DMREAD, NULL, NULL, NULL, browseUPnPDiscoveryServiceInst, NULL, NULL, NULL, NULL, tUPnPDiscoveryServiceParams, get_service_linker, BBFDM_BOTH}, +{0} +}; + +DMLEAF tUPnPDiscoveryParams[] = { +/* PARAM, permission, type, getvalue, setvalue, forced_inform, notification, bbfdm_type*/ +{"RootDeviceNumberOfEntries", &DMREAD, DMT_UNINT, get_UPnPDiscovery_RootDeviceNumberOfEntries, NULL, NULL, NULL, BBFDM_BOTH}, +{"DeviceNumberOfEntries", &DMREAD, DMT_UNINT, get_UPnPDiscovery_DeviceNumberOfEntries, NULL, NULL, NULL, BBFDM_BOTH}, +{"ServiceNumberOfEntries", &DMREAD, DMT_UNINT, get_UPnPDiscovery_ServiceNumberOfEntries, NULL, NULL, NULL, BBFDM_BOTH}, +{0} +}; + +/* *** Device.UPnP.Discovery.RootDevice.{i}. *** */ +DMLEAF tUPnPDiscoveryRootDeviceParams[] = { +/* PARAM, permission, type, getvalue, setvalue, forced_inform, notification, bbfdm_type*/ +//{"Status", &DMREAD, DMT_STRING, get_UPnPDiscoveryRootDevice_Status, NULL, NULL, NULL, BBFDM_BOTH}, +{"UUID", &DMREAD, DMT_STRING, get_UPnPDiscoveryRootDevice_UUID, NULL, NULL, NULL, BBFDM_BOTH}, +{"USN", &DMREAD, DMT_STRING, get_UPnPDiscoveryRootDevice_USN, NULL, NULL, NULL, BBFDM_BOTH}, +//{"LeaseTime", &DMREAD, DMT_UNINT, get_UPnPDiscoveryRootDevice_LeaseTime, NULL, NULL, NULL, BBFDM_BOTH}, +{"Location", &DMREAD, DMT_STRING, get_UPnPDiscoveryRootDevice_Location, NULL, NULL, NULL, BBFDM_BOTH}, +//{"Server", &DMREAD, DMT_STRING, get_UPnPDiscoveryRootDevice_Server, NULL, NULL, NULL, BBFDM_BOTH}, +//{"Host", &DMREAD, DMT_STRING, get_UPnPDiscoveryRootDevice_Host, NULL, NULL, NULL, BBFDM_BOTH}, +//{"LastUpdate", &DMREAD, DMT_TIME, get_UPnPDiscoveryRootDevice_LastUpdate, NULL, NULL, NULL, BBFDM_BOTH}, +{0} +}; + +/* *** Device.UPnP.Discovery.Device.{i}. *** */ +DMLEAF tUPnPDiscoveryDeviceParams[] = { +/* PARAM, permission, type, getvalue, setvalue, forced_inform, notification, bbfdm_type*/ +//{"Status", &DMREAD, DMT_STRING, get_UPnPDiscoveryDevice_Status, NULL, NULL, NULL, BBFDM_BOTH}, +{"UUID", &DMREAD, DMT_STRING, get_UPnPDiscoveryDevice_UUID, NULL, NULL, NULL, BBFDM_BOTH}, +{"USN", &DMREAD, DMT_STRING, get_UPnPDiscoveryDevice_USN, NULL, NULL, NULL, BBFDM_BOTH}, +//{"LeaseTime", &DMREAD, DMT_UNINT, get_UPnPDiscoveryDevice_LeaseTime, NULL, NULL, NULL, BBFDM_BOTH}, +{"Location", &DMREAD, DMT_STRING, get_UPnPDiscoveryDevice_Location, NULL, NULL, NULL, BBFDM_BOTH}, +//{"Server", &DMREAD, DMT_STRING, get_UPnPDiscoveryDevice_Server, NULL, NULL, NULL, BBFDM_BOTH}, +//{"Host", &DMREAD, DMT_STRING, get_UPnPDiscoveryDevice_Host, NULL, NULL, NULL, BBFDM_BOTH}, +//{"LastUpdate", &DMREAD, DMT_TIME, get_UPnPDiscoveryDevice_LastUpdate, NULL, NULL, NULL, BBFDM_BOTH}, +{0} +}; + +/* *** Device.UPnP.Discovery.Service.{i}. *** */ +DMLEAF tUPnPDiscoveryServiceParams[] = { +/* PARAM, permission, type, getvalue, setvalue, forced_inform, notification, bbfdm_type*/ +//{"Status", &DMREAD, DMT_STRING, get_UPnPDiscoveryService_Status, NULL, NULL, NULL, BBFDM_BOTH}, +{"USN", &DMREAD, DMT_STRING, get_UPnPDiscoveryService_USN, NULL, NULL, NULL, BBFDM_BOTH}, +//{"LeaseTime", &DMREAD, DMT_UNINT, get_UPnPDiscoveryService_LeaseTime, NULL, NULL, NULL, BBFDM_BOTH}, +{"Location", &DMREAD, DMT_STRING, get_UPnPDiscoveryService_Location, NULL, NULL, NULL, BBFDM_BOTH}, +//{"Server", &DMREAD, DMT_STRING, get_UPnPDiscoveryService_Server, NULL, NULL, NULL, BBFDM_BOTH}, +//{"Host", &DMREAD, DMT_STRING, get_UPnPDiscoveryService_Host, NULL, NULL, NULL, BBFDM_BOTH}, +//{"LastUpdate", &DMREAD, DMT_TIME, get_UPnPDiscoveryService_LastUpdate, NULL, NULL, NULL, BBFDM_BOTH}, +{"ParentDevice", &DMREAD, DMT_STRING, get_UPnPDiscoveryService_ParentDevice, NULL, NULL, NULL, BBFDM_BOTH}, +{0} +}; + +/* *** Device.UPnP.Description. *** */ +DMOBJ tUPnPDescriptionObj[] = { +/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/ +{"DeviceDescription", &DMREAD, NULL, NULL, NULL, browseUPnPDescriptionDeviceDescriptionInst, NULL, NULL, NULL, NULL, tUPnPDescriptionDeviceDescriptionParams, NULL, BBFDM_BOTH}, +{"DeviceInstance", &DMREAD, NULL, NULL, NULL, browseUPnPDescriptionDeviceInstanceInst, NULL, NULL, NULL, NULL, tUPnPDescriptionDeviceInstanceParams, get_device_instance_linker, BBFDM_BOTH}, +{"ServiceInstance", &DMREAD, NULL, NULL, NULL, browseUPnPDescriptionServiceInstanceInst, NULL, NULL, NULL, NULL, tUPnPDescriptionServiceInstanceParams, NULL, BBFDM_BOTH}, +{0} +}; + +DMLEAF tUPnPDescriptionParams[] = { +/* PARAM, permission, type, getvalue, setvalue, forced_inform, notification, bbfdm_type*/ +{"DeviceDescriptionNumberOfEntries", &DMREAD, DMT_UNINT, get_UPnPDescription_DeviceDescriptionNumberOfEntries, NULL, NULL, NULL, BBFDM_BOTH}, +{"DeviceInstanceNumberOfEntries", &DMREAD, DMT_UNINT, get_UPnPDescription_DeviceInstanceNumberOfEntries, NULL, NULL, NULL, BBFDM_BOTH}, +{"ServiceInstanceNumberOfEntries", &DMREAD, DMT_UNINT, get_UPnPDescription_ServiceInstanceNumberOfEntries, NULL, NULL, NULL, BBFDM_BOTH}, +{0} +}; + +/* *** Device.UPnP.Description.DeviceDescription.{i}. *** */ +DMLEAF tUPnPDescriptionDeviceDescriptionParams[] = { +/* PARAM, permission, type, getvalue, setvalue, forced_inform, notification, bbfdm_type*/ +{"URLBase", &DMREAD, DMT_STRING, get_UPnPDescriptionDeviceDescription_URLBase, NULL, NULL, NULL, BBFDM_BOTH}, +{"SpecVersion", &DMREAD, DMT_STRING, get_UPnPDescriptionDeviceDescription_SpecVersion, NULL, NULL, NULL, BBFDM_BOTH}, +{"Host", &DMREAD, DMT_STRING, get_UPnPDescriptionDeviceDescription_Host, NULL, NULL, NULL, BBFDM_BOTH}, +{0} +}; + +/* *** Device.UPnP.Description.DeviceInstance.{i}. *** */ +DMLEAF tUPnPDescriptionDeviceInstanceParams[] = { +/* PARAM, permission, type, getvalue, setvalue, forced_inform, notification, bbfdm_type*/ +{"UDN", &DMREAD, DMT_STRING, get_UPnPDescriptionDeviceInstance_UDN, NULL, NULL, NULL, BBFDM_BOTH}, +{"ParentDevice", &DMREAD, DMT_STRING, get_UPnPDescriptionDeviceInstance_ParentDevice, NULL, NULL, NULL, BBFDM_BOTH}, +{"DiscoveryDevice", &DMREAD, DMT_STRING, get_UPnPDescriptionDeviceInstance_DiscoveryDevice, NULL, NULL, NULL, BBFDM_BOTH}, +{"DeviceType", &DMREAD, DMT_STRING, get_UPnPDescriptionDeviceInstance_DeviceType, NULL, NULL, NULL, BBFDM_BOTH}, +{"FriendlyName", &DMREAD, DMT_STRING, get_UPnPDescriptionDeviceInstance_FriendlyName, NULL, NULL, NULL, BBFDM_BOTH}, +//{"DeviceCategory", &DMREAD, DMT_STRING, get_UPnPDescriptionDeviceInstance_DeviceCategory, NULL, NULL, NULL, BBFDM_BOTH}, +{"Manufacturer", &DMREAD, DMT_STRING, get_UPnPDescriptionDeviceInstance_Manufacturer, NULL, NULL, NULL, BBFDM_BOTH}, +//{"ManufacturerOUI", &DMREAD, DMT_STRING, get_UPnPDescriptionDeviceInstance_ManufacturerOUI, NULL, NULL, NULL, BBFDM_BOTH}, +{"ManufacturerURL", &DMREAD, DMT_STRING, get_UPnPDescriptionDeviceInstance_ManufacturerURL, NULL, NULL, NULL, BBFDM_BOTH}, +{"ModelDescription", &DMREAD, DMT_STRING, get_UPnPDescriptionDeviceInstance_ModelDescription, NULL, NULL, NULL, BBFDM_BOTH}, +{"ModelName", &DMREAD, DMT_STRING, get_UPnPDescriptionDeviceInstance_ModelName, NULL, NULL, NULL, BBFDM_BOTH}, +{"ModelNumber", &DMREAD, DMT_STRING, get_UPnPDescriptionDeviceInstance_ModelNumber, NULL, NULL, NULL, BBFDM_BOTH}, +{"ModelURL", &DMREAD, DMT_STRING, get_UPnPDescriptionDeviceInstance_ModelURL, NULL, NULL, NULL, BBFDM_BOTH}, +{"SerialNumber", &DMREAD, DMT_STRING, get_UPnPDescriptionDeviceInstance_SerialNumber, NULL, NULL, NULL, BBFDM_BOTH}, +{"UPC", &DMREAD, DMT_STRING, get_UPnPDescriptionDeviceInstance_UPC, NULL, NULL, NULL, BBFDM_BOTH}, +{"PresentationURL", &DMREAD, DMT_STRING, get_UPnPDescriptionDeviceInstance_PresentationURL, NULL, NULL, NULL, BBFDM_BOTH}, +{0} +}; + +/* *** Device.UPnP.Description.ServiceInstance.{i}. *** */ +DMLEAF tUPnPDescriptionServiceInstanceParams[] = { +/* PARAM, permission, type, getvalue, setvalue, forced_inform, notification, bbfdm_type*/ +{"ParentDevice", &DMREAD, DMT_STRING, get_UPnPDescriptionServiceInstance_ParentDevice, NULL, NULL, NULL, BBFDM_BOTH}, +{"ServiceId", &DMREAD, DMT_STRING, get_UPnPDescriptionServiceInstance_ServiceId, NULL, NULL, NULL, BBFDM_BOTH}, +{"ServiceDiscovery", &DMREAD, DMT_STRING, get_UPnPDescriptionServiceInstance_ServiceDiscovery, NULL, NULL, NULL, BBFDM_BOTH}, +{"ServiceType", &DMREAD, DMT_STRING, get_UPnPDescriptionServiceInstance_ServiceType, NULL, NULL, NULL, BBFDM_BOTH}, +{"SCPDURL", &DMREAD, DMT_STRING, get_UPnPDescriptionServiceInstance_SCPDURL, NULL, NULL, NULL, BBFDM_BOTH}, +{"ControlURL", &DMREAD, DMT_STRING, get_UPnPDescriptionServiceInstance_ControlURL, NULL, NULL, NULL, BBFDM_BOTH}, +{"EventSubURL", &DMREAD, DMT_STRING, get_UPnPDescriptionServiceInstance_EventSubURL, NULL, NULL, NULL, BBFDM_BOTH}, +{0} +}; + +/************************************************************************** +* LINKER +***************************************************************************/ +int get_root_device_linker(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) { - pid_t pid = get_pid("miniupnpd"); - if (pid < 0) { - *value = "0"; + if (data && ((struct upnpdiscovery *)data)->uuid) { + dmasprintf(linker, "%s", ((struct upnpdiscovery *)data)->uuid); + return 0; } - else { + *linker = "" ; + return 0; +} + +int get_device_linker(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) +{ + if (data && ((struct upnpdiscovery *)data)->uuid){ + dmasprintf(linker, "%s", ((struct upnpdiscovery *)data)->uuid); + return 0; + } + *linker = "" ; + return 0; +} + +int get_device_instance_linker(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) +{ + if (data && ((struct upnp_device_inst *)data)->udn){ + dmasprintf(linker, "%s", ((struct upnp_device_inst *)data)->udn); + return 0; + } + *linker = "" ; + return 0; +} + +int get_service_linker(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) +{ + if (data && ((struct upnpdiscovery *)data)->usn){ + dmasprintf(linker, "%s", ((struct upnpdiscovery *)data)->usn); + return 0; + } + *linker = "" ; + return 0; +} + +/************************************************************* + * ENTRY METHOD +/*************************************************************/ +int browseUPnPDiscoveryRootDeviceInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance) +{ + json_object *res, *devices, *device; + struct upnpdiscovery upnp_dev = {}; + char *descurl = NULL, *st = NULL, *usn = NULL, *is_root_device = NULL, *instance = NULL, *instnbr = NULL, *v = NULL; + char **stparams= NULL, **uuid, **urn; + int i, id=0, length; + struct uci_section* dmmap_sect= NULL; + + dmubus_call("upnpc", "discovery", UBUS_ARGS{{}}, 0, &res); + json_object_object_get_ex(res, "devices", &devices); + size_t nbre_devices = json_object_array_length(devices); + + if(nbre_devices>0){ + check_create_dmmap_package("dmmap_upnp"); + for(i=0; i0){ + check_create_dmmap_package("dmmap_upnp"); + for(i=0; i0?uuid[1]:""); + dmasprintf(&upnp_dev.urn, "%s", lengthurn>0?urn[1]:""); + if ((dmmap_sect = get_dup_section_in_dmmap_opt("dmmap_upnp", "upnp_device", "uuid", uuid[1])) == NULL) { + dmuci_add_section_bbfdm("dmmap_upnp", "upnp_device", &dmmap_sect, &v); + DMUCI_SET_VALUE_BY_SECTION(bbfdm, dmmap_sect, "uuid", uuid[1]); + } + upnp_dev.dmmap_sect= dmmap_sect; + + instance = handle_update_instance(1, dmctx, &instnbr, update_instance_alias_bbfdm, 3, dmmap_sect, "upnp_evice_instance", "upnp_device_alias"); + if (DM_LINK_INST_OBJ(dmctx, parent_node, &upnp_dev, instance) == DM_STOP) + return 0; + } + } + return 0; +} + +int browseUPnPDiscoveryServiceInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance) +{ + json_object *res, *services, *service; + struct upnpdiscovery upnp_dev = {}; + char *descurl = NULL, *st = NULL, *usn = NULL, *is_root_device = NULL, *instance = NULL, *instnbr = NULL, *v = NULL; + char **stparams= NULL, **uuid, **urn; + int i, id=0, lengthuuid, lengthurn; + struct uci_section* dmmap_sect= NULL; + + dmubus_call("upnpc", "discovery", UBUS_ARGS{{}}, 0, &res); + json_object_object_get_ex(res, "services", &services); + size_t nbre_services = json_object_array_length(services); + + if(nbre_services>0){ + check_create_dmmap_package("dmmap_upnp"); + for(i=0; i0?uuid[1]:""); + dmasprintf(&upnp_dev.urn, "%s", lengthurn>0?urn[1]:""); + if ((dmmap_sect = get_dup_section_in_dmmap_opt("dmmap_upnp", "upnp_service", "usn", usn)) == NULL) { + dmuci_add_section_bbfdm("dmmap_upnp", "upnp_service", &dmmap_sect, &v); + DMUCI_SET_VALUE_BY_SECTION(bbfdm, dmmap_sect, "usn", usn); + } + upnp_dev.dmmap_sect= dmmap_sect; + + instance = handle_update_instance(1, dmctx, &instnbr, update_instance_alias_bbfdm, 3, dmmap_sect, "upnp_service_instance", "upnp_service_alias"); + if (DM_LINK_INST_OBJ(dmctx, parent_node, &upnp_dev, instance) == DM_STOP) + return 0; + } + } + return 0; +} + +int browseUPnPDescriptionDeviceDescriptionInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance) +{ + json_object *res, *descriptions, *description; + struct upnp_description_file_info upnp_desc= {}; + char *descurl = NULL, *st = NULL, *usn = NULL, *is_root_device = NULL, *instance = NULL, *instnbr = NULL, *v = NULL; + char **stparams= NULL, **uuid, **urn; + int i, id=0, lengthuuid, lengthurn; + struct uci_section* dmmap_sect= NULL; + + dmubus_call("upnpc", "description", UBUS_ARGS{{}}, 0, &res); + json_object_object_get_ex(res, "descriptions", &descriptions); + size_t nbre_descriptions = json_object_array_length(descriptions); + + if(nbre_descriptions>0){ + check_create_dmmap_package("dmmap_upnp"); + for(i=0; i0){ + check_create_dmmap_package("dmmap_upnp"); + for(i=0; i0){ + check_create_dmmap_package("dmmap_upnp"); + for(i=0; i0){ + for(i=0; iuuid; + return 0; +} + +int get_UPnPDiscoveryRootDevice_USN(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnpdiscovery *dev= (struct upnp_device *)data; + *value= dev->usn; + return 0; +} + +int get_UPnPDiscoveryRootDevice_LeaseTime(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + //TODO + return 0; +} + +int get_UPnPDiscoveryRootDevice_Location(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnpdiscovery *dev= (struct upnp_device *)data; + *value= dev->descurl; + return 0; +} + +int get_UPnPDiscoveryRootDevice_Server(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + //TODO + return 0; +} + +int get_UPnPDiscoveryRootDevice_Host(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + //TODO + return 0; +} + +int get_UPnPDiscoveryRootDevice_LastUpdate(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + //TODO + return 0; +} + +int get_UPnPDiscoveryDevice_Status(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + //TODO + return 0; +} + +int get_UPnPDiscoveryDevice_UUID(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnpdiscovery *dev= (struct upnp_device *)data; + *value= dev->uuid; + return 0; +} + +int get_UPnPDiscoveryDevice_USN(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnpdiscovery *dev= (struct upnp_device *)data; + *value= dev->usn; + return 0; +} + +int get_UPnPDiscoveryDevice_LeaseTime(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + //TODO + return 0; +} + +int get_UPnPDiscoveryDevice_Location(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnpdiscovery *dev= (struct upnp_device *)data; + *value= dev->descurl; + return 0; +} + +int get_UPnPDiscoveryDevice_Server(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + //TODO + return 0; +} + +int get_UPnPDiscoveryDevice_Host(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + //TODO + return 0; +} + +int get_UPnPDiscoveryDevice_LastUpdate(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + //TODO + return 0; +} + +int get_UPnPDiscoveryService_Status(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + //TODO + return 0; +} + +int get_UPnPDiscoveryService_USN(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnpdiscovery *dev= (struct upnp_device *)data; + *value= dev->usn; + return 0; +} + +int get_UPnPDiscoveryService_LeaseTime(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + //TODO + return 0; +} + +int get_UPnPDiscoveryService_Location(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnpdiscovery *dev= (struct upnp_device *)data; + *value= dev->descurl; + return 0; +} + +int get_UPnPDiscoveryService_Server(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + //TODO + return 0; +} + +int get_UPnPDiscoveryService_Host(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + //TODO + return 0; +} + +int get_UPnPDiscoveryService_LastUpdate(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + //TODO + return 0; +} + +int get_UPnPDiscoveryService_ParentDevice(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnpdiscovery *dev= (struct upnp_device *)data; + char *rootdevlink = NULL, *devlink = NULL; + adm_entry_get_linker_param(ctx, dm_print_path("%s%cUPnP%cDiscovery%cRootDevice%c", dmroot, dm_delim, dm_delim, dm_delim, dm_delim), dev->uuid, &rootdevlink); + if(rootdevlink != NULL){ + *value = rootdevlink; + return 0; + } + adm_entry_get_linker_param(ctx, dm_print_path("%s%cUPnP%cDiscovery%cDevice%c", dmroot, dm_delim, dm_delim, dm_delim, dm_delim), dev->uuid, &devlink); + if(devlink != NULL){ + *value = devlink; + return 0; + } + *value = ""; + return 0; +} + +int get_UPnPDescription_DeviceDescriptionNumberOfEntries(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + json_object *res, *descriptions; + dmubus_call("upnpc", "description", UBUS_ARGS{{}}, 0, &res); + json_object_object_get_ex(res, "descriptions", &descriptions); + size_t nbre_descriptions = json_object_array_length(descriptions); + dmasprintf(value, "%d", nbre_descriptions); + return 0; +} + +int get_UPnPDescription_DeviceInstanceNumberOfEntries(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + json_object *res, *devicesinstances; + dmubus_call("upnpc", "description", UBUS_ARGS{{}}, 0, &res); + json_object_object_get_ex(res, "devicesinstances", &devicesinstances); + size_t nbre_devinstances = json_object_array_length(devicesinstances); + dmasprintf(value, "%d", nbre_devinstances); + return 0; +} + +int get_UPnPDescription_ServiceInstanceNumberOfEntries(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + json_object *res, *servicesinstances; + dmubus_call("upnpc", "description", UBUS_ARGS{{}}, 0, &res); + json_object_object_get_ex(res, "servicesinstances", &servicesinstances); + size_t nbre_servinstances = json_object_array_length(servicesinstances); + dmasprintf(value, "%d", nbre_servinstances); + return 0; + return 0; +} + +int get_UPnPDescriptionDeviceDescription_URLBase(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_description_file_info *upnp_desc = (struct upnp_description_file_info *)data; + *value = upnp_desc->desc_url; + return 0; +} + +int get_UPnPDescriptionDeviceDescription_SpecVersion(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + //TODO + return 0; +} + +int get_UPnPDescriptionDeviceDescription_Host(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + //TODO + return 0; +} + +int get_UPnPDescriptionDeviceInstance_UDN(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_device_inst *upnpdevinst = (struct upnp_device_inst *)data; + *value = upnpdevinst->udn; + return 0; +} + +int get_UPnPDescriptionDeviceInstance_ParentDevice(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_device_inst *upnpdevinst= (struct upnp_device_inst *)data; + char *devinstlink = NULL; + adm_entry_get_linker_param(ctx, dm_print_path("%s%cUPnP%cDescription%cDeviceInstance%c", dmroot, dm_delim, dm_delim, dm_delim, dm_delim), upnpdevinst->parentudn, &devinstlink); + if(devinstlink != NULL){ + *value = devinstlink; + return 0; + } + return 0; +} + +int get_UPnPDescriptionDeviceInstance_DiscoveryDevice(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_device_inst *upnpdevinst= (struct upnp_device_inst *)data; + char **udnarray = NULL; + char *rootdevlink = NULL, *devlink = NULL; + int length; + + if(upnpdevinst->udn && upnpdevinst->udn[0]){ + udnarray = strsplit(upnpdevinst->udn, ":", &length); + adm_entry_get_linker_param(ctx, dm_print_path("%s%cUPnP%cDiscovery%cRootDevice%c", dmroot, dm_delim, dm_delim, dm_delim, dm_delim), udnarray[1], &rootdevlink); + if(rootdevlink != NULL){ + *value = rootdevlink; + return 0; + } + adm_entry_get_linker_param(ctx, dm_print_path("%s%cUPnP%cDiscovery%cDevice%c", dmroot, dm_delim, dm_delim, dm_delim, dm_delim), udnarray[1], &devlink); + if(devlink != NULL){ + *value =devlink; + return 0; + } + } + *value = ""; + return 0; +} + +int get_UPnPDescriptionDeviceInstance_DeviceType(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_device_inst *upnpdevinst= (struct upnp_device_inst *)data; + *value = upnpdevinst->device_type; + return 0; +} + +int get_UPnPDescriptionDeviceInstance_FriendlyName(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_device_inst *upnpdevinst= (struct upnp_device_inst *)data; + *value = upnpdevinst->friendly_name; + return 0; +} + +int get_UPnPDescriptionDeviceInstance_DeviceCategory(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + //TODO + return 0; +} + +int get_UPnPDescriptionDeviceInstance_Manufacturer(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_device_inst *upnpdevinst= (struct upnp_device_inst *)data; + *value = upnpdevinst->manufacturer; + return 0; +} + +int get_UPnPDescriptionDeviceInstance_ManufacturerOUI(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + //TODO + return 0; +} + +int get_UPnPDescriptionDeviceInstance_ManufacturerURL(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_device_inst *upnpdevinst= (struct upnp_device_inst *)data; + *value = upnpdevinst->manufacturer_url; + return 0; +} + +int get_UPnPDescriptionDeviceInstance_ModelDescription(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_device_inst *upnpdevinst= (struct upnp_device_inst *)data; + *value = upnpdevinst->model_description; + return 0; +} + +int get_UPnPDescriptionDeviceInstance_ModelName(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_device_inst *upnpdevinst= (struct upnp_device_inst *)data; + *value = upnpdevinst->model_name; + return 0; +} + +int get_UPnPDescriptionDeviceInstance_ModelNumber(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_device_inst *upnpdevinst= (struct upnp_device_inst *)data; + *value = upnpdevinst->model_number; + return 0; +} + +int get_UPnPDescriptionDeviceInstance_ModelURL(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_device_inst *upnpdevinst= (struct upnp_device_inst *)data; + *value = upnpdevinst->model_url; + return 0; +} + +int get_UPnPDescriptionDeviceInstance_SerialNumber(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_device_inst *upnpdevinst= (struct upnp_device_inst *)data; + *value = upnpdevinst->serial_number; + return 0; +} + +int get_UPnPDescriptionDeviceInstance_UPC(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_device_inst *upnpdevinst= (struct upnp_device_inst *)data; + *value = upnpdevinst->upc; + return 0; +} + +int get_UPnPDescriptionDeviceInstance_PresentationURL(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_device_inst *upnpdevinst= (struct upnp_device_inst *)data; + *value = upnpdevinst->preentation_url; + return 0; +} + +int get_UPnPDescriptionServiceInstance_ParentDevice(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_service_inst *upnpserviceinst= (struct upnp_service_inst *)data; + char *devinstlink = NULL; + adm_entry_get_linker_param(ctx, dm_print_path("%s%cUPnP%cDescription%cDeviceInstance%c", dmroot, dm_delim, dm_delim, dm_delim, dm_delim), upnpserviceinst->parentudn, &devinstlink); + if(devinstlink != NULL){ + *value = devinstlink; + return 0; + } + return 0; +} + +int get_UPnPDescriptionServiceInstance_ServiceId(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_service_inst *upnpserviceinst= (struct upnp_service_inst *)data; + *value = upnpserviceinst->serviceid; + return 0; +} + +int get_UPnPDescriptionServiceInstance_ServiceDiscovery(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_service_inst *upnpserviceinst= (struct upnp_service_inst *)data; + char *usn = NULL, *devlink = NULL; + dmasprintf(&usn, "%s::%s", upnpserviceinst->parentudn, upnpserviceinst->servicetype); + if(usn && usn[0]){ + adm_entry_get_linker_param(ctx, dm_print_path("%s%cUPnP%cDiscovery%cService%c", dmroot, dm_delim, dm_delim, dm_delim, dm_delim), usn, &devlink); + if(devlink != NULL){ + *value =devlink; + return 0; + } + } + *value = ""; + return 0; +} + +int get_UPnPDescriptionServiceInstance_ServiceType(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_service_inst *upnpserviceinst= (struct upnp_service_inst *)data; + *value = upnpserviceinst->servicetype; + return 0; +} + +int get_UPnPDescriptionServiceInstance_SCPDURL(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_service_inst *upnpserviceinst= (struct upnp_service_inst *)data; + *value = upnpserviceinst->scpdurl; + return 0; +} + +int get_UPnPDescriptionServiceInstance_ControlURL(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_service_inst *upnpserviceinst= (struct upnp_service_inst *)data; + *value = upnpserviceinst->controlurl; + return 0; +} + +int get_UPnPDescriptionServiceInstance_EventSubURL(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct upnp_service_inst *upnpserviceinst= (struct upnp_service_inst *)data; + *value = upnpserviceinst->eventsuburl; + return 0; +} diff --git a/dmtree/tr181/upnp.h b/dmtree/tr181/upnp.h index 6b0a6e28..ae80146a 100644 --- a/dmtree/tr181/upnp.h +++ b/dmtree/tr181/upnp.h @@ -1,23 +1,175 @@ /* - * Copyright (C) 2019 iopsys Software Solutions AB - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1 - * as published by the Free Software Foundation - * - * Author Imen Bhiri - * - */ +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 2 of the License, or +* (at your option) any later version. +* +* Copyright (C) 2019 iopsys Software Solutions AB +* Author: Amin Ben Ramdhane +*/ #ifndef __UPNP_H #define __UPNP_H -extern DMLEAF tUPnPDeviceParams[]; extern DMOBJ tUPnPObj[]; +extern DMOBJ tUPnPDeviceObj[]; +extern DMLEAF tUPnPDeviceParams[]; +extern DMLEAF tUPnPDeviceCapabilitiesParams[]; +extern DMOBJ tUPnPDiscoveryObj[]; +extern DMLEAF tUPnPDiscoveryParams[]; +extern DMLEAF tUPnPDiscoveryRootDeviceParams[]; +extern DMLEAF tUPnPDiscoveryDeviceParams[]; +extern DMLEAF tUPnPDiscoveryServiceParams[]; +extern DMOBJ tUPnPDescriptionObj[]; +extern DMLEAF tUPnPDescriptionParams[]; +extern DMLEAF tUPnPDescriptionDeviceDescriptionParams[]; +extern DMLEAF tUPnPDescriptionDeviceInstanceParams[]; +extern DMLEAF tUPnPDescriptionServiceInstanceParams[]; -int get_upnp_enable(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +extern struct list_head file_info_list; + +struct upnpdiscovery { + char *st; + char *usn; + char *uuid; + char *urn; + char *descurl; + struct uci_section *dmmap_sect; +}; + +struct upnp_device_inst { + char *device_type; + char *friendly_name; + char *manufacturer; + char *manufacturer_url; + char *model_description; + char *model_name; + char *model_number; + char *model_url; + char *serial_number; + char *udn; + char *uuid; + char *preentation_url; + char *parentudn; + char *upc; + struct uci_section *dmmap_sect; +}; + +struct upnp_service_inst { + char *parentudn; + char *serviceid; + char *servicetype; + char *scpdurl; + char *controlurl; + char *eventsuburl; + struct uci_section *dmmap_sect; +}; + +struct upnp_description_file_info { + char *desc_url; + struct uci_section *dmmap_sect; +}; + +int browseUPnPDiscoveryRootDeviceInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance); +int browseUPnPDiscoveryDeviceInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance); +int browseUPnPDiscoveryServiceInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance); +int browseUPnPDescriptionDeviceDescriptionInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance); +int browseUPnPDescriptionDeviceInstanceInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance); +int browseUPnPDescriptionServiceInstanceInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance); + +int get_UPnPDevice_Enable(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int set_UPnPDevice_Enable(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action); +int get_UPnPDevice_UPnPMediaServer(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int set_UPnPDevice_UPnPMediaServer(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action); +int get_UPnPDevice_UPnPMediaRenderer(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int set_UPnPDevice_UPnPMediaRenderer(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action); +int get_UPnPDevice_UPnPWLANAccessPoint(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int set_UPnPDevice_UPnPWLANAccessPoint(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action); +int get_UPnPDevice_UPnPQoSDevice (char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int set_UPnPDevice_UPnPQoSDevice (char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action); +int get_UPnPDevice_UPnPQoSPolicyHolder(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int set_UPnPDevice_UPnPQoSPolicyHolder(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action); +int get_UPnPDevice_UPnPIGD(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int set_UPnPDevice_UPnPIGD(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action); +int get_UPnPDevice_UPnPDMBasicMgmt(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int set_UPnPDevice_UPnPDMBasicMgmt(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action); +int get_UPnPDevice_UPnPDMConfigurationMgmt(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int set_UPnPDevice_UPnPDMConfigurationMgmt(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action); +int get_UPnPDevice_UPnPDMSoftwareMgmt(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int set_UPnPDevice_UPnPDMSoftwareMgmt(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action); +int get_UPnPDeviceCapabilities_UPnPArchitecture(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDeviceCapabilities_UPnPArchitectureMinorVer(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDeviceCapabilities_UPnPMediaServer(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDeviceCapabilities_UPnPMediaRenderer(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDeviceCapabilities_UPnPWLANAccessPoint(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDeviceCapabilities_UPnPBasicDevice(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDeviceCapabilities_UPnPQoSDevice(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDeviceCapabilities_UPnPQoSPolicyHolder(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDeviceCapabilities_UPnPIGD(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDeviceCapabilities_UPnPDMBasicMgmt(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDeviceCapabilities_UPnPDMConfigurationMgmt(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDeviceCapabilities_UPnPDMSoftwareMgmt(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscovery_RootDeviceNumberOfEntries(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscovery_DeviceNumberOfEntries(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscovery_ServiceNumberOfEntries(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryRootDevice_Status(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryRootDevice_UUID(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryRootDevice_USN(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryRootDevice_LeaseTime(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryRootDevice_Location(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryRootDevice_Server(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryRootDevice_Host(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryRootDevice_LastUpdate(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryDevice_Status(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryDevice_UUID(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryDevice_USN(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryDevice_LeaseTime(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryDevice_Location(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryDevice_Server(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryDevice_Host(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryDevice_LastUpdate(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryService_Status(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryService_USN(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryService_LeaseTime(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryService_Location(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryService_Server(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryService_Host(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryService_LastUpdate(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDiscoveryService_ParentDevice(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescription_DeviceDescriptionNumberOfEntries(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescription_DeviceInstanceNumberOfEntries(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescription_ServiceInstanceNumberOfEntries(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionDeviceDescription_URLBase(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionDeviceDescription_SpecVersion(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionDeviceDescription_Host(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionDeviceInstance_UDN(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionDeviceInstance_ParentDevice(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionDeviceInstance_DiscoveryDevice(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionDeviceInstance_DeviceType(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionDeviceInstance_FriendlyName(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionDeviceInstance_DeviceCategory(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionDeviceInstance_Manufacturer(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionDeviceInstance_ManufacturerOUI(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionDeviceInstance_ManufacturerURL(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionDeviceInstance_ModelDescription(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionDeviceInstance_ModelName(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionDeviceInstance_ModelNumber(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionDeviceInstance_ModelURL(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionDeviceInstance_SerialNumber(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionDeviceInstance_UPC(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionDeviceInstance_PresentationURL(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionServiceInstance_ParentDevice(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionServiceInstance_ServiceId(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionServiceInstance_ServiceDiscovery(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionServiceInstance_ServiceType(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionServiceInstance_SCPDURL(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionServiceInstance_ControlURL(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); +int get_UPnPDescriptionServiceInstance_EventSubURL(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); int get_upnp_status(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value); -int set_upnp_enable(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action); +int get_root_device_linker(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker); +int get_device_linker(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker); +int get_device_instance_linker(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker); +int get_service_linker(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker); +#endif //__UPNP_H -#endif diff --git a/libbbf_api/dmcommon.c b/libbbf_api/dmcommon.c index bd6b1e8d..9de5330a 100644 --- a/libbbf_api/dmcommon.c +++ b/libbbf_api/dmcommon.c @@ -1591,6 +1591,44 @@ char **strsplit(const char* str, const char* delim, size_t* numtokens) return tokens; } +char **strsplit_by_str(const char str[], char *delim) +{ + char *substr= NULL; //strstr(str, delim); + size_t tokens_alloc = 1; + size_t tokens_used = 0; + char **tokens = calloc(tokens_alloc, sizeof(char*)); + char *strparse= strdup(str); + do { + substr= strstr(strparse, delim); + if(substr == NULL && (strparse == NULL || strparse[0] == '\0')) + break; + if(substr == NULL) + { + substr= strdup(strparse); + tokens[tokens_used]= calloc(strlen(substr)+1, sizeof(char)); + strncpy(tokens[tokens_used], strparse, strlen(strparse)); + free(strparse); + strparse= NULL; + break; + } + if (tokens_used == tokens_alloc) { + if(strparse == NULL) + tokens_alloc++; + else + tokens_alloc += 2; + tokens = realloc(tokens, tokens_alloc * sizeof(char*)); + } + tokens[tokens_used]= calloc(substr-strparse+1, sizeof(char)); + strncpy(tokens[tokens_used], strparse, substr-strparse); + tokens_used++; + free(strparse); + strparse= NULL; + strparse= strdup(substr+strlen(delim)); + } while( substr != NULL); + return tokens; +} + + char *get_macaddr(char *interface_name) { json_object *res; diff --git a/libbbf_api/dmcommon.h b/libbbf_api/dmcommon.h index c21e259f..1ad155ed 100644 --- a/libbbf_api/dmcommon.h +++ b/libbbf_api/dmcommon.h @@ -210,6 +210,7 @@ void update_dmmap_sections(struct list_head *dup_list, char *instancename, char* unsigned char isdigit_str(char *str); char *dm_strword(char *src, char *str); char **strsplit(const char* str, const char* delim, size_t* numtokens); +char **strsplit_by_str(const char str[], char *delim); char *get_macaddr(char *ifname); char *get_device(char *ifname); int is_elt_exit_in_str_list(char *str_list, char *elt);