quvi.h
Go to the documentation of this file.
00001 /* quvi
00002  * Copyright (C) 2009,2010,2011  Toni Gundogdu <legatvs@gmail.com>
00003  *
00004  * This library is free software; you can redistribute it and/or
00005  * modify it under the terms of the GNU Lesser General Public
00006  * License as published by the Free Software Foundation; either
00007  * version 2.1 of the License, or (at your option) any later version.
00008  *
00009  * This library is distributed in the hope that it will be useful,
00010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012  * Lesser General Public License for more details.
00013  *
00014  * You should have received a copy of the GNU Lesser General Public
00015  * License along with this library; if not, write to the Free Software
00016  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
00017  * 02110-1301  USA
00018  */
00019 
00033 #ifndef quvi_h
00034 #define quvi_h
00035 
00036 #ifndef DOXY_SKIP
00037 #include <stdlib.h>
00038 #include <stdint.h> /* C99 header */
00039 #endif
00040 
00047 typedef enum
00048 {
00049   QUVI_VERSION = 0x00,    
00050   QUVI_VERSION_LONG       
00051 } QUVIversion;
00052 
00054 typedef enum
00055 {
00056   /* Static error messages. */
00057   QUVI_OK  = 0x00,        
00058   QUVI_MEM,               
00059   QUVI_BADHANDLE,         
00060   QUVI_INVARG,            
00061   QUVI_CURLINIT,          
00062   QUVI_LAST,              
00063   QUVI_ABORTEDBYCALLBACK, 
00064   QUVI_LUAINIT,           
00065   QUVI_NOLUAWEBSITE,      
00066   QUVI_NOLUAUTIL,         
00067   _INTERNAL_QUVI_LAST,    
00068   /* Non-static error messages. */
00069   QUVI_PCRE = 0x40, 
00070   QUVI_NOSUPPORT,   
00071   QUVI_CALLBACK,
00076   QUVI_ICONV,       
00077   QUVI_LUA,         
00079   /* Deprecated as of 0.2.16. Note that these exist only for
00080    * backward-compatibility. Destined to be removed in 0.2.20. */
00081 
00082   QUVI_CURL = 0x42
00086 } QUVIcode;
00087 
00089 typedef enum
00090 {
00091   QUVISTATUS_FETCH  = 0x00, 
00092   QUVISTATUS_VERIFY,        
00093   QUVISTATUS_RESOLVE,       
00095   /* Add new ones below. */
00096 
00097   /* Deprecated as of 0.2.16. Note that these exist only for
00098    * backward-compatibility. Destined to be removed in 0.2.20. */
00099 
00100   QUVISTATUS_SHORTENED = 0x2
00104 } QUVIstatus;
00105 
00107 typedef enum
00108 {
00109   /* QUVISTATUS_FETCH */
00110 
00111   QUVISTATUSTYPE_PAGE = 0x00,   
00112   QUVISTATUSTYPE_CONFIG,        
00113   QUVISTATUSTYPE_PLAYLIST,      
00115   /* Common types */
00116   QUVISTATUSTYPE_DONE           
00118   /* Add new ones below */
00119 } QUVIstatusType;
00120 
00122 typedef enum
00123 {
00124   QUVIOPT_FORMAT = 0x00,
00132   QUVIOPT_NOVERIFY,
00136   QUVIOPT_STATUSFUNCTION,
00140   QUVIOPT_WRITEFUNCTION,
00144   QUVIOPT_NORESOLVE,
00148   QUVIOPT_CATEGORY,
00151   QUVIOPT_FETCHFUNCTION,
00155   QUVIOPT_RESOLVEFUNCTION,
00159   QUVIOPT_VERIFYFUNCTION,
00163   /* Deprecated as of 0.2.16. Note that these exist only for
00164    * backward-compatibility. Destined to be removed in 0.2.20. */
00165 
00166   QUVIOPT_NOSHORTENED = 0x4
00170 } QUVIoption;
00171 
00172 #define QUVIINFO_VOID       0x100000 
00173 #define QUVIINFO_LONG       0x200000 
00174 #define QUVIINFO_STRING     0x300000 
00175 #define QUVIINFO_DOUBLE     0x400000 
00176 #define QUVIINFO_TYPEMASK   0xf00000 
00189 typedef enum
00190 {
00191   QUVIPROTO_HTTP = 0x1, 
00192   QUVIPROTO_MMS  = 0x2, 
00193   QUVIPROTO_RTSP = 0x4, 
00194   QUVIPROTO_RTMP = 0x8, 
00195   QUVIPROTO_ALL  =
00196   (QUVIPROTO_HTTP|QUVIPROTO_MMS|QUVIPROTO_RTSP|QUVIPROTO_RTMP)
00198 } QUVIcategory;
00199 
00218 typedef enum
00219 {
00220   QUVIINFO_NONE = 0x00,
00223   QUVIINFO_CURL = QUVIINFO_VOID + 1,
00226   QUVIINFO_RESPONSECODE = QUVIINFO_LONG + 3,
00229   /* Deprecated as of 0.2.16. Note that these exist only for
00230    * backward-compatibility. Destined to be removed in 0.2.20. */
00231 
00232   QUVIINFO_CURLCODE = QUVIINFO_LONG + 2,
00236   QUVIINFO_HTTPCODE = QUVIINFO_LONG + 3,
00240   /* Add new ones below. Bump _QUVIINFO_LAST accordingly. */
00241 
00242   _QUVIINFO_LAST = 3 
00243 } QUVIinfo;
00244 
00245 #define QUVIPROPERTY_STRING     0x100000 
00246 #define QUVIPROPERTY_LONG       0x200000 
00247 #define QUVIPROPERTY_DOUBLE     0x300000 
00248 #define QUVIPROPERTY_VOID       0x400000 
00249 #define QUVIPROPERTY_TYPEMASK   0xf00000 
00252 typedef enum
00253 {
00254   QUVIPROP_NONE = 0x00,
00257   QUVIPROP_HOSTID = QUVIPROPERTY_STRING + 1,
00260   QUVIPROP_PAGEURL = QUVIPROPERTY_STRING + 2,
00263   QUVIPROP_PAGETITLE = QUVIPROPERTY_STRING + 3,
00266   QUVIPROP_MEDIAID = QUVIPROPERTY_STRING + 4,
00269   QUVIPROP_MEDIAURL = QUVIPROPERTY_STRING + 5,
00272   QUVIPROP_MEDIACONTENTLENGTH = QUVIPROPERTY_DOUBLE + 6,
00275   QUVIPROP_MEDIACONTENTTYPE = QUVIPROPERTY_STRING + 7,
00278   QUVIPROP_FILESUFFIX = QUVIPROPERTY_STRING + 8,
00281   QUVIPROP_RESPONSECODE = QUVIPROPERTY_LONG   + 9,
00284   QUVIPROP_FORMAT = QUVIPROPERTY_STRING + 10,
00287   QUVIPROP_STARTTIME = QUVIPROPERTY_STRING + 11,
00290   QUVIPROP_MEDIATHUMBNAILURL = QUVIPROPERTY_STRING + 12,
00293   QUVIPROP_MEDIADURATION = QUVIPROPERTY_DOUBLE + 13,
00296   /* Add new ones below. Bump _QUVIPROP_LAST accordingly. */
00297 
00298   /* Deprecated as of 0.2.15. Note that these exist only for
00299    * backward-compatibility. Destined to be removed in 0.2.20.
00300    * New applications should use the QUVIPROP_MEDIA* values instead. */
00301 
00302   QUVIPROP_VIDEOID = QUVIPROPERTY_STRING + 4,
00306   QUVIPROP_VIDEOURL = QUVIPROPERTY_STRING + 5,
00310   QUVIPROP_VIDEOFILELENGTH = QUVIPROPERTY_DOUBLE + 6,
00314   QUVIPROP_VIDEOFILECONTENTTYPE = QUVIPROPERTY_STRING + 7,
00318   QUVIPROP_VIDEOFILESUFFIX = QUVIPROPERTY_STRING + 8,
00322   QUVIPROP_HTTPCODE = QUVIPROPERTY_LONG   + 9,
00326   QUVIPROP_VIDEOFORMAT = QUVIPROPERTY_STRING + 10,
00330   _QUVIPROP_LAST = 13
00333 } QUVIproperty;
00334 
00335 typedef enum
00336 {
00337   QUVI_IDENT_PROPERTY_NONE = 0x00,
00339   QUVI_IDENT_PROPERTY_URL = QUVIPROPERTY_STRING + 1,
00341   QUVI_IDENT_PROPERTY_DOMAIN = QUVIPROPERTY_STRING + 2,
00343   QUVI_IDENT_PROPERTY_FORMATS = QUVIPROPERTY_STRING + 3,
00345   QUVI_IDENT_PROPERTY_CATEGORIES = QUVIPROPERTY_LONG + 4,
00347   _QUVI_IDENT_PROPERTY_LAST = 4
00349 } QUVIidentProperty;
00350 
00352 typedef void *quvi_t;
00353 
00357 typedef void *quvi_media_t;
00358 
00362 typedef void *quvi_video_t;
00363 
00367 typedef void *quvi_ident_t;
00368 
00440 typedef int (*quvi_callback_status) (long param, void *data);
00441 
00442 #define QUVI_WRITEFUNC_ABORT 0x10000000 
00453 typedef int (*quvi_callback_write) (char *buffer,
00454                                     size_t size,
00455                                     size_t nitems,
00456                                     void *instream);
00457 
00459 typedef uint32_t quvi_word;
00461 typedef uint8_t  quvi_byte;
00462  /* End of libquvi_types group. */
00464 
00465 
00472 #define quvi_lobyte(w) ((quvi_byte)((uint64_t)(w) & 0xff))
00473 
00474 #define quvi_hibyte(w) ((quvi_byte)((uint64_t)(w) >> 8))
00475 
00477 #define quvi_loword(l) ((quvi_word)((uint64_t)(l) & 0xffff))
00478 
00479 #define quvi_hiword(l) ((quvi_word)((uint64_t)(l) >> 16))
00480  /* End of libquvi_macros group. */
00482 
00483 
00484 #ifdef __cplusplus
00485 extern "C" {
00486 #endif /* __cplusplus */
00487 
00535   QUVIcode quvi_init(quvi_t *quvi);
00536 
00537 
00561   QUVIcode quvi_getinfo(quvi_t quvi, QUVIinfo info, ...);
00562  /* End of libquvi_getinfo group. */
00564 
00565 
00585   void quvi_close(quvi_t *quvi);
00586  /* End of libquvi_release group. */ /* End of libquvi_init group. */
00589 
00590 
00614   QUVIcode quvi_setopt(quvi_t quvi, QUVIoption opt, ...);
00615 
00624   size_t quvi_write_callback_default(void *ptr, size_t size, size_t nmemb, void *stream);
00625  /* End of libquvi_setup group. */
00627 
00628 
00655   QUVIcode quvi_parse(quvi_t quvi, char *url, quvi_media_t *media);
00656 
00657 
00684   QUVIcode quvi_getprop(quvi_media_t media, QUVIproperty prop, ...);
00685 
00713   QUVIcode quvi_next_media_url(quvi_media_t media);
00714 
00742   QUVIcode quvi_next_videolink(quvi_video_t video);
00743 
00762   void quvi_parse_close(quvi_media_t *media);
00763  /* End of libquvi_getprop group. */
00765  /* End of libquvi_parse group */
00767 
00768 
00804   QUVIcode quvi_supported(quvi_t quvi, char *url);
00805 
00835   QUVIcode quvi_supported_ident(quvi_t quvi, char *url, quvi_ident_t *ident);
00836 
00865   QUVIcode quvi_ident_getprop(quvi_ident_t handle, QUVIidentProperty property, ...);
00866 
00874   void quvi_supported_ident_close(quvi_ident_t *ident);
00875 
00908   QUVIcode quvi_next_supported_website(quvi_t quvi, char **domain, char **formats);
00909 
00922   QUVIcode quvi_next_host(char **domain, char **formats);
00923 
00946   char *quvi_strerror(quvi_t quvi, QUVIcode code);
00947 
00962   char *quvi_version(QUVIversion type);
00963 
00969   void quvi_free(void *ptr);
00970 
00997   QUVIcode quvi_query_formats(quvi_t session,
00998                               char *url,
00999                               char **formats);
01000  /* End of libquvi_util group. */
01002 
01003 #ifdef __cplusplus
01004 }
01005 #endif /* __cplusplus */
01006 
01007 #endif /* quvi_h */
01008 
01009 /* vim: set ts=2 sw=2 tw=72 expandtab: */
 All Files Functions Typedefs Enumerations Enumerator Defines