⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gupnp-device.c

📁 另一 UPNP SDK 支持在UNIX/LINUX上运行。 UPnP是一种网络协议
💻 C
字号:
/* * Copyright (C) 2007 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 * @short_description: Class for device implementations. * * #GUPnPDevice allows for retrieving a device's subdevices * and services. #GUPnPDevice implements the #GUPnPDeviceInfo * interface. */#include <string.h>#include "gupnp-device.h"#include "gupnp-service.h"#include "gupnp-root-device.h"#include "gupnp-resource-factory-private.h"#include "xml-util.h"G_DEFINE_TYPE (GUPnPDevice,               gupnp_device,               GUPNP_TYPE_DEVICE_INFO);struct _GUPnPDevicePrivate {        GUPnPRootDevice *root_device;};enum {        PROP_0,        PROP_ROOT_DEVICE};static GUPnPDeviceInfo *gupnp_device_get_device (GUPnPDeviceInfo *info,                         xmlNode         *element){        GUPnPDevice          *device;        GUPnPResourceFactory *factory;        GUPnPContext         *context;        GUPnPDevice          *root_device;        const char           *location;        const SoupURI        *url_base;        device = GUPNP_DEVICE (info);        root_device = device->priv->root_device ?                      GUPNP_DEVICE (device->priv->root_device) : device;        factory = gupnp_device_info_get_resource_factory (info);        context = gupnp_device_info_get_context (info);        location = gupnp_device_info_get_location (info);        url_base = gupnp_device_info_get_url_base (info);        device = gupnp_resource_factory_create_device (factory,                                                       context,                                                       root_device,                                                       element,                                                       NULL,                                                       location,                                                       url_base);        return GUPNP_DEVICE_INFO (device);}static GUPnPServiceInfo *gupnp_device_get_service (GUPnPDeviceInfo *info,                          xmlNode         *element){        GUPnPDevice          *device;        GUPnPService         *service;        GUPnPResourceFactory *factory;        GUPnPContext         *context;        GUPnPDevice          *root_device;        const char           *location, *udn;        const SoupURI        *url_base;        device = GUPNP_DEVICE (info);        root_device = device->priv->root_device ?                      GUPNP_DEVICE (device->priv->root_device) : device;        factory = gupnp_device_info_get_resource_factory (info);        context = gupnp_device_info_get_context (info);        udn = gupnp_device_info_get_udn (info);        location = gupnp_device_info_get_location (info);        url_base = gupnp_device_info_get_url_base (info);        service = gupnp_resource_factory_create_service (factory,                                                         context,                                                         root_device,                                                         element,                                                         udn,                                                         location,                                                         url_base);        return GUPNP_SERVICE_INFO (service);}static voidgupnp_device_set_property (GObject      *object,                           guint         property_id,                           const GValue *value,                           GParamSpec   *pspec){        GUPnPDevice *device;        device = GUPNP_DEVICE (object);        switch (property_id) {        case PROP_ROOT_DEVICE:                device->priv->root_device = g_value_get_object (value);                /* This can be NULL in which case *this* is the root device */                if (device->priv->root_device)                        g_object_ref (device->priv->root_device);                break;        default:                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);                break;        }}static voidgupnp_device_get_property (GObject    *object,                           guint       property_id,                           GValue     *value,                           GParamSpec *pspec){        GUPnPDevice *device;        device = GUPNP_DEVICE (object);        switch (property_id) {        case PROP_ROOT_DEVICE:                g_value_set_object (value, device->priv->root_device);                break;        default:                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);                break;        }}static voidgupnp_device_dispose (GObject *object){        GUPnPDevice *device;        GObjectClass *object_class;        device = GUPNP_DEVICE (object);        if (device->priv->root_device) {                g_object_unref (device->priv->root_device);                device->priv->root_device = NULL;        }        /* Call super */        object_class = G_OBJECT_CLASS (gupnp_device_parent_class);        object_class->dispose (object);}static voidgupnp_device_init (GUPnPDevice *device){        device->priv = G_TYPE_INSTANCE_GET_PRIVATE (device,                                                    GUPNP_TYPE_DEVICE,                                                    GUPnPDevicePrivate);}static voidgupnp_device_class_init (GUPnPDeviceClass *klass){        GObjectClass *object_class;        GUPnPDeviceInfoClass *info_class;        object_class = G_OBJECT_CLASS (klass);        object_class->set_property = gupnp_device_set_property;        object_class->get_property = gupnp_device_get_property;        object_class->dispose      = gupnp_device_dispose;        info_class = GUPNP_DEVICE_INFO_CLASS (klass);        info_class->get_device  = gupnp_device_get_device;        info_class->get_service = gupnp_device_get_service;        g_type_class_add_private (klass, sizeof (GUPnPDevicePrivate));        /**         * GUPnPDevice:root-device         *         * The containing #GUPnPRootDevice, or NULL if this is the root         * device.         **/        g_object_class_install_property                (object_class,                 PROP_ROOT_DEVICE,                 g_param_spec_object ("root-device",                                      "Root device",                                      "The GUPnPRootDevice",                                      GUPNP_TYPE_ROOT_DEVICE,                                      G_PARAM_READWRITE |                                      G_PARAM_CONSTRUCT_ONLY |                                      G_PARAM_STATIC_NAME |                                      G_PARAM_STATIC_NICK |                                      G_PARAM_STATIC_BLURB));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -