1 /*****************************************************************************
2 * upnp.hpp : UPnP discovery module (libupnp) header
3 *****************************************************************************
4 * Copyright (C) 2004-2010 the VideoLAN team
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>
11 * UPnP Plugin using the Intel SDK (libupnp) instead of CyberLink
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.
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.
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 *****************************************************************************/
31 #include <upnp/upnp.h>
32 #include <upnp/upnptools.h>
34 #include <vlc_common.h>
43 static void parseDeviceDescription( IXML_Document* p_doc,
44 const char* psz_location,
45 services_discovery_t* p_sd );
47 MediaServer( const char* psz_udn,
48 const char* psz_friendly_name,
49 services_discovery_t* p_sd );
53 const char* getUDN() const;
54 const char* getFriendlyName() const;
56 void setContentDirectoryEventURL( const char* psz_url );
57 const char* getContentDirectoryEventURL() const;
59 void setContentDirectoryControlURL( const char* psz_url );
60 const char* getContentDirectoryControlURL() const;
62 void subscribeToContentDirectory();
65 void setInputItem( input_item_t* p_input_item );
66 input_item_t* getInputItem() const;
68 bool compareSID( const char* psz_sid );
72 bool _fetchContents( Container* p_parent );
73 void _buildPlaylist( Container* p_container, input_item_node_t *p_item_node );
75 IXML_Document* _browseAction( const char*, const char*,
76 const char*, const char*, const char*, const char* );
78 services_discovery_t* _p_sd;
80 Container* _p_contents;
81 input_item_t* _p_input_item;
84 std::string _friendly_name;
86 std::string _content_directory_event_url;
87 std::string _content_directory_control_url;
89 int _i_subscription_timeout;
90 int _i_content_directory_service_version;
91 Upnp_SID _subscription_id;
99 MediaServerList( services_discovery_t* p_sd );
102 bool addServer( MediaServer* p_server );
103 void removeServer( const char* psz_udn );
105 MediaServer* getServer( const char* psz_udn );
106 MediaServer* getServerBySID( const char* psz_sid );
110 services_discovery_t* _p_sd;
112 std::vector<MediaServer*> _list;
120 Item( Container* parent,
121 const char* objectID,
123 const char* resource,
127 const char* getObjectID() const;
128 const char* getTitle() const;
129 const char* getResource() const;
130 mtime_t getDuration() const;
132 void setInputItem( input_item_t* p_input_item );
136 input_item_t* _p_input_item;
139 std::string _objectID;
141 std::string _resource;
150 Container( Container* parent, const char* objectID, const char* title );
153 void addItem( Item* item );
154 void addContainer( Container* container );
156 const char* getObjectID() const;
157 const char* getTitle() const;
159 unsigned int getNumItems() const;
160 unsigned int getNumContainers() const;
162 Item* getItem( unsigned int i ) const;
163 Container* getContainer( unsigned int i ) const;
164 Container* getParent();
166 void setInputItem( input_item_t* p_input_item );
167 input_item_t* getInputItem() const;
171 input_item_t* _p_input_item;
175 std::string _objectID;
177 std::vector<Item*> _items;
178 std::vector<Container*> _containers;