upnp_intel.hpp
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:5k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * Upnp_intel.hpp :  UPnP discovery module (Intel SDK) header
  3.  *****************************************************************************
  4.  * Copyright (C) 2004-2008 the VideoLAN team
  5.  * $Id: f78e0545d9b5ab4737057d516198abd6009d2009 $
  6.  *
  7.  * Authors: Rémi Denis-Courmont <rem # videolan.org> (original plugin)
  8.  *          Christian Henz <henz # c-lab.de>
  9.  *          Mirsal Ennaime <mirsal dot ennaime at gmail dot com>
  10.  *
  11.  * UPnP Plugin using the Intel SDK (libupnp) instead of CyberLink
  12.  *
  13.  * This program is free software; you can redistribute it and/or modify
  14.  * it under the terms of the GNU General Public License as published by
  15.  * the Free Software Foundation; either version 2 of the License, or
  16.  * (at your option) any later version.
  17.  *
  18.  * This program is distributed in the hope that it will be useful,
  19.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  20.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21.  * GNU General Public License for more details.
  22.  *
  23.  * You should have received a copy of the GNU General Public License
  24.  * along with this program; if not, write to the Free Software
  25.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  26.  *****************************************************************************/
  27. #include <vector>
  28. #include <string>
  29. #include <upnp/upnp.h>
  30. #include <upnp/upnptools.h>
  31. #include <vlc_common.h>
  32. // Classes
  33. class Container;
  34. class Lockable
  35. {
  36. public:
  37.     Lockable()
  38.     {
  39.         vlc_mutex_init( &_mutex );
  40.     }
  41.     ~Lockable()
  42.     {
  43.         vlc_mutex_destroy( &_mutex );
  44.     }
  45.     void lock() { vlc_mutex_lock( &_mutex ); }
  46.     void unlock() { vlc_mutex_unlock( &_mutex ); }
  47. private:
  48.     vlc_mutex_t _mutex;
  49. };
  50. class Locker
  51. {
  52. public:
  53.     Locker( Lockable* l )
  54.     {
  55.         _lockable = l;
  56.         _lockable->lock();
  57.     }
  58.     ~Locker()
  59.     {
  60.         _lockable->unlock();
  61.     }
  62. private:
  63.     Lockable* _lockable;
  64. };
  65. class MediaServer
  66. {
  67. public:
  68.     static void parseDeviceDescription( IXML_Document* doc,
  69.                                         const char*    location,
  70.                                         services_discovery_t* p_sd );
  71.     MediaServer( const char* UDN,
  72.                  const char* friendlyName,
  73.                  services_discovery_t* p_sd );
  74.     ~MediaServer();
  75.     const char* getUDN() const;
  76.     const char* getFriendlyName() const;
  77.     void setContentDirectoryEventURL( const char* url );
  78.     const char* getContentDirectoryEventURL() const;
  79.     void setContentDirectoryControlURL( const char* url );
  80.     const char* getContentDirectoryControlURL() const;
  81.     void subscribeToContentDirectory();
  82.     void fetchContents();
  83.     void setInputItem( input_item_t* p_input_item );
  84.     bool compareSID( const char* sid );
  85. private:
  86.     bool _fetchContents( Container* parent );
  87.     void _buildPlaylist( Container* container );
  88.     IXML_Document* _browseAction( const char*, const char*,
  89.             const char*, const char*, const char*, const char* );
  90.     services_discovery_t* _p_sd;
  91.     Container* _contents;
  92.     input_item_t* _inputItem;
  93.     std::string _UDN;
  94.     std::string _friendlyName;
  95.     std::string _contentDirectoryEventURL;
  96.     std::string _contentDirectoryControlURL;
  97.     int _subscriptionTimeOut;
  98.     Upnp_SID _subscriptionID;
  99. };
  100. class MediaServerList
  101. {
  102. public:
  103.     MediaServerList( services_discovery_t* p_sd );
  104.     ~MediaServerList();
  105.     bool addServer( MediaServer* s );
  106.     void removeServer( const char* UDN );
  107.     MediaServer* getServer( const char* UDN );
  108.     MediaServer* getServerBySID( const char* );
  109. private:
  110.     services_discovery_t* _p_sd;
  111.     std::vector<MediaServer*> _list;
  112. };
  113. class Item
  114. {
  115. public:
  116.     Item( Container*  parent,
  117.           const char* objectID,
  118.           const char* title,
  119.           const char* resource );
  120.     ~Item();
  121.     const char* getObjectID() const;
  122.     const char* getTitle() const;
  123.     const char* getResource() const;
  124.     void setInputItem( input_item_t* p_input_item );
  125.     input_item_t* getInputItem() const ;
  126. private:
  127.     input_item_t* _inputItem;
  128.     Container* _parent;
  129.     std::string _objectID;
  130.     std::string _title;
  131.     std::string _resource;
  132. };
  133. class Container
  134. {
  135. public:
  136.     Container( Container* parent, const char* objectID, const char* title );
  137.     ~Container();
  138.     void addItem( Item* item );
  139.     void addContainer( Container* container );
  140.     const char* getObjectID() const;
  141.     const char* getTitle() const;
  142.     unsigned int getNumItems() const;
  143.     unsigned int getNumContainers() const;
  144.     Item* getItem( unsigned int i ) const;
  145.     Container* getContainer( unsigned int i ) const;
  146.     Container* getParent();
  147.     void setInputItem( input_item_t* p_input_item );
  148.     input_item_t* getInputItem() const;
  149. private:
  150.     input_item_t* _inputItem;
  151.     Container* _parent;
  152.     std::string _objectID;
  153.     std::string _title;
  154.     std::vector<Item*> _items;
  155.     std::vector<Container*> _containers;
  156. };