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 
00034 #ifndef quvi_h
00035 #define quvi_h
00036 
00037 #ifndef DOXY_SKIP
00038 #include <stdlib.h>
00039 #include <stdint.h> /* C99 header */
00040 #endif
00041 
00048 typedef enum
00049 {
00050   QUVI_VERSION = 0x00,    
00051   QUVI_VERSION_LONG       
00052 } QUVIversion;
00053 
00055 typedef enum
00056 {
00057   /* Static error messages. */
00058   QUVI_OK  = 0x00,        
00059   QUVI_MEM,               
00060   QUVI_BADHANDLE,         
00061   QUVI_INVARG,            
00062   QUVI_CURLINIT,          
00063   QUVI_LAST,              
00064   QUVI_ABORTEDBYCALLBACK, 
00065   QUVI_LUAINIT,           
00066   QUVI_NOLUAWEBSITE,      
00067   QUVI_NOLUAUTIL,         
00068   _INTERNAL_QUVI_LAST,    
00069   /* Non-static error messages. */
00070   QUVI_PCRE = 0x40, 
00071   QUVI_NOSUPPORT,   
00072   QUVI_CALLBACK,
00077   QUVI_ICONV,       
00078   QUVI_LUA,         
00080   /* Deprecated as of 0.2.16. Note that these exist only for
00081    * backward-compatibility. Destined to be removed in 0.2.20. */
00082 
00083   QUVI_CURL = 0x42
00087 } QUVIcode;
00088 
00090 typedef enum
00091 {
00092   QUVISTATUS_FETCH  = 0x00, 
00093   QUVISTATUS_VERIFY,        
00094   QUVISTATUS_RESOLVE,       
00096   /* Add new ones below. */
00097 
00098   /* Deprecated as of 0.2.16. Note that these exist only for
00099    * backward-compatibility. Destined to be removed in 0.2.20. */
00100 
00101   QUVISTATUS_SHORTENED = 0x2
00105 } QUVIstatus;
00106 
00108 typedef enum
00109 {
00110   /* QUVISTATUS_FETCH */
00111 
00112   QUVISTATUSTYPE_PAGE = 0x00,   
00113   QUVISTATUSTYPE_CONFIG,        
00114   QUVISTATUSTYPE_PLAYLIST,      
00116   /* Common types */
00117   QUVISTATUSTYPE_DONE           
00119   /* Add new ones below */
00120 } QUVIstatusType;
00121 
00123 typedef enum
00124 {
00125   QUVIOPT_FORMAT = 0x00,
00133   QUVIOPT_NOVERIFY,
00137   QUVIOPT_STATUSFUNCTION,
00141   QUVIOPT_WRITEFUNCTION,
00145   QUVIOPT_NORESOLVE,
00149   QUVIOPT_CATEGORY,
00152   QUVIOPT_FETCHFUNCTION,
00156   QUVIOPT_RESOLVEFUNCTION,
00160   QUVIOPT_VERIFYFUNCTION,
00164   /* Deprecated as of 0.2.16. Note that these exist only for
00165    * backward-compatibility. Destined to be removed in 0.2.20. */
00166 
00167   QUVIOPT_NOSHORTENED = 0x4
00171 } QUVIoption;
00172 
00173 #define QUVIINFO_VOID       0x100000 
00174 #define QUVIINFO_LONG       0x200000 
00175 #define QUVIINFO_STRING     0x300000 
00176 #define QUVIINFO_DOUBLE     0x400000 
00177 #define QUVIINFO_TYPEMASK   0xf00000 
00190 typedef enum
00191 {
00192   QUVIPROTO_HTTP = 0x1, 
00193   QUVIPROTO_MMS  = 0x2, 
00194   QUVIPROTO_RTSP = 0x4, 
00195   QUVIPROTO_RTMP = 0x8, 
00196   QUVIPROTO_ALL  =
00197   (QUVIPROTO_HTTP|QUVIPROTO_MMS|QUVIPROTO_RTSP|QUVIPROTO_RTMP)
00199 } QUVIcategory;
00200 
00219 typedef enum
00220 {
00221   QUVIINFO_NONE = 0x00,
00224   QUVIINFO_CURL = QUVIINFO_VOID + 1,
00227   QUVIINFO_RESPONSECODE = QUVIINFO_LONG + 3,
00230   /* Deprecated as of 0.2.16. Note that these exist only for
00231    * backward-compatibility. Destined to be removed in 0.2.20. */
00232 
00233   QUVIINFO_CURLCODE = QUVIINFO_LONG + 2,
00237   QUVIINFO_HTTPCODE = QUVIINFO_LONG + 3,
00241   /* Add new ones below. Bump _QUVIINFO_LAST accordingly. */
00242 
00243   _QUVIINFO_LAST = 3 
00244 } QUVIinfo;
00245 
00246 #define QUVIPROPERTY_STRING     0x100000 
00247 #define QUVIPROPERTY_LONG       0x200000 
00248 #define QUVIPROPERTY_DOUBLE     0x300000 
00249 #define QUVIPROPERTY_VOID       0x400000 
00250 #define QUVIPROPERTY_TYPEMASK   0xf00000 
00253 typedef enum
00254 {
00255   QUVIPROP_NONE = 0x00,
00258   QUVIPROP_HOSTID = QUVIPROPERTY_STRING + 1,
00261   QUVIPROP_PAGEURL = QUVIPROPERTY_STRING + 2,
00264   QUVIPROP_PAGETITLE = QUVIPROPERTY_STRING + 3,
00267   QUVIPROP_MEDIAID = QUVIPROPERTY_STRING + 4,
00270   QUVIPROP_MEDIAURL = QUVIPROPERTY_STRING + 5,
00273   QUVIPROP_MEDIACONTENTLENGTH = QUVIPROPERTY_DOUBLE + 6,
00276   QUVIPROP_MEDIACONTENTTYPE = QUVIPROPERTY_STRING + 7,
00279   QUVIPROP_FILESUFFIX = QUVIPROPERTY_STRING + 8,
00282   QUVIPROP_RESPONSECODE = QUVIPROPERTY_LONG   + 9,
00285   QUVIPROP_FORMAT = QUVIPROPERTY_STRING + 10,
00288   QUVIPROP_STARTTIME = QUVIPROPERTY_STRING + 11,
00291   QUVIPROP_MEDIATHUMBNAILURL = QUVIPROPERTY_STRING + 12,
00294   QUVIPROP_MEDIADURATION = QUVIPROPERTY_DOUBLE + 13,
00297   /* Add new ones below. Bump _QUVIPROP_LAST accordingly. */
00298 
00299   /* Deprecated as of 0.2.15. Note that these exist only for
00300    * backward-compatibility. Destined to be removed in 0.2.20.
00301    * New applications should use the QUVIPROP_MEDIA* values instead. */
00302 
00303   QUVIPROP_VIDEOID = QUVIPROPERTY_STRING + 4,
00307   QUVIPROP_VIDEOURL = QUVIPROPERTY_STRING + 5,
00311   QUVIPROP_VIDEOFILELENGTH = QUVIPROPERTY_DOUBLE + 6,
00315   QUVIPROP_VIDEOFILECONTENTTYPE = QUVIPROPERTY_STRING + 7,
00319   QUVIPROP_VIDEOFILESUFFIX = QUVIPROPERTY_STRING + 8,
00323   QUVIPROP_HTTPCODE = QUVIPROPERTY_LONG   + 9,
00327   QUVIPROP_VIDEOFORMAT = QUVIPROPERTY_STRING + 10,
00331   _QUVIPROP_LAST = 13
00334 } QUVIproperty;
00335 
00336 typedef enum
00337 {
00338   QUVI_IDENT_PROPERTY_NONE = 0x00,
00340   QUVI_IDENT_PROPERTY_URL = QUVIPROPERTY_STRING + 1,
00342   QUVI_IDENT_PROPERTY_DOMAIN = QUVIPROPERTY_STRING + 2,
00344   QUVI_IDENT_PROPERTY_FORMATS = QUVIPROPERTY_STRING + 3,
00346   QUVI_IDENT_PROPERTY_CATEGORIES = QUVIPROPERTY_LONG + 4,
00348   _QUVI_IDENT_PROPERTY_LAST = 4
00350 } QUVIidentProperty;
00351 
00353 typedef void *quvi_t;
00354 
00358 typedef void *quvi_media_t;
00359 
00363 typedef void *quvi_video_t;
00364 
00368 typedef void *quvi_ident_t;
00369 
00441 typedef int (*quvi_callback_status) (long param, void *data);
00442 
00443 #define QUVI_WRITEFUNC_ABORT 0x10000000 
00454 typedef int (*quvi_callback_write) (char *buffer,
00455                                     size_t size,
00456                                     size_t nitems,
00457                                     void *instream);
00458 
00460 typedef uint32_t quvi_word;
00462 typedef uint8_t  quvi_byte;
00463  /* End of libquvi_types group. */
00465 
00466 
00473 #define quvi_lobyte(w) ((quvi_byte)((uint64_t)(w) & 0xff))
00474 
00475 #define quvi_hibyte(w) ((quvi_byte)((uint64_t)(w) >> 8))
00476 
00478 #define quvi_loword(l) ((quvi_word)((uint64_t)(l) & 0xffff))
00479 
00480 #define quvi_hiword(l) ((quvi_word)((uint64_t)(l) >> 16))
00481  /* End of libquvi_macros group. */
00483 
00484 
00485 #ifdef __cplusplus
00486 extern "C" {
00487 #endif /* __cplusplus */
00488 
00536   QUVIcode quvi_init(quvi_t *quvi);
00537 
00538 
00562   QUVIcode quvi_getinfo(quvi_t quvi, QUVIinfo info, ...);
00563  /* End of libquvi_getinfo group. */
00565 
00566 
00586   void quvi_close(quvi_t *quvi);
00587  /* End of libquvi_release group. */ /* End of libquvi_init group. */
00590 
00591 
00615   QUVIcode quvi_setopt(quvi_t quvi, QUVIoption opt, ...);
00616 
00625   size_t quvi_write_callback_default(void *ptr, size_t size, size_t nmemb, void *stream);
00626  /* End of libquvi_setup group. */
00628 
00629 
00656   QUVIcode quvi_parse(quvi_t quvi, char *url, quvi_media_t *media);
00657 
00658 
00685   QUVIcode quvi_getprop(quvi_media_t media, QUVIproperty prop, ...);
00686 
00714   QUVIcode quvi_next_media_url(quvi_media_t media);
00715 
00743   QUVIcode quvi_next_videolink(quvi_video_t video);
00744 
00763   void quvi_parse_close(quvi_media_t *media);
00764  /* End of libquvi_getprop group. */
00766  /* End of libquvi_parse group */
00768 
00769 
00805   QUVIcode quvi_supported(quvi_t quvi, char *url);
00806 
00836   QUVIcode quvi_supported_ident(quvi_t quvi, char *url, quvi_ident_t *ident);
00837 
00866   QUVIcode quvi_ident_getprop(quvi_ident_t handle, QUVIidentProperty property, ...);
00867 
00875   void quvi_supported_ident_close(quvi_ident_t *ident);
00876 
00909   QUVIcode quvi_next_supported_website(quvi_t quvi, char **domain, char **formats);
00910 
00923   QUVIcode quvi_next_host(char **domain, char **formats);
00924 
00947   char *quvi_strerror(quvi_t quvi, QUVIcode code);
00948 
00963   char *quvi_version(QUVIversion type);
00964 
00970   void quvi_free(void *ptr);
00971  /* End of libquvi_util group. */
00973 
00974 #ifdef __cplusplus
00975 }
00976 #endif /* __cplusplus */
00977 
00978 #endif /* quvi_h */
00979 
00980 /* vim: set ts=2 sw=2 tw=72 expandtab: */
 All Files Functions Typedefs Enumerations Enumerator Defines