From eba19198fb2a5f01b18178d5afa3a7b8201b0ca3 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Fri, 6 Jun 2008 12:57:23 +0000 Subject: [PATCH] 2008-06-06 14:46 UTC+0100 Viktor Szakats (harbour.01 syenar hu) * contrib/hbcurl/hbcurl.c + Now throws RTEs when required parameters are missing or the wrong type. The concept here is that RTEs are only to catch syntax mistakes, and not errors resulting from actual libcurl usage/functionality/states. * contrib/hbapollo/apollo.ch * Formatting. --- harbour/ChangeLog | 10 + harbour/contrib/hbapollo/apollo.ch | 140 ++- harbour/contrib/hbcurl/hbcurl.c | 1860 ++++++++++++++-------------- 3 files changed, 1038 insertions(+), 972 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 25a16d59a9..b3510b5966 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,16 @@ 2008-12-31 13:59 UTC+0100 Foo Bar */ +2008-06-06 14:46 UTC+0100 Viktor Szakats (harbour.01 syenar hu) + * contrib/hbcurl/hbcurl.c + + Now throws RTEs when required parameters are missing + or the wrong type. The concept here is that RTEs are + only to catch syntax mistakes, and not errors resulting + from actual libcurl usage/functionality/states. + + * contrib/hbapollo/apollo.ch + * Formatting. + 2008-06-06 10:21 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/include/hbpp.h * harbour/source/pp/ppcore.c diff --git a/harbour/contrib/hbapollo/apollo.ch b/harbour/contrib/hbapollo/apollo.ch index 6d7d18d4a5..e0a58db38f 100644 --- a/harbour/contrib/hbapollo/apollo.ch +++ b/harbour/contrib/hbapollo/apollo.ch @@ -53,98 +53,96 @@ /* ************* */ /* date types */ /* ************* */ -#define SX_AMERICAN 0 -#define SX_ANSI 1 -#define SX_BRITISH 2 -#define SX_FRENCH 3 -#define SX_GERMAN 4 -#define SX_ITALIAN 5 -#define SX_SPANISH 6 +#define SX_AMERICAN 0 +#define SX_ANSI 1 +#define SX_BRITISH 2 +#define SX_FRENCH 3 +#define SX_GERMAN 4 +#define SX_ITALIAN 5 +#define SX_SPANISH 6 /* ************************************ */ /* Data type identifiers for sx_Replace */ /* ************************************ */ -#define SX_R_INTEGER 1 -#define SX_R_LONG 2 -#define SX_R_DOUBLE 8 -#define SX_R_JULIAN 32 -#define SX_R_LOGICAL 128 -#define SX_R_CHAR 1024 -#define SX_R_DATESTR 1056 -#define SX_R_MEMO 3072 -#define SX_R_BITMAP 4096 -#define SX_R_BLOBFILE 8192 -#define SX_R_BLOBPTR 8193 -#define SX_R_GENERAL 8195 +#define SX_R_INTEGER 1 +#define SX_R_LONG 2 +#define SX_R_DOUBLE 8 +#define SX_R_JULIAN 32 +#define SX_R_LOGICAL 128 +#define SX_R_CHAR 1024 +#define SX_R_DATESTR 1056 +#define SX_R_MEMO 3072 +#define SX_R_BITMAP 4096 +#define SX_R_BLOBFILE 8192 +#define SX_R_BLOBPTR 8193 +#define SX_R_GENERAL 8195 -#define SX_SDENTX 1 // CA-Clipper compatible DBF-NTX driver -#define SX_SDEFOX 2 // FoxPro compatible DBF-IDX/CDX driver -#define SX_SDENSX 3 // Vista DBF-NSX driver +#define SX_SDENTX 1 // CA-Cl*pper compatible DBF-NTX driver +#define SX_SDEFOX 2 // FoxPro compatible DBF-IDX/CDX driver +#define SX_SDENSX 3 // Vista DBF-NSX driver -#define SX_READWRITE 0 -#define SX_READONLY 1 -#define SX_EXCLUSIVE 2 +#define SX_READWRITE 0 +#define SX_READONLY 1 +#define SX_EXCLUSIVE 2 /* ******************************** */ /* sx_SysProp Constants */ /* ******************************** */ -// Global Task Information -// Gets should always be even numbers -#define SDE_SP_GETSOFTSEEK 1000 // Get the softseek flag -#define SDE_SP_SETSOFTSEEK 1001 // Set the softseek flag -#define SDE_SP_GETEXACT 1002 // Get the extact flag -#define SDE_SP_SETEXACT 1003 // Set the extact flag -#define SDE_SP_GETDELETED 1006 // Get the deleted flag -#define SDE_SP_PUTOBUFFER 1007 // Write the optimistic buffer on commit -#define SDE_SP_GETOBUFFER 1008 // Get the optimistic buffer flag -#define SDE_SP_SETOBUFFER 1009 // Set the optimistic buffer flag -#define SDE_SP_GETSTRINGTYPE 1010 // Get the stringtype flag -#define SDE_SP_SETSTRINGTYPE 1011 // Set the stringtype flag -#define SDE_SP_GETDISABLEAUTO 1012 // Get the disable auto open flag -#define SDE_SP_SETDISABLEAUTO 1013 // Set the disable auto open flag +// Global Task Information +// Gets should always be even numbers +#define SDE_SP_GETSOFTSEEK 1000 // Get the softseek flag +#define SDE_SP_SETSOFTSEEK 1001 // Set the softseek flag +#define SDE_SP_GETEXACT 1002 // Get the extact flag +#define SDE_SP_SETEXACT 1003 // Set the extact flag +#define SDE_SP_GETDELETED 1006 // Get the deleted flag +#define SDE_SP_PUTOBUFFER 1007 // Write the optimistic buffer on commit +#define SDE_SP_GETOBUFFER 1008 // Get the optimistic buffer flag +#define SDE_SP_SETOBUFFER 1009 // Set the optimistic buffer flag +#define SDE_SP_GETSTRINGTYPE 1010 // Get the stringtype flag +#define SDE_SP_SETSTRINGTYPE 1011 // Set the stringtype flag +#define SDE_SP_GETDISABLEAUTO 1012 // Get the disable auto open flag +#define SDE_SP_SETDISABLEAUTO 1013 // Set the disable auto open flag -#define SDE_SP_SETOEMCOLLATE 1101 // Set the collation sequence for OEM tables. -#define SDE_SP_GETOEMCOLLATE 1111 // Get the collation sequence for OEM tables. -#define SDE_SP_SETCHRCOLLATE 1102 // Set the collation sequence for Win tables. -#define SDE_SP_GETCHRCOLLATE 1122 // Get the collation sequence for Win tables. -#define SDE_SP_SETLGTRCOLLATE 1103 // Set the ligatures collation dimmension -#define SDE_SP_GETLGTRCOLLATE 1133 // Get the ligatures collation dimmension +#define SDE_SP_SETOEMCOLLATE 1101 // Set the collation sequence for OEM tables. +#define SDE_SP_GETOEMCOLLATE 1111 // Get the collation sequence for OEM tables. +#define SDE_SP_SETCHRCOLLATE 1102 // Set the collation sequence for Win tables. +#define SDE_SP_GETCHRCOLLATE 1122 // Get the collation sequence for Win tables. +#define SDE_SP_SETLGTRCOLLATE 1103 // Set the ligatures collation dimmension +#define SDE_SP_GETLGTRCOLLATE 1133 // Get the ligatures collation dimmension #define SDE_SP_SETSPECIALCOLLATE 1108 // Set the international collation like DUDEN collate flag #define SDE_SP_GETSPECIALCOLLATE 1109 // Set the international collation like DUDEN collate flag - #define SDE_SP_GETLANGUAGECOLLATE 1110 // Get language, according to collation done -#define SDE_SP_GETDUDENCOLLATE 1104 // get the German DUDEN collate flag -#define SDE_SP_SETDUDENCOLLATE 1105 // set the German DUDEN collate flag -#define SDE_SP_GETLIMITCASECONV 1106 // limit case conv to A-Z, a-z if TRUE -#define SDE_SP_SETLIMITCASECONV 1107 // limit case conv to A-Z, a-z if TRUE +#define SDE_SP_GETDUDENCOLLATE 1104 // get the German DUDEN collate flag +#define SDE_SP_SETDUDENCOLLATE 1105 // set the German DUDEN collate flag +#define SDE_SP_GETLIMITCASECONV 1106 // limit case conv to A-Z, a-z if TRUE +#define SDE_SP_SETLIMITCASECONV 1107 // limit case conv to A-Z, a-z if TRUE -//Behavior settings which bridge the differences between 1.40 and 2.00 -#define SDE_SP_GETADDQUERY 1300 //Get the AddQueryFlag -#define SDE_SP_SETADDQUERY 1301 //Set the AddQueryFlag -#define SDE_SP_GETUSECONDITIONAL 1302 //Get the bUseConditional flag -#define SDE_SP_SETUSECONDITIONAL 1303 //Get the bUseConditional flag -#define SDE_SP_SETWRITEBLOBHDR 1305 //Set the bWriteBlobHdr -#define SDE_SP_GETQUERYRELAXFLAG 1306 // Get flag that dictates rules of query -#define SDE_SP_SETQUERYRELAXFLAG 1307 // Set flag that dictates rules of query +// Behavior settings which bridge the differences between 1.40 and 2.00 +#define SDE_SP_GETADDQUERY 1300 // Get the AddQueryFlag +#define SDE_SP_SETADDQUERY 1301 // Set the AddQueryFlag +#define SDE_SP_GETUSECONDITIONAL 1302 // Get the bUseConditional flag +#define SDE_SP_SETUSECONDITIONAL 1303 // Get the bUseConditional flag +#define SDE_SP_SETWRITEBLOBHDR 1305 // Set the bWriteBlobHdr +#define SDE_SP_GETQUERYRELAXFLAG 1306 // Get flag that dictates rules of query +#define SDE_SP_SETQUERYRELAXFLAG 1307 // Set flag that dictates rules of query -//WorkArea information -#define SDE_SP_GETDRIVER 2000 //Get the active driver +// WorkArea information +#define SDE_SP_GETDRIVER 2000 // Get the active driver -#define SDE_SP_SETSTRDEFLEN 2001 //Set the default lenght for STR, if 2nd parameter is absent and field lenght zero -#define SDE_SP_SETSTRDEFDEC 2002 //Set the default decimals for STR, if 3d parameter is absent and field lenght zero +#define SDE_SP_SETSTRDEFLEN 2001 // Set the default lenght for STR, if 2nd parameter is absent and field lenght zero +#define SDE_SP_SETSTRDEFDEC 2002 // Set the default decimals for STR, if 3d parameter is absent and field lenght zero -#define SDE_SP_SETDEFAPPEND 2003 //Set default behavior for ordering ordering for non-unique key like FOX/Clipper -#define SDE_SP_SETMEMOMIXED 2004 //Set pure Clipper's memo for NSX driver -#define SDE_SP_BDESPECIFIC 2005 //Set the treatment of LIKE operator in accoring to BDE -#define SDE_SP_DBASEDATEHEADER 2006 //Set the using of DBF header in according to DbaseIII+ specification +#define SDE_SP_SETDEFAPPEND 2003 // Set default behavior for ordering ordering for non-unique key like FOX/Clipper +#define SDE_SP_SETMEMOMIXED 2004 // Set pure Clipper's memo for NSX driver +#define SDE_SP_BDESPECIFIC 2005 // Set the treatment of LIKE operator in accoring to BDE +#define SDE_SP_DBASEDATEHEADER 2006 // Set the using of DBF header in according to DbaseIII+ specification #define SDE_SP_SETAUTOPAD 2007 #define SDE_SP_GETAUTOPAD 2008 - -//Index information for current workarea -#define SDE_SP_GETINDEXCOUNT 3000 //Get the number of indexes -#define SDE_SP_GETDESCENDING 3002 //Get the descending flag -#define SDE_SP_GETEMPTY 3004 //Get the empty index flag +// Index information for current workarea +#define SDE_SP_GETINDEXCOUNT 3000 // Get the number of indexes +#define SDE_SP_GETDESCENDING 3002 // Get the descending flag +#define SDE_SP_GETEMPTY 3004 // Get the empty index flag diff --git a/harbour/contrib/hbcurl/hbcurl.c b/harbour/contrib/hbcurl/hbcurl.c index e3c8c4d5e6..1eb463aa5d 100644 --- a/harbour/contrib/hbcurl/hbcurl.c +++ b/harbour/contrib/hbcurl/hbcurl.c @@ -64,6 +64,7 @@ #include "hbapi.h" #include "hbapiitm.h" +#include "hbapierr.h" #include "hbapifs.h" #include "hbvm.h" @@ -473,6 +474,8 @@ static void PHB_CURL_ret( PHB_CURL from ) if( * ph ) hb_retptrGC( ph ); + else + hb_retptr( NULL ); } static PHB_CURL PHB_CURL_par( int iParam ) @@ -492,34 +495,44 @@ HB_FUNC( CURL_EASY_INIT ) HB_FUNC( CURL_EASY_DUPLICATE ) { - PHB_CURL hb_curl = PHB_CURL_par( 1 ); - - if( hb_curl ) - PHB_CURL_ret( hb_curl ); + if( ISPOINTER( 1 ) ) + PHB_CURL_ret( PHB_CURL_par( 1 ) ); + else + hb_errRT_BASE( EG_ARG, 2010, NULL, "CURL_EASY_DUPLICATE", HB_ERR_ARGS_BASEPARAMS ); } HB_FUNC( CURL_EASY_CLEANUP ) { - void ** ph = ( void ** ) hb_parptrGC( PHB_CURL_release, 1 ); - - if( ph && * ph ) + if( ISPOINTER( 1 ) ) { - /* Destroy the object */ - PHB_CURL_free( ( PHB_CURL ) * ph, TRUE ); - - /* set pointer to NULL to avoid multiple freeing */ - * ph = NULL; + void ** ph = ( void ** ) hb_parptrGC( PHB_CURL_release, 1 ); + + if( ph && * ph ) + { + /* Destroy the object */ + PHB_CURL_free( ( PHB_CURL ) * ph, TRUE ); + + /* set pointer to NULL to avoid multiple freeing */ + * ph = NULL; + } } + else + hb_errRT_BASE( EG_ARG, 2010, NULL, "CURL_EASY_CLEANUP", HB_ERR_ARGS_BASEPARAMS ); } #if LIBCURL_VERSION_NUM >= 0x071201 HB_FUNC( CURL_EASY_RESET ) { - PHB_CURL hb_curl = PHB_CURL_par( 1 ); - - if( hb_curl ) - PHB_CURL_free( hb_curl, FALSE ); + if( ISPOINTER( 1 ) ) + { + PHB_CURL hb_curl = PHB_CURL_par( 1 ); + + if( hb_curl ) + PHB_CURL_free( hb_curl, FALSE ); + } + else + hb_errRT_BASE( EG_ARG, 2010, NULL, "CURL_EASY_RESET", HB_ERR_ARGS_BASEPARAMS ); } #endif @@ -528,20 +541,30 @@ HB_FUNC( CURL_EASY_RESET ) HB_FUNC( CURL_EASY_PAUSE ) { - PHB_CURL hb_curl = PHB_CURL_par( 1 ); - - if( hb_curl ) - hb_retnl( ( long ) curl_easy_pause( hb_curl->curl, hb_parni( 2 ) ) ); + if( ISPOINTER( 1 ) ) + { + PHB_CURL hb_curl = PHB_CURL_par( 1 ); + + if( hb_curl ) + hb_retnl( ( long ) curl_easy_pause( hb_curl->curl, hb_parni( 2 ) ) ); + } + else + hb_errRT_BASE( EG_ARG, 2010, NULL, "CURL_EASY_PAUSE", HB_ERR_ARGS_BASEPARAMS ); } #endif HB_FUNC( CURL_EASY_PERFORM ) { - PHB_CURL hb_curl = PHB_CURL_par( 1 ); - - if( hb_curl ) - hb_retnl( ( long ) curl_easy_perform( hb_curl->curl ) ); + if( ISPOINTER( 1 ) ) + { + PHB_CURL hb_curl = PHB_CURL_par( 1 ); + + if( hb_curl ) + hb_retnl( ( long ) curl_easy_perform( hb_curl->curl ) ); + } + else + hb_errRT_BASE( EG_ARG, 2010, NULL, "CURL_EASY_PERFORM", HB_ERR_ARGS_BASEPARAMS ); } #if LIBCURL_VERSION_NUM >= 0x071802 @@ -549,745 +572,765 @@ HB_FUNC( CURL_EASY_PERFORM ) /* NOTE: curl_easy_send( curl, cBuffer, @nSentBytes ) -> nResult */ HB_FUNC( CURL_EASY_SEND ) { - PHB_CURL hb_curl = PHB_CURL_par( 1 ); - - if( hb_curl ) + if( ISPOINTER( 1 ) ) { - size_t size = 0; - - hb_retnl( ( long ) curl_easy_send( hb_curl->curl, ( void * ) hb_parcx( 2 ), ( size_t ) hb_parclen( 2 ), &size ) ); - - hb_stornl( size, 3 ); + PHB_CURL hb_curl = PHB_CURL_par( 1 ); + + if( hb_curl ) + { + size_t size = 0; + + hb_retnl( ( long ) curl_easy_send( hb_curl->curl, ( void * ) hb_parcx( 2 ), ( size_t ) hb_parclen( 2 ), &size ) ); + + hb_stornl( size, 3 ); + } } + else + hb_errRT_BASE( EG_ARG, 2010, NULL, "CURL_EASY_SEND", HB_ERR_ARGS_BASEPARAMS ); } /* NOTE: curl_easy_recv( curl, @cBuffer ) -> nResult */ HB_FUNC( CURL_EASY_RECV ) { - PHB_CURL hb_curl = PHB_CURL_par( 1 ); - - if( hb_curl ) + if( ISPOINTER( 1 ) ) { - size_t size = ( size_t ) hb_parclen( 2 ); - void * buffer; - - if( size < 1024 ) - size = 1024; - - buffer = hb_xgrab( size ); - - hb_retnl( ( long ) curl_easy_recv( hb_curl->curl, buffer, size, &size ) ); - - if( ! hb_storclen_buffer( ( char * ) buffer, size, 2 ) ) - hb_free( buffer ); + PHB_CURL hb_curl = PHB_CURL_par( 1 ); + + if( hb_curl ) + { + size_t size = ( size_t ) hb_parclen( 2 ); + void * buffer; + + if( size < 1024 ) + size = 1024; + + buffer = hb_xgrab( size ); + + hb_retnl( ( long ) curl_easy_recv( hb_curl->curl, buffer, size, &size ) ); + + if( ! hb_storclen_buffer( ( char * ) buffer, size, 2 ) ) + hb_free( buffer ); + } } + else + hb_errRT_BASE( EG_ARG, 2010, NULL, "CURL_EASY_RECV", HB_ERR_ARGS_BASEPARAMS ); } #endif HB_FUNC( CURL_EASY_SETOPT ) { - PHB_CURL hb_curl = PHB_CURL_par( 1 ); - CURLcode res = ( CURLcode ) -1; - - if( hb_curl ) + if( ISPOINTER( 1 ) && ISNUM( 2 ) ) { - switch( hb_parni( 2 ) ) + PHB_CURL hb_curl = PHB_CURL_par( 1 ); + CURLcode res = ( CURLcode ) -1; + + if( hb_curl ) { - /* Behavior */ - - case HB_CURLOPT_VERBOSE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_VERBOSE, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_HEADER: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_HEADER, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_NOPROGRESS: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_NOPROGRESS, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_NOSIGNAL: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_NOSIGNAL, HB_CURL_OPT_BOOL( 3 ) ); - break; - - /* Callback */ - - /* These are hidden on the Harbour level: */ - /* HB_CURLOPT_WRITEFUNCTION */ - /* HB_CURLOPT_WRITEDATA */ - /* HB_CURLOPT_READFUNCTION */ - /* HB_CURLOPT_READDATA */ -#if LIBCURL_VERSION_NUM >= 0x071203 - /* HB_CURLOPT_IOCTLFUNCTION */ - /* HB_CURLOPT_IOCTLDATA */ -#endif - /* HB_CURLOPT_SEEKFUNCTION */ - /* HB_CURLOPT_SEEKDATA */ - /* HB_CURLOPT_SOCKOPTFUNCTION */ - /* HB_CURLOPT_SOCKOPTDATA */ - /* HB_CURLOPT_OPENSOCKETFUNCTION */ - /* HB_CURLOPT_OPENSOCKETDATA */ - /* HB_CURLOPT_PROGRESSFUNCTION */ - /* HB_CURLOPT_PROGRESSDATA */ - /* HB_CURLOPT_HEADERFUNCTION */ - /* HB_CURLOPT_HEADERDATA / CURLOPT_WRITEHEADER */ - /* HB_CURLOPT_DEBUGFUNCTION */ - /* HB_CURLOPT_DEBUGDATA */ - /* HB_CURLOPT_SSL_CTX_FUNCTION */ - /* HB_CURLOPT_SSL_CTX_DATA */ - /* HB_CURLOPT_CONV_TO_NETWORK_FUNCTION */ - /* HB_CURLOPT_CONV_FROM_NETWORK_FUNCTION */ - /* HB_CURLOPT_CONV_FROM_UTF8_FUNCTION */ - - /* Error */ - - /* HB_CURLOPT_ERRORBUFFER */ - /* HB_CURLOPT_STDERR */ - - case HB_CURLOPT_FAILONERROR: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_FAILONERROR, HB_CURL_OPT_BOOL( 3 ) ); - break; - - /* Network */ - - /* This is the only option that must be set before curl_easy_perform() is called. */ - case HB_CURLOPT_URL: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_URL, hb_parc( 3 ) ); - break; - case HB_CURLOPT_PROXY: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_PROXY, hb_parc( 3 ) ); - break; - case HB_CURLOPT_PROXYPORT: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_PROXYPORT, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_PROXYTYPE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_PROXYTYPE, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_HTTPPROXYTUNNEL: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_HTTPPROXYTUNNEL, HB_CURL_OPT_BOOL( 3 ) ); - break; -/* - case HB_CURLOPT_SOCKS5_RESOLVE_LOCAL: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_SOCKS5_RESOLVE_LOCAL, HB_CURL_OPT_BOOL( 3 ) ); - break; -*/ - case HB_CURLOPT_INTERFACE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_INTERFACE, hb_parc( 3 ) ); - break; - case HB_CURLOPT_LOCALPORT: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_LOCALPORT, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_LOCALPORTRANGE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_LOCALPORTRANGE, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_DNS_CACHE_TIMEOUT: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_DNS_CACHE_TIMEOUT, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_DNS_USE_GLOBAL_CACHE: /* OBSOLETE */ - res = curl_easy_setopt( hb_curl->curl, CURLOPT_DNS_USE_GLOBAL_CACHE, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_BUFFERSIZE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_BUFFERSIZE, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_PORT: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_PORT, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_TCP_NODELAY: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_TCP_NODELAY, HB_CURL_OPT_BOOL( 3 ) ); - break; - - /* Names and passwords options (Authentication) */ - - case HB_CURLOPT_NETRC: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_NETRC, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_NETRC_FILE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_NETRC_FILE, hb_parc( 3 ) ); - break; - case HB_CURLOPT_USERPWD: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_USERPWD, hb_parc( 3 ) ); - break; - case HB_CURLOPT_PROXYUSERPWD: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_PROXYUSERPWD, hb_parc( 3 ) ); - break; - case HB_CURLOPT_HTTPAUTH: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_HTTPAUTH, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_PROXYAUTH: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_PROXYAUTH, hb_parnl( 3 ) ); - break; - - /* HTTP options */ - - case HB_CURLOPT_AUTOREFERER: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_AUTOREFERER, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_ENCODING: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_ENCODING, hb_parc( 3 ) ); - break; - case HB_CURLOPT_FOLLOWLOCATION: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_FOLLOWLOCATION, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_UNRESTRICTED_AUTH: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_UNRESTRICTED_AUTH, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_MAXREDIRS: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_MAXREDIRS, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_POST301: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_POST301, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_PUT: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_PUT, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_POST: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_POST, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_POSTFIELDS: - case HB_CURLOPT_COPYPOSTFIELDS: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_COPYPOSTFIELDS, hb_parc( 3 ) ); - break; - case HB_CURLOPT_POSTFIELDSIZE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_POSTFIELDSIZE, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_POSTFIELDSIZE_LARGE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_POSTFIELDSIZE_LARGE, HB_CURL_OPT_LARGENUM( 3 ) ); - break; - case HB_CURLOPT_HTTPPOST: + switch( hb_parni( 2 ) ) { - PHB_ITEM pArray = hb_param( 3, HB_IT_ARRAY ); - - if( pArray ) + /* Behavior */ + + case HB_CURLOPT_VERBOSE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_VERBOSE, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_HEADER: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_HEADER, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_NOPROGRESS: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_NOPROGRESS, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_NOSIGNAL: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_NOSIGNAL, HB_CURL_OPT_BOOL( 3 ) ); + break; + + /* Callback */ + + /* These are hidden on the Harbour level: */ + /* HB_CURLOPT_WRITEFUNCTION */ + /* HB_CURLOPT_WRITEDATA */ + /* HB_CURLOPT_READFUNCTION */ + /* HB_CURLOPT_READDATA */ +#if LIBCURL_VERSION_NUM >= 0x071203 + /* HB_CURLOPT_IOCTLFUNCTION */ + /* HB_CURLOPT_IOCTLDATA */ +#endif + /* HB_CURLOPT_SEEKFUNCTION */ + /* HB_CURLOPT_SEEKDATA */ + /* HB_CURLOPT_SOCKOPTFUNCTION */ + /* HB_CURLOPT_SOCKOPTDATA */ + /* HB_CURLOPT_OPENSOCKETFUNCTION */ + /* HB_CURLOPT_OPENSOCKETDATA */ + /* HB_CURLOPT_PROGRESSFUNCTION */ + /* HB_CURLOPT_PROGRESSDATA */ + /* HB_CURLOPT_HEADERFUNCTION */ + /* HB_CURLOPT_HEADERDATA / CURLOPT_WRITEHEADER */ + /* HB_CURLOPT_DEBUGFUNCTION */ + /* HB_CURLOPT_DEBUGDATA */ + /* HB_CURLOPT_SSL_CTX_FUNCTION */ + /* HB_CURLOPT_SSL_CTX_DATA */ + /* HB_CURLOPT_CONV_TO_NETWORK_FUNCTION */ + /* HB_CURLOPT_CONV_FROM_NETWORK_FUNCTION */ + /* HB_CURLOPT_CONV_FROM_UTF8_FUNCTION */ + + /* Error */ + + /* HB_CURLOPT_ERRORBUFFER */ + /* HB_CURLOPT_STDERR */ + + case HB_CURLOPT_FAILONERROR: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_FAILONERROR, HB_CURL_OPT_BOOL( 3 ) ); + break; + + /* Network */ + + /* This is the only option that must be set before curl_easy_perform() is called. */ + case HB_CURLOPT_URL: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_URL, hb_parc( 3 ) ); + break; + case HB_CURLOPT_PROXY: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_PROXY, hb_parc( 3 ) ); + break; + case HB_CURLOPT_PROXYPORT: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_PROXYPORT, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_PROXYTYPE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_PROXYTYPE, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_HTTPPROXYTUNNEL: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_HTTPPROXYTUNNEL, HB_CURL_OPT_BOOL( 3 ) ); + break; +/* + case HB_CURLOPT_SOCKS5_RESOLVE_LOCAL: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_SOCKS5_RESOLVE_LOCAL, HB_CURL_OPT_BOOL( 3 ) ); + break; +*/ + case HB_CURLOPT_INTERFACE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_INTERFACE, hb_parc( 3 ) ); + break; + case HB_CURLOPT_LOCALPORT: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_LOCALPORT, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_LOCALPORTRANGE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_LOCALPORTRANGE, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_DNS_CACHE_TIMEOUT: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_DNS_CACHE_TIMEOUT, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_DNS_USE_GLOBAL_CACHE: /* OBSOLETE */ + res = curl_easy_setopt( hb_curl->curl, CURLOPT_DNS_USE_GLOBAL_CACHE, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_BUFFERSIZE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_BUFFERSIZE, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_PORT: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_PORT, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_TCP_NODELAY: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_TCP_NODELAY, HB_CURL_OPT_BOOL( 3 ) ); + break; + + /* Names and passwords options (Authentication) */ + + case HB_CURLOPT_NETRC: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_NETRC, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_NETRC_FILE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_NETRC_FILE, hb_parc( 3 ) ); + break; + case HB_CURLOPT_USERPWD: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_USERPWD, hb_parc( 3 ) ); + break; + case HB_CURLOPT_PROXYUSERPWD: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_PROXYUSERPWD, hb_parc( 3 ) ); + break; + case HB_CURLOPT_HTTPAUTH: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_HTTPAUTH, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_PROXYAUTH: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_PROXYAUTH, hb_parnl( 3 ) ); + break; + + /* HTTP options */ + + case HB_CURLOPT_AUTOREFERER: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_AUTOREFERER, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_ENCODING: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_ENCODING, hb_parc( 3 ) ); + break; + case HB_CURLOPT_FOLLOWLOCATION: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_FOLLOWLOCATION, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_UNRESTRICTED_AUTH: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_UNRESTRICTED_AUTH, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_MAXREDIRS: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_MAXREDIRS, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_POST301: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_POST301, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_PUT: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_PUT, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_POST: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_POST, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_POSTFIELDS: + case HB_CURLOPT_COPYPOSTFIELDS: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_COPYPOSTFIELDS, hb_parc( 3 ) ); + break; + case HB_CURLOPT_POSTFIELDSIZE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_POSTFIELDSIZE, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_POSTFIELDSIZE_LARGE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_POSTFIELDSIZE_LARGE, HB_CURL_OPT_LARGENUM( 3 ) ); + break; + case HB_CURLOPT_HTTPPOST: { - ULONG ulPos; - ULONG ulArrayLen = hb_arrayLen( pArray ); - - for( ulPos = 0; ulPos < ulArrayLen; ulPos++ ) + PHB_ITEM pArray = hb_param( 3, HB_IT_ARRAY ); + + if( pArray ) { - PHB_ITEM pSubArray = hb_arrayGetItemPtr( pArray, ulPos + 1 ); - - curl_formadd( &hb_curl->pHTTPPOST_First, - &hb_curl->pHTTPPOST_Last, - CURLFORM_COPYNAME, hb_arrayGetCPtr( pSubArray, 1 ), - CURLFORM_FILE, hb_arrayGetCPtr( pSubArray, 2 ), - CURLFORM_END ); + ULONG ulPos; + ULONG ulArrayLen = hb_arrayLen( pArray ); + + for( ulPos = 0; ulPos < ulArrayLen; ulPos++ ) + { + PHB_ITEM pSubArray = hb_arrayGetItemPtr( pArray, ulPos + 1 ); + + curl_formadd( &hb_curl->pHTTPPOST_First, + &hb_curl->pHTTPPOST_Last, + CURLFORM_COPYNAME, hb_arrayGetCPtr( pSubArray, 1 ), + CURLFORM_FILE, hb_arrayGetCPtr( pSubArray, 2 ), + CURLFORM_END ); + } + + res = curl_easy_setopt( hb_curl->curl, CURLOPT_HTTPPOST, hb_curl->pHTTPPOST_First ); } - - res = curl_easy_setopt( hb_curl->curl, CURLOPT_HTTPPOST, hb_curl->pHTTPPOST_First ); } - } - break; - case HB_CURLOPT_REFERER: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_REFERER, hb_parc( 3 ) ); - break; - case HB_CURLOPT_USERAGENT: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_USERAGENT, hb_parc( 3 ) ); - break; - case HB_CURLOPT_HTTPHEADER: - { - PHB_ITEM pArray = hb_param( 3, HB_IT_ARRAY ); - - curl_easy_setopt( hb_curl->curl, CURLOPT_HTTPHEADER, NULL ); - hb_curl_slist_free( &hb_curl->pHTTPHEADER ); - - if( pArray ) + break; + case HB_CURLOPT_REFERER: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_REFERER, hb_parc( 3 ) ); + break; + case HB_CURLOPT_USERAGENT: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_USERAGENT, hb_parc( 3 ) ); + break; + case HB_CURLOPT_HTTPHEADER: { - ULONG ulPos; - ULONG ulArrayLen = hb_arrayLen( pArray ); - - for( ulPos = 0; ulPos < ulArrayLen; ulPos++ ) - hb_curl->pHTTPHEADER = curl_slist_append( hb_curl->pHTTPHEADER, hb_arrayGetCPtr( pArray, ulPos + 1 ) ); - - res = curl_easy_setopt( hb_curl->curl, CURLOPT_HTTPHEADER, hb_curl->pHTTPHEADER ); + PHB_ITEM pArray = hb_param( 3, HB_IT_ARRAY ); + + curl_easy_setopt( hb_curl->curl, CURLOPT_HTTPHEADER, NULL ); + hb_curl_slist_free( &hb_curl->pHTTPHEADER ); + + if( pArray ) + { + ULONG ulPos; + ULONG ulArrayLen = hb_arrayLen( pArray ); + + for( ulPos = 0; ulPos < ulArrayLen; ulPos++ ) + hb_curl->pHTTPHEADER = curl_slist_append( hb_curl->pHTTPHEADER, hb_arrayGetCPtr( pArray, ulPos + 1 ) ); + + res = curl_easy_setopt( hb_curl->curl, CURLOPT_HTTPHEADER, hb_curl->pHTTPHEADER ); + } } - } - break; - case HB_CURLOPT_HTTP200ALIASES: - { - PHB_ITEM pArray = hb_param( 3, HB_IT_ARRAY ); - - curl_easy_setopt( hb_curl->curl, CURLOPT_HTTP200ALIASES, NULL ); - hb_curl_slist_free( &hb_curl->pHTTP200ALIASES ); - - if( pArray ) + break; + case HB_CURLOPT_HTTP200ALIASES: { - ULONG ulPos; - ULONG ulArrayLen = hb_arrayLen( pArray ); - - for( ulPos = 0; ulPos < ulArrayLen; ulPos++ ) - hb_curl->pHTTP200ALIASES = curl_slist_append( hb_curl->pHTTP200ALIASES, hb_arrayGetCPtr( pArray, ulPos + 1 ) ); - - res = curl_easy_setopt( hb_curl->curl, CURLOPT_HTTP200ALIASES, hb_curl->pHTTP200ALIASES ); + PHB_ITEM pArray = hb_param( 3, HB_IT_ARRAY ); + + curl_easy_setopt( hb_curl->curl, CURLOPT_HTTP200ALIASES, NULL ); + hb_curl_slist_free( &hb_curl->pHTTP200ALIASES ); + + if( pArray ) + { + ULONG ulPos; + ULONG ulArrayLen = hb_arrayLen( pArray ); + + for( ulPos = 0; ulPos < ulArrayLen; ulPos++ ) + hb_curl->pHTTP200ALIASES = curl_slist_append( hb_curl->pHTTP200ALIASES, hb_arrayGetCPtr( pArray, ulPos + 1 ) ); + + res = curl_easy_setopt( hb_curl->curl, CURLOPT_HTTP200ALIASES, hb_curl->pHTTP200ALIASES ); + } } - } - break; - case HB_CURLOPT_COOKIE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_COOKIE, hb_parc( 3 ) ); - break; - case HB_CURLOPT_COOKIEFILE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_COOKIEFILE, hb_parc( 3 ) ); - break; - case HB_CURLOPT_COOKIEJAR: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_COOKIEJAR, hb_parc( 3 ) ); - break; - case HB_CURLOPT_COOKIESESSION: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_COOKIESESSION, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_COOKIELIST: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_COOKIELIST, hb_parc( 3 ) ); - break; - case HB_CURLOPT_HTTPGET: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_HTTPGET, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_HTTP_VERSION: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_HTTP_VERSION, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_IGNORE_CONTENT_LENGTH: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_IGNORE_CONTENT_LENGTH, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_HTTP_CONTENT_DECODING: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_IGNORE_CONTENT_LENGTH, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_HTTP_TRANSFER_DECODING: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_HTTP_TRANSFER_DECODING, HB_CURL_OPT_BOOL( 3 ) ); - break; - - /* FTP options */ - - case HB_CURLOPT_FTPPORT: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTPPORT, hb_parc( 3 ) ); - break; - case HB_CURLOPT_QUOTE: - { - PHB_ITEM pArray = hb_param( 3, HB_IT_ARRAY ); - - curl_easy_setopt( hb_curl->curl, CURLOPT_QUOTE, NULL ); - hb_curl_slist_free( &hb_curl->pQUOTE ); - - if( pArray ) + break; + case HB_CURLOPT_COOKIE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_COOKIE, hb_parc( 3 ) ); + break; + case HB_CURLOPT_COOKIEFILE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_COOKIEFILE, hb_parc( 3 ) ); + break; + case HB_CURLOPT_COOKIEJAR: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_COOKIEJAR, hb_parc( 3 ) ); + break; + case HB_CURLOPT_COOKIESESSION: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_COOKIESESSION, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_COOKIELIST: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_COOKIELIST, hb_parc( 3 ) ); + break; + case HB_CURLOPT_HTTPGET: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_HTTPGET, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_HTTP_VERSION: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_HTTP_VERSION, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_IGNORE_CONTENT_LENGTH: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_IGNORE_CONTENT_LENGTH, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_HTTP_CONTENT_DECODING: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_IGNORE_CONTENT_LENGTH, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_HTTP_TRANSFER_DECODING: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_HTTP_TRANSFER_DECODING, HB_CURL_OPT_BOOL( 3 ) ); + break; + + /* FTP options */ + + case HB_CURLOPT_FTPPORT: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTPPORT, hb_parc( 3 ) ); + break; + case HB_CURLOPT_QUOTE: { - ULONG ulPos; - ULONG ulArrayLen = hb_arrayLen( pArray ); - - for( ulPos = 0; ulPos < ulArrayLen; ulPos++ ) - hb_curl->pQUOTE = curl_slist_append( hb_curl->pQUOTE, hb_arrayGetCPtr( pArray, ulPos + 1 ) ); - - res = curl_easy_setopt( hb_curl->curl, CURLOPT_QUOTE, hb_curl->pQUOTE ); + PHB_ITEM pArray = hb_param( 3, HB_IT_ARRAY ); + + curl_easy_setopt( hb_curl->curl, CURLOPT_QUOTE, NULL ); + hb_curl_slist_free( &hb_curl->pQUOTE ); + + if( pArray ) + { + ULONG ulPos; + ULONG ulArrayLen = hb_arrayLen( pArray ); + + for( ulPos = 0; ulPos < ulArrayLen; ulPos++ ) + hb_curl->pQUOTE = curl_slist_append( hb_curl->pQUOTE, hb_arrayGetCPtr( pArray, ulPos + 1 ) ); + + res = curl_easy_setopt( hb_curl->curl, CURLOPT_QUOTE, hb_curl->pQUOTE ); + } } - } - break; - case HB_CURLOPT_POSTQUOTE: - { - PHB_ITEM pArray = hb_param( 3, HB_IT_ARRAY ); - - curl_easy_setopt( hb_curl->curl, CURLOPT_POSTQUOTE, NULL ); - hb_curl_slist_free( &hb_curl->pPOSTQUOTE ); - - if( pArray ) + break; + case HB_CURLOPT_POSTQUOTE: { - ULONG ulPos; - ULONG ulArrayLen = hb_arrayLen( pArray ); - - for( ulPos = 0; ulPos < ulArrayLen; ulPos++ ) - hb_curl->pPOSTQUOTE = curl_slist_append( hb_curl->pPOSTQUOTE, hb_arrayGetCPtr( pArray, ulPos + 1 ) ); - - res = curl_easy_setopt( hb_curl->curl, CURLOPT_POSTQUOTE, hb_curl->pPOSTQUOTE ); + PHB_ITEM pArray = hb_param( 3, HB_IT_ARRAY ); + + curl_easy_setopt( hb_curl->curl, CURLOPT_POSTQUOTE, NULL ); + hb_curl_slist_free( &hb_curl->pPOSTQUOTE ); + + if( pArray ) + { + ULONG ulPos; + ULONG ulArrayLen = hb_arrayLen( pArray ); + + for( ulPos = 0; ulPos < ulArrayLen; ulPos++ ) + hb_curl->pPOSTQUOTE = curl_slist_append( hb_curl->pPOSTQUOTE, hb_arrayGetCPtr( pArray, ulPos + 1 ) ); + + res = curl_easy_setopt( hb_curl->curl, CURLOPT_POSTQUOTE, hb_curl->pPOSTQUOTE ); + } } - } - break; - case HB_CURLOPT_PREQUOTE: - { - PHB_ITEM pArray = hb_param( 3, HB_IT_ARRAY ); - - curl_easy_setopt( hb_curl->curl, CURLOPT_PREQUOTE, NULL ); - hb_curl_slist_free( &hb_curl->pPREQUOTE ); - - if( pArray ) + break; + case HB_CURLOPT_PREQUOTE: { - ULONG ulPos; - ULONG ulArrayLen = hb_arrayLen( pArray ); - - for( ulPos = 0; ulPos < ulArrayLen; ulPos++ ) - hb_curl->pQUOTE = curl_slist_append( hb_curl->pPREQUOTE, hb_arrayGetCPtr( pArray, ulPos + 1 ) ); - - res = curl_easy_setopt( hb_curl->curl, CURLOPT_PREQUOTE, hb_curl->pPREQUOTE ); + PHB_ITEM pArray = hb_param( 3, HB_IT_ARRAY ); + + curl_easy_setopt( hb_curl->curl, CURLOPT_PREQUOTE, NULL ); + hb_curl_slist_free( &hb_curl->pPREQUOTE ); + + if( pArray ) + { + ULONG ulPos; + ULONG ulArrayLen = hb_arrayLen( pArray ); + + for( ulPos = 0; ulPos < ulArrayLen; ulPos++ ) + hb_curl->pQUOTE = curl_slist_append( hb_curl->pPREQUOTE, hb_arrayGetCPtr( pArray, ulPos + 1 ) ); + + res = curl_easy_setopt( hb_curl->curl, CURLOPT_PREQUOTE, hb_curl->pPREQUOTE ); + } } - } - break; - case HB_CURLOPT_DIRLISTONLY: /* HB_CURLOPT_FTPLISTONLY */ - res = curl_easy_setopt( hb_curl->curl, CURLOPT_DIRLISTONLY, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_APPEND: /* HB_CURLOPT_FTPAPPEND */ - res = curl_easy_setopt( hb_curl->curl, CURLOPT_APPEND, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_FTP_USE_EPRT: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_USE_EPRT, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_FTP_USE_EPSV: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_USE_EPSV, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_FTP_CREATE_MISSING_DIRS: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_CREATE_MISSING_DIRS, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_FTP_RESPONSE_TIMEOUT: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_RESPONSE_TIMEOUT, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_FTP_ALTERNATIVE_TO_USER: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_ALTERNATIVE_TO_USER, hb_parc( 3 ) ); - break; - case HB_CURLOPT_FTP_SKIP_PASV_IP: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_SKIP_PASV_IP, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_USE_SSL: /* HB_CURLOPT_FTP_SSL */ - res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_SSL, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_FTPSSLAUTH: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTPSSLAUTH, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_FTP_SSL_CCC: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_SSL_CCC, hb_parnl( 3 ) ); - break; + break; + case HB_CURLOPT_DIRLISTONLY: /* HB_CURLOPT_FTPLISTONLY */ + res = curl_easy_setopt( hb_curl->curl, CURLOPT_DIRLISTONLY, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_APPEND: /* HB_CURLOPT_FTPAPPEND */ + res = curl_easy_setopt( hb_curl->curl, CURLOPT_APPEND, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_FTP_USE_EPRT: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_USE_EPRT, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_FTP_USE_EPSV: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_USE_EPSV, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_FTP_CREATE_MISSING_DIRS: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_CREATE_MISSING_DIRS, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_FTP_RESPONSE_TIMEOUT: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_RESPONSE_TIMEOUT, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_FTP_ALTERNATIVE_TO_USER: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_ALTERNATIVE_TO_USER, hb_parc( 3 ) ); + break; + case HB_CURLOPT_FTP_SKIP_PASV_IP: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_SKIP_PASV_IP, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_USE_SSL: /* HB_CURLOPT_FTP_SSL */ + res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_SSL, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_FTPSSLAUTH: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTPSSLAUTH, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_FTP_SSL_CCC: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_SSL_CCC, hb_parnl( 3 ) ); + break; #if LIBCURL_VERSION_NUM >= 0x071203 - case HB_CURLOPT_FTP_ACCOUNT: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_ACCOUNT, hb_parc( 3 ) ); - break; + case HB_CURLOPT_FTP_ACCOUNT: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_ACCOUNT, hb_parc( 3 ) ); + break; #endif - case HB_CURLOPT_FTP_FILEMETHOD: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_FILEMETHOD, hb_parnl( 3 ) ); - break; - - /* Protocol */ - - case HB_CURLOPT_TRANSFERTEXT: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_TRANSFERTEXT, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_PROXY_TRANSFER_MODE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_PROXY_TRANSFER_MODE, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_CRLF: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_CRLF, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_RANGE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_RANGE, hb_parc( 3 ) ); - break; - case HB_CURLOPT_RESUME_FROM: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_RESUME_FROM, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_RESUME_FROM_LARGE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_RESUME_FROM_LARGE, HB_CURL_OPT_LARGENUM( 3 ) ); - break; - case HB_CURLOPT_CUSTOMREQUEST: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_CUSTOMREQUEST, hb_parc( 3 ) ); - break; - case HB_CURLOPT_FILETIME: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_FILETIME, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_NOBODY: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_NOBODY, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_INFILESIZE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_INFILESIZE, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_INFILESIZE_LARGE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_INFILESIZE_LARGE, HB_CURL_OPT_LARGENUM( 3 ) ); - break; - case HB_CURLOPT_UPLOAD: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_UPLOAD, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_DOWNLOAD: /* Harbour extension */ - res = curl_easy_setopt( hb_curl->curl, CURLOPT_UPLOAD, ! HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_MAXFILESIZE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_MAXFILESIZE, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_MAXFILESIZE_LARGE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_MAXFILESIZE_LARGE, HB_CURL_OPT_LARGENUM( 3 ) ); - break; - case HB_CURLOPT_TIMECONDITION: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_TIMECONDITION, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_TIMEVALUE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_TIMEVALUE, hb_parnl( 3 ) ); - break; - - /* Connection */ - - case HB_CURLOPT_TIMEOUT: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_TIMEOUT, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_TIMEOUT_MS: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_TIMEOUT_MS, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_LOW_SPEED_LIMIT: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_LOW_SPEED_LIMIT, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_LOW_SPEED_TIME: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_LOW_SPEED_TIME, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_MAX_SEND_SPEED_LARGE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_MAX_SEND_SPEED_LARGE, HB_CURL_OPT_LARGENUM( 3 ) ); - break; - case HB_CURLOPT_MAX_RECV_SPEED_LARGE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_MAX_RECV_SPEED_LARGE, HB_CURL_OPT_LARGENUM( 3 ) ); - break; - case HB_CURLOPT_MAXCONNECTS: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_MAXCONNECTS, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_CLOSEPOLICY: /* OBSOLETE, does nothing. */ - res = curl_easy_setopt( hb_curl->curl, CURLOPT_CLOSEPOLICY, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_FRESH_CONNECT: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_FRESH_CONNECT, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_FORBID_REUSE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_FORBID_REUSE, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_CONNECTTIMEOUT: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_CONNECTTIMEOUT, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_CONNECTTIMEOUT_MS: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_CONNECTTIMEOUT_MS, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_IPRESOLVE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_IPRESOLVE, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_CONNECT_ONLY: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_CONNECT_ONLY, HB_CURL_OPT_BOOL( 3 ) ); - break; - - /* SSL and Security */ - - case HB_CURLOPT_SSLCERT: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSLCERT, hb_parc( 3 ) ); - break; - case HB_CURLOPT_SSLCERTTYPE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSLCERTTYPE, hb_parc( 3 ) ); - break; - case HB_CURLOPT_SSLKEY: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSLKEY, hb_parc( 3 ) ); - break; - case HB_CURLOPT_SSLKEYTYPE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSLKEYTYPE, hb_parc( 3 ) ); - break; - case HB_CURLOPT_KEYPASSWD: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_KEYPASSWD, hb_parc( 3 ) ); - break; - case HB_CURLOPT_SSLENGINE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSLENGINE, hb_parc( 3 ) ); - break; - case HB_CURLOPT_SSLENGINE_DEFAULT: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSLENGINE_DEFAULT, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_SSLVERSION: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSLVERSION, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_SSL_VERIFYPEER: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSL_VERIFYPEER, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_CAINFO: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_CAINFO, hb_parc( 3 ) ); - break; - case HB_CURLOPT_CAPATH: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_CAPATH, hb_parc( 3 ) ); - break; - case HB_CURLOPT_RANDOM_FILE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_RANDOM_FILE, hb_parc( 3 ) ); - break; - case HB_CURLOPT_EGDSOCKET: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_EGDSOCKET, hb_parc( 3 ) ); - break; - case HB_CURLOPT_SSL_VERIFYHOST: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSL_VERIFYHOST, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_SSL_CIPHER_LIST: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSL_CIPHER_LIST, hb_parc( 3 ) ); - break; - case HB_CURLOPT_SSL_SESSIONID_CACHE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSL_VERIFYHOST, HB_CURL_OPT_BOOL( 3 ) ); - break; - case HB_CURLOPT_KRBLEVEL: /* HB_CURLOPT_KRB4LEVEL */ - res = curl_easy_setopt( hb_curl->curl, CURLOPT_KRBLEVEL, hb_parc( 3 ) ); - break; - - /* SSH options */ - - case HB_CURLOPT_SSH_AUTH_TYPES: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSH_AUTH_TYPES, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_SSH_HOST_PUBLIC_KEY_MD5: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSH_HOST_PUBLIC_KEY_MD5, hb_parc( 3 ) ); - break; - case HB_CURLOPT_SSH_PUBLIC_KEYFILE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSH_PUBLIC_KEYFILE, hb_parc( 3 ) ); - break; - case HB_CURLOPT_SSH_PRIVATE_KEYFILE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSH_PRIVATE_KEYFILE, hb_parc( 3 ) ); - break; - - /* Other options */ - - case HB_CURLOPT_PRIVATE: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_PRIVATE, hb_parptr( 3 ) ); - break; - - /* HB_CURLOPT_SHARE */ - - case HB_CURLOPT_NEW_FILE_PERMS: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_NEW_FILE_PERMS, hb_parnl( 3 ) ); - break; - case HB_CURLOPT_NEW_DIRECTORY_PERMS: - res = curl_easy_setopt( hb_curl->curl, CURLOPT_NEW_DIRECTORY_PERMS, hb_parnl( 3 ) ); - break; - - /* Telnet options */ - - case HB_CURLOPT_TELNETOPTIONS: - { - PHB_ITEM pArray = hb_param( 3, HB_IT_ARRAY ); - - curl_easy_setopt( hb_curl->curl, CURLOPT_TELNETOPTIONS, NULL ); - hb_curl_slist_free( &hb_curl->pTELNETOPTIONS ); - - if( pArray ) + case HB_CURLOPT_FTP_FILEMETHOD: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_FTP_FILEMETHOD, hb_parnl( 3 ) ); + break; + + /* Protocol */ + + case HB_CURLOPT_TRANSFERTEXT: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_TRANSFERTEXT, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_PROXY_TRANSFER_MODE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_PROXY_TRANSFER_MODE, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_CRLF: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_CRLF, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_RANGE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_RANGE, hb_parc( 3 ) ); + break; + case HB_CURLOPT_RESUME_FROM: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_RESUME_FROM, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_RESUME_FROM_LARGE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_RESUME_FROM_LARGE, HB_CURL_OPT_LARGENUM( 3 ) ); + break; + case HB_CURLOPT_CUSTOMREQUEST: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_CUSTOMREQUEST, hb_parc( 3 ) ); + break; + case HB_CURLOPT_FILETIME: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_FILETIME, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_NOBODY: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_NOBODY, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_INFILESIZE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_INFILESIZE, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_INFILESIZE_LARGE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_INFILESIZE_LARGE, HB_CURL_OPT_LARGENUM( 3 ) ); + break; + case HB_CURLOPT_UPLOAD: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_UPLOAD, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_DOWNLOAD: /* Harbour extension */ + res = curl_easy_setopt( hb_curl->curl, CURLOPT_UPLOAD, ! HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_MAXFILESIZE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_MAXFILESIZE, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_MAXFILESIZE_LARGE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_MAXFILESIZE_LARGE, HB_CURL_OPT_LARGENUM( 3 ) ); + break; + case HB_CURLOPT_TIMECONDITION: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_TIMECONDITION, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_TIMEVALUE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_TIMEVALUE, hb_parnl( 3 ) ); + break; + + /* Connection */ + + case HB_CURLOPT_TIMEOUT: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_TIMEOUT, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_TIMEOUT_MS: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_TIMEOUT_MS, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_LOW_SPEED_LIMIT: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_LOW_SPEED_LIMIT, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_LOW_SPEED_TIME: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_LOW_SPEED_TIME, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_MAX_SEND_SPEED_LARGE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_MAX_SEND_SPEED_LARGE, HB_CURL_OPT_LARGENUM( 3 ) ); + break; + case HB_CURLOPT_MAX_RECV_SPEED_LARGE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_MAX_RECV_SPEED_LARGE, HB_CURL_OPT_LARGENUM( 3 ) ); + break; + case HB_CURLOPT_MAXCONNECTS: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_MAXCONNECTS, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_CLOSEPOLICY: /* OBSOLETE, does nothing. */ + res = curl_easy_setopt( hb_curl->curl, CURLOPT_CLOSEPOLICY, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_FRESH_CONNECT: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_FRESH_CONNECT, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_FORBID_REUSE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_FORBID_REUSE, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_CONNECTTIMEOUT: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_CONNECTTIMEOUT, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_CONNECTTIMEOUT_MS: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_CONNECTTIMEOUT_MS, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_IPRESOLVE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_IPRESOLVE, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_CONNECT_ONLY: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_CONNECT_ONLY, HB_CURL_OPT_BOOL( 3 ) ); + break; + + /* SSL and Security */ + + case HB_CURLOPT_SSLCERT: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSLCERT, hb_parc( 3 ) ); + break; + case HB_CURLOPT_SSLCERTTYPE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSLCERTTYPE, hb_parc( 3 ) ); + break; + case HB_CURLOPT_SSLKEY: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSLKEY, hb_parc( 3 ) ); + break; + case HB_CURLOPT_SSLKEYTYPE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSLKEYTYPE, hb_parc( 3 ) ); + break; + case HB_CURLOPT_KEYPASSWD: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_KEYPASSWD, hb_parc( 3 ) ); + break; + case HB_CURLOPT_SSLENGINE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSLENGINE, hb_parc( 3 ) ); + break; + case HB_CURLOPT_SSLENGINE_DEFAULT: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSLENGINE_DEFAULT, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_SSLVERSION: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSLVERSION, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_SSL_VERIFYPEER: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSL_VERIFYPEER, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_CAINFO: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_CAINFO, hb_parc( 3 ) ); + break; + case HB_CURLOPT_CAPATH: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_CAPATH, hb_parc( 3 ) ); + break; + case HB_CURLOPT_RANDOM_FILE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_RANDOM_FILE, hb_parc( 3 ) ); + break; + case HB_CURLOPT_EGDSOCKET: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_EGDSOCKET, hb_parc( 3 ) ); + break; + case HB_CURLOPT_SSL_VERIFYHOST: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSL_VERIFYHOST, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_SSL_CIPHER_LIST: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSL_CIPHER_LIST, hb_parc( 3 ) ); + break; + case HB_CURLOPT_SSL_SESSIONID_CACHE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSL_VERIFYHOST, HB_CURL_OPT_BOOL( 3 ) ); + break; + case HB_CURLOPT_KRBLEVEL: /* HB_CURLOPT_KRB4LEVEL */ + res = curl_easy_setopt( hb_curl->curl, CURLOPT_KRBLEVEL, hb_parc( 3 ) ); + break; + + /* SSH options */ + + case HB_CURLOPT_SSH_AUTH_TYPES: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSH_AUTH_TYPES, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_SSH_HOST_PUBLIC_KEY_MD5: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSH_HOST_PUBLIC_KEY_MD5, hb_parc( 3 ) ); + break; + case HB_CURLOPT_SSH_PUBLIC_KEYFILE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSH_PUBLIC_KEYFILE, hb_parc( 3 ) ); + break; + case HB_CURLOPT_SSH_PRIVATE_KEYFILE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_SSH_PRIVATE_KEYFILE, hb_parc( 3 ) ); + break; + + /* Other options */ + + case HB_CURLOPT_PRIVATE: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_PRIVATE, hb_parptr( 3 ) ); + break; + + /* HB_CURLOPT_SHARE */ + + case HB_CURLOPT_NEW_FILE_PERMS: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_NEW_FILE_PERMS, hb_parnl( 3 ) ); + break; + case HB_CURLOPT_NEW_DIRECTORY_PERMS: + res = curl_easy_setopt( hb_curl->curl, CURLOPT_NEW_DIRECTORY_PERMS, hb_parnl( 3 ) ); + break; + + /* Telnet options */ + + case HB_CURLOPT_TELNETOPTIONS: { - ULONG ulPos; - ULONG ulArrayLen = hb_arrayLen( pArray ); - - for( ulPos = 0; ulPos < ulArrayLen; ulPos++ ) - hb_curl->pTELNETOPTIONS = curl_slist_append( hb_curl->pTELNETOPTIONS, hb_arrayGetCPtr( pArray, ulPos + 1 ) ); - - res = curl_easy_setopt( hb_curl->curl, CURLOPT_TELNETOPTIONS, hb_curl->pTELNETOPTIONS ); + PHB_ITEM pArray = hb_param( 3, HB_IT_ARRAY ); + + curl_easy_setopt( hb_curl->curl, CURLOPT_TELNETOPTIONS, NULL ); + hb_curl_slist_free( &hb_curl->pTELNETOPTIONS ); + + if( pArray ) + { + ULONG ulPos; + ULONG ulArrayLen = hb_arrayLen( pArray ); + + for( ulPos = 0; ulPos < ulArrayLen; ulPos++ ) + hb_curl->pTELNETOPTIONS = curl_slist_append( hb_curl->pTELNETOPTIONS, hb_arrayGetCPtr( pArray, ulPos + 1 ) ); + + res = curl_easy_setopt( hb_curl->curl, CURLOPT_TELNETOPTIONS, hb_curl->pTELNETOPTIONS ); + } } - } - break; - - /* Undocumented */ - - /* HB_CURLOPT_WRITEINFO */ - - /* Harbour specials */ - - case HB_CURLOPT_PROGRESSBLOCK: - { - PHB_ITEM pProgressBlock = hb_param( 3, HB_IT_BLOCK ); - - if( hb_curl->pProgressBlock ) + break; + + /* Undocumented */ + + /* HB_CURLOPT_WRITEINFO */ + + /* Harbour specials */ + + case HB_CURLOPT_PROGRESSBLOCK: { - curl_easy_setopt( hb_curl->curl, CURLOPT_PROGRESSFUNCTION, NULL ); - curl_easy_setopt( hb_curl->curl, CURLOPT_PROGRESSDATA, NULL ); - - hb_itemRelease( hb_curl->pProgressBlock ); - hb_curl->pProgressBlock = NULL; + PHB_ITEM pProgressBlock = hb_param( 3, HB_IT_BLOCK ); + + if( hb_curl->pProgressBlock ) + { + curl_easy_setopt( hb_curl->curl, CURLOPT_PROGRESSFUNCTION, NULL ); + curl_easy_setopt( hb_curl->curl, CURLOPT_PROGRESSDATA, NULL ); + + hb_itemRelease( hb_curl->pProgressBlock ); + hb_curl->pProgressBlock = NULL; + } + + if( pProgressBlock ) + { + hb_curl->pProgressBlock = hb_itemNew( pProgressBlock ); + + curl_easy_setopt( hb_curl->curl, CURLOPT_PROGRESSFUNCTION, hb_curl_progress_callback ); + res = curl_easy_setopt( hb_curl->curl, CURLOPT_PROGRESSDATA, ( void * ) hb_curl->pProgressBlock ); + } } - - if( pProgressBlock ) + break; + + case HB_CURLOPT_UL_FILE_SETUP: { - hb_curl->pProgressBlock = hb_itemNew( pProgressBlock ); - - curl_easy_setopt( hb_curl->curl, CURLOPT_PROGRESSFUNCTION, hb_curl_progress_callback ); - res = curl_easy_setopt( hb_curl->curl, CURLOPT_PROGRESSDATA, ( void * ) hb_curl->pProgressBlock ); + hb_curl_file_ul_free( hb_curl ); + + if( ISCHAR( 3 ) ) + { + hb_curl->ul_name = ( BYTE * ) hb_strdup( hb_parc( 3 ) ); + hb_curl->ul_handle = FS_ERROR; + + curl_easy_setopt( hb_curl->curl, CURLOPT_READFUNCTION, hb_curl_read_file_callback ); + res = curl_easy_setopt( hb_curl->curl, CURLOPT_READDATA, ( void * ) hb_curl ); + } } - } - break; - - case HB_CURLOPT_UL_FILE_SETUP: - { + break; + + case HB_CURLOPT_UL_FILE_CLOSE: hb_curl_file_ul_free( hb_curl ); - - if( ISCHAR( 3 ) ) + res = CURLE_OK; + break; + + case HB_CURLOPT_DL_FILE_SETUP: { - hb_curl->ul_name = ( BYTE * ) hb_strdup( hb_parc( 3 ) ); - hb_curl->ul_handle = FS_ERROR; - - curl_easy_setopt( hb_curl->curl, CURLOPT_READFUNCTION, hb_curl_read_file_callback ); - res = curl_easy_setopt( hb_curl->curl, CURLOPT_READDATA, ( void * ) hb_curl ); + hb_curl_file_dl_free( hb_curl ); + + if( ISCHAR( 3 ) ) + { + hb_curl->dl_name = ( BYTE * ) hb_strdup( hb_parc( 3 ) ); + hb_curl->dl_handle = FS_ERROR; + + curl_easy_setopt( hb_curl->curl, CURLOPT_WRITEFUNCTION, hb_curl_write_file_callback ); + res = curl_easy_setopt( hb_curl->curl, CURLOPT_WRITEDATA, ( void * ) hb_curl ); + } } - } - break; - - case HB_CURLOPT_UL_FILE_CLOSE: - hb_curl_file_ul_free( hb_curl ); - res = CURLE_OK; - break; - - case HB_CURLOPT_DL_FILE_SETUP: - { + break; + + case HB_CURLOPT_DL_FILE_CLOSE: hb_curl_file_dl_free( hb_curl ); - - if( ISCHAR( 3 ) ) + res = CURLE_OK; + break; + + case HB_CURLOPT_UL_BUFF_SETUP: { - hb_curl->dl_name = ( BYTE * ) hb_strdup( hb_parc( 3 ) ); - hb_curl->dl_handle = FS_ERROR; - - curl_easy_setopt( hb_curl->curl, CURLOPT_WRITEFUNCTION, hb_curl_write_file_callback ); + hb_curl_buff_ul_free( hb_curl ); + + if( ISCHAR( 3 ) ) + { + hb_curl->ul_pos = 0; + hb_curl->ul_len = hb_parclen( 3 ); + hb_curl->ul_ptr = ( BYTE * ) hb_xgrab( hb_curl->ul_len ); + + hb_xmemcpy( hb_curl->ul_ptr, hb_parc( 3 ), hb_curl->ul_len ); + + curl_easy_setopt( hb_curl->curl, CURLOPT_READFUNCTION, hb_curl_read_buff_callback ); + res = curl_easy_setopt( hb_curl->curl, CURLOPT_READDATA, ( void * ) hb_curl ); + } + } + break; + + case HB_CURLOPT_DL_BUFF_SETUP: + { + hb_curl_buff_dl_free( hb_curl ); + + hb_curl->dl_pos = 0; + hb_curl->dl_len = ISNUM( 3 ) ? hb_parnl( 3 ) : HB_CURL_DL_BUFF_SIZE_INIT; + hb_curl->dl_ptr = ( BYTE * ) hb_xgrab( hb_curl->dl_len ); + + curl_easy_setopt( hb_curl->curl, CURLOPT_WRITEFUNCTION, hb_curl_write_buff_callback ); res = curl_easy_setopt( hb_curl->curl, CURLOPT_WRITEDATA, ( void * ) hb_curl ); } - } - break; - - case HB_CURLOPT_DL_FILE_CLOSE: - hb_curl_file_dl_free( hb_curl ); - res = CURLE_OK; - break; - - case HB_CURLOPT_UL_BUFF_SETUP: - { + break; + + case HB_CURLOPT_DL_BUFF_GET: + hb_storclen( ( char * ) hb_curl->dl_ptr, hb_curl->dl_pos, 3 ); + if( hb_curl->dl_ptr ) + res = CURLE_OK; + break; + + case HB_CURLOPT_UL_NULL_SETUP: + hb_curl_file_ul_free( hb_curl ); hb_curl_buff_ul_free( hb_curl ); - - if( ISCHAR( 3 ) ) - { - hb_curl->ul_pos = 0; - hb_curl->ul_len = hb_parclen( 3 ); - hb_curl->ul_ptr = ( BYTE * ) hb_xgrab( hb_curl->ul_len ); - - hb_xmemcpy( hb_curl->ul_ptr, hb_parc( 3 ), hb_curl->ul_len ); - - curl_easy_setopt( hb_curl->curl, CURLOPT_READFUNCTION, hb_curl_read_buff_callback ); - res = curl_easy_setopt( hb_curl->curl, CURLOPT_READDATA, ( void * ) hb_curl ); - } + + curl_easy_setopt( hb_curl->curl, CURLOPT_READFUNCTION, hb_curl_read_dummy_callback ); + res = curl_easy_setopt( hb_curl->curl, CURLOPT_READDATA, ( void * ) hb_curl ); + break; } - break; - - case HB_CURLOPT_DL_BUFF_SETUP: - { - hb_curl_buff_dl_free( hb_curl ); - - hb_curl->dl_pos = 0; - hb_curl->dl_len = ISNUM( 3 ) ? hb_parnl( 3 ) : HB_CURL_DL_BUFF_SIZE_INIT; - hb_curl->dl_ptr = ( BYTE * ) hb_xgrab( hb_curl->dl_len ); - - curl_easy_setopt( hb_curl->curl, CURLOPT_WRITEFUNCTION, hb_curl_write_buff_callback ); - res = curl_easy_setopt( hb_curl->curl, CURLOPT_WRITEDATA, ( void * ) hb_curl ); - } - break; - - case HB_CURLOPT_DL_BUFF_GET: - hb_storclen( ( char * ) hb_curl->dl_ptr, hb_curl->dl_pos, 3 ); - if( hb_curl->dl_ptr ) - res = CURLE_OK; - break; - - case HB_CURLOPT_UL_NULL_SETUP: - hb_curl_file_ul_free( hb_curl ); - hb_curl_buff_ul_free( hb_curl ); - - curl_easy_setopt( hb_curl->curl, CURLOPT_READFUNCTION, hb_curl_read_dummy_callback ); - res = curl_easy_setopt( hb_curl->curl, CURLOPT_READDATA, ( void * ) hb_curl ); - break; } + + hb_retnl( ( long ) res ); } - - hb_retnl( ( long ) res ); + else + hb_errRT_BASE( EG_ARG, 2010, NULL, "CURL_EASY_SETOPT", HB_ERR_ARGS_BASEPARAMS ); } /* Harbour extension. */ HB_FUNC( CURL_EASY_DL_BUFF_GET ) { - PHB_CURL hb_curl = PHB_CURL_par( 1 ); + if( ISPOINTER( 1 ) ) + { + PHB_CURL hb_curl = PHB_CURL_par( 1 ); - if( hb_curl ) - hb_retclen( ( char * ) hb_curl->dl_ptr, hb_curl->dl_pos ); + if( hb_curl ) + hb_retclen( ( char * ) hb_curl->dl_ptr, hb_curl->dl_pos ); + else + hb_retc_null(); + } else - hb_retc_null(); + hb_errRT_BASE( EG_ARG, 2010, NULL, "CURL_EASY_DL_BUFF_GET", HB_ERR_ARGS_BASEPARAMS ); } #define HB_CURL_INFO_TYPE_INVALID 0 @@ -1300,243 +1343,258 @@ HB_FUNC( CURL_EASY_DL_BUFF_GET ) /* NOTE: curl_easy_getinfo( curl, x, @nError ) -> xValue */ HB_FUNC( CURL_EASY_GETINFO ) { - PHB_CURL hb_curl = PHB_CURL_par( 1 ); - CURLcode res = ( CURLcode ) -1; - - if( hb_curl ) + if( ISPOINTER( 1 ) && ISNUM( 2 ) ) { - int type = HB_CURL_INFO_TYPE_INVALID; - - char * ret_string = NULL; - char * ret_ptr = NULL; - long ret_long = 0; - struct curl_slist * ret_slist = NULL; - double ret_double = 0.0; - - switch( hb_parni( 2 ) ) + PHB_CURL hb_curl = PHB_CURL_par( 1 ); + CURLcode res = ( CURLcode ) -1; + + if( hb_curl ) { - case HB_CURLINFO_EFFECTIVE_URL: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_EFFECTIVE_URL, &ret_string ); - type = HB_CURL_INFO_TYPE_STR; - break; - case HB_CURLINFO_RESPONSE_CODE: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_RESPONSE_CODE, &ret_long ); - type = HB_CURL_INFO_TYPE_LONG; - break; - case HB_CURLINFO_HTTP_CONNECTCODE: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_HTTP_CONNECTCODE, &ret_long ); - type = HB_CURL_INFO_TYPE_LONG; - break; - case HB_CURLINFO_FILETIME: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_FILETIME, &ret_long ); - type = HB_CURL_INFO_TYPE_LONG; - break; - case HB_CURLINFO_TOTAL_TIME: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_TOTAL_TIME, &ret_double ); - type = HB_CURL_INFO_TYPE_DOUBLE; - break; - case HB_CURLINFO_NAMELOOKUP_TIME: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_NAMELOOKUP_TIME, &ret_double ); - type = HB_CURL_INFO_TYPE_DOUBLE; - break; - case HB_CURLINFO_CONNECT_TIME: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_CONNECT_TIME, &ret_double ); - type = HB_CURL_INFO_TYPE_DOUBLE; - break; - case HB_CURLINFO_PRETRANSFER_TIME: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_PRETRANSFER_TIME, &ret_double ); - type = HB_CURL_INFO_TYPE_DOUBLE; - break; - case HB_CURLINFO_STARTTRANSFER_TIME: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_STARTTRANSFER_TIME, &ret_double ); - type = HB_CURL_INFO_TYPE_DOUBLE; - break; + int type = HB_CURL_INFO_TYPE_INVALID; + + char * ret_string = NULL; + char * ret_ptr = NULL; + long ret_long = 0; + struct curl_slist * ret_slist = NULL; + double ret_double = 0.0; + + switch( hb_parni( 2 ) ) + { + case HB_CURLINFO_EFFECTIVE_URL: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_EFFECTIVE_URL, &ret_string ); + type = HB_CURL_INFO_TYPE_STR; + break; + case HB_CURLINFO_RESPONSE_CODE: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_RESPONSE_CODE, &ret_long ); + type = HB_CURL_INFO_TYPE_LONG; + break; + case HB_CURLINFO_HTTP_CONNECTCODE: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_HTTP_CONNECTCODE, &ret_long ); + type = HB_CURL_INFO_TYPE_LONG; + break; + case HB_CURLINFO_FILETIME: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_FILETIME, &ret_long ); + type = HB_CURL_INFO_TYPE_LONG; + break; + case HB_CURLINFO_TOTAL_TIME: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_TOTAL_TIME, &ret_double ); + type = HB_CURL_INFO_TYPE_DOUBLE; + break; + case HB_CURLINFO_NAMELOOKUP_TIME: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_NAMELOOKUP_TIME, &ret_double ); + type = HB_CURL_INFO_TYPE_DOUBLE; + break; + case HB_CURLINFO_CONNECT_TIME: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_CONNECT_TIME, &ret_double ); + type = HB_CURL_INFO_TYPE_DOUBLE; + break; + case HB_CURLINFO_PRETRANSFER_TIME: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_PRETRANSFER_TIME, &ret_double ); + type = HB_CURL_INFO_TYPE_DOUBLE; + break; + case HB_CURLINFO_STARTTRANSFER_TIME: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_STARTTRANSFER_TIME, &ret_double ); + type = HB_CURL_INFO_TYPE_DOUBLE; + break; #if LIBCURL_VERSION_NUM >= 0x070907 - case HB_CURLINFO_REDIRECT_TIME: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_REDIRECT_TIME, &ret_double ); - type = HB_CURL_INFO_TYPE_DOUBLE; - break; - case HB_CURLINFO_REDIRECT_COUNT: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_REDIRECT_COUNT, &ret_long ); - type = HB_CURL_INFO_TYPE_LONG; - break; + case HB_CURLINFO_REDIRECT_TIME: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_REDIRECT_TIME, &ret_double ); + type = HB_CURL_INFO_TYPE_DOUBLE; + break; + case HB_CURLINFO_REDIRECT_COUNT: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_REDIRECT_COUNT, &ret_long ); + type = HB_CURL_INFO_TYPE_LONG; + break; #endif #if LIBCURL_VERSION_NUM >= 0x071802 - case HB_CURLINFO_REDIRECT_URL: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_REDIRECT_URL, &ret_string ); - type = HB_CURL_INFO_TYPE_STR; - break; + case HB_CURLINFO_REDIRECT_URL: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_REDIRECT_URL, &ret_string ); + type = HB_CURL_INFO_TYPE_STR; + break; #endif - case HB_CURLINFO_SIZE_UPLOAD: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_SIZE_UPLOAD, &ret_double ); - type = HB_CURL_INFO_TYPE_DOUBLE; - break; - case HB_CURLINFO_SIZE_DOWNLOAD: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_SIZE_DOWNLOAD, &ret_double ); - type = HB_CURL_INFO_TYPE_DOUBLE; - break; - case HB_CURLINFO_SPEED_DOWNLOAD: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_SPEED_DOWNLOAD, &ret_double ); - type = HB_CURL_INFO_TYPE_DOUBLE; - break; - case HB_CURLINFO_SPEED_UPLOAD: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_SPEED_UPLOAD, &ret_double ); - type = HB_CURL_INFO_TYPE_DOUBLE; - break; - case HB_CURLINFO_HEADER_SIZE: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_HEADER_SIZE, &ret_long ); - type = HB_CURL_INFO_TYPE_LONG; - break; - case HB_CURLINFO_REQUEST_SIZE: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_REQUEST_SIZE, &ret_long ); - type = HB_CURL_INFO_TYPE_LONG; - break; - case HB_CURLINFO_SSL_VERIFYRESULT: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_SSL_VERIFYRESULT, &ret_long ); - type = HB_CURL_INFO_TYPE_LONG; - break; + case HB_CURLINFO_SIZE_UPLOAD: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_SIZE_UPLOAD, &ret_double ); + type = HB_CURL_INFO_TYPE_DOUBLE; + break; + case HB_CURLINFO_SIZE_DOWNLOAD: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_SIZE_DOWNLOAD, &ret_double ); + type = HB_CURL_INFO_TYPE_DOUBLE; + break; + case HB_CURLINFO_SPEED_DOWNLOAD: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_SPEED_DOWNLOAD, &ret_double ); + type = HB_CURL_INFO_TYPE_DOUBLE; + break; + case HB_CURLINFO_SPEED_UPLOAD: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_SPEED_UPLOAD, &ret_double ); + type = HB_CURL_INFO_TYPE_DOUBLE; + break; + case HB_CURLINFO_HEADER_SIZE: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_HEADER_SIZE, &ret_long ); + type = HB_CURL_INFO_TYPE_LONG; + break; + case HB_CURLINFO_REQUEST_SIZE: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_REQUEST_SIZE, &ret_long ); + type = HB_CURL_INFO_TYPE_LONG; + break; + case HB_CURLINFO_SSL_VERIFYRESULT: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_SSL_VERIFYRESULT, &ret_long ); + type = HB_CURL_INFO_TYPE_LONG; + break; #if LIBCURL_VERSION_NUM >= 0x071203 - case HB_CURLINFO_SSL_ENGINES: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_SSL_ENGINES, &ret_slist ); - type = HB_CURL_INFO_TYPE_SLIST; - break; + case HB_CURLINFO_SSL_ENGINES: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_SSL_ENGINES, &ret_slist ); + type = HB_CURL_INFO_TYPE_SLIST; + break; #endif - case HB_CURLINFO_CONTENT_LENGTH_DOWNLOAD: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &ret_double ); - type = HB_CURL_INFO_TYPE_DOUBLE; - break; - case HB_CURLINFO_CONTENT_LENGTH_UPLOAD: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_CONTENT_LENGTH_UPLOAD, &ret_double ); - type = HB_CURL_INFO_TYPE_DOUBLE; - break; - case HB_CURLINFO_CONTENT_TYPE: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_CONTENT_TYPE, &ret_string ); - type = HB_CURL_INFO_TYPE_STR; - break; + case HB_CURLINFO_CONTENT_LENGTH_DOWNLOAD: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &ret_double ); + type = HB_CURL_INFO_TYPE_DOUBLE; + break; + case HB_CURLINFO_CONTENT_LENGTH_UPLOAD: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_CONTENT_LENGTH_UPLOAD, &ret_double ); + type = HB_CURL_INFO_TYPE_DOUBLE; + break; + case HB_CURLINFO_CONTENT_TYPE: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_CONTENT_TYPE, &ret_string ); + type = HB_CURL_INFO_TYPE_STR; + break; #if LIBCURL_VERSION_NUM >= 0x071003 - case HB_CURLINFO_PRIVATE: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_PRIVATE, &ret_ptr ); - type = HB_CURL_INFO_TYPE_PTR; - break; + case HB_CURLINFO_PRIVATE: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_PRIVATE, &ret_ptr ); + type = HB_CURL_INFO_TYPE_PTR; + break; #endif #if LIBCURL_VERSION_NUM >= 0x071008 - case HB_CURLINFO_HTTPAUTH_AVAIL: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_HTTPAUTH_AVAIL, &ret_long ); - type = HB_CURL_INFO_TYPE_LONG; - break; - case HB_CURLINFO_PROXYAUTH_AVAIL: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_PROXYAUTH_AVAIL, &ret_long ); - type = HB_CURL_INFO_TYPE_LONG; - break; + case HB_CURLINFO_HTTPAUTH_AVAIL: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_HTTPAUTH_AVAIL, &ret_long ); + type = HB_CURL_INFO_TYPE_LONG; + break; + case HB_CURLINFO_PROXYAUTH_AVAIL: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_PROXYAUTH_AVAIL, &ret_long ); + type = HB_CURL_INFO_TYPE_LONG; + break; #endif #if LIBCURL_VERSION_NUM >= 0x071202 - case HB_CURLINFO_OS_ERRNO: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_OS_ERRNO, &ret_long ); - type = HB_CURL_INFO_TYPE_LONG; - break; + case HB_CURLINFO_OS_ERRNO: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_OS_ERRNO, &ret_long ); + type = HB_CURL_INFO_TYPE_LONG; + break; #endif #if LIBCURL_VERSION_NUM >= 0x071203 - case HB_CURLINFO_NUM_CONNECTS: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_NUM_CONNECTS, &ret_long ); - type = HB_CURL_INFO_TYPE_LONG; - break; + case HB_CURLINFO_NUM_CONNECTS: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_NUM_CONNECTS, &ret_long ); + type = HB_CURL_INFO_TYPE_LONG; + break; #endif #if LIBCURL_VERSION_NUM >= 0x071401 - case HB_CURLINFO_COOKIELIST: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_COOKIELIST, &ret_slist ); - type = HB_CURL_INFO_TYPE_SLIST; - break; + case HB_CURLINFO_COOKIELIST: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_COOKIELIST, &ret_slist ); + type = HB_CURL_INFO_TYPE_SLIST; + break; #endif #if LIBCURL_VERSION_NUM >= 0x071502 - case HB_CURLINFO_LASTSOCKET: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_LASTSOCKET, &ret_long ); - type = HB_CURL_INFO_TYPE_LONG; - break; + case HB_CURLINFO_LASTSOCKET: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_LASTSOCKET, &ret_long ); + type = HB_CURL_INFO_TYPE_LONG; + break; #endif #if LIBCURL_VERSION_NUM >= 0x071504 - case HB_CURLINFO_FTP_ENTRY_PATH: - res = curl_easy_getinfo( hb_curl->curl, CURLINFO_FTP_ENTRY_PATH, &ret_string ); - type = HB_CURL_INFO_TYPE_STR; - break; + case HB_CURLINFO_FTP_ENTRY_PATH: + res = curl_easy_getinfo( hb_curl->curl, CURLINFO_FTP_ENTRY_PATH, &ret_string ); + type = HB_CURL_INFO_TYPE_STR; + break; #endif - } - - switch( type ) - { - case HB_CURL_INFO_TYPE_STR: - hb_retc( ret_string ); - break; - case HB_CURL_INFO_TYPE_PTR: - hb_retptr( ( void * ) ret_ptr ); - break; - case HB_CURL_INFO_TYPE_LONG: - hb_retnl( ret_long ); - break; - case HB_CURL_INFO_TYPE_DOUBLE: - hb_retnd( ret_double ); - break; - case HB_CURL_INFO_TYPE_SLIST: - { - if( ret_slist ) - { - PHB_ITEM pArray; - int nCount; - struct curl_slist * walk_ret_slist; - - /* Count */ - for( walk_ret_slist = ret_slist, nCount = 0; walk_ret_slist->next; nCount++ ) - walk_ret_slist = walk_ret_slist->next; - - /* Fill */ - pArray = hb_itemArrayNew( nCount ); - for( walk_ret_slist = ret_slist, nCount = 1; walk_ret_slist->next; ) - { - hb_arraySetC( pArray, nCount++, walk_ret_slist->data ); - walk_ret_slist = walk_ret_slist->next; - } - hb_itemReturnRelease( pArray ); - - curl_slist_free_all( ret_slist ); - } - else - hb_reta( 0 ); } - break; + + switch( type ) + { + case HB_CURL_INFO_TYPE_STR: + hb_retc( ret_string ); + break; + case HB_CURL_INFO_TYPE_PTR: + hb_retptr( ( void * ) ret_ptr ); + break; + case HB_CURL_INFO_TYPE_LONG: + hb_retnl( ret_long ); + break; + case HB_CURL_INFO_TYPE_DOUBLE: + hb_retnd( ret_double ); + break; + case HB_CURL_INFO_TYPE_SLIST: + { + if( ret_slist ) + { + PHB_ITEM pArray; + int nCount; + struct curl_slist * walk_ret_slist; + + /* Count */ + for( walk_ret_slist = ret_slist, nCount = 0; walk_ret_slist->next; nCount++ ) + walk_ret_slist = walk_ret_slist->next; + + /* Fill */ + pArray = hb_itemArrayNew( nCount ); + for( walk_ret_slist = ret_slist, nCount = 1; walk_ret_slist->next; ) + { + hb_arraySetC( pArray, nCount++, walk_ret_slist->data ); + walk_ret_slist = walk_ret_slist->next; + } + hb_itemReturnRelease( pArray ); + + curl_slist_free_all( ret_slist ); + } + else + hb_reta( 0 ); + } + break; + } } - } - hb_stornl( ( long ) res, 3 ); + hb_stornl( ( long ) res, 3 ); + } + else + hb_errRT_BASE( EG_ARG, 2010, NULL, "CURL_EASY_GETINFO", HB_ERR_ARGS_BASEPARAMS ); } #if LIBCURL_VERSION_NUM >= 0x071504 HB_FUNC( CURL_EASY_ESCAPE ) { - PHB_CURL hb_curl = PHB_CURL_par( 1 ); - - if( hb_curl ) + if( ISPOINTER( 1 ) ) { - char * buffer = curl_easy_escape( hb_curl->curl, hb_parcx( 2 ), hb_parclen( 2 ) ); - hb_retc( buffer ); - curl_free( buffer ); + PHB_CURL hb_curl = PHB_CURL_par( 1 ); + + if( hb_curl ) + { + char * buffer = curl_easy_escape( hb_curl->curl, hb_parcx( 2 ), hb_parclen( 2 ) ); + hb_retc( buffer ); + curl_free( buffer ); + } + else + hb_retc_null(); } else - hb_retc_null(); + hb_errRT_BASE( EG_ARG, 2010, NULL, "CURL_EASY_ESCAPE", HB_ERR_ARGS_BASEPARAMS ); } HB_FUNC( CURL_EASY_UNESCAPE ) { - PHB_CURL hb_curl = PHB_CURL_par( 1 ); - - if( hb_curl ) + if( ISPOINTER( 1 ) ) { - int nLen = 0; - char * buffer = curl_easy_unescape( hb_curl->curl, hb_parcx( 2 ), hb_parclen( 2 ), &nLen ); - hb_retclen( buffer, nLen ); - curl_free( buffer ); + PHB_CURL hb_curl = PHB_CURL_par( 1 ); + + if( hb_curl ) + { + int nLen = 0; + char * buffer = curl_easy_unescape( hb_curl->curl, hb_parcx( 2 ), hb_parclen( 2 ), &nLen ); + hb_retclen( buffer, nLen ); + curl_free( buffer ); + } + else + hb_retc_null(); } else - hb_retc_null(); + hb_errRT_BASE( EG_ARG, 2010, NULL, "CURL_EASY_UNESCAPE", HB_ERR_ARGS_BASEPARAMS ); } #endif