📄 gupnp-device-info.c
字号:
/* * Copyright (C) 2006, 2007, 2008 OpenedHand Ltd. * * Author: Jorn Baayen <jorn@openedhand.com> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. *//** * SECTION:gupnp-device-info * @short_description: Base abstract class for querying device information. * * The #GUPnPDeviceInfo base abstract class provides methods for querying * device information. */#include <string.h>#include "gupnp-device-info.h"#include "gupnp-device-info-private.h"#include "gupnp-resource-factory-private.h"#include "xml-util.h"G_DEFINE_ABSTRACT_TYPE (GUPnPDeviceInfo, gupnp_device_info, G_TYPE_OBJECT);struct _GUPnPDeviceInfoPrivate { GUPnPResourceFactory *factory; GUPnPContext *context; char *location; char *udn; char *device_type; SoupURI *url_base; XmlDocWrapper *doc; xmlNode *element;};enum { PROP_0, PROP_RESOURCE_FACTORY, PROP_CONTEXT, PROP_LOCATION, PROP_UDN, PROP_DEVICE_TYPE, PROP_URL_BASE, PROP_DOCUMENT, PROP_ELEMENT};static voidgupnp_device_info_init (GUPnPDeviceInfo *info){ info->priv = G_TYPE_INSTANCE_GET_PRIVATE (info, GUPNP_TYPE_DEVICE_INFO, GUPnPDeviceInfoPrivate);}static voidgupnp_device_info_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec){ GUPnPDeviceInfo *info; info = GUPNP_DEVICE_INFO (object); switch (property_id) { case PROP_RESOURCE_FACTORY: info->priv->factory = GUPNP_RESOURCE_FACTORY (g_value_dup_object (value)); break; case PROP_CONTEXT: info->priv->context = g_object_ref (g_value_get_object (value)); break; case PROP_LOCATION: info->priv->location = g_value_dup_string (value); break; case PROP_UDN: info->priv->udn = g_value_dup_string (value); break; case PROP_DEVICE_TYPE: info->priv->device_type = g_value_dup_string (value); break; case PROP_URL_BASE: info->priv->url_base = g_value_get_pointer (value); if (info->priv->url_base) info->priv->url_base = soup_uri_copy (info->priv->url_base); break; case PROP_DOCUMENT: info->priv->doc = g_value_get_object (value); if (info->priv->doc) g_object_ref_sink (info->priv->doc); break; case PROP_ELEMENT: info->priv->element = g_value_get_pointer (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; }}static voidgupnp_device_info_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec){ GUPnPDeviceInfo *info; info = GUPNP_DEVICE_INFO (object); switch (property_id) { case PROP_RESOURCE_FACTORY: g_value_set_object (value, info->priv->factory); break; case PROP_CONTEXT: g_value_set_object (value, info->priv->context); break; case PROP_LOCATION: g_value_set_string (value, info->priv->location); break; case PROP_UDN: g_value_set_string (value, gupnp_device_info_get_udn (info)); break; case PROP_DEVICE_TYPE: g_value_set_string (value, gupnp_device_info_get_device_type (info)); break; case PROP_URL_BASE: g_value_set_pointer (value, info->priv->url_base); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; }}static voidgupnp_device_info_dispose (GObject *object){ GUPnPDeviceInfo *info; info = GUPNP_DEVICE_INFO (object); if (info->priv->factory) { g_object_unref (info->priv->factory); info->priv->factory = NULL; } if (info->priv->context) { g_object_unref (info->priv->context); info->priv->context = NULL; } if (info->priv->doc) { g_object_unref (info->priv->doc); info->priv->doc = NULL; }}static voidgupnp_device_info_finalize (GObject *object){ GUPnPDeviceInfo *info; info = GUPNP_DEVICE_INFO (object); g_free (info->priv->location); g_free (info->priv->udn); g_free (info->priv->device_type); soup_uri_free (info->priv->url_base);}static voidgupnp_device_info_class_init (GUPnPDeviceInfoClass *klass){ GObjectClass *object_class; object_class = G_OBJECT_CLASS (klass); object_class->set_property = gupnp_device_info_set_property; object_class->get_property = gupnp_device_info_get_property; object_class->dispose = gupnp_device_info_dispose; object_class->finalize = gupnp_device_info_finalize; g_type_class_add_private (klass, sizeof (GUPnPDeviceInfoPrivate)); /** * GUPnPDeviceInfo:resource-factory * * The resource factory to use. Set to NULL for default factory. **/ g_object_class_install_property (object_class, PROP_RESOURCE_FACTORY, g_param_spec_object ("resource-factory", "Resource Factory", "The resource factory to use", GUPNP_TYPE_RESOURCE_FACTORY, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); /** * GUPnPDeviceInfo:context * * The #GUPnPContext to use. **/ g_object_class_install_property (object_class, PROP_CONTEXT, g_param_spec_object ("context", "Context", "The GUPnPContext", GUPNP_TYPE_CONTEXT, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); /** * GUPnPDeviceInfo:location * * The location of the device description file. **/ g_object_class_install_property (object_class, PROP_LOCATION, g_param_spec_string ("location", "Location", "The location of the device description " "file", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); /** * GUPnPDeviceInfo:udn * * The UDN of this device. **/ g_object_class_install_property (object_class, PROP_UDN, g_param_spec_string ("udn", "UDN", "The UDN", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); /** * GUPnPDeviceInfo:device-type * * The device type. **/ g_object_class_install_property (object_class, PROP_DEVICE_TYPE, g_param_spec_string ("device-type", "Device type", "The device type", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); /** * GUPnPDeviceInfo:url-base * * The URL base (#SoupURI). **/ g_object_class_install_property (object_class, PROP_URL_BASE, g_param_spec_pointer ("url-base", "URL base", "The URL base", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); /** * GUPnPDeviceInfo:document * * Private property. * * Stability: Private **/ g_object_class_install_property (object_class, PROP_DOCUMENT, g_param_spec_object ("document", "Document", "The XML document related to this " "device", TYPE_XML_DOC_WRAPPER, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); /** * GUPnPDeviceInfo:element * * Private property. * * Stability: Private **/ g_object_class_install_property (object_class, PROP_ELEMENT, g_param_spec_pointer ("element", "Element", "The XML element related to this " "device", G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));}/** * gupnp_device_info_get_resource_factory * @device_info: A #GUPnPDeviceInfo * * Get the #GUPnPResourceFactory used by the @device_info. * * Returns: A #GUPnPResourceFactory. **/GUPnPResourceFactory *gupnp_device_info_get_resource_factory (GUPnPDeviceInfo *info){ g_return_val_if_fail (GUPNP_IS_DEVICE_INFO (info), NULL); return info->priv->factory;}/** * gupnp_device_info_get_context * @info: A #GUPnPDeviceInfo * * Get the associated #GUPnPContext. * * Returns: A #GUPnPContext. **/GUPnPContext *gupnp_device_info_get_context (GUPnPDeviceInfo *info){ g_return_val_if_fail (GUPNP_IS_DEVICE_INFO (info), NULL); return info->priv->context;}/** * gupnp_device_info_get_location * @info: A #GUPnPDeviceInfo * * Get the location of the device description file. * * Returns: A constant string. **/const char *gupnp_device_info_get_location (GUPnPDeviceInfo *info){ g_return_val_if_fail (GUPNP_IS_DEVICE_INFO (info), NULL); return info->priv->location;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -