home *** CD-ROM | disk | FTP | other *** search
/ mail.altrad.com / 2015.02.mail.altrad.com.tar / mail.altrad.com / TEST / vlc-2-0-5-win32.exe / sdk / include / vlc / plugins / vlc_services_discovery.h < prev    next >
C/C++ Source or Header  |  2012-12-12  |  6KB  |  185 lines

  1. /*****************************************************************************
  2.  * vlc_services_discovery.h : Services Discover functions
  3.  *****************************************************************************
  4.  * Copyright (C) 1999-2004 VLC authors and VideoLAN
  5.  * $Id: 22df2fc8fd77c2036763a6202c784006dd6c44d7 $
  6.  *
  7.  * Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify it
  10.  * under the terms of the GNU Lesser General Public License as published by
  11.  * the Free Software Foundation; either version 2.1 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17.  * GNU Lesser General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU Lesser General Public License
  20.  * along with this program; if not, write to the Free Software Foundation,
  21.  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23.  
  24. #ifndef VLC_SERVICES_DISCOVERY_H_
  25. #define VLC_SERVICES_DISCOVERY_H_
  26.  
  27. #include <vlc_input.h>
  28. #include <vlc_events.h>
  29. #include <vlc_probe.h>
  30.  
  31. /**
  32.  * \file
  33.  * This file lists functions and structures for service discovery (SD) in vlc
  34.  */
  35.  
  36. # ifdef __cplusplus
  37. extern "C" {
  38. # endif
  39.  
  40. /**
  41.  * @{
  42.  */
  43.  
  44. /**
  45.  * Main service discovery structure to build a SD module
  46.  */
  47. struct services_discovery_t
  48. {
  49.     VLC_COMMON_MEMBERS
  50.     module_t *          p_module;             /**< Loaded module */
  51.  
  52.     /**< Event manager
  53.      * You should access it through setters, outside of the core */
  54.     vlc_event_manager_t event_manager;
  55.  
  56.     char *psz_name;                           /**< Main name of the SD */
  57.     config_chain_t *p_cfg;                    /**< Configuration for the SD */
  58.  
  59.     /** Control function
  60.      * \see services_discovery_command_e
  61.      */
  62.     int ( *pf_control ) ( services_discovery_t *, int, va_list );
  63.  
  64.     services_discovery_sys_t *p_sys;          /**< Custom private data */
  65. };
  66.  
  67. /**
  68.  * Service discovery categories
  69.  * \see vlc_sd_probe_Add
  70.  */
  71. enum services_discovery_category_e
  72. {
  73.     SD_CAT_DEVICES = 1,           /**< Devices, like portable music players */
  74.     SD_CAT_LAN,                   /**< LAN/WAN services, like Upnp or SAP */
  75.     SD_CAT_INTERNET,              /**< Internet or Website channels services */
  76.     SD_CAT_MYCOMPUTER             /**< Computer services, like Discs or Apps */
  77. };
  78.  
  79. /**
  80.  * Service discovery control commands
  81.  */
  82. enum services_discovery_command_e
  83. {
  84.     SD_CMD_SEARCH = 1,          /**< arg1 = query */
  85.     SD_CMD_DESCRIPTOR           /**< arg1 = services_discovery_descriptor_t* */
  86. };
  87.  
  88. /**
  89.  * Service discovery capabilities
  90.  */
  91. enum services_discovery_capability_e
  92. {
  93.     SD_CAP_SEARCH = 1           /**< One can search in the SD */
  94. };
  95.  
  96. /**
  97.  * Service discovery descriptor
  98.  * \see services_discovery_command_e
  99.  */
  100. typedef struct
  101. {
  102.     char *psz_short_desc;       /**< The short description, human-readable */
  103.     char *psz_icon_url;         /**< URL to the icon that represents it */
  104.     char *psz_url;              /**< URL for the service */
  105.     int   i_capabilities;       /**< \see services_discovery_capability_e */
  106. } services_discovery_descriptor_t;
  107.  
  108.  
  109. /***********************************************************************
  110.  * Service Discovery
  111.  ***********************************************************************/
  112.  
  113. /**
  114.  * Ask for a research in the SD
  115.  * @param p_sd: the Service Discovery
  116.  * @param i_control: the command to issue
  117.  * @param args: the argument list
  118.  * @return VLC_SUCCESS in case of success, the error code overwise
  119.  */
  120. static inline int vlc_sd_control( services_discovery_t *p_sd, int i_control, va_list args )
  121. {
  122.     if( p_sd->pf_control )
  123.         return p_sd->pf_control( p_sd, i_control, args );
  124.     else
  125.         return VLC_EGENERIC;
  126. }
  127.  
  128. /* Get the services discovery modules names to use in Create(), in a null
  129.  * terminated string array. Array and string must be freed after use. */
  130. VLC_API char ** vlc_sd_GetNames( vlc_object_t *, char ***, int ** ) VLC_USED;
  131. #define vlc_sd_GetNames(obj, pln, pcat ) \
  132.         vlc_sd_GetNames(VLC_OBJECT(obj), pln, pcat)
  133.  
  134. /* Creation of a services_discovery object */
  135. VLC_API services_discovery_t * vlc_sd_Create( vlc_object_t *, const char * ) VLC_USED;
  136. VLC_API bool vlc_sd_Start( services_discovery_t * );
  137. VLC_API void vlc_sd_Stop( services_discovery_t * );
  138. VLC_API void vlc_sd_Destroy( services_discovery_t * );
  139.  
  140. /**
  141.  * Helper to stop and destroy the Service Discovery
  142.  */
  143. static inline void vlc_sd_StopAndDestroy( services_discovery_t * p_this )
  144. {
  145.     vlc_sd_Stop( p_this );
  146.     vlc_sd_Destroy( p_this );
  147. }
  148.  
  149. /* Read info from discovery object */
  150. VLC_API char * services_discovery_GetLocalizedName( services_discovery_t * p_this ) VLC_USED;
  151.  
  152. /* Receive event notification (preferred way to get new items) */
  153. VLC_API vlc_event_manager_t * services_discovery_EventManager( services_discovery_t * p_this ) VLC_USED;
  154.  
  155. /* Used by services_discovery to post update about their items */
  156.     /* About the psz_category, it is a legacy way to add info to the item,
  157.      * for more options, directly set the (meta) data on the input item */
  158. VLC_API void services_discovery_AddItem( services_discovery_t * p_this, input_item_t * p_item, const char * psz_category );
  159. VLC_API void services_discovery_RemoveItem( services_discovery_t * p_this, input_item_t * p_item );
  160.  
  161.  
  162. /* SD probing */
  163.  
  164. VLC_API int vlc_sd_probe_Add(vlc_probe_t *, const char *, const char *, int category);
  165.  
  166. #define VLC_SD_PROBE_SUBMODULE \
  167.     add_submodule() \
  168.         set_capability( "services probe", 100 ) \
  169.         set_callbacks( vlc_sd_probe_Open, NULL )
  170.  
  171. #define VLC_SD_PROBE_HELPER(name, longname, cat) \
  172. static int vlc_sd_probe_Open (vlc_object_t *obj) \
  173. { \
  174.     return vlc_sd_probe_Add ((struct vlc_probe_t *)obj, \
  175.                              name "{longname=\"" longname "\"}", \
  176.                              longname, cat); \
  177. }
  178.  
  179. /** @} */
  180. # ifdef __cplusplus
  181. }
  182. # endif
  183.  
  184. #endif
  185.