diff --git a/contrib/ise_library/cURL b/contrib/ise_library/cURL deleted file mode 160000 index c4e25a30..00000000 --- a/contrib/ise_library/cURL +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c4e25a309132a7adced96f5ac1e278eb44582945 diff --git a/contrib/ise_library/cURL/Clib/Makefile-win.SH b/contrib/ise_library/cURL/Clib/Makefile-win.SH new file mode 100644 index 00000000..9db5fcfc --- /dev/null +++ b/contrib/ise_library/cURL/Clib/Makefile-win.SH @@ -0,0 +1,58 @@ +TOP = .. +DIR = $dir_sep +OUTDIR= . +INDIR= . +CC = $cc +OUTPUT_CMD = $output_cmd +CFLAGS = -I"$rt_include" -I..$(DIR)spec$(DIR)include -I. \ + -I..$(DIR)..$(DIR)..$(DIR)C_library$(DIR)libpng -I..$(DIR)..$(DIR)..$(DIR)C_library$(DIR)zlib +JCFLAGS = $(CFLAGS) $ccflags $optimize +JMTCFLAGS = $(CFLAGS) $mtccflags $optimize +JILCFLAGS = $(CFLAGS) $mtccflags $optimize -DEIF_IL_DLL +LN = copy +MV = $mv +RM = $del +MAKE = $make +MKDIR = $mkdir +LINK = $link32 +DLL_FLAGS = $dll_flags +DLL_LIBS = $dll_libs +OBJECTS = eiffel_curl.$obj +MT_OBJECTS = MTeiffel_curl.$obj +IL_OBJECTS = ILeiffel_curl.$obj + +.c.$obj: + $(CC) -c $(JCFLAGS) $< + +all:: $output_libraries + $(MAKE) clean + +standard:: eiffel_curl.lib ileiffel_curl.lib +mtstandard:: mteiffel_curl.lib + +clean: + $(RM) *.$obj + $(RM) *.lib + +eiffel_curl.lib: $(OBJECTS) + $alib_line + $(MKDIR) ..$(DIR)spec$(DIR)$(ISE_C_COMPILER)$(DIR)$(ISE_PLATFORM)$(DIR)lib + $(MV) $@ ..$(DIR)spec$(DIR)$(ISE_C_COMPILER)$(DIR)$(ISE_PLATFORM)$(DIR)lib$(DIR)$@ + +mteiffel_curl.lib: $(MT_OBJECTS) + $alib_line + $(MKDIR) ..$(DIR)spec$(DIR)$(ISE_C_COMPILER)$(DIR)$(ISE_PLATFORM)$(DIR)lib + $(MV) $@ ..$(DIR)spec$(DIR)$(ISE_C_COMPILER)$(DIR)$(ISE_PLATFORM)$(DIR)lib$(DIR)$@ + +ileiffel_curl.lib: $(IL_OBJECTS) + $alib_line + $(MKDIR) ..$(DIR)spec$(DIR)$(ISE_C_COMPILER)$(DIR)$(ISE_PLATFORM)$(DIR)lib + $(MV) $@ ..$(DIR)spec$(DIR)$(ISE_C_COMPILER)$(DIR)$(ISE_PLATFORM)$(DIR)lib$(DIR)$@ + +#Multithreaded targets. +MTeiffel_curl.$obj: eiffel_curl.c + $(CC) $(JMTCFLAGS) $(OUTPUT_CMD)$@ -c $? + +#.NET targets. +ILeiffel_curl.$obj: eiffel_curl.c + $(CC) $(JILCFLAGS) $(OUTPUT_CMD)$@ -c $? diff --git a/contrib/ise_library/cURL/Clib/Makefile.SH b/contrib/ise_library/cURL/Clib/Makefile.SH new file mode 100644 index 00000000..7c49d5de --- /dev/null +++ b/contrib/ise_library/cURL/Clib/Makefile.SH @@ -0,0 +1,92 @@ +case $CONFIG in +'') + if test ! -f config.sh; then + (echo "Can't find config.sh."; exit 1) + fi 2>/dev/null + . ./config.sh + ;; +esac +case "$0" in +*/*) cd `expr X$0 : 'X\(.*\)/'` ;; +esac +echo "Extracting "."/Makefile (with variable substitutions)" +$spitshell >Makefile <>Makefile <<'!NO!SUBS!' + +MT_OBJECTS = MTeiffel_curl.o +OBJECTS = eiffel_curl.o + +ALL_OBJECTS = $(OBJECTS) $(MT_OBJECTS) + +all: $(ALL_OBJECTS) + $(MKDIR) ../spec/$(PLATFORM)/lib + $(MV) $? ../spec/$(PLATFORM)/lib + $(MAKE) clobber + +MTeiffel_curl.o: eiffel_curl.c + $(CC) -c $(MTCFLAGS) $? -o $@ + +######################################################################## +# Common rules for all Makefiles -- do not edit + +emptyrule:: + +clean: local_clean +realclean: local_realclean +clobber: local_clobber + +local_clean:: + $(RM) core *~ *.o *.so *.a + +local_realclean:: local_clean + +local_clobber:: local_realclean + $(RM) Makefile config.sh + +Makefile: Makefile.SH + /bin/sh Makefile.SH + +tags:: + $(CTAGS) -w *.[ch] + $(CTAGS) -xw *.[ch] > tags + +local_clobber:: + $(RM) tags + +######################################################################## +# Dependencies generated by make depend +# DO NOT DELETE THIS LINE -- make depend relies on it + +# Put nothing here or make depend will gobble it up +.FORCE_DEPEND:: + @echo "You must run 'make depend' in $(TOP) first."; exit 1 +!NO!SUBS! +chmod 644 Makefile +$eunicefix Makefile + diff --git a/contrib/ise_library/cURL/Clib/build.eant b/contrib/ise_library/cURL/Clib/build.eant new file mode 100644 index 00000000..ca40ab29 --- /dev/null +++ b/contrib/ise_library/cURL/Clib/build.eant @@ -0,0 +1,24 @@ + + + + + description: "cURL Clib library compilation" + + + + + + + + + + + + + + + + + + + diff --git a/contrib/ise_library/cURL/Clib/eiffel_curl.c b/contrib/ise_library/cURL/Clib/eiffel_curl.c new file mode 100644 index 00000000..635ea00c --- /dev/null +++ b/contrib/ise_library/cURL/Clib/eiffel_curl.c @@ -0,0 +1,188 @@ +/* +indexing + description: "Functions used by the class CURL_FUNCTION." + copyright: "Copyright (c) 1984-2006, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 356 Storke Road, Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" +*/ + +#include "eiffel_curl.h" + +typedef EIF_INTEGER (* EIF_CURL_PROGRESS_PROC) ( +#ifndef EIF_IL_DLL + EIF_REFERENCE, /* CURL_FUNCTION Eiffel object */ +#endif + EIF_POINTER, /* a_user_pointer */ + EIF_REAL_64, /* a_dltotal */ + EIF_REAL_64, /* a_dlnow */ + EIF_REAL_64, /* a_ultotal */ + EIF_REAL_64 /* a_ulnow */ + ); + +typedef EIF_INTEGER (* EIF_CURL_WRITE_PROC) ( +#ifndef EIF_IL_DLL + EIF_REFERENCE, /* CURL_FUNCTION Eiffel object */ +#endif + EIF_POINTER, /* a_data_pointer */ + EIF_INTEGER, /* a_size */ + EIF_INTEGER, /* a_nmemb */ + EIF_POINTER /* a_write_pointer */ + ); + +typedef EIF_INTEGER (* EIF_CURL_READ_PROC) ( +#ifndef EIF_IL_DLL + EIF_REFERENCE, /* CURL_FUNCTION Eiffel object */ +#endif + EIF_POINTER, /* a_data_pointer */ + EIF_INTEGER, /* a_size */ + EIF_INTEGER, /* a_nmemb */ + EIF_POINTER /* a_write_pointer */ + ); + + +typedef EIF_INTEGER (* EIF_CURL_DEBUG_PROC) ( +#ifndef EIF_IL_DLL + EIF_REFERENCE, /* CURL_FUNCTION Eiffel object */ +#endif + EIF_POINTER, /* a_curl_handle */ + EIF_INTEGER, /* a_curl_infotype */ + EIF_POINTER, /* a_char_pointer */ + EIF_INTEGER, /* a_size */ + EIF_POINTER /* a_user_pointer */ + ); + +static EIF_OBJECT eiffel_function_object = NULL; + /* Address of Eiffel object CURL_FUNCTION */ + +static EIF_CURL_PROGRESS_PROC eiffel_progress_function = NULL; + /* Address of Eiffel CURL_FUNCTION.progress_function */ + +static EIF_CURL_WRITE_PROC eiffel_write_function = NULL; + /* Address of Eiffel CURL_FUNCTION.write_function */ + +static EIF_CURL_READ_PROC eiffel_read_function = NULL; + /* Address of Eiffel CURL_FUNCTION.read_function */ + +static EIF_CURL_DEBUG_PROC eiffel_debug_function = NULL; + /* Address of Eiffel CURL_FUNCTION.debug_function */ + +/* Set Eiffel CURL_FUNCTION object address */ +void c_set_object(EIF_REFERENCE a_address) +{ + if (a_address) { + eiffel_function_object = eif_protect (a_address); + } else { + eiffel_function_object = NULL; + } +} + +/* Release Eiffel CURL_FUNCTION object address */ +void c_release_object() +{ + eif_wean (eiffel_function_object); +} + +/* Set CURL_FUNCTOIN.progress_function address */ +void c_set_progress_function_address( EIF_POINTER a_address) +{ + eiffel_progress_function = (EIF_CURL_PROGRESS_PROC) a_address; +} + +/* Set CURL_FUNCTOIN.write_function address */ +void c_set_write_function_address( EIF_POINTER a_address) +{ + eiffel_write_function = (EIF_CURL_WRITE_PROC) a_address; +} + +/* Set CURL_FUNCTOIN.read_function address */ +void c_set_read_function_address( EIF_POINTER a_address) +{ + eiffel_read_function = (EIF_CURL_READ_PROC) a_address; +} + +/* Set CURL_FUNCTOIN.debug_function address */ +void c_set_debug_function_address (EIF_POINTER a_address) +{ + eiffel_debug_function = (EIF_CURL_DEBUG_PROC) a_address; +} + +/* Eiffel adapter function for CURLOPT_WRITEFUNCTION + We need this function since Eiffel function call need first parameter is EIF_REFERENCE. */ +size_t curl_write_function (void *ptr, size_t size, size_t nmemb, void *data) +{ + if (eiffel_function_object) { + return (size_t) ((eiffel_write_function) ( +#ifndef EIF_IL_DLL + (EIF_REFERENCE) eif_access (eiffel_function_object), +#endif + (EIF_POINTER) ptr, + (EIF_INTEGER) size, + (EIF_INTEGER) nmemb, + (EIF_POINTER) data)); + } else { + return 0; + } +} + +/* Eiffel adapter function for CURLOPT_READFUNCTION + We need this function since Eiffel function call need first parameter is EIF_REFERENCE. */ +size_t curl_read_function (void *ptr, size_t size, size_t nmemb, void *data) +{ + if (eiffel_function_object) { + return (size_t) ((eiffel_read_function) ( +#ifndef EIF_IL_DLL + (EIF_REFERENCE) eif_access (eiffel_function_object), +#endif + (EIF_POINTER) ptr, + (EIF_INTEGER) size, + (EIF_INTEGER) nmemb, + (EIF_POINTER) data)); + } else { + return 0; + } +} + + +/* Eiffel adapter function for CURLOPT_PROGRESSFUNCTION + We need this function since Eiffel function call need first parameter is EIF_REFERENCE. */ +size_t curl_progress_function (void * a_object_id, double a_dltotal, double a_dlnow, double a_ultotal, double a_ulnow) + { + if (eiffel_function_object) { + return (size_t) ((eiffel_progress_function) ( +#ifndef EIF_IL_DLL + (EIF_REFERENCE) eif_access (eiffel_function_object), +#endif + (EIF_POINTER) a_object_id, + (EIF_REAL_64) a_dltotal, + (EIF_REAL_64) a_dlnow, + (EIF_REAL_64) a_ultotal, + (EIF_REAL_64) a_ulnow)); + } else { + return 0; + } + } + +/* Eiffel adapter function for CURLOPT_DEBUGFUNCTION + We need this function since Eiffel function call need first parameter is EIF_REFERENCE. */ +size_t curl_debug_function (CURL * a_curl_handle, curl_infotype a_curl_infotype, unsigned char * a_char_pointer, size_t a_size, void * a_object_id) + { + if (eiffel_function_object) { + return (size_t) ((eiffel_debug_function) ( +#ifndef EIF_IL_DLL + (EIF_REFERENCE) eif_access (eiffel_function_object), +#endif + (EIF_POINTER) a_curl_handle, + (EIF_INTEGER) a_curl_infotype, + (EIF_POINTER) a_char_pointer, + (EIF_INTEGER) a_size, + (EIF_POINTER) a_object_id)); + } else { + return 0; + } + } diff --git a/contrib/ise_library/cURL/build.eant b/contrib/ise_library/cURL/build.eant new file mode 100644 index 00000000..325768ce --- /dev/null +++ b/contrib/ise_library/cURL/build.eant @@ -0,0 +1,28 @@ + + + + + description: "cURL library compilation" + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/ise_library/cURL/cURL-safe.ecf b/contrib/ise_library/cURL/cURL-safe.ecf new file mode 100644 index 00000000..02b15b65 --- /dev/null +++ b/contrib/ise_library/cURL/cURL-safe.ecf @@ -0,0 +1,93 @@ + + + + cURL: libcURL wrapper library for Eiffel. + Copyright (c) 1984-2006, Eiffel Software and others. + Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt). + + + /\.svn$ + /EIFGEN.{0,1}$ + /temp$ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /spec$ + /Clib$ + + + /gtk$ + /mac$ + + + + + + /mswin$ + /gtk$ + + + + + + + /mswin$ + /mac$ + + + + + + + + + + + diff --git a/contrib/ise_library/cURL/cURL.ecf b/contrib/ise_library/cURL/cURL.ecf new file mode 100644 index 00000000..0707e6ec --- /dev/null +++ b/contrib/ise_library/cURL/cURL.ecf @@ -0,0 +1,93 @@ + + + + cURL: libcURL wrapper library for Eiffel. + Copyright (c) 1984-2006, Eiffel Software and others. + Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt). + + + /\.svn$ + /EIFGEN.{0,1}$ + /temp$ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /spec$ + /Clib$ + + + /gtk$ + /mac$ + + + + + + /mswin$ + /gtk$ + + + + + + + /mswin$ + /mac$ + + + + + + + + + + + diff --git a/contrib/ise_library/cURL/curl_codes.e b/contrib/ise_library/cURL/curl_codes.e new file mode 100644 index 00000000..d9b320ed --- /dev/null +++ b/contrib/ise_library/cURL/curl_codes.e @@ -0,0 +1,336 @@ +note + description: "[ + All possible error codes from all sorts of curl functions. + Future versions may return other values, stay prepared. + ]" + status: "See notice at end of class." + legal: "See notice at end of class." + date: "$Date$" + revision: "$Revision$" + +class + CURL_CODES + +feature -- Eiffel cURL: Constants + + eiffelcurle_error_occurred: INTEGER = -1 + -- Error occurred in Eiffel cURL internals + +feature -- Constants + + curle_ok: INTEGER = 0 + -- Declared as CURLE_OK + + curle_unsupported_protocol: INTEGER = 1 + -- Declared as CURLE_UNSUPPORTED_PROTOCOL + + curle_failed_init: INTEGER = 2 + -- Declared as CURLE_FAILED_INIT + + curle_url_malformat: INTEGER = 3 + -- Declared as CURLE_URL_MALFORMAT + + curle_obsolete4: INTEGER = 4 + -- Declared as CURLE_OBSOLETE4 + -- NOT USED + + curle_couldnt_resolve_proxy: INTEGER = 5 + -- Declared as CURLE_COULDNT_RESOLVE_PROXY + + curle_couldnt_resolve_host: INTEGER = 6 + -- Declared as CURLE_COULDNT_RESOLVE_HOST + + curle_couldnt_connect: INTEGER = 7 + -- Declared as CURLE_COULDNT_CONNECT + + curle_ftp_weird_server_reply: INTEGER = 8 + -- Declared as CURLE_FTP_WEIRD_SERVER_REPLY + + curle_remote_access_denied: INTEGER = 9 + -- Declared as CURLE_REMOTE_ACCESS_DENIED + -- A service was denied by the server due to lack of access + -- when login fails this is not returned. + + curle_obsolete10: INTEGER = 10 + -- Declared as CURLE_OBSOLETE10 NOT USED + + curle_ftp_weird_pass_reply: INTEGER = 11 + -- Declared as CURLE_FTP_WEIRD_PASS_REPLY + + curle_obsolete12: INTEGER = 12 + -- Declared as CURLE_OBSOLETE12 NOT USED + + curle_ftp_weird_pasv_reply: INTEGER = 13 + -- Declared as CURLE_FTP_WEIRD_PASV_REPLY + + curle_ftp_weird_227_format: INTEGER = 14 + -- Declared as CURLE_FTP_WEIRD_227_FORMAT + + curle_ftp_cant_get_host: INTEGER = 15 + -- Declared as CURLE_FTP_CANT_GET_HOST + + curle_obsolete16: INTEGER = 16 + -- Declared as CURLE_OBSOLETE16 + -- NOT USED + + curle_ftp_couldnt_set_type: INTEGER = 17 + -- Declared as CURLE_FTP_COULDNT_SET_TYPE + + curle_partial_file: INTEGER = 18 + -- Declared as CURLE_PARTIAL_FILE + + curle_ftp_couldnt_retr_file: INTEGER = 19 + -- Declared as CURLE_FTP_COULDNT_RETR_FILE + + curle_obsolete20: INTEGER = 20 + -- Declared as CURLE_OBSOLETE20 + -- NOT USED + + curle_quote_error: INTEGER = 21 + -- Declared as CURLE_QUOTE_ERROR + -- quote command failure + + curle_http_returned_error: INTEGER = 22 + -- Declared as CURLE_HTTP_RETURNED_ERROR + + curle_write_error: INTEGER = 23 + -- Declared as CURLE_WRITE_ERROR + + curle_obsolete24: INTEGER = 24 + -- Declared as CURLE_OBSOLETE24 NOT USED + + curle_upload_failed: INTEGER = 25 + -- Declared as CURLE_UPLOAD_FAILED + -- failed upload "command" + + curle_read_error: INTEGER = 26 + -- Declared as CURLE_READ_ERROR + -- couldn't open/read from file + + curle_out_of_memory: INTEGER = 27 + -- Declared as CURLE_OUT_OF_MEMORY + -- Note: CURLE_OUT_OF_MEMORY may sometimes indicate a conversion error + -- instead of a memory allocation error if CURL_DOES_CONVERSIONS + -- is defined + + curle_operation_timedout: INTEGER = 28 + -- Declared as CURLE_OPERATION_TIMEDOUT + -- the timeout time was reached + + curle_obsolete29: INTEGER = 29 + -- Declared as CURLE_OBSOLETE29 + -- NOT USED + + curle_ftp_port_failed: INTEGER = 30 + -- Declared as CURLE_FTP_PORT_FAILED + -- FTP PORT operation failed + + curle_ftp_couldnt_use_rest: INTEGER = 31 + -- Declared as CURLE_FTP_COULDNT_USE_REST + -- the REST command failed + + curle_obsolete32: INTEGER = 32 + -- Declared as CURLE_OBSOLETE32 + -- NOT USED + + curle_range_error: INTEGER = 33 + -- Declared as CURLE_RANGE_ERROR + -- RANGE "command" didn't work + + curle_http_post_error: INTEGER = 34 + -- Declared as CURLE_HTTP_POST_ERROR + + curle_ssl_connect_error: INTEGER = 35 + -- Declared CURLE_SSL_CONNECT_ERROR + -- wrong when connecting with SSL + + curle_bad_download_resume: INTEGER = 36 + -- Declared as CURLE_BAD_DOWNLOAD_RESUME + -- couldn't resume download + + curle_file_couldnt_read_file: INTEGER = 37 + -- Declared as CURLE_FILE_COULDNT_READ_FILE + + curle_ldap_cannot_bind: INTEGER = 38 + -- Declared as CURLE_LDAP_CANNOT_BIND + + curle_ldap_search_failed: INTEGER = 39 + -- Declared as CURLE_LDAP_SEARCH_FAILED + + curle_obsolete40: INTEGER = 40 + -- Declared as CURLE_OBSOLETE40 + -- NOT USED + + curle_function_not_found: INTEGER = 41 + -- Declared as CURLE_FUNCTION_NOT_FOUND + + curle_aborted_by_callback: INTEGER = 42 + -- Declared as CURLE_ABORTED_BY_CALLBACK + + curle_bad_function_argument: INTEGER = 43 + -- Declared as CURLE_BAD_FUNCTION_ARGUMENT + + curle_obsolete44: INTEGER = 44 + -- Declared as CURLE_OBSOLETE44 + -- NOT USED + + curle_interface_failed: INTEGER = 45 + -- Declared as CURLE_INTERFACE_FAILED + -- CURLOPT_INTERFACE failed + + curle_obsolete46: INTEGER = 46 + -- Declared as CURLE_OBSOLETE46 + -- NOT USED + + curle_too_many_redirects: INTEGER = 47 + -- Declared as CURLE_TOO_MANY_REDIRECTS + -- catch endless re-direct loops + + curle_unknown_telnet_option: INTEGER = 48 + -- Declared as CURLE_UNKNOWN_TELNET_OPTION + -- User specified an unknown option + + curle_telnet_option_syntax: INTEGER = 49 + -- Declared as CURLE_TELNET_OPTION_SYNTAX + -- Malformed telnet option + + curle_obsolete50: INTEGER = 50 + -- Declared as CURLE_OBSOLETE50 + -- NOT USED + + curle_ssl_peer_certificate: INTEGER = 51 + -- Declared as CURLE_SSL_PEER_CERTIFICATE + -- peer's certificate wasn't ok + + curle_got_nothing: INTEGER = 52 + -- Declared as CURLE_GOT_NOTHING + -- when this is a specific error + + curle_ssl_engine_notfound: INTEGER = 53 + -- Declared as CURLE_SSL_ENGINE_NOTFOUND + -- SSL crypto engine not found */ + + curle_ssl_engine_setfailed: INTEGER = 54 + -- Declared as CURLE_SSL_ENGINE_SETFAILED + -- can not set SSL crypto engine as default + + curle_send_error: INTEGER = 55 + -- Declared as CURLE_SEND_ERROR + -- failed sending network data + + curle_recv_error: INTEGER = 56 + -- Declared as CURLE_RECV_ERROR + -- failure in receiving network data + + curle_obsolete57: INTEGER = 57 + -- Declared as CURLE_OBSOLETE57 + -- NOT IN USE + + curle_ssl_certproblem: INTEGER = 58 + -- Declared as CURLE_SSL_CERTPROBLEM + -- problem with the local certificate + + curle_ssl_cipher: INTEGER = 59 + -- Declared as CURLE_SSL_CIPHER + -- couldn't use specified cipher + + curle_ssl_cacert: INTEGER = 60 + -- Declared as CURLE_SSL_CACERT + -- problem with the CA cert (path?) + + curle_bad_content_encoding: INTEGER = 61 + -- Declared as CURLE_BAD_CONTENT_ENCODING + -- Unrecognized transfer encoding + + curle_ldap_invalid_url: INTEGER = 62 + -- Declared as CURLE_LDAP_INVALID_URL + -- Invalid LDAP URL + + curle_filesize_exceeded: INTEGER = 63 + -- Declared as CURLE_FILESIZE_EXCEEDED + -- Maximum file size exceeded + + curle_use_ssl_failed: INTEGER = 64 + -- Declared as CURLE_USE_SSL_FAILED + -- Requested FTP SSL level failed + + curle_send_fail_rewind: INTEGER = 65 + -- Declared as CURLE_SEND_FAIL_REWIND + -- Sending the data requires a rewind that failed + + curle_ssl_engine_initfailed: INTEGER = 66 + -- Declared as CURLE_SSL_ENGINE_INITFAILED + -- failed to initialise ENGINE + + curle_login_denied: INTEGER = 67 + -- Declared as CURLE_LOGIN_DENIED + -- user, password or similar was not accepted and we failed to login + + curle_tftp_notfound: INTEGER = 68 + -- Declared as CURLE_TFTP_NOTFOUND + -- file not found on server + + curle_tftp_perm: INTEGER = 69 + -- Declared as CURLE_TFTP_PERM + -- permission problem on server + + curle_remote_disk_full: INTEGER = 70 + -- Declared as CURLE_REMOTE_DISK_FULL + -- out of disk space on server + + curle_tftp_illegal: INTEGER = 71 + -- Declared as CURLE_TFTP_ILLEGAL + -- Illegal TFTP operation + + curle_tftp_unknownid: INTEGER = 72 + -- Declared as CURLE_TFTP_UNKNOWNID + -- Unknown transfer ID + + curle_remote_file_exists: INTEGER = 73 + -- Declared as CURLE_REMOTE_FILE_EXISTS + -- File already exists + + curle_tftp_nosuchuser: INTEGER = 74 + -- Declared as CURLE_TFTP_NOSUCHUSER + -- No such user + + curle_conv_failed: INTEGER = 75 + -- Declared as CURLE_CONV_FAILED + -- conversion failed + + curle_conv_reqd: INTEGER = 76 + -- Declared as CURLE_CONV_REQD + -- caller must register conversion callbacks using curl_easy_setopt options + -- CURLOPT_CONV_FROM_NETWORK_FUNCTION, CURLOPT_CONV_TO_NETWORK_FUNCTION, and + -- CURLOPT_CONV_FROM_UTF8_FUNCTION + + curle_ssl_cacert_badfile: INTEGER = 77 + -- Declared as CURLE_SSL_CACERT_BADFILE + -- could not load CACERT file, missing or wrong format + + curle_remote_file_not_found: INTEGER = 78 + -- Declared as CURLE_REMOTE_FILE_NOT_FOUND + -- remote file not found + + curle_ssh: INTEGER = 79 + -- Declared as CURLE_SSH + -- error from the SSH layer, somewhat generic so the error message will be of + -- interest when this has happened + + curle_ssl_shutdown_failed: INTEGER = 80; + -- Declared as CURLE_SSL_SHUTDOWN_FAILED + -- Failed to shut down the SSL connection + +note + library: "cURL: Library of reusable components for Eiffel." + copyright: "Copyright (c) 1984-2006, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 356 Storke Road, Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" + +end diff --git a/contrib/ise_library/cURL/curl_default_function.e b/contrib/ise_library/cURL/curl_default_function.e new file mode 100644 index 00000000..01c1c540 --- /dev/null +++ b/contrib/ise_library/cURL/curl_default_function.e @@ -0,0 +1,104 @@ +note + description: "[ + Default implementation of CURL_FUNCTION. + ]" + status: "See notice at end of class." + legal: "See notice at end of class." + date: "$Date$" + revision: "$Revision$" + +class + CURL_DEFAULT_FUNCTION + +inherit + CURL_FUNCTION + +create + make + +feature {NONE} -- Initialization + + make + -- Creation method + do + set_object_and_function_address + end + +feature -- Command + + progress_function (a_object_id: POINTER; a_download_total, a_download_now, a_upload_total, a_upload_now: REAL_64): INTEGER + do + end + + write_function (a_data_pointer: POINTER; a_size, a_nmemb: INTEGER; a_object_id: POINTER): INTEGER + local + l_c_string: C_STRING + do + -- Returns the number of bytes actually saved into object identified by `a_object_id' + Result := a_size * a_nmemb + create l_c_string.make_shared_from_pointer_and_count (a_data_pointer, Result) + + check attached {CURL_STRING} (create {IDENTIFIED}).id_object (a_object_id.to_integer_32) as l_string then + l_string.append (l_c_string.substring (1, Result)) + end + end + + read_function (a_data_pointer: POINTER; a_size, a_nmemb: INTEGER; a_object_id: POINTER): INTEGER + -- A callback readfunction + do + end + + debug_function (a_curl_handle: POINTER; a_curl_infotype: INTEGER; a_char_pointer: POINTER; a_size: INTEGER; a_object_id: POINTER): INTEGER + local + l_c_string: C_STRING + do + inspect + a_curl_infotype + when {CURL_INFO_TYPE}.curlinfo_data_in then + dump ("<= Recv data", a_char_pointer, a_size) + when {CURL_INFO_TYPE}.curlinfo_data_out then + dump ("=> Send data", a_char_pointer, a_size) + when {CURL_INFO_TYPE}.curlinfo_header_in then + dump ("<= Recv header", a_char_pointer, a_size) + when {CURL_INFO_TYPE}.curlinfo_header_out then + dump ("=> Send header", a_char_pointer, a_size) + when {CURL_INFO_TYPE}.curlinfo_ssl_data_in then + dump ("<= Recv SSL data", a_char_pointer, a_size) + when {CURL_INFO_TYPE}.curlinfo_ssl_data_out then + dump ("=> Send SSL data", a_char_pointer, a_size) + when {CURL_INFO_TYPE}.curlinfo_text then + create l_c_string.make_by_pointer_and_count (a_char_pointer, a_size) + print ("%N== Info: " + l_c_string.string) + else + check type_unknow: False end + end + end + +feature {NONE} -- Implementation + + dump (a_text: STRING; a_char_pointer: POINTER; a_size: INTEGER) + -- Dump debug information + require + not_void: a_text /= Void + exists: a_char_pointer /= default_pointer + non_negative: a_size >= 0 + local + l_c_string: C_STRING + do + create l_c_string.make_shared_from_pointer_and_count (a_char_pointer, a_size) + print ("%N" + a_text + "%N" + l_c_string.string) + end + +note + library: "cURL: Library of reusable components for Eiffel." + copyright: "Copyright (c) 1984-2012, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 5949 Hollister Ave., Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" + +end diff --git a/contrib/ise_library/cURL/curl_easy_externals.e b/contrib/ise_library/cURL/curl_easy_externals.e new file mode 100644 index 00000000..5fb94d9a --- /dev/null +++ b/contrib/ise_library/cURL/curl_easy_externals.e @@ -0,0 +1,409 @@ +note + description: "[ + cURL easy externals. + For more informaton see: + http://curl.haxx.se/libcurl/c/ + ]" + status: "See notice at end of class." + legal: "See notice at end of class." + date: "$Date$" + revision: "$Revision$" + +class + CURL_EASY_EXTERNALS + +feature -- Command + + init: POINTER + -- Declared as curl_easy_init(). + require + dynamic_library_exists: is_dynamic_library_exists + local + l_api: POINTER + do + l_api := api_loader.api_pointer ("curl_easy_init") + if l_api /= default_pointer then + Result := c_init (l_api) + end + ensure + exists: Result /= default_pointer + end + + setopt_string (a_curl_handle: POINTER; a_opt: INTEGER; a_string: READABLE_STRING_GENERAL) + -- Declared as curl_easy_setopt(). + require + exists: a_curl_handle /= default_pointer + valid: (create {CURL_OPT_CONSTANTS}).is_valid (a_opt) + not_void: a_string /= Void + local + l_api: POINTER + l_c_str: C_STRING + do + l_api := api_loader.api_pointer ("curl_easy_setopt") + if l_api /= default_pointer then + create l_c_str.make (a_string) + c_setopt (l_api, a_curl_handle, a_opt, l_c_str.item) + end + end + + setopt_form (a_curl_handle: POINTER; a_opt: INTEGER; a_form: CURL_FORM) + -- Declared as curl_easy_setopt(). + require + exists: a_curl_handle /= default_pointer + valid: (create {CURL_OPT_CONSTANTS}).is_valid (a_opt) + not_void: a_form /= Void and then a_form.is_exists + do + setopt_void_star (a_curl_handle, a_opt, a_form.item) + end + + setopt_slist (a_curl_handle: POINTER; a_opt: INTEGER; a_curl_slist: POINTER) + -- Declared as curl_easy_setopt(). + require + exists: a_curl_handle /= default_pointer + valid: a_opt = {CURL_OPT_CONSTANTS}.curlopt_httpheader + exists: a_curl_slist /= default_pointer + do + setopt_void_star (a_curl_handle, a_opt, a_curl_slist) + end + + setopt_curl_string (a_curl_handle: POINTER; a_opt: INTEGER; a_curl_string: CURL_STRING) + -- Declared as curl_easy_setopt(). + require + exists: a_curl_handle /= default_pointer + valid: (create {CURL_OPT_CONSTANTS}).is_valid (a_opt) + not_void: a_curl_string /= Void + local + l_api: POINTER + do + l_api := api_loader.api_pointer ("curl_easy_setopt") + if l_api /= default_pointer then + c_setopt_int (l_api, a_curl_handle, a_opt, a_curl_string.object_id) + end + end + + setopt_integer (a_curl_handle: POINTER; a_opt: INTEGER; a_integer: INTEGER) + -- Declared as curl_easy_setopt(). + require + exists: a_curl_handle /= default_pointer + valid: (create {CURL_OPT_CONSTANTS}).is_valid (a_opt) + local + l_api: POINTER + do + l_api := api_loader.api_pointer ("curl_easy_setopt") + if l_api /= default_pointer then + c_setopt_int (l_api, a_curl_handle, a_opt, a_integer) + end + end + + setopt_file (a_curl_handle: POINTER; a_opt: INTEGER; a_file: FILE) + -- Declared as curl_easy_setopt(). + require + exists: a_curl_handle /= default_pointer + valid: a_opt = {CURL_OPT_CONSTANTS}.curlopt_readdata + readable: a_file /= Void and then a_file.file_readable + do + setopt_void_star (a_curl_handle, a_opt, a_file.file_pointer) + end + + perform (a_curl_handle: POINTER): INTEGER + -- Declared as curl_easy_perform(). + -- Result is one value from {CURL_CODES} + require + exists: a_curl_handle /= default_pointer + local + l_api: POINTER + do + l_api := api_loader.api_pointer ("curl_easy_perform") + if l_api /= default_pointer then + Result := c_perform (l_api, a_curl_handle) + else + Result := {CURL_CODES}.eiffelcurle_error_occurred + end + end + + cleanup (a_curl_handle: POINTER) + -- Declared as curl_easy_cleanup(). + require + exists: a_curl_handle /= default_pointer + local + l_api: POINTER + do + l_api := api_loader.api_pointer ("curl_easy_cleanup") + if l_api /= default_pointer then + c_cleanup (l_api, a_curl_handle) + end + end + +feature -- Query + + getinfo (a_curl_handle: POINTER; a_info: INTEGER; a_data: CELL [detachable ANY]): INTEGER + -- `curl_getinfo + --|* Request internal information from the curl session with this function. The + --|* third argument MUST be a pointer to a long, a pointer to a char * or a + --|* pointer to a double (as the documentation describes elsewhere). The data + --|* pointed to will be filled in accordingly and can be relied upon only if the + --|* function returns CURLE_OK. This function is intended to get used *AFTER* a + --|* performed transfer, all results from this function are undefined until the + --|* transfer is completed. + require + exists: a_curl_handle /= default_pointer + valid: (create {CURL_INFO_CONSTANTS}).is_valid (a_info) + local + l_api: POINTER + mp: detachable MANAGED_POINTER + l: INTEGER + cs: C_STRING + d: REAL_64 + do + a_data.replace (Void) + l_api := api_loader.api_pointer ("curl_easy_getinfo") + if l_api /= default_pointer then + if a_info & {CURL_INFO_CONSTANTS}.curlinfo_long /= 0 then + create mp.make ({PLATFORM}.integer_32_bytes) + elseif a_info & {CURL_INFO_CONSTANTS}.curlinfo_string /= 0 then + create mp.make ({PLATFORM}.pointer_bytes) + elseif a_info & {CURL_INFO_CONSTANTS}.curlinfo_double /= 0 then + create mp.make ({PLATFORM}.real_64_bytes) + end + if mp /= Void then + Result := c_getinfo (l_api, a_curl_handle, a_info, mp.item) + if Result = {CURL_CODES}.curle_ok then + if a_info & {CURL_INFO_CONSTANTS}.curlinfo_long /= 0 then + l := mp.read_integer_32 (0) + a_data.put (l) + elseif a_info & {CURL_INFO_CONSTANTS}.curlinfo_string /= 0 then + create cs.make_shared_from_pointer (mp.read_pointer (0)) + a_data.put (cs.string) + elseif a_info & {CURL_INFO_CONSTANTS}.curlinfo_double /= 0 then + d := mp.read_real_64 (0) + a_data.put (d) + end + end + end + end + end + + is_dynamic_library_exists: BOOLEAN + -- If dll/so files exist? + do + Result := api_loader.is_interface_usable + end + +feature -- Special setting + + set_curl_function (a_curl_function: CURL_FUNCTION) + -- Set `curl_function' with `a_curl_function' + do + internal_curl_function := a_curl_function + ensure + set: a_curl_function /= Void implies curl_function = a_curl_function + end + + curl_function: CURL_FUNCTION + -- cURL functions in curl_easy_setopt. + do + if attached internal_curl_function as l_curl_function then + Result := l_curl_function + else + create {CURL_DEFAULT_FUNCTION} Result.make + internal_curl_function := Result + end + ensure + not_void: Result /= Void + end + + set_write_function (a_curl_handle: POINTER) + -- Set cURL write function + -- Set cURL write function with Eiffel default write function. + -- So we can use CURL_STRING as parameter in {CURL_EASY_EXTERNALS}.setopt_curl_string when the option is {CURL_OPT_CONSTANTS}.curlopt_writedata + require + exists: a_curl_handle /= default_pointer + local + l_api: POINTER + do + l_api := api_loader.api_pointer ("curl_easy_setopt") + if l_api /= default_pointer then + curl_function.c_set_write_function (l_api, a_curl_handle) + end + end + + set_read_function (a_curl_handle: POINTER) + -- Set cURL read function + -- Set cURL read function with Eiffel default read function. + -- So we can use a c file pointer as parameter in {CURL_EASY_EXTERNALS}.setopt_file_pointer when the option is {CURL_OPT_CONSTANTS}.curlopt_readdata + require + exists: a_curl_handle /= default_pointer + local + l_api: POINTER + do + l_api := api_loader.api_pointer ("curl_easy_setopt") + if l_api /= default_pointer then + curl_function.c_set_read_function (l_api, a_curl_handle) + end + end + + set_progress_function (a_curl_handle: POINTER) + -- Set cURL progress function for upload/download progress. + require + exists: a_curl_handle /= default_pointer + local + l_api: POINTER + do + l_api := api_loader.api_pointer ("curl_easy_setopt") + if l_api /= default_pointer then + curl_function.c_set_progress_function (l_api, a_curl_handle) + end + end + + set_debug_function (a_curl_handle: POINTER) + -- Set cURL debug function + require + exists: a_curl_handle /= default_pointer + local + l_api: POINTER + do + l_api := api_loader.api_pointer ("curl_easy_setopt") + if l_api /= default_pointer then + curl_function.c_set_debug_function (l_api, a_curl_handle) + end + end + +feature {NONE} -- Implementation + + internal_curl_function: detachable CURL_FUNCTION + -- cURL functions. + + api_loader: DYNAMIC_MODULE + -- Module name. + local + l_utility: CURL_UTILITY + once + create l_utility + Result := l_utility.api_loader + end + + setopt_void_star (a_curl_handle: POINTER; a_opt: INTEGER; a_data:POINTER) + -- Declared as curl_easy_setopt(). + require + exists: a_curl_handle /= default_pointer + valid: (create {CURL_OPT_CONSTANTS}).is_valid (a_opt) + local + l_api: POINTER + do + l_api := api_loader.api_pointer ("curl_easy_setopt") + if l_api /= default_pointer then + c_setopt (l_api, a_curl_handle, a_opt, a_data) + end + end + +feature {NONE} -- C externals + + c_init (a_api: POINTER): POINTER + -- Declared curl_easy_init (). + require + exists: a_api /= default_pointer + external + "C inline use " + alias + "[ + return (FUNCTION_CAST(CURL *, ()) $a_api)(); + ]" + end + + c_cleanup (a_api: POINTER; a_curl_handle: POINTER) + -- Decalred as curl_easy_cleanup (). + require + exists: a_api /= default_pointer + exists: a_curl_handle /= default_pointer + external + "C inline use " + alias + "[ + (FUNCTION_CAST(void, (CURL *)) $a_api)((CURL *)$a_curl_handle); + ]" + end + + c_perform (a_api: POINTER; a_curl_handle: POINTER): INTEGER + -- Declared as curl_easy_perform(). + require + exists: a_api /= default_pointer + exists: a_curl_handle /= default_pointer + external + "C inline use " + alias + "[ + return (FUNCTION_CAST(CURLcode, (CURL *)) $a_api) + ((CURL *) $a_curl_handle); + ]" + end + + c_setopt_int (a_api: POINTER; a_curl_handle: POINTER; a_opt: INTEGER; a_data: INTEGER) + -- Same as `c_setopt' except we can pass `a_data' as integer. + require + exists: a_api /= default_pointer + exists: a_curl_handle /= default_pointer + valid: (create {CURL_OPT_CONSTANTS}).is_valid (a_opt) + external + "C inline use " + alias + "[ + { + (FUNCTION_CAST(void, (CURL *, CURLoption, ...)) $a_api) + ((CURL *) $a_curl_handle, + (CURLoption)$a_opt, + $a_data); + } + ]" + end + + c_setopt (a_api: POINTER; a_curl_handle: POINTER; a_opt: INTEGER; a_data: POINTER) + -- C implementation of `setopt_void_star'. + -- Declared as curl_easy_setopt (). + require + exists: a_api /= default_pointer + exists: a_curl_handle /= default_pointer + valid: (create {CURL_OPT_CONSTANTS}).is_valid (a_opt) + external + "C inline use " + alias + "[ + { + (FUNCTION_CAST(void, (CURL *, CURLoption, ...)) $a_api) + ((CURL *) $a_curl_handle, + (CURLoption)$a_opt, + $a_data); + } + ]" + end + + c_getinfo (a_api: POINTER; a_curl_handle: POINTER; a_opt: INTEGER; a_data: POINTER): INTEGER + -- C implementation of `curl_easy_getinfo'. + -- Declared as curl_easy_setopt (). + require + exists: a_api /= default_pointer + exists: a_curl_handle /= default_pointer + valid: (create {CURL_OPT_CONSTANTS}).is_valid (a_opt) + external + "C inline use " + alias + "[ + return (FUNCTION_CAST(CURLcode, (CURL *, CURLINFO info, ...)) $a_api) + ((CURL *) $a_curl_handle, + (CURLINFO)$a_opt, + $a_data); + ]" + end + +note + library: "cURL: Library of reusable components for Eiffel." + copyright: "Copyright (c) 1984-2010, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 5949 Hollister Ave., Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" + +end diff --git a/contrib/ise_library/cURL/curl_externals.e b/contrib/ise_library/cURL/curl_externals.e new file mode 100644 index 00000000..1843e6e6 --- /dev/null +++ b/contrib/ise_library/cURL/curl_externals.e @@ -0,0 +1,254 @@ +note + description: "[ + cURL externals. + For more information, see: + http://curl.haxx.se/libcurl/c/ + ]" + status: "See notice at end of class." + legal: "See notice at end of class." + date: "$Date$" + revision: "$Revision$" + +class + CURL_EXTERNALS + +feature -- Command + + global_init + -- Declared as curl_global_init(). + require + dynamic_library_exists: is_dynamic_library_exists + local + l_ptr: POINTER + do + l_ptr := api_loader.api_pointer ("curl_global_init") + if l_ptr /= default_pointer then + c_curl_global_init (l_ptr, {CURL_GLOBAL_CONSTANTS}.curl_global_all); + end + end + + global_cleanup + -- Declared as curl_global_cleanup(). + local + l_ptr: POINTER + do + l_ptr := api_loader.api_pointer ("curl_global_cleanup") + if l_ptr /= default_pointer then + c_curl_global_cleanup (l_ptr); + end + end + + formadd_string_string (a_form: CURL_FORM; a_last_pointer: CURL_FORM; a_arg_1: INTEGER; a_arg_1_value: READABLE_STRING_GENERAL; a_arg_2: INTEGER; a_arg_2_value: READABLE_STRING_GENERAL; a_arg_3: INTEGER) + -- Declared as curl_formadd (). + require + not_void: a_form /= Void + not_void: a_last_pointer /= Void + valid: (create {CURL_FORM_CONSTANTS}).is_valid (a_arg_1) + not_void: a_arg_1_value /= Void + valid: (create {CURL_FORM_CONSTANTS}).is_valid (a_arg_2) + not_void: a_arg_2_value /= Void + valid: (create {CURL_FORM_CONSTANTS}).is_valid (a_arg_3) + local + l_form_pointer, l_last_pointer: POINTER + do + l_form_pointer := a_form.item + l_last_pointer := a_last_pointer.item + + internal_formadd_string_string ($l_form_pointer, $l_last_pointer, a_arg_1, a_arg_1_value, a_arg_2, a_arg_2_value, a_arg_3) + + if a_form.item /= l_form_pointer then + check not_set: a_form.item = default_pointer end + a_form.set_item (l_form_pointer) + end + if a_last_pointer.item /= l_last_pointer then + a_last_pointer.set_item (l_last_pointer) + end + end + + slist_append (a_list: POINTER; a_string: READABLE_STRING_GENERAL): POINTER + -- Declared as curl_slist_append (). + -- note: call with a null `a_list' to get initialized pointer as Result + require + not_void: a_string /= Void + local + l_c_string: C_STRING + l_api: POINTER + do + l_api := api_loader.api_pointer ("curl_slist_append") + if l_api /= default_pointer then + create l_c_string.make (a_string) + Result := c_slist_append (l_api, a_list, l_c_string.item) + end + end + + slist_free_all (a_curl_slist: POINTER) + -- Declared as curl_slist_free_all (). + -- See: http://curl.haxx.se/libcurl/c/curl_slist_free_all.html + -- curl_slist_free_all - free an entire curl_slist list + -- This must be called when the data has been used, which typically means after the curl_easy_perform(3) has been called. + require + exists: a_curl_slist /= default_pointer + local + l_api: POINTER + do + l_api := api_loader.api_pointer ("curl_slist_free_all") + if l_api /= default_pointer then + c_slist_free_all (l_api, a_curl_slist) + end + end + +feature -- Query + + is_dynamic_library_exists: BOOLEAN + -- If dll/so files exist? + do + Result := api_loader.is_interface_usable + end + +feature {CURL_FORM} -- Internal command + + formfree (a_curl_form: POINTER) + -- Declared as curl_formfree (). + -- See: http://curl.askapache.com/libcurl/c/curl_formfree.html + -- curl_formfree() is used to clean up data previously built/appended with curl_formadd(3). + -- This must be called when the data has been used, which typically means after the curl_easy_perform(3) has been called. + require + exists: a_curl_form /= default_pointer + local + l_api: POINTER + do + l_api := api_loader.api_pointer ("curl_formfree") + if l_api /= default_pointer then + c_formfree (l_api, a_curl_form) + end + end + +feature {NONE} -- Implementation + + api_loader: DYNAMIC_MODULE + -- Module name. + local + l_utility: CURL_UTILITY + once + create l_utility + Result := l_utility.api_loader + end + + internal_formadd_string_string (a_form: TYPED_POINTER [POINTER]; a_last_pointer: TYPED_POINTER [POINTER]; a_arg_1: INTEGER; a_arg_1_value: READABLE_STRING_GENERAL; a_arg_2: INTEGER; a_arg_2_value: READABLE_STRING_GENERAL; a_arg_3: INTEGER) + -- Declared as curl_formadd (). + local + l_c_string_1, l_c_string_2: C_STRING + l_api: POINTER + do + l_api := api_loader.api_pointer ("curl_formadd"); + if l_api /= default_pointer then + create l_c_string_1.make (a_arg_1_value) + create l_c_string_2.make (a_arg_2_value) + c_formadd_string_string (l_api, a_form, a_last_pointer, a_arg_1, l_c_string_1.item, a_arg_2, l_c_string_2.item, a_arg_3) + end + end + +feature {NONE} -- C externals + + c_formadd_string_string (a_api: POINTER; a_form: TYPED_POINTER [POINTER]; a_last_pointer: TYPED_POINTER [POINTER]; a_arg_1: INTEGER; a_arg_1_value: POINTER; a_arg_2: INTEGER; a_arg_2_value: POINTER; a_arg_3: INTEGER) + -- C implementation of formadd_string_string (). + require + exists: a_api /= default_pointer + external + "C inline use " + alias + "[ + { + (FUNCTION_CAST(void, (struct curl_httppost **, struct curl_httppost **, int, char *, int, char *, int)) $a_api) + ((struct curl_httppost **)$a_form, + (struct curl_httppost **)$a_last_pointer, + (int)$a_arg_1, + (char *)$a_arg_1_value, + (int)$a_arg_2, + (char *)$a_arg_2_value, + (int)$a_arg_3); + } + ]" + end + + c_formfree (a_api: POINTER; a_curl_form: POINTER) + -- Declared as curl_formfree (). + require + exists: a_api /= default_pointer + exists: a_curl_form /= default_pointer + external + "C inline use " + alias + "[ + (FUNCTION_CAST(void, (struct curl_httppost *)) $a_api) + ((struct curl_httppost *) $a_curl_form); + ]" + end + + c_curl_global_init (a_api: POINTER; a_opt: NATURAL_64) + -- `a_api' point to API curl_global_init () + -- `a_opt' is intialization option. + require + exists: a_api /= default_pointer + external + "C inline use " + alias + "[ + (FUNCTION_CAST(void, (long)) $a_api)((long) $a_opt); + ]" + end + + c_curl_global_cleanup (a_api: POINTER) + -- `a_api' point to API curl_global_cleanup() + require + exists: a_api /= default_pointer + external + "C inline use " + alias + "[ + (FUNCTION_CAST(void, ()) $a_api)(); + ]" + end + + c_slist_append (a_api: POINTER; a_list_pointer: POINTER; a_string: POINTER): POINTER + -- Declared as curl_slist_append (). + require + exists: a_api /= default_pointer + external + "C inline use " + alias + "[ + { + return (FUNCTION_CAST(void *, (struct curl_slist *, const char *)) $a_api) + ((struct curl_slist *)$a_list_pointer, + (const char *)$a_string); + } + ]" + end + + c_slist_free_all (a_api: POINTER; a_list_pointer: POINTER) + -- Declared as void curl_slist_free_all(struct curl_slist * list) + require + exists: a_api /= default_pointer + external + "C inline use " + alias + "[ + (FUNCTION_CAST(void *, (struct curl_slist *)) $a_api) + ((struct curl_slist *)$a_list_pointer); + ]" + end + +note + library: "cURL: Library of reusable components for Eiffel." + copyright: "Copyright (c) 1984-2010, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 5949 Hollister Ave., Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" + +end diff --git a/contrib/ise_library/cURL/curl_form.e b/contrib/ise_library/cURL/curl_form.e new file mode 100644 index 00000000..05ff7f69 --- /dev/null +++ b/contrib/ise_library/cURL/curl_form.e @@ -0,0 +1,94 @@ +note + description: "[ + cURL form. + For more informaton see: + http://curl.haxx.se/libcurl/c/curl_formadd.html + ]" + status: "See notice at end of class." + legal: "See notice at end of class." + date: "$Date$" + revision: "$Revision$" + +class + CURL_FORM + +inherit + DISPOSABLE + +create + make, + share_with_pointer + +feature {NONE} -- Initialization + + make + -- Creation method. + do + end + + share_with_pointer (a_pointer: POINTER) + -- Creation method. + -- `item' share with `a_pointer'. + require + exists: a_pointer /= default_pointer + do + item := a_pointer + ensure + set: item = a_pointer + end + +feature -- Query + + item: POINTER + -- C pointer of Current. + + is_exists: BOOLEAN + -- If C pointer exists? + do + Result := item /= default_pointer + end + +feature -- Command + + dispose + -- Free memory if possible. + local + l_curl: CURL_EXTERNALS + do + if item /= default_pointer then + create l_curl + l_curl.formfree (item) + item := default_pointer + end + end + + release_item + -- Release item + -- NOT free memory! This is useful if Current generated by {CURL_EXTERNALS}.formadd_string_string. + do + item := default_pointer + end + +feature {CURL_EXTERNALS} -- Internal command + + set_item (a_item: POINTER) + -- Set `item' with `a_item' + do + item := a_item + ensure + set: item = a_item + end + +note + library: "cURL: Library of reusable components for Eiffel." + copyright: "Copyright (c) 1984-2006, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 356 Storke Road, Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" + +end diff --git a/contrib/ise_library/cURL/curl_form_constants.e b/contrib/ise_library/cURL/curl_form_constants.e new file mode 100644 index 00000000..260d5761 --- /dev/null +++ b/contrib/ise_library/cURL/curl_form_constants.e @@ -0,0 +1,78 @@ +note + description: "[ + cURL form constants. + For more informaton see: + http://curl.haxx.se/libcurl/c/curl_formadd.html + ]" + status: "See notice at end of class." + legal: "See notice at end of class." + date: "$Date$" + revision: "$Revision$" + +class + CURL_FORM_CONSTANTS + +feature -- Query + + curlform_copyname: INTEGER + -- Declared as CURLFORM_COPYNAME + external + "C inline use " + alias + "[ + CURLFORM_COPYNAME + ]" + end + + curlform_copycontents: INTEGER + -- Declared as CURLFORM_COPYCONTENTS + external + "C inline use " + alias + "[ + CURLFORM_COPYCONTENTS + ]" + end + + curlform_end: INTEGER + -- Declared as CURLFORM_END + external + "C inline use " + alias + "[ + CURLFORM_END + ]" + end + + curlform_file: INTEGER + -- Declared as CURLFORM_FILE + external + "C inline use " + alias + "[ + CURLFORM_FILE + ]" + end + + is_valid (a_integer: INTEGER): BOOLEAN + -- If `a_integer' valid? + do + Result := a_integer = curlform_copycontents or + a_integer = curlform_copyname or + a_integer = curlform_end or + a_integer = curlform_file + end + +note + library: "cURL: Library of reusable components for Eiffel." + copyright: "Copyright (c) 1984-2006, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 356 Storke Road, Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" + +end diff --git a/contrib/ise_library/cURL/curl_function.e b/contrib/ise_library/cURL/curl_function.e new file mode 100644 index 00000000..f5790214 --- /dev/null +++ b/contrib/ise_library/cURL/curl_function.e @@ -0,0 +1,257 @@ +note + description: "[ + cURL curl_easy_setopt callback functions' Eiffel wrappers. + We need this class since cURL need a c function pointer as value but + Eiffel function need frist parameter of any funciton call is object address. + Client programmers can inherit this class to fit their needs. + + Note: descendants of this class have to call `set_object_and_function_address', + otherwise cURL would not know how to call Eiffel features (such as `write_function'). + See example: $ISE_LIBRARY\examples\cURL\upload_and_read_function + + See http://curl.haxx.se/libcurl/c/curl_easy_setopt.html for libcurl documentation + ]" + status: "See notice at end of class." + legal: "See notice at end of class." + date: "$Date$" + revision: "$Revision$" + +deferred class + CURL_FUNCTION + +inherit + DISPOSABLE + +feature -- Interactive with C + + set_object_and_function_address + -- Set object and function addresses. + -- Call this feature before call `c_set_progress_function', `c_set_debug_function' and `c_set_write_function, c_set_read_function'. + do + c_set_object ($Current) + c_set_progress_function_address ($progress_function) + c_set_write_function_address ($write_function) + c_set_read_function_address ($read_function) + c_set_debug_function_address ($debug_function) + end + + c_set_progress_function (a_setopt_api: POINTER; a_curl_handle: POINTER) + -- Setting CURLOPT_PROGRESSFUNCTION option of `a_curl_handle'. + -- We need this function since cURL need a c function pointer as value. + require + exists: a_setopt_api /= default_pointer + external + "C inline use " + alias + "[ + { + (FUNCTION_CAST(void, (CURL *, CURLoption, ...)) $a_setopt_api) + ((CURL *) $a_curl_handle, + (CURLoption)CURLOPT_PROGRESSFUNCTION, + curl_progress_function); + } + ]" + end + + c_set_debug_function (a_setopt_api: POINTER; a_curl_handle: POINTER) + -- Setting CURLOPT_DEBUGFUNCTION option of `a_curl_handle'. + -- We need this function since cURL need a c function pointer as value. + require + exists: a_curl_handle /= default_pointer + external + "C inline use " + alias + "[ + { + (FUNCTION_CAST(void, (CURL *, CURLoption, ...)) $a_setopt_api) + ((CURL *) $a_curl_handle, + (CURLoption)CURLOPT_DEBUGFUNCTION, + curl_debug_function); + + } + ]" + end + + c_set_write_function (a_setopt_api: POINTER; a_curl_handle: POINTER) + -- Setting CURLOPT_WRITEFUNCTION option of `a_curl_handle'. + -- We need this function since cURL need a c function pointer as value. + require + exists: a_setopt_api /= default_pointer + external + "C inline use " + alias + "[ + { + (FUNCTION_CAST(void, (CURL *, CURLoption, ...)) $a_setopt_api) + ((CURL *) $a_curl_handle, + (CURLoption)CURLOPT_WRITEFUNCTION, + curl_write_function); + } + ]" + end + + c_set_read_function (a_setopt_api: POINTER; a_curl_handle: POINTER) + -- Setting CURLOPT_READFUNCTION option of `a_curl_handle'. + -- We need this function since cURL need a c function pointer as value. + require + exists: a_setopt_api /= default_pointer + external + "C inline use " + alias + "[ + { + (FUNCTION_CAST(void, (CURL *, CURLoption, ...)) $a_setopt_api) + ((CURL *) $a_curl_handle, + (CURLoption)CURLOPT_READFUNCTION, + curl_read_function); + } + ]" + end + +feature -- cURL curl_easy_setopt functions + + progress_function (a_object_id: POINTER; a_download_total, a_download_now, a_upload_total, a_upload_now: REAL_64): INTEGER + -- Function correspond to {CURL_OPT_CONSTANTS}.curlopt_progressfunction + -- Note, pass a {IDENTIFIED}.object_id as `a_object_id' value is helpful since we can't directly pass an Eiffel Object address which + -- may changed during GC. + deferred + end + + write_function (a_data_pointer: POINTER; a_size, a_nmemb: INTEGER; a_object_id: POINTER): INTEGER + -- Function called by libcurl as soon as there is data received that needs to be saved. + -- The size of the data pointed to by `a_data_pointer' is `a_size' multiplied with `a_nmemb', it will not be null terminated. + -- Returns the number of bytes actually taken care of + -- + -- Function corresponds to {CURL_OPT_CONSTANTS}.curlopt_writefunction + -- Note, pass a {IDENTIFIED}.object_id as `a_object_id' value is helpful since we can't directly pass an Eiffel Object address which + -- may changed during GC. + --| libcurl doc: + --| Function pointer that should match the following prototype: size_t function( char *ptr, size_t size, size_t nmemb, void *userdata); + --| This function gets called by libcurl as soon as there is data received that needs to be saved. + --| The size of the data pointed to by ptr is size multiplied with nmemb, it will not be zero terminated. + --| Return the number of bytes actually taken care of. + --| If that amount differs from the amount passed to your function, it'll signal an error to the library. + --| This will abort the transfer and return CURLE_WRITE_ERROR. + --| From 7.18.0, the function can return CURL_WRITEFUNC_PAUSE which then will cause writing to this connection to become paused. + --| See curl_easy_pause(3) for further details. + --| + --| This function may be called with zero bytes data if the transferred file is empty. + --| + --| Set this option to NULL to get the internal default function. + --| The internal default function will write the data to the FILE * given with CURLOPT_WRITEDATA. + --| + --| Set the userdata argument with the CURLOPT_WRITEDATA option. + --| + --| The callback function will be passed as much data as possible in all invokes, + --| but you cannot possibly make any assumptions. It may be one byte, it may be thousands. + --| The maximum amount of body data that can be passed to the write callback is defined + --| in the curl.h header file: CURL_MAX_WRITE_SIZE (the usual default is 16K). + --| If you however have CURLOPT_HEADER set, which sends header data to the write callback, + --| you can get up to CURL_MAX_HTTP_HEADER bytes of header data passed into it. This usually means 100K. + deferred + end + + read_function (a_data_pointer: POINTER; a_size, a_nmemb: INTEGER; a_object_id: POINTER): INTEGER + -- Function called by libcurl as soon as it needs to read data in order to send it to the peer. + -- The data area pointed at by the pointer `a_data_pointer' may be filled with at most + -- `a_size' multiplied with `a_nmemb' number of bytes. + -- Returns the actual number of bytes stored in that memory area. + -- Returning 0 will signal end-of-file to the library and cause it to stop the current transfer. + -- + -- Function corresponds to {CURL_OPT_CONSTANTS}.curlopt_readfunction + -- Note, pass a {IDENTIFIED}.object_id as `a_object_id' value is helpful since we can't directly pass an Eiffel Object address which + -- may changed during GC. + --| libcurl doc: + --| Function pointer that should match the following prototype: size_t function( void *ptr, size_t size, size_t nmemb, void *userdata); + --| This function gets called by libcurl as soon as it needs to read data in order to send it to the peer. + --| The data area pointed at by the pointer ptr may be filled with at most size multiplied with nmemb number of bytes. + --| Your function must return the actual number of bytes that you stored in that memory area. + --| Returning 0 will signal end-of-file to the library and cause it to stop the current transfer. + --| + --| If you stop the current transfer by returning 0 "pre-maturely" (i.e before the server expected it, + --| like when you've said you will upload N bytes and you upload less than N bytes), + --| you may experience that the server "hangs" waiting for the rest of the data that won't come. + --| + --| The read callback may return CURL_READFUNC_ABORT to stop the current operation immediately, + --| resulting in a CURLE_ABORTED_BY_CALLBACK error code from the transfer (Added in 7.12.1) + --| + --| From 7.18.0, the function can return CURL_READFUNC_PAUSE which then will cause reading from this connection to become paused. + --| See curl_easy_pause(3) for further details. + --| + --| Bugs: when doing TFTP uploads, you must return the exact amount of data that the callback wants, + --| or it will be considered the final packet by the server end and the transfer will end there. + --| + --| If you set this callback pointer to NULL, or don't set it at all, the default internal read function will be used. + --| It is doing an fread() on the FILE * userdata set with CURLOPT_READDATA. + deferred + end + + debug_function (a_curl_handle: POINTER; a_curl_infotype: INTEGER; a_char_pointer: POINTER; a_size: INTEGER; a_object_id: POINTER): INTEGER + -- Function correspond to {CURL_OPT_CONSTANTS}.curlopt_debugfunction + -- Note, pass a {IDENTIFIED}.object_id as `a_object_id' value is helpful since we can't directly pass an Eiffel Object address which + -- may changed during GC. + require + vaild: (create {CURL_INFO_TYPE}).is_valid (a_curl_infotype) + deferred + end + +feature {NONE} -- Externals + + c_set_object (a_object: POINTER) + -- Set Current object address. + external + "C signature (EIF_REFERENCE) use %"eiffel_curl.h%"" + end + + c_release_object + -- Release Current pointer in C + external + "C use %"eiffel_curl.h%"" + end + + c_set_progress_function_address (a_address: POINTER) + -- Set progress function address. + external + "C use %"eiffel_curl.h%"" + end + + c_set_write_function_address (a_address: POINTER) + -- Set write function address. + external + "C use %"eiffel_curl.h%"" + end + + c_set_read_function_address (a_address: POINTER) + -- Set read function address. + external + "C use %"eiffel_curl.h%"" + end + + c_set_debug_function_address (a_address: POINTER) + -- Set write function address. + external + "C use %"eiffel_curl.h%"" + end + +feature {NONE} -- Implementation + + dispose + -- Wean `Current' + do + c_release_object + c_set_object (default_pointer) + end + +note + library: "cURL: Library of reusable components for Eiffel." + copyright: "Copyright (c) 1984-2012, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 5949 Hollister Ave., Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" + +end diff --git a/contrib/ise_library/cURL/curl_global_constants.e b/contrib/ise_library/cURL/curl_global_constants.e new file mode 100644 index 00000000..90d4c29a --- /dev/null +++ b/contrib/ise_library/cURL/curl_global_constants.e @@ -0,0 +1,78 @@ +note + description: "[ + cURL library constants used by curl_global_init () + ]" + status: "See notice at end of class." + legal: "See notice at end of class." + date: "$Date$" + revision: "$Revision$" + +class + CURL_GLOBAL_CONSTANTS + +feature -- Query + + curl_global_ssl: NATURAL_64 + -- Delcared as CURL_GLOBAL_SSL + external + "C inline use " + alias + "[ + return CURL_GLOBAL_SSL; + ]" + end + + curl_global_win32: NATURAL_64 + -- Delcared as CURL_GLOBAL_WIN32 + external + "C inline use " + alias + "[ + return CURL_GLOBAL_WIN32; + ]" + end + + curl_global_all: NATURAL_64 + -- Delcared as CURL_GLOBAL_ALL + external + "C inline use " + alias + "[ + return CURL_GLOBAL_ALL; + ]" + end + + curl_global_nothing: NATURAL_64 + -- Delcared as CURL_GLOBAL_NOTHING + external + "C inline use " + alias + "[ + return CURL_GLOBAL_NOTHING; + ]" + end + + curl_global_default: NATURAL_64 + -- Delcared as CURL_GLOBAL_DEFAULT + external + "C inline use " + alias + "[ + return CURL_GLOBAL_DEFAULT; + ]" + end + +note + library: "cURL: Library of reusable components for Eiffel." + copyright: "Copyright (c) 1984-2006, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 356 Storke Road, Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" + +end + diff --git a/contrib/ise_library/cURL/curl_info_constants.e b/contrib/ise_library/cURL/curl_info_constants.e new file mode 100644 index 00000000..c8dfd480 --- /dev/null +++ b/contrib/ise_library/cURL/curl_info_constants.e @@ -0,0 +1,122 @@ +note + description: "[ + cURL library info constants. + ]" + status: "See notice at end of class." + legal: "See notice at end of class." + date: "$Date$" + revision: "$Revision$" + +class + CURL_INFO_CONSTANTS + +feature -- Constants + + curlinfo_string: INTEGER = 0x100000 + -- Declared as CURLINFO_STRING + + curlinfo_long: INTEGER = 0x200000 + -- Declared as CURLINFO_LONG + + curlinfo_double: INTEGER = 0x300000 + -- Declared as CURLINFO_DOUBLE + + curlinfo_slist: INTEGER = 0x400000 + -- Declared as CURLINFO_SLIST + + curlinfo_mask: INTEGER = 0x0fffff + -- Declared as CURLINFO_MASK + + curlinfo_typemask: INTEGER = 0xf00000 + -- Declared as CURLINFO_TYPEMASK + +feature -- Info constants + + curlinfo_effective_url: INTEGER = 0x100001 -- CURLINFO_STRING + 1, + curlinfo_response_code: INTEGER = 0x200002 -- CURLINFO_LONG + 2, + curlinfo_total_time: INTEGER = 0x300003 -- CURLINFO_DOUBLE + 3, + curlinfo_namelookup_time: INTEGER = 0x300004 -- CURLINFO_DOUBLE + 4, + curlinfo_connect_time: INTEGER = 0x300005 -- CURLINFO_DOUBLE + 5, + curlinfo_pretransfer_time: INTEGER = 0x300006 -- CURLINFO_DOUBLE + 6, + curlinfo_size_upload: INTEGER = 0x300007 -- CURLINFO_DOUBLE + 7, + curlinfo_size_download: INTEGER = 0x300008 -- CURLINFO_DOUBLE + 8, + curlinfo_speed_download: INTEGER = 0x300009 -- CURLINFO_DOUBLE + 9, + curlinfo_speed_upload: INTEGER = 0x30000a -- CURLINFO_DOUBLE + 10, + curlinfo_header_size: INTEGER = 0x20000b -- CURLINFO_LONG + 11, + curlinfo_request_size: INTEGER = 0x20000c -- CURLINFO_LONG + 12, + curlinfo_ssl_verifyresult: INTEGER = 0x20000d -- CURLINFO_LONG + 13, + curlinfo_filetime: INTEGER = 0x20000e -- CURLINFO_LONG + 14, + curlinfo_content_length_download: INTEGER = 0x30000f -- CURLINFO_DOUBLE + 15, + curlinfo_content_length_upload: INTEGER = 0x300010 -- CURLINFO_DOUBLE + 16, + curlinfo_starttransfer_time: INTEGER = 0x300011 -- CURLINFO_DOUBLE + 17, + curlinfo_content_type: INTEGER = 0x100012 -- CURLINFO_STRING + 18, + curlinfo_redirect_time: INTEGER = 0x300013 -- CURLINFO_DOUBLE + 19, + curlinfo_redirect_count: INTEGER = 0x200014 -- CURLINFO_LONG + 20, + curlinfo_private: INTEGER = 0x100015 -- CURLINFO_STRING + 21, + curlinfo_http_connectcode: INTEGER = 0x200016 -- CURLINFO_LONG + 22, + curlinfo_httpauth_avail: INTEGER = 0x200017 -- CURLINFO_LONG + 23, + curlinfo_proxyauth_avail: INTEGER = 0x200018 -- CURLINFO_LONG + 24, + curlinfo_os_errno: INTEGER = 0x200019 -- CURLINFO_LONG + 25, + curlinfo_num_connects: INTEGER = 0x20001a -- CURLINFO_LONG + 26, + curlinfo_ssl_engines: INTEGER = 0x40001b -- CURLINFO_SLIST + 27, + curlinfo_cookielist: INTEGER = 0x40001c -- CURLINFO_SLIST + 28, + curlinfo_lastsocket: INTEGER = 0x20001d -- CURLINFO_LONG + 29, + curlinfo_ftp_entry_path: INTEGER = 0x10001e -- CURLINFO_STRING + 30, + +feature -- Contract support + + is_valid (a_code: INTEGER): BOOLEAN + -- Is `a_code' valid? + do + inspect a_code + when + curlinfo_effective_url, + curlinfo_response_code, + curlinfo_total_time, + curlinfo_namelookup_time, + curlinfo_connect_time, + curlinfo_pretransfer_time, + curlinfo_size_upload, + curlinfo_size_download, + curlinfo_speed_download, + curlinfo_speed_upload, + curlinfo_header_size, + curlinfo_request_size, + curlinfo_ssl_verifyresult, + curlinfo_filetime, + curlinfo_content_length_download, + curlinfo_content_length_upload, + curlinfo_starttransfer_time, + curlinfo_content_type, + curlinfo_redirect_time, + curlinfo_redirect_count, + curlinfo_private, + curlinfo_http_connectcode, + curlinfo_httpauth_avail, + curlinfo_proxyauth_avail, + curlinfo_os_errno, + curlinfo_num_connects, + curlinfo_ssl_engines, + curlinfo_cookielist, + curlinfo_lastsocket, + curlinfo_ftp_entry_path + then + Result := True + else + Result := False + end + end + +note + library: "cURL: Library of reusable components for Eiffel." + copyright: "Copyright (c) 1984-2006, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 356 Storke Road, Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" + +end diff --git a/contrib/ise_library/cURL/curl_info_type.e b/contrib/ise_library/cURL/curl_info_type.e new file mode 100644 index 00000000..7137e97e --- /dev/null +++ b/contrib/ise_library/cURL/curl_info_type.e @@ -0,0 +1,69 @@ +note + description: "[ + cURL library info type constants. + ]" + status: "See notice at end of class." + legal: "See notice at end of class." + date: "$Date$" + revision: "$Revision$" + +class + CURL_INFO_TYPE + +feature -- Enumeration + + curlinfo_text: INTEGER = 0 + -- Declared as CURLINFO_TEXT + + curlinfo_header_in: INTEGER = 1 + -- Declared as CURLINFO_HEADER_IN + + curlinfo_header_out: INTEGER = 2 + -- Declared as CURLINFO_HEADER_OUT + + curlinfo_data_in: INTEGER = 3 + -- Declared as CURLINFO_DATA_IN + + curlinfo_data_out: INTEGER = 4 + -- Declared as CURLINFO_DATA_OUT + + curlinfo_ssl_data_in: INTEGER = 5 + -- Declared as CURLINFO_SSL_DATA_IN + + curlinfo_ssl_data_out: INTEGER = 6 + -- Declared as CURLINFO_SSL_DATA_OUT + +feature -- Contract support + + is_valid (a_type: INTEGER): BOOLEAN + -- If `a_type' valid? + do + inspect a_type + when + curlinfo_data_in, + curlinfo_data_out, + curlinfo_header_in, + curlinfo_header_out, + curlinfo_ssl_data_in, + curlinfo_ssl_data_out, + curlinfo_text + then + Result := True + else + Result := False + end + end + +note + library: "cURL: Library of reusable components for Eiffel." + copyright: "Copyright (c) 1984-2006, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 356 Storke Road, Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" + +end diff --git a/contrib/ise_library/cURL/curl_msg.e b/contrib/ise_library/cURL/curl_msg.e new file mode 100644 index 00000000..3a318a81 --- /dev/null +++ b/contrib/ise_library/cURL/curl_msg.e @@ -0,0 +1,51 @@ +note + description: "[ + C CURLMSG enum + ]" + date: "$Date$" + revision: "$Revision$" + +class + CURL_MSG + +feature -- Query + + curlmsg_done: INTEGER + -- Declared as CURLMSG_DONE. + -- This easy handle has completed. + -- 'result' contains the CURLcode of the transfer + external + "C inline use " + alias + "return CURLMSG_DONE;" + end + + curlmsg_none: INTEGER + -- Declared as CURLMSG_NONE. + -- First, not used + external + "C inline use " + alias + "return CURLMSG_NONE;" + end + + curlmsg_last: INTEGER + -- Declared as CURLMSG_LAST. + -- Last, not used + external + "C inline use " + alias + "return CURLMSG_LAST;" + end + +note + copyright: "Copyright (c) 1984-2012, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 5949 Hollister Ave., Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" +end diff --git a/contrib/ise_library/cURL/curl_msg_struct.e b/contrib/ise_library/cURL/curl_msg_struct.e new file mode 100644 index 00000000..b5e618a1 --- /dev/null +++ b/contrib/ise_library/cURL/curl_msg_struct.e @@ -0,0 +1,83 @@ +note + description: "[ + + C Struct CURLMsg wrapper + Read multi stack informationals + + This class is used by {CURL_MSG_STRUCT}.info_read + + More info: + http://curl.haxx.se/libcurl/c/curl_multi_info_read.html + ]" + date: "$Date$" + revision: "$Revision$" + +class + CURL_MSG_STRUCT + +create + make + +feature {NONE} -- Initialization + + make (a_pointer: POINTER) + -- Creation method + -- Bind message structure to the address `a_pointer'". + require + not_default: a_pointer /= default_pointer + do + item := a_pointer + ensure + set: item = a_pointer + end + +feature -- Query + + curl_handle: POINTER + -- CURL easy_handle + -- The handle it concerns + do + Result := c_curl_handle (item) + end + + msg: INTEGER + -- What does this message mean? + -- It's one value from {CURLMSG} + do + Result := c_msg (item) + end + +feature {NONE} -- Implementation + + item: POINTER + -- C struct item + +feature {NONE} -- C externals + + c_curl_handle (a_item: POINTER): POINTER + -- cURL easy handle it concerns + external + "C inline use " + alias + "return (CURL *)((CURLMsg *)$a_item)->easy_handle;" + end + + c_msg (a_item: POINTER): INTEGER + -- Get msg + external + "C inline use " + alias + "return (CURLMSG)((CURLMsg *)$a_item)->msg;" + end + +;note + copyright: "Copyright (c) 1984-2012, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 5949 Hollister Ave., Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" +end diff --git a/contrib/ise_library/cURL/curl_multi_codes.e b/contrib/ise_library/cURL/curl_multi_codes.e new file mode 100644 index 00000000..44951a36 --- /dev/null +++ b/contrib/ise_library/cURL/curl_multi_codes.e @@ -0,0 +1,48 @@ +note + description: "[ + The generic return code used by functions in the libcurl multi interface. + Also consider curl_multi_strerror(3). + ]" + date: "$Date$" + revision: "$Revision$" + +class + CURL_MULTI_CODES + +feature -- Query + + curlm_call_multi_perform: INTEGER = -1 + -- This is not really an error. It means you should call curl_multi_perform(3) again without doing select() or similar in between. + + curlm_ok: INTEGER = 0 + -- Things are fine. + + curlm_bad_handle: INTEGER = 1 + -- The passed-in handle is not a valid CURLM handle. + + curlm_bad_easy_handle: INTEGER = 2 + -- An easy handle was not good/valid. It could mean that it isn't an easy handle at all, or possibly that the handle already is in used by this or another multi handle. + + curlm_out_of_memory: INTEGER = 3 + -- You are doomed. + + curlm_internal_error: INTEGER = 4 + -- This can only be returned if libcurl bugs. Please report it to us! + + curlm_bad_socket: INTEGER = 5 + -- The passed-in socket is not a valid one that libcurl already knows about. (Added in 7.15.4) + + curlm_unknown_option: INTEGER = 6 + -- curl_multi_setopt() with unsupported option (Added in 7.15.4) + +note + copyright: "Copyright (c) 1984-2012, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 5949 Hollister Ave., Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" +end diff --git a/contrib/ise_library/cURL/curl_multi_externals.e b/contrib/ise_library/cURL/curl_multi_externals.e new file mode 100644 index 00000000..2ee944b0 --- /dev/null +++ b/contrib/ise_library/cURL/curl_multi_externals.e @@ -0,0 +1,251 @@ +note + description: "[ + The multi interface offers several abilities that the easy interface doesn't. They are mainly: + 1. Enable a "pull" interface. The application that uses libcurl decides where and when to ask libcurl to get/send data. + 2. Enable multiple simultaneous transfers in the same thread without making it complicated for the application. + 3. Enable the application to wait for action on its own file descriptors and curl's file descriptors simultaneous easily. + + More info: http://curl.haxx.se/libcurl/c/libcurl-multi.html + ]" + date: "$Date$" + revision: "$Revision$" + +class + CURL_MULTI_EXTERNALS + +feature -- Command + + init + -- Create a multi handle. + -- If success, Result is a cURL multi hanlde just created. + -- This feature maybe failed in some cases: cannot find required DLL, etc. + -- Then the post condition would be violated. + require + dynamic_library_exists: is_dynamic_library_exists + local + l_api: POINTER + do + l_api := api_loader.api_pointer ("curl_multi_init") + if l_api /= default_pointer then + item := c_init (l_api) + end + end + + add_handle (a_easy_handle: POINTER) + -- Add an easy handle to a multi session. + require + dynamic_library_exists: is_dynamic_library_exists + is_multi_handle_exists: is_exists + local + l_api: POINTER + do + l_api := api_loader.api_pointer ("curl_multi_add_handle") + if l_api /= default_pointer then + c_add_handle (l_api, item, a_easy_handle) + end + end + + remove_handle (a_easy_handle: POINTER) + -- Remove an easy handle from a multi session. + require + dynamic_library_exists: is_dynamic_library_exists + is_multi_handle_exists: is_exists + local + l_api: POINTER + do + l_api := api_loader.api_pointer ("curl_multi_remove_handle") + if l_api /= default_pointer then + c_remove_handle (l_api, item, a_easy_handle) + end + end + + cleanup: INTEGER + -- Close down a multi session. + -- Result is one value from {CURL_MULTI_CODES}. + require + dynamic_library_exists: is_dynamic_library_exists + is_multi_handle_exists: is_exists + local + l_api: POINTER + do + l_api := api_loader.api_pointer ("curl_multi_cleanup") + if l_api /= default_pointer then + Result := c_cleanup (l_api, item) + end + end + + perform (a_running_handle: CELL [INTEGER]): INTEGER + -- Reads/writes available data from each easy handle. + -- Result is one value from {CURL_MULTI_CODES}. + require + dynamic_library_exists: is_dynamic_library_exists + is_multi_handle_exists: is_exists + local + l_api: POINTER + l_running_handle: INTEGER + do + l_api := api_loader.api_pointer ("curl_multi_perform") + if l_api /= default_pointer then + Result := c_perform (l_api, item, $l_running_handle) + a_running_handle.put (l_running_handle) + end + end + + info_read (a_msgs_in_queue: CELL [INTEGER]): POINTER + -- Read multi stack informationals. + -- The result is C struct CURLMsg {CURL_MSG_STRUCT}. + -- Repeated calls to this function will return a new struct each time, until a NULL + -- is returned as a signal that there is no more to get at this point. The integer + -- pointed to with msgs_in_queue will contain the number of remaining messages after + -- this function was called. + -- When you fetch a message using this function, it is removed from the internal queue + -- so calling this function again will not return the same message again. It will instead + -- return new messages at each new invoke until the queue is emptied. + require + dynamic_library_exists: is_dynamic_library_exists + is_multi_handle_exists: is_exists + local + l_api: POINTER + l_msgs_in_queue: INTEGER + do + l_api := api_loader.api_pointer ("curl_multi_info_read") + if l_api /= default_pointer then + Result := c_info_read (l_api, item, $l_msgs_in_queue) + a_msgs_in_queue.put (l_msgs_in_queue) + end + end + + is_dynamic_library_exists: BOOLEAN + -- Are required .dll/.so files available? + do + Result := api_loader.is_interface_usable + end + +-- Feature not yet wrapped/tested +-- curl_multi_assign +-- curl_multi_fdset +-- curl_multi_setopt +-- curl_multi_socket +-- curl_multi_socket_action +-- curl_multi_strerror +-- curl_multi_timeout + +feature -- Query + + is_exists: BOOLEAN + -- If C pointer exists? + do + Result := item /= default_pointer + end + +feature {NONE} -- Implementation + + item: POINTER + -- C pointer item for cURL multi + +feature {NONE} -- C externals + + c_init (a_api: POINTER): POINTER + -- Declared as curl_multi_init (). + require + exists: a_api /= default_pointer + external + "C inline use " + alias + "[ + return (FUNCTION_CAST(CURLM *, ()) $a_api)(); + ]" + end + + c_cleanup (a_api: POINTER; a_multi_handle: POINTER): INTEGER + -- Declared as curl_multi_cleanup (). + require + exists: a_api /= default_pointer + external + "C inline use " + alias + "[ + return (FUNCTION_CAST(CURLMcode, (CURLM *)) $a_api) + ((CURLM *)$a_multi_handle); + ]" + end + + c_add_handle (a_api: POINTER; a_multi_handle: POINTER; a_easy_handle: POINTER) + -- Declared as curl_multi_add_handle (). + require + exists: a_api /= default_pointer + external + "C inline use " + alias + "[ + (FUNCTION_CAST(void, (CURLM *, CURL *)) $a_api) + ((CURLM *) $a_multi_handle, + (CURL *) $a_easy_handle); + ]" + end + + c_remove_handle (a_api: POINTER; a_multi_handle: POINTER; a_easy_handle: POINTER) + -- Declared as curl_multi_remove_handle (). + require + exists: a_api /= default_pointer + external + "C inline use " + alias + "[ + (FUNCTION_CAST(void, (CURLM *, CURL *)) $a_api) + ((CURLM *) $a_multi_handle, + (CURL *) $a_easy_handle); + ]" + end + + c_perform (a_api: POINTER; a_multi_handle: POINTER; a_running_handles: TYPED_POINTER [INTEGER]): INTEGER + -- Declared as curl_multi_perform. + require + exists: a_api /= default_pointer + external + "C inline use " + alias + "[ + return (FUNCTION_CAST(CURLMcode, (CURLM *, int *)) $a_api) + ((CURLM *) $a_multi_handle, + (int *) $a_running_handles); + ]" + end + + c_info_read (a_api: POINTER; a_multi_handle: POINTER; a_msgs_in_queue: TYPED_POINTER [INTEGER]): POINTER + -- Declared as curl_multi_info_read. + require + exists: a_api /= default_pointer + external + "C inline use " + alias + "[ + return (FUNCTION_CAST(CURLMsg *, (CURLM *, int *)) $a_api) + ((CURLM *) $a_multi_handle, + (int *) $a_msgs_in_queue); + ]" + end + +feature {NONE} -- Implementation + + api_loader: DYNAMIC_MODULE + -- Module name. + local + l_utility: CURL_UTILITY + once + create l_utility + Result := l_utility.api_loader + end + + +note + copyright: "Copyright (c) 1984-2012, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 5949 Hollister Ave., Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" +end diff --git a/contrib/ise_library/cURL/curl_opt_constants.e b/contrib/ise_library/cURL/curl_opt_constants.e new file mode 100644 index 00000000..372e3f27 --- /dev/null +++ b/contrib/ise_library/cURL/curl_opt_constants.e @@ -0,0 +1,1117 @@ +note + description: "[ + libcurl library opt constants + For more informaton see: + + http://curl.haxx.se/libcurl/c/curl_easy_setopt.html + + Code related to LIBCURL_VERSION: 7.17.0 + ]" + status: "See notice at end of class." + legal: "See notice at end of class." + date: "$Date$" + revision: "$Revision$" + +class + CURL_OPT_CONSTANTS + +feature -- Version + + libcurl_version: STRING + -- String representation of LIBCURL_VERSION + do + create Result.make_from_c (libcurl_version_pointer) + end + + libcurl_version_pointer: POINTER + -- String pointer declared as LIBCURL_VERSION + external + "C inline use " + alias + "return LIBCURL_VERSION;" + end + + libcurl_version_major: INTEGER + -- Declared as LIBCURL_VERSION_MAJOR + external + "C inline use " + alias + "return LIBCURL_VERSION_MAJOR;" + end + + libcurl_version_minor: INTEGER + -- Declared as LIBCURL_VERSION_MINOR + external + "C inline use " + alias + "return LIBCURL_VERSION_MINOR;" + end + + libcurl_version_patch: INTEGER + -- Declared as LIBCURL_VERSION_PATCH + external + "C inline use " + alias + "return LIBCURL_VERSION_PATCH;" + end + +feature -- Behavior + + curlopt_verbose: INTEGER + -- Declared as CURLOPT_VERBOSE. + external + "C inline use " + alias + "return CURLOPT_VERBOSE;" + end + + curlopt_header: INTEGER + -- Declared as CURLOPT_HEADER. + external + "C inline use " + alias + "return CURLOPT_HEADER;" + end + + curlopt_noprogress: INTEGER + -- Declared as CURLOPT_NOPROGRESS + external + "C inline use " + alias + "return CURLOPT_NOPROGRESS;" + end + +feature -- Callback + + curlopt_writefunction: INTEGER + -- Declared as CURLOPT_WRITEFUNCTION. + external + "C inline use " + alias + "return CURLOPT_WRITEFUNCTION;" + end + + curlopt_writedata: INTEGER + -- Declared as CURLOPT_WRITEDATA. + external + "C inline use " + alias + "return CURLOPT_WRITEDATA;" + end + + curlopt_readfunction: INTEGER + -- Declared as CURLOPT_READFUNCTION. + external + "C inline use " + alias + "return CURLOPT_READFUNCTION;" + end + + curlopt_readdata: INTEGER + -- Declared as CURLOPT_READDATA. + external + "C inline use " + alias + "return CURLOPT_READDATA;" + end + + curlopt_debugfunction: INTEGER + -- Declared as CURLOPT_DEBUGFUNCTION. + external + "C inline use " + alias + "return CURLOPT_DEBUGFUNCTION;" + end + + curlopt_progressfunction: INTEGER + -- Declared as CURLOPT_PROGRESSFUNCTION + external + "C inline use " + alias + "return CURLOPT_PROGRESSFUNCTION;" + end + + curlopt_progressdata: INTEGER + -- Declared as CURLOPT_PROGRESSDATA + external + "C inline use " + alias + "return CURLOPT_PROGRESSDATA;" + end + + curlopt_writeheader: INTEGER + -- Declared as CURLOPT_WRITEHEADER. + external + "C inline use " + alias + "return CURLOPT_WRITEHEADER;" + end + +feature -- Network + + curlopt_url: INTEGER + -- Declared as CURLOPT_URL. + external + "C inline use " + alias + "return CURLOPT_URL;" + end + + curlopt_proxy: INTEGER + -- Declared as CURLOPT_PROXY. + external + "C inline use " + alias + "return CURLOPT_PROXY;" + end + + curlopt_proxyport: INTEGER + -- Declared as CURLOPT_PROXYPORT. + external + "C inline use " + alias + "return CURLOPT_PROXYPORT;" + end + + curlopt_proxytype: INTEGER + -- Declared as CURLOPT_PROXYTYPE. + external + "C inline use " + alias + "return CURLOPT_PROXYTYPE;" + end + + curlopt_httpproxytunnel: INTEGER + -- Declared as CURLOPT_HTTPPROXYTUNNEL. + external + "C inline use " + alias + "return CURLOPT_HTTPPROXYTUNNEL;" + end + + curlopt_interface: INTEGER + -- Declared as CURLOPT_INTERFACE. + external + "C inline use " + alias + "return CURLOPT_INTERFACE;" + end + + curlopt_localport: INTEGER + -- Declared as CURLOPT_LOCALPORT + external + "C inline use " + alias + "return CURLOPT_LOCALPORT;" + end + + curlopt_localportrange: INTEGER + -- Declared as CURLOPT_LOCALPORTRANGE + external + "C inline use " + alias + "return CURLOPT_LOCALPORTRANGE;" + end + + curlopt_buffersize: INTEGER + -- Declared as CURLOPT_BUFFERSIZE + external + "C inline use " + alias + "return CURLOPT_BUFFERSIZE" + end + + curlopt_port: INTEGER + -- Declared as CURLOPT_PORT + external + "C inline use " + alias + "return CURLOPT_PORT;" + end + + curlopt_tcp_nodelay: INTEGER + -- Declared as CURLOPT_TCP_NODELAY + external + "C inline use " + alias + "return CURLOPT_TCP_NODELAY;" + end + +feature -- Names and Passwords (Authentication) + + curlopt_userpwd: INTEGER + -- Declared as CURLOPT_USERPWD. + external + "C inline use " + alias + "return CURLOPT_USERPWD;" + end + + curlopt_proxyuserpwd: INTEGER + -- Declared as CURLOPT_PROXYUSERPWD + external + "C inline use " + alias + "return CURLOPT_PROXYUSERPWD;" + end + + curlopt_httpauth: INTEGER + -- Declared as CURLOPT_HTTPAUTH. + external + "C inline use " + alias + "return CURLOPT_HTTPAUTH;" + end + + curlauth_none: INTEGER + -- Declared as CURLAUTH_NONE. + external + "C inline use " + alias + "return CURLAUTH_NONE;" + end + + curlauth_basic: INTEGER + -- Declared as CURLAUTH_BASIC. + external + "C inline use " + alias + "return CURLAUTH_BASIC;" + end + + curlauth_digest: INTEGER + -- Declared as CURLAUTH_DIGEST. + external + "C inline use " + alias + "return CURLAUTH_DIGEST;" + end + + curlauth_any: INTEGER + -- Declared as CURLAUTH_ANY. + external + "C inline use " + alias + "return CURLAUTH_ANY;" + end + + curlauth_anysafe: INTEGER + -- Declared as CURLAUTH_ANYSAFE. + external + "C inline use " + alias + "return CURLAUTH_ANYSAFE;" + end + + curlopt_proxyauth: INTEGER + -- Declared as CURLOPT_PROXYAUTH + external + "C inline use " + alias + "return CURLOPT_PROXYAUTH;" + end + +feature -- HTTP + + curlopt_autoreferer: INTEGER + -- Declared as CURLOPT_AUTOREFERER + external + "C inline use " + alias + "return CURLOPT_AUTOREFERER;" + end + + curlopt_encoding: INTEGER + -- Declared as CURLOPT_ENCODING. + -- in future version, this is called CURLOPT_ACCEPT_ENCODING + external + "C inline use " + alias + "return CURLOPT_ENCODING;" + end + + curlopt_followlocation: INTEGER + -- Declared as CURLOPT_FOLLOWLOCATION + external + "C inline use " + alias + "return CURLOPT_FOLLOWLOCATION;" + end + + curlopt_unrestricted_auth: INTEGER + -- Declared as CURLOPT_UNRESTRICTED_AUTH + external + "C inline use " + alias + "return CURLOPT_UNRESTRICTED_AUTH;" + end + + curlopt_maxredirs: INTEGER + -- Declared as CURLOPT_MAXREDIRS + external + "C inline use " + alias + "return CURLOPT_MAXREDIRS;" + end + + curlopt_put: INTEGER + -- Declared as CURLOPT_PUT. + external + "C inline use " + alias + "return CURLOPT_PUT;" + end + + curlopt_post: INTEGER + -- Declared as CURLOPT_POST. + external + "C inline use " + alias + "return CURLOPT_POST;" + end + + curlopt_postfields: INTEGER + -- Declared as CURLOPT_POSTFIELDS. + external + "C inline use " + alias + "return CURLOPT_POSTFIELDS;" + end + + curlopt_postfieldsize: INTEGER + -- Declared as CURLOPT_POSTFIELDSIZE + external + "C inline use " + alias + "return CURLOPT_POSTFIELDSIZE;" + end + + curlopt_postfieldsize_large: INTEGER + -- Declared as CURLOPT_POSTFIELDSIZE_LARGE + external + "C inline use " + alias + "return CURLOPT_POSTFIELDSIZE_LARGE;" + end + + curlopt_httppost: INTEGER + -- Declared as CURLOPT_HTTPPOST. + external + "C inline use " + alias + "return CURLOPT_HTTPPOST;" + end + + curlopt_referer: INTEGER + -- Declared as CURLOPT_REFERER + external + "C inline use " + alias + "return CURLOPT_REFERER;" + end + + curlopt_useragent: INTEGER + -- Declared as CURLOPT_USERAGENT. + external + "C inline use " + alias + "return CURLOPT_USERAGENT;" + end + + curlopt_httpheader: INTEGER + -- Declared as CURLOPT_HTTPHEADER. + external + "C inline use " + alias + "return CURLOPT_HTTPHEADER;" + end + + curlopt_cookie: INTEGER + -- Declared as CURLOPT_COOKIE. + external + "C inline use " + alias + "return CURLOPT_COOKIE;" + end + + curlopt_cookiefile: INTEGER + -- Declared as CURLOPT_COOKIEFILE. + external + "C inline use " + alias + "return CURLOPT_COOKIEFILE;" + end + + curlopt_cookiejar: INTEGER + -- Declared as CURLOPT_COOKIEJAR + external + "C inline use " + alias + "return CURLOPT_COOKIEJAR;" + end + + curlopt_cookiesession: INTEGER + -- Declared as CURLOPT_COOKIESESSION + external + "C inline use " + alias + "return CURLOPT_COOKIESESSION;" + end + + curlopt_cookielist: INTEGER + -- Declared as CURLOPT_COOKIELIST. + external + "C inline use " + alias + "return CURLOPT_COOKIELIST" + end + + curlopt_httpget: INTEGER + -- Declared as CURLOPT_HTTPGET + -- Pass a long. If the long is non-zero, this forces the HTTP request to get back to GET. usable if a POST, HEAD, PUT or a custom request have been used previously using the same curl handle. + -- When setting CURLOPT_HTTPGET to a non-zero value, it will automatically set CURLOPT_NOBODY to 0 (since 7.14.1). + external + "C inline use " + alias + "return CURLOPT_HTTPGET;" + end + + curlopt_http_version: INTEGER + -- Declared as CURLOPT_HTTP_VERSION + external + "C inline use " + alias + "return CURLOPT_HTTP_VERSION;" + end + + curlopt_ignore_content_length: INTEGER + -- Declared as CURLOPT_IGNORE_CONTENT_LENGTH + external + "C inline use " + alias + "return CURLOPT_IGNORE_CONTENT_LENGTH;" + end + + curlopt_http_content_decoding: INTEGER + -- Declared as CURLOPT_HTTP_CONTENT_DECODING + external + "C inline use " + alias + "return CURLOPT_HTTP_CONTENT_DECODING;" + end + +feature -- Protocol + + curlopt_transfertext: INTEGER + -- Declared as CURLOPT_TRANSFERTEXT + external + "C inline use " + alias + "return CURLOPT_TRANSFERTEXT;" + end + + curlopt_crlf: INTEGER + -- Declared as CURLOPT_CRLF + external + "C inline use " + alias + "return CURLOPT_CRLF;" + end + + curlopt_resume_from: INTEGER + -- Declared as CURLOPT_RESUME_FROM + external + "C inline use " + alias + "return CURLOPT_RESUME_FROM;" + end + + curlopt_resume_from_large: INTEGER + -- Declared as CURLOPT_RESUME_FROM_LARGE + external + "C inline use " + alias + "return CURLOPT_RESUME_FROM_LARGE;" + end + + curlopt_customrequest: INTEGER + -- Declared as CURLOPT_CUSTOMREQUEST + external + "C inline use " + alias + "return CURLOPT_CUSTOMREQUEST" + end + + curlopt_filetime: INTEGER + -- Declared as CURLOPT_FILETIME + external + "C inline use " + alias + "return CURLOPT_FILETIME;" + end + + curlopt_nobody: INTEGER + -- Declared as CURLOPT_NOBODY + external + "C inline use " + alias + "return CURLOPT_NOBODY;" + end + + curlopt_infilesize: INTEGER + -- Declared as CURLOPT_INFILESIZE + external + "C inline use " + alias + "return CURLOPT_INFILESIZE;" + end + + curlopt_infilesize_large: INTEGER + -- Declared as CURLOPT_INFILESIZE_LARGE. + external + "C inline use " + alias + "return CURLOPT_INFILESIZE_LARGE;" + end + + curlopt_upload: INTEGER + -- Declared as CURLOPT_UPLOAD. + external + "C inline use " + alias + "return CURLOPT_UPLOAD;" + end + + curlopt_maxfilesize: INTEGER + -- Declared as CURLOPT_MAXFILESIZE + external + "C inline use " + alias + "return CURLOPT_MAXFILESIZE;" + end + + curlopt_maxfilesize_large: INTEGER + -- Declared as CURLOPT_MAXFILESIZE_LARGE + external + "C inline use " + alias + "return CURLOPT_MAXFILESIZE_LARGE;" + end + + curlopt_timecondition: INTEGER + -- Declared as CURLOPT_TIMECONDITION + external + "C inline use " + alias + "return CURLOPT_TIMECONDITION;" + end + + curlopt_timevalue: INTEGER + -- Declared as CURLOPT_TIMEVALUE + external + "C inline use " + alias + "return CURLOPT_TIMEVALUE;" + end + +feature -- Connection + + curlopt_timeout: INTEGER + -- Declared as CURLOPT_TIMEOUT. + external + "C inline use " + alias + "return CURLOPT_TIMEOUT" + end + + curlopt_connect_timeout: INTEGER + -- The number of seconds to wait while trying to connect. Use 0 to wait indefinitely. + -- Declared as CURLOPT_CONNECTTIMEOUT + external + "C inline use " + alias + "[ + return CURLOPT_CONNECTTIMEOUT + ]" + end + + curlopt_timeout_ms: INTEGER + -- Declared as CURLOPT_TIMEOUT_MS + external + "C inline use " + alias + "return CURLOPT_TIMEOUT_MS;" + end + + curlopt_low_speed_limit: INTEGER + -- Declared as CURLOPT_LOW_SPEED_LIMIT + external + "C inline use " + alias + "return CURLOPT_LOW_SPEED_LIMIT;" + end + + curlopt_low_speed_time: INTEGER + -- Declared as CURLOPT_LOW_SPEED_TIME + external + "C inline use " + alias + "return CURLOPT_LOW_SPEED_TIME;" + end + + curlopt_max_send_speed_large: INTEGER + -- Declared as CURLOPT_MAX_SEND_SPEED_LARGE + external + "C inline use " + alias + "return CURLOPT_MAX_SEND_SPEED_LARGE;" + end + + curlopt_max_recv_speed_large: INTEGER + -- Declared as CURLOPT_MAX_RECV_SPEED_LARGE + external + "C inline use " + alias + "return CURLOPT_MAX_RECV_SPEED_LARGE;" + end + + curlopt_maxconnects: INTEGER + -- Declared as CURLOPT_MAXCONNECTS + external + "C inline use " + alias + "return CURLOPT_MAXCONNECTS;" + end + + curlopt_fresh_connect: INTEGER + -- Declared as CURLOPT_FRESH_CONNECT + external + "C inline use " + alias + "return CURLOPT_FRESH_CONNECT;" + end + + curlopt_forbid_reuse: INTEGER + -- Declared as CURLOPT_FORBID_REUSE + external + "C inline use " + alias + "return CURLOPT_FORBID_REUSE;" + end + + curlopt_connecttimeout: INTEGER + -- Declared as CURLOPT_CONNECTTIMEOUT. + external + "C inline use " + alias + "return CURLOPT_CONNECTTIMEOUT" + end + + curlopt_ipresolve: INTEGER + -- Declared as CURLOPT_IPRESOLVE + external + "C inline use " + alias + "return CURLOPT_IPRESOLVE;" + end + + curl_ipresolve_whatever: INTEGER + -- Declared as CURL_IPRESOLVE_WHATEVER + external + "C inline use " + alias + "return CURL_IPRESOLVE_WHATEVER;" + end + + curl_ipresolve_v4: INTEGER + -- Declared as CURL_IPRESOLVE_V4 + external + "C inline use " + alias + "return CURL_IPRESOLVE_V4;" + end + + curl_ipresolve_v6: INTEGER + -- Declared as CURL_IPRESOLVE_V6 + external + "C inline use " + alias + "return CURL_IPRESOLVE_V6;" + end + + curlopt_connect_only: INTEGER + -- Declared as CURLOPT_CONNECT_ONLY + external + "C inline use " + alias + "return CURLOPT_CONNECT_ONLY;" + end + + curlopt_use_ssl: INTEGER + -- Declared as CURLOPT_USE_SSL + external + "C inline use " + alias + "return CURLOPT_USE_SSL;" + end + + curlusessl_none: INTEGER + -- Declared as CURLUSESSL_NONE + external + "C inline use " + alias + "return CURLUSESSL_NONE;" + end + + curlusessl_try: INTEGER + -- Declared as CURLUSESSL_TRY + external + "C inline use " + alias + "return CURLUSESSL_TRY;" + end + + curlusessl_control: INTEGER + -- Declared as CURLUSESSL_CONTROL + external + "C inline use " + alias + "return CURLUSESSL_CONTROL;" + end + + curlusessl_all: INTEGER + -- Declared as CURLUSESSL_ALL + external + "C inline use " + alias + "return CURLUSESSL_ALL;" + end + +feature -- SSL and Security + + curlopt_sslcert: INTEGER + -- Declared as CURLOPT_SSLCERT + external + "C inline use " + alias + "return CURLOPT_SSLCERT;" + end + + curlopt_sslcerttype: INTEGER + -- Declared as CURLOPT_SSLCERTTYPE + external + "C inline use " + alias + "return CURLOPT_SSLCERTTYPE;" + end + + curlopt_sslkey: INTEGER + -- Declared as CURLOPT_SSLKEY + external + "C inline use " + alias + "return CURLOPT_SSLKEY;" + end + + curlopt_sslkeytype: INTEGER + -- Declared as CURLOPT_SSLKEYTYPE + external + "C inline use " + alias + "return CURLOPT_SSLKEYTYPE;" + end + + curlopt_keypasswd: INTEGER + -- Declared as CURLOPT_KEYPASSWD + external + "C inline use " + alias + "return CURLOPT_KEYPASSWD;" + end + + curlopt_sslengine: INTEGER + -- Declared as CURLOPT_SSLENGINE + external + "C inline use " + alias + "return CURLOPT_SSLENGINE;" + end + + curlopt_sslengine_default: INTEGER + -- Declared as CURLOPT_SSLENGINE_DEFAULT + external + "C inline use " + alias + "return CURLOPT_SSLENGINE_DEFAULT;" + end + + curlopt_sslversion: INTEGER + -- Declared as CURLOPT_SSLVERSION + external + "C inline use " + alias + "return CURLOPT_SSLVERSION;" + end + + curl_sslversion_default: INTEGER + -- Declared as CURL_SSLVERSION_DEFAULT + external + "C inline use " + alias + "return CURL_SSLVERSION_DEFAULT;" + end + + curl_sslversion_tlsv1: INTEGER + -- Declared as CURL_SSLVERSION_TLSv1 + external + "C inline use " + alias + "return CURL_SSLVERSION_TLSv1;" + end + + curl_sslversion_sslv2: INTEGER + -- Declared as CURL_SSLVERSION_SSLv2 + external + "C inline use " + alias + "return CURL_SSLVERSION_SSLv2;" + end + + curl_sslversion_sslv3: INTEGER + -- Declared as CURL_SSLVERSION_SSLv3 + external + "C inline use " + alias + "return CURL_SSLVERSION_SSLv3;" + end + + curlopt_ssl_verifypeer: INTEGER + -- Declared as CURLOPT_SSL_VERIFYPEER. + external + "C inline use " + alias + "return CURLOPT_SSL_VERIFYPEER;" + end + + curlopt_cainfo: INTEGER + -- Declared as CURLOPT_CAINFO + external + "C inline use " + alias + "return CURLOPT_CAINFO;" + end + + curlopt_capath: INTEGER + -- Declared as CURLOPT_CAPATH + external + "C inline use " + alias + "return CURLOPT_CAPATH;" + end + + curlopt_ssl_verifyhost: INTEGER + -- Declared as CURLOPT_SSL_VERIFYHOST + external + "C inline use " + alias + "return CURLOPT_SSL_VERIFYHOST;" + end + + curlopt_random_file: INTEGER + -- Declared as CURLOPT_RANDOM_FILE + external + "C inline use " + alias + "return CURLOPT_RANDOM_FILE;" + end + + curlopt_egdsocket: INTEGER + -- Declared as CURLOPT_EGDSOCKET + external + "C inline use " + alias + "return CURLOPT_EGDSOCKET;" + end + + curlopt_ssl_cipher_list: INTEGER + -- Declared as CURLOPT_SSL_CIPHER_LIST + external + "C inline use " + alias + "return CURLOPT_SSL_CIPHER_LIST;" + end + + curlopt_ssl_sessionid_cache: INTEGER + -- Declared as CURLOPT_SSL_SESSIONID_CACHE + external + "C inline use " + alias + "return CURLOPT_SSL_SESSIONID_CACHE;" + end + + curlopt_krblevel: INTEGER + -- Declared as CURLOPT_KRBLEVEL + external + "C inline use " + alias + "return CURLOPT_KRBLEVEL;" + end + +feature -- SSH + + curlopt_ssh_auth_types: INTEGER + -- Declared as CURLOPT_SSH_AUTH_TYPES + external + "C inline use " + alias + "return CURLOPT_SSH_AUTH_TYPES;" + end + + curlopt_ssh_public_keyfile: INTEGER + -- Declared as CURLOPT_SSH_PUBLIC_KEYFILE + external + "C inline use " + alias + "return CURLOPT_SSH_PUBLIC_KEYFILE;" + end + + curlopt_ssh_private_keyfile: INTEGER + -- Declared as CURLOPT_SSH_PRIVATE_KEYFILE + external + "C inline use " + alias + "return CURLOPT_SSH_PRIVATE_KEYFILE;" + end + +feature -- Status report + + is_valid (v: INTEGER): BOOLEAN + -- If `v' value valid? + do + Result := v = curlopt_verbose or + v = curlopt_header or + v = curlopt_noprogress or + v = curlopt_writefunction or + v = curlopt_writedata or + v = curlopt_readfunction or + v = curlopt_readdata or + v = curlopt_debugfunction or + v = curlopt_progressfunction or + v = curlopt_progressdata or + v = curlopt_writeheader or + v = curlopt_url or + v = curlopt_proxy or + v = curlopt_proxyport or + v = curlopt_proxytype or + v = curlopt_httpproxytunnel or + v = curlopt_interface or + v = curlopt_localport or + v = curlopt_localportrange or + v = curlopt_buffersize or + v = curlopt_port or + v = curlopt_tcp_nodelay or + v = curlopt_userpwd or + v = curlopt_proxyuserpwd or + v = curlopt_httpauth or + v = curlauth_none or + v = curlauth_basic or + v = curlauth_digest or + v = curlauth_any or + v = curlauth_anysafe or + v = curlopt_proxyauth or + v = curlopt_autoreferer or + v = curlopt_encoding or + v = curlopt_followlocation or + v = curlopt_unrestricted_auth or + v = curlopt_maxredirs or + v = curlopt_put or + v = curlopt_post or + v = curlopt_postfields or + v = curlopt_postfieldsize or + v = curlopt_postfieldsize_large or + v = curlopt_httppost or + v = curlopt_referer or + v = curlopt_useragent or + v = curlopt_httpheader or + v = curlopt_cookie or + v = curlopt_cookiefile or + v = curlopt_cookiejar or + v = curlopt_cookiesession or + v = curlopt_cookielist or + v = curlopt_httpget or + v = curlopt_http_version or + v = curlopt_ignore_content_length or + v = curlopt_http_content_decoding or + v = curlopt_transfertext or + v = curlopt_crlf or + v = curlopt_resume_from or + v = curlopt_resume_from_large or + v = curlopt_customrequest or + v = curlopt_filetime or + v = curlopt_nobody or + v = curlopt_infilesize or + v = curlopt_infilesize_large or + v = curlopt_upload or + v = curlopt_maxfilesize or + v = curlopt_maxfilesize_large or + v = curlopt_timecondition or + v = curlopt_timevalue or + v = curlopt_timeout or + v = curlopt_timeout_ms or + v = curlopt_low_speed_limit or + v = curlopt_low_speed_time or + v = curlopt_max_send_speed_large or + v = curlopt_max_recv_speed_large or + v = curlopt_maxconnects or + v = curlopt_fresh_connect or + v = curlopt_forbid_reuse or + v = curlopt_connecttimeout or + v = curlopt_ipresolve or + v = curl_ipresolve_whatever or + v = curl_ipresolve_v4 or + v = curl_ipresolve_v6 or + v = curlopt_connect_only or + v = curlopt_use_ssl or + v = curlusessl_none or + v = curlusessl_try or + v = curlusessl_control or + v = curlusessl_all or + v = curlopt_sslcert or + v = curlopt_sslcerttype or + v = curlopt_sslkey or + v = curlopt_sslkeytype or + v = curlopt_keypasswd or + v = curlopt_sslengine or + v = curlopt_sslengine_default or + v = curlopt_sslversion or + v = curl_sslversion_default or + v = curl_sslversion_tlsv1 or + v = curl_sslversion_sslv2 or + v = curl_sslversion_sslv3 or + v = curlopt_ssl_verifypeer or + v = curlopt_cainfo or + v = curlopt_capath or + v = curlopt_ssl_verifyhost or + v = curlopt_random_file or + v = curlopt_egdsocket or + v = curlopt_ssl_cipher_list or + v = curlopt_ssl_sessionid_cache or + v = curlopt_krblevel or + v = curlopt_ssh_auth_types or + v = curlopt_ssh_public_keyfile or + v = curlopt_ssh_private_keyfile + end + +note + library: "cURL: Library of reusable components for Eiffel." + copyright: "Copyright (c) 1984-2012, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 5949 Hollister Ave., Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" + +end diff --git a/contrib/ise_library/cURL/curl_string.e b/contrib/ise_library/cURL/curl_string.e new file mode 100644 index 00000000..5f38934c --- /dev/null +++ b/contrib/ise_library/cURL/curl_string.e @@ -0,0 +1,50 @@ +note + description: "[ + String used by cURL wrapper library. + Only added features from IDENTIFIED. + ]" + status: "See notice at end of class." + legal: "See notice at end of class." + date: "$Date$" + revision: "$Revision$" + +class + CURL_STRING + +inherit + STRING + select + is_equal, + copy, + out + end + + IDENTIFIED + rename + is_equal as identified_is_equal, + copy as identified_copy, + out as identified_out + end + +create + make, + make_empty, + make_filled, + make_from_string, + make_from_c, + make_from_cil + +note + library: "cURL: Library of reusable components for Eiffel." + copyright: "Copyright (c) 1984-2006, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 356 Storke Road, Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" + +end + diff --git a/contrib/ise_library/cURL/curl_utility.e b/contrib/ise_library/cURL/curl_utility.e new file mode 100644 index 00000000..941e822b --- /dev/null +++ b/contrib/ise_library/cURL/curl_utility.e @@ -0,0 +1,51 @@ +note + description: "[ + Utilities for Eiffel cURL wrapper library. + ]" + status: "See notice at end of class." + legal: "See notice at end of class." + date: "$Date$" + revision: "$Revision$" + +class + CURL_UTILITY + +feature -- Query + + api_loader: DYNAMIC_MODULE + -- API dynamic loader + local + l_platform: PLATFORM + once + create l_platform + if l_platform.is_unix or l_platform.is_mac then + create Result.make_with_version (module_name, "3") + else + check is_window: l_platform.is_windows end + create Result.make (module_name) + end + ensure + not_void: Result /= Void + end + + module_name: STRING + -- Module name. + once + Result := "libcurl" + ensure + not_void: Result /= Void + end + +note + library: "cURL: Library of reusable components for Eiffel." + copyright: "Copyright (c) 1984-2006, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 356 Storke Road, Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" + +end diff --git a/contrib/ise_library/cURL/implementation/mac/api_loader_imp.e b/contrib/ise_library/cURL/implementation/mac/api_loader_imp.e new file mode 100644 index 00000000..e2eaf163 --- /dev/null +++ b/contrib/ise_library/cURL/implementation/mac/api_loader_imp.e @@ -0,0 +1,65 @@ +note + description: "[ + Interactive with native system APIs for dynamic loading. + Cocoa verson. + ]" + status: "See notice at end of class." + legal: "See notice at end of class." + date: "$Date$" + revision: "$Revision$" + +class + API_LOADER_IMP + +feature -- Command + + load_module (a_name: STRING): POINTER + -- Load module with `a_name'. + require + exists: a_name /= Void + do + -- fixme: implement + end + + loal_api (a_module: POINTER; a_name: STRING): POINTER + -- Load api which name is `a_name' in `a_module' + require + exists: a_module /= default_pointer + exists: a_name /= Void + do + -- fixme: implement + end + +note + copyright: "Copyright (c) 1984-2007, Eiffel Software" + license: "GPL version 2 (see http://www.eiffel.com/licensing/gpl.txt)" + licensing_options: "http://www.eiffel.com/licensing" + copying: "[ + This file is part of Eiffel Software's Eiffel Development Environment. + + Eiffel Software's Eiffel Development Environment is free + software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published + by the Free Software Foundation, version 2 of the License + (available at the URL listed under "license" above). + + Eiffel Software's Eiffel Development Environment is + distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty + of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with Eiffel Software's Eiffel Development + Environment; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + ]" + source: "[ + Eiffel Software + 356 Storke Road, Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" + +end diff --git a/contrib/ise_library/cURL/license.lic b/contrib/ise_library/cURL/license.lic new file mode 100644 index 00000000..c929225f --- /dev/null +++ b/contrib/ise_library/cURL/license.lic @@ -0,0 +1 @@ +reference:forum2 diff --git a/contrib/ise_library/cURL/readme.txt b/contrib/ise_library/cURL/readme.txt new file mode 100644 index 00000000..aaf6c644 --- /dev/null +++ b/contrib/ise_library/cURL/readme.txt @@ -0,0 +1,5 @@ +When your Eiffel executable running, Eiffel cURL library needs 3 DLLs, they are: + +libcurl.dll, libeay32.dll and ssleay32.dll + +Please make sure the 3 DLLs files can be found in your environment PATH or in same folder of your executable. \ No newline at end of file diff --git a/contrib/ise_library/cURL/spec/include/curl/curl.h b/contrib/ise_library/cURL/spec/include/curl/curl.h new file mode 100644 index 00000000..e7f5ec59 --- /dev/null +++ b/contrib/ise_library/cURL/spec/include/curl/curl.h @@ -0,0 +1,1714 @@ +#ifndef __CURL_CURL_H +#define __CURL_CURL_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2007, Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * $Id$ + ***************************************************************************/ + +/* If you have problems, all libcurl docs and details are found here: + http://curl.haxx.se/libcurl/ +*/ + +#include "curlver.h" /* the libcurl version defines */ + +#include +#include + +/* The include stuff here below is mainly for time_t! */ +#ifdef vms +# include +# include +#else +# include +# include +#endif /* defined (vms) */ + +typedef void CURL; + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Decorate exportable functions for Win32 DLL linking. + * This avoids using a .def file for building libcurl.dll. + */ +#if (defined(WIN32) || defined(_WIN32)) && !defined(CURL_STATICLIB) +#if defined(BUILDING_LIBCURL) +#define CURL_EXTERN __declspec(dllexport) +#else +#define CURL_EXTERN __declspec(dllimport) +#endif +#else + +#ifdef CURL_HIDDEN_SYMBOLS +/* + * This definition is used to make external definitions visibile in the + * shared library when symbols are hidden by default. It makes no + * difference when compiling applications whether this is set or not, + * only when compiling the library. + */ +#define CURL_EXTERN CURL_EXTERN_SYMBOL +#else +#define CURL_EXTERN +#endif +#endif + +/* + * We want the typedef curl_off_t setup for large file support on all + * platforms. We also provide a CURL_FORMAT_OFF_T define to use in *printf + * format strings when outputting a variable of type curl_off_t. + * + * Note: "pocc -Ze" is MSVC compatibily mode and this sets _MSC_VER! + */ + +#if (defined(_MSC_VER) && !defined(__POCC__)) || (defined(__LCC__) && defined(WIN32)) +/* MSVC */ +#ifdef _WIN32_WCE + typedef long curl_off_t; +#define CURL_FORMAT_OFF_T "%ld" +#else + typedef signed __int64 curl_off_t; +#define CURL_FORMAT_OFF_T "%I64d" +#endif +#else /* (_MSC_VER && !__POCC__) || (__LCC__ && WIN32) */ +#if (defined(__GNUC__) && defined(WIN32)) || defined(__WATCOMC__) +/* gcc on windows or Watcom */ + typedef long long curl_off_t; +#define CURL_FORMAT_OFF_T "%I64d" +#else /* GCC or Watcom on Windows */ +#if defined(__ILEC400__) +/* OS400 C compiler. */ + typedef long long curl_off_t; +#define CURL_FORMAT_OFF_T "%lld" +#else /* OS400 C compiler. */ + +/* "normal" POSIX approach, do note that this does not necessarily mean that + the type is >32 bits, see the SIZEOF_CURL_OFF_T define for that! */ + typedef off_t curl_off_t; + +/* Check a range of defines to detect large file support. On Linux it seems + none of these are set by default, so if you don't explicitly switches on + large file support, this define will be made for "small file" support. */ +#ifndef _FILE_OFFSET_BITS +#define _FILE_OFFSET_BITS 0 /* to prevent warnings in the check below */ +#define UNDEF_FILE_OFFSET_BITS +#endif +#ifndef FILESIZEBITS +#define FILESIZEBITS 0 /* to prevent warnings in the check below */ +#define UNDEF_FILESIZEBITS +#endif + +#if defined(_LARGE_FILES) || (_FILE_OFFSET_BITS > 32) || (FILESIZEBITS > 32) \ + || defined(_LARGEFILE_SOURCE) || defined(_LARGEFILE64_SOURCE) + /* For now, we assume at least one of these to be set for large files to + work! */ +#define CURL_FORMAT_OFF_T "%lld" +#else /* LARGE_FILE support */ +#define CURL_FORMAT_OFF_T "%ld" +#endif +#endif /* OS400 C compiler. */ +#endif /* GCC or Watcom on Windows */ +#endif /* (_MSC_VER && !__POCC__) || (__LCC__ && WIN32) */ + +#ifdef UNDEF_FILE_OFFSET_BITS +/* this was defined above for our checks, undefine it again */ +#undef _FILE_OFFSET_BITS +#endif + +#ifdef UNDEF_FILESIZEBITS +/* this was defined above for our checks, undefine it again */ +#undef FILESIZEBITS +#endif + +#if defined(_WIN32) && !defined(WIN32) +/* Chris Lewis mentioned that he doesn't get WIN32 defined, only _WIN32 so we + make this adjustment to catch this. */ +#define WIN32 1 +#endif + +#if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__GNUC__) && \ + !defined(__CYGWIN__) || defined(__MINGW32__) +#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H)) +/* The check above prevents the winsock2 inclusion if winsock.h already was + included, since they can't co-exist without problems */ +#include +#endif +#else + +/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish + libc5-based Linux systems. Only include it on system that are known to + require it! */ +#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || defined(__minix) +#include +#endif + +#ifndef _WIN32_WCE +#include +#endif +#ifndef __WATCOMC__ +#include +#endif +#include +#endif + +#ifndef curl_socket_typedef +/* socket typedef */ +#ifdef WIN32 +typedef SOCKET curl_socket_t; +#define CURL_SOCKET_BAD INVALID_SOCKET +#else +typedef int curl_socket_t; +#define CURL_SOCKET_BAD -1 +#endif +#define curl_socket_typedef +#endif /* curl_socket_typedef */ + +struct curl_httppost { + struct curl_httppost *next; /* next entry in the list */ + char *name; /* pointer to allocated name */ + long namelength; /* length of name length */ + char *contents; /* pointer to allocated data contents */ + long contentslength; /* length of contents field */ + char *buffer; /* pointer to allocated buffer contents */ + long bufferlength; /* length of buffer field */ + char *contenttype; /* Content-Type */ + struct curl_slist* contentheader; /* list of extra headers for this form */ + struct curl_httppost *more; /* if one field name has more than one + file, this link should link to following + files */ + long flags; /* as defined below */ +#define HTTPPOST_FILENAME (1<<0) /* specified content is a file name */ +#define HTTPPOST_READFILE (1<<1) /* specified content is a file name */ +#define HTTPPOST_PTRNAME (1<<2) /* name is only stored pointer + do not free in formfree */ +#define HTTPPOST_PTRCONTENTS (1<<3) /* contents is only stored pointer + do not free in formfree */ +#define HTTPPOST_BUFFER (1<<4) /* upload file from buffer */ +#define HTTPPOST_PTRBUFFER (1<<5) /* upload file from pointer contents */ + + char *showfilename; /* The file name to show. If not set, the + actual file name will be used (if this + is a file part) */ +}; + +typedef int (*curl_progress_callback)(void *clientp, + double dltotal, + double dlnow, + double ultotal, + double ulnow); + +#ifndef CURL_MAX_WRITE_SIZE + /* Tests have proven that 20K is a very bad buffer size for uploads on + Windows, while 16K for some odd reason performed a lot better. + We do the ifndef check to allow this value to easier be changed at build + time for those who feel adventurous. */ +#define CURL_MAX_WRITE_SIZE 16384 +#endif + +typedef size_t (*curl_write_callback)(char *buffer, + size_t size, + size_t nitems, + void *outstream); + +/* This is a return code for the read callback that, when returned, will + signal libcurl to immediately abort the current transfer. */ +#define CURL_READFUNC_ABORT 0x10000000 +typedef size_t (*curl_read_callback)(char *buffer, + size_t size, + size_t nitems, + void *instream); + +typedef enum { + CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */ + CURLSOCKTYPE_LAST /* never use */ +} curlsocktype; + +typedef int (*curl_sockopt_callback)(void *clientp, + curl_socket_t curlfd, + curlsocktype purpose); + +#ifndef CURL_NO_OLDIES + /* not used since 7.10.8, will be removed in a future release */ +typedef int (*curl_passwd_callback)(void *clientp, + const char *prompt, + char *buffer, + int buflen); +#endif + +typedef enum { + CURLIOE_OK, /* I/O operation successful */ + CURLIOE_UNKNOWNCMD, /* command was unknown to callback */ + CURLIOE_FAILRESTART, /* failed to restart the read */ + CURLIOE_LAST /* never use */ +} curlioerr; + +typedef enum { + CURLIOCMD_NOP, /* no operation */ + CURLIOCMD_RESTARTREAD, /* restart the read stream from start */ + CURLIOCMD_LAST /* never use */ +} curliocmd; + +typedef curlioerr (*curl_ioctl_callback)(CURL *handle, + int cmd, + void *clientp); + +/* + * The following typedef's are signatures of malloc, free, realloc, strdup and + * calloc respectively. Function pointers of these types can be passed to the + * curl_global_init_mem() function to set user defined memory management + * callback routines. + */ +typedef void *(*curl_malloc_callback)(size_t size); +typedef void (*curl_free_callback)(void *ptr); +typedef void *(*curl_realloc_callback)(void *ptr, size_t size); +typedef char *(*curl_strdup_callback)(const char *str); +typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size); + +/* the kind of data that is passed to information_callback*/ +typedef enum { + CURLINFO_TEXT = 0, + CURLINFO_HEADER_IN, /* 1 */ + CURLINFO_HEADER_OUT, /* 2 */ + CURLINFO_DATA_IN, /* 3 */ + CURLINFO_DATA_OUT, /* 4 */ + CURLINFO_SSL_DATA_IN, /* 5 */ + CURLINFO_SSL_DATA_OUT, /* 6 */ + CURLINFO_END +} curl_infotype; + +typedef int (*curl_debug_callback) + (CURL *handle, /* the handle/transfer this concerns */ + curl_infotype type, /* what kind of data */ + char *data, /* points to the data */ + size_t size, /* size of the data pointed to */ + void *userptr); /* whatever the user please */ + +/* All possible error codes from all sorts of curl functions. Future versions + may return other values, stay prepared. + + Always add new return codes last. Never *EVER* remove any. The return + codes must remain the same! + */ + +typedef enum { + CURLE_OK = 0, + CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ + CURLE_FAILED_INIT, /* 2 */ + CURLE_URL_MALFORMAT, /* 3 */ + CURLE_OBSOLETE4, /* 4 - NOT USED */ + CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ + CURLE_COULDNT_RESOLVE_HOST, /* 6 */ + CURLE_COULDNT_CONNECT, /* 7 */ + CURLE_FTP_WEIRD_SERVER_REPLY, /* 8 */ + CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server + due to lack of access - when login fails + this is not returned. */ + CURLE_OBSOLETE10, /* 10 - NOT USED */ + CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ + CURLE_OBSOLETE12, /* 12 - NOT USED */ + CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ + CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ + CURLE_FTP_CANT_GET_HOST, /* 15 */ + CURLE_OBSOLETE16, /* 16 - NOT USED */ + CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ + CURLE_PARTIAL_FILE, /* 18 */ + CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ + CURLE_OBSOLETE20, /* 20 - NOT USED */ + CURLE_QUOTE_ERROR, /* 21 - quote command failure */ + CURLE_HTTP_RETURNED_ERROR, /* 22 */ + CURLE_WRITE_ERROR, /* 23 */ + CURLE_OBSOLETE24, /* 24 - NOT USED */ + CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ + CURLE_READ_ERROR, /* 26 - could open/read from file */ + CURLE_OUT_OF_MEMORY, /* 27 */ + /* Note: CURLE_OUT_OF_MEMORY may sometimes indicate a conversion error + instead of a memory allocation error if CURL_DOES_CONVERSIONS + is defined + */ + CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ + CURLE_OBSOLETE29, /* 29 - NOT USED */ + CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ + CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ + CURLE_OBSOLETE32, /* 32 - NOT USED */ + CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */ + CURLE_HTTP_POST_ERROR, /* 34 */ + CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ + CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */ + CURLE_FILE_COULDNT_READ_FILE, /* 37 */ + CURLE_LDAP_CANNOT_BIND, /* 38 */ + CURLE_LDAP_SEARCH_FAILED, /* 39 */ + CURLE_OBSOLETE40, /* 40 - NOT USED */ + CURLE_FUNCTION_NOT_FOUND, /* 41 */ + CURLE_ABORTED_BY_CALLBACK, /* 42 */ + CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ + CURLE_OBSOLETE44, /* 44 - NOT USED */ + CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ + CURLE_OBSOLETE46, /* 46 - NOT USED */ + CURLE_TOO_MANY_REDIRECTS , /* 47 - catch endless re-direct loops */ + CURLE_UNKNOWN_TELNET_OPTION, /* 48 - User specified an unknown option */ + CURLE_TELNET_OPTION_SYNTAX , /* 49 - Malformed telnet option */ + CURLE_OBSOLETE50, /* 50 - NOT USED */ + CURLE_SSL_PEER_CERTIFICATE, /* 51 - peer's certificate wasn't ok */ + CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ + CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ + CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as + default */ + CURLE_SEND_ERROR, /* 55 - failed sending network data */ + CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ + CURLE_OBSOLETE57, /* 57 - NOT IN USE */ + CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ + CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */ + CURLE_SSL_CACERT, /* 60 - problem with the CA cert (path?) */ + CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized transfer encoding */ + CURLE_LDAP_INVALID_URL, /* 62 - Invalid LDAP URL */ + CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ + CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ + CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind + that failed */ + CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ + CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not + accepted and we failed to login */ + CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ + CURLE_TFTP_PERM, /* 69 - permission problem on server */ + CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ + CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ + CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ + CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ + CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ + CURLE_CONV_FAILED, /* 75 - conversion failed */ + CURLE_CONV_REQD, /* 76 - caller must register conversion + callbacks using curl_easy_setopt options + CURLOPT_CONV_FROM_NETWORK_FUNCTION, + CURLOPT_CONV_TO_NETWORK_FUNCTION, and + CURLOPT_CONV_FROM_UTF8_FUNCTION */ + CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing + or wrong format */ + CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ + CURLE_SSH, /* 79 - error from the SSH layer, somewhat + generic so the error message will be of + interest when this has happened */ + + CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL + connection */ + CURL_LAST /* never use! */ +} CURLcode; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ +/* These are scheduled to disappear by 2009 */ + +/* The following were added in 7.17.0 */ +#define CURLE_OBSOLETE CURLE_OBSOLETE50 /* noone should be using this! */ +#define CURLE_BAD_PASSWORD_ENTERED CURLE_OBSOLETE46 +#define CURLE_BAD_CALLING_ORDER CURLE_OBSOLETE44 +#define CURLE_FTP_USER_PASSWORD_INCORRECT CURLE_OBSOLETE10 +#define CURLE_FTP_CANT_RECONNECT CURLE_OBSOLETE16 +#define CURLE_FTP_COULDNT_GET_SIZE CURLE_OBSOLETE32 +#define CURLE_FTP_COULDNT_SET_ASCII CURLE_OBSOLETE29 +#define CURLE_FTP_WEIRD_USER_REPLY CURLE_OBSOLETE12 +#define CURLE_FTP_WRITE_ERROR CURLE_OBSOLETE20 +#define CURLE_LIBRARY_NOT_FOUND CURLE_OBSOLETE40 +#define CURLE_MALFORMAT_USER CURLE_OBSOLETE24 +#define CURLE_SHARE_IN_USE CURLE_OBSOLETE57 +#define CURLE_URL_MALFORMAT_USER CURLE_OBSOLETE4 + +#define CURLE_FTP_ACCESS_DENIED CURLE_REMOTE_ACCESS_DENIED +#define CURLE_FTP_COULDNT_SET_BINARY CURLE_FTP_COULDNT_SET_TYPE +#define CURLE_FTP_QUOTE_ERROR CURLE_QUOTE_ERROR +#define CURLE_TFTP_DISKFULL CURLE_REMOTE_DISK_FULL +#define CURLE_TFTP_EXISTS CURLE_REMOTE_FILE_EXISTS +#define CURLE_HTTP_RANGE_ERROR CURLE_RANGE_ERROR +#define CURLE_FTP_SSL_FAILED CURLE_USE_SSL_FAILED + +/* The following were added earlier */ + +#define CURLE_OPERATION_TIMEOUTED CURLE_OPERATION_TIMEDOUT + +#define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR +#define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED +#define CURLE_FTP_COULDNT_STOR_FILE CURLE_UPLOAD_FAILED + +#define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE +#define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME + +/* This was the error code 50 in 7.7.3 and a few earlier versions, this + is no longer used by libcurl but is instead #defined here only to not + make programs break */ +#define CURLE_ALREADY_COMPLETE 99999 + +#endif /*!CURL_NO_OLDIES*/ + +/* This prototype applies to all conversion callbacks */ +typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length); + +typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl, /* easy handle */ + void *ssl_ctx, /* actually an + OpenSSL SSL_CTX */ + void *userptr); + +typedef enum { + CURLPROXY_HTTP = 0, + CURLPROXY_SOCKS4 = 4, + CURLPROXY_SOCKS5 = 5 +} curl_proxytype; + +#define CURLAUTH_NONE 0 /* nothing */ +#define CURLAUTH_BASIC (1<<0) /* Basic (default) */ +#define CURLAUTH_DIGEST (1<<1) /* Digest */ +#define CURLAUTH_GSSNEGOTIATE (1<<2) /* GSS-Negotiate */ +#define CURLAUTH_NTLM (1<<3) /* NTLM */ +#define CURLAUTH_ANY ~0 /* all types set */ +#define CURLAUTH_ANYSAFE (~CURLAUTH_BASIC) + +#define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */ +#define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */ +#define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */ +#define CURLSSH_AUTH_PASSWORD (1<<1) /* password */ +#define CURLSSH_AUTH_HOST (1<<2) /* host key files */ +#define CURLSSH_AUTH_KEYBOARD (1<<3) /* keyboard interactive */ +#define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY + +#define CURL_ERROR_SIZE 256 + +/* parameter for the CURLOPT_USE_SSL option */ +typedef enum { + CURLUSESSL_NONE, /* do not attempt to use SSL */ + CURLUSESSL_TRY, /* try using SSL, proceed anyway otherwise */ + CURLUSESSL_CONTROL, /* SSL for the control connection or fail */ + CURLUSESSL_ALL, /* SSL for all communication or fail */ + CURLUSESSL_LAST /* not an option, never use */ +} curl_usessl; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ +/* These are scheduled to disappear by 2009 */ + +#define CURLFTPSSL_NONE CURLUSESSL_NONE +#define CURLFTPSSL_TRY CURLUSESSL_TRY +#define CURLFTPSSL_CONTROL CURLUSESSL_CONTROL +#define CURLFTPSSL_ALL CURLUSESSL_ALL +#define CURLFTPSSL_LAST CURLUSESSL_LAST +#define curl_ftpssl curl_usessl +#endif /*!CURL_NO_OLDIES*/ + +/* parameter for the CURLOPT_FTP_SSL_CCC option */ +typedef enum { + CURLFTPSSL_CCC_NONE, /* do not send CCC */ + CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */ + CURLFTPSSL_CCC_ACTIVE, /* Initiate the shutdown */ + CURLFTPSSL_CCC_LAST /* not an option, never use */ +} curl_ftpccc; + +/* parameter for the CURLOPT_FTPSSLAUTH option */ +typedef enum { + CURLFTPAUTH_DEFAULT, /* let libcurl decide */ + CURLFTPAUTH_SSL, /* use "AUTH SSL" */ + CURLFTPAUTH_TLS, /* use "AUTH TLS" */ + CURLFTPAUTH_LAST /* not an option, never use */ +} curl_ftpauth; + +/* parameter for the CURLOPT_FTP_FILEMETHOD option */ +typedef enum { + CURLFTPMETHOD_DEFAULT, /* let libcurl pick */ + CURLFTPMETHOD_MULTICWD, /* single CWD operation for each path part */ + CURLFTPMETHOD_NOCWD, /* no CWD at all */ + CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */ + CURLFTPMETHOD_LAST /* not an option, never use */ +} curl_ftpmethod; + +/* long may be 32 or 64 bits, but we should never depend on anything else + but 32 */ +#define CURLOPTTYPE_LONG 0 +#define CURLOPTTYPE_OBJECTPOINT 10000 +#define CURLOPTTYPE_FUNCTIONPOINT 20000 +#define CURLOPTTYPE_OFF_T 30000 + +/* name is uppercase CURLOPT_, + type is one of the defined CURLOPTTYPE_ + number is unique identifier */ +#ifdef CINIT +#undef CINIT +#endif +/* + * Figure out if we can use the ## operator, which is supported by ISO/ANSI C + * and C++. Some compilers support it without setting __STDC__ or __cplusplus + * so we need to carefully check for them too. We don't use configure-checks + * for these since we want these headers to remain generic and working for all + * platforms. + */ +#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \ + defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \ + defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \ + defined(__ILEC400__) + /* This compiler is believed to have an ISO compatible preprocessor */ +#define CURL_ISOCPP +#else + /* This compiler is believed NOT to have an ISO compatible preprocessor */ +#undef CURL_ISOCPP +#endif + +#ifdef CURL_ISOCPP +#define CINIT(name,type,number) CURLOPT_ ## name = CURLOPTTYPE_ ## type + number +#else +/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */ +#define LONG CURLOPTTYPE_LONG +#define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT +#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT +#define OFF_T CURLOPTTYPE_OFF_T +#define CINIT(name,type,number) CURLOPT_/**/name = type + number +#endif + +/* + * This macro-mania below setups the CURLOPT_[what] enum, to be used with + * curl_easy_setopt(). The first argument in the CINIT() macro is the [what] + * word. + */ + +typedef enum { + /* This is the FILE * or void * the regular output should be written to. */ + CINIT(FILE, OBJECTPOINT, 1), + + /* The full URL to get/put */ + CINIT(URL, OBJECTPOINT, 2), + + /* Port number to connect to, if other than default. */ + CINIT(PORT, LONG, 3), + + /* Name of proxy to use. */ + CINIT(PROXY, OBJECTPOINT, 4), + + /* "name:password" to use when fetching. */ + CINIT(USERPWD, OBJECTPOINT, 5), + + /* "name:password" to use with proxy. */ + CINIT(PROXYUSERPWD, OBJECTPOINT, 6), + + /* Range to get, specified as an ASCII string. */ + CINIT(RANGE, OBJECTPOINT, 7), + + /* not used */ + + /* Specified file stream to upload from (use as input): */ + CINIT(INFILE, OBJECTPOINT, 9), + + /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE + * bytes big. If this is not used, error messages go to stderr instead: */ + CINIT(ERRORBUFFER, OBJECTPOINT, 10), + + /* Function that will be called to store the output (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CINIT(WRITEFUNCTION, FUNCTIONPOINT, 11), + + /* Function that will be called to read the input (instead of fread). The + * parameters will use fread() syntax, make sure to follow them. */ + CINIT(READFUNCTION, FUNCTIONPOINT, 12), + + /* Time-out the read operation after this amount of seconds */ + CINIT(TIMEOUT, LONG, 13), + + /* If the CURLOPT_INFILE is used, this can be used to inform libcurl about + * how large the file being sent really is. That allows better error + * checking and better verifies that the upload was succcessful. -1 means + * unknown size. + * + * For large file support, there is also a _LARGE version of the key + * which takes an off_t type, allowing platforms with larger off_t + * sizes to handle larger files. See below for INFILESIZE_LARGE. + */ + CINIT(INFILESIZE, LONG, 14), + + /* POST input fields. */ + CINIT(POSTFIELDS, OBJECTPOINT, 15), + + /* Set the referer page (needed by some CGIs) */ + CINIT(REFERER, OBJECTPOINT, 16), + + /* Set the FTP PORT string (interface name, named or numerical IP address) + Use i.e '-' to use default address. */ + CINIT(FTPPORT, OBJECTPOINT, 17), + + /* Set the User-Agent string (examined by some CGIs) */ + CINIT(USERAGENT, OBJECTPOINT, 18), + + /* If the download receives less than "low speed limit" bytes/second + * during "low speed time" seconds, the operations is aborted. + * You could i.e if you have a pretty high speed connection, abort if + * it is less than 2000 bytes/sec during 20 seconds. + */ + + /* Set the "low speed limit" */ + CINIT(LOW_SPEED_LIMIT, LONG, 19), + + /* Set the "low speed time" */ + CINIT(LOW_SPEED_TIME, LONG, 20), + + /* Set the continuation offset. + * + * Note there is also a _LARGE version of this key which uses + * off_t types, allowing for large file offsets on platforms which + * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. + */ + CINIT(RESUME_FROM, LONG, 21), + + /* Set cookie in request: */ + CINIT(COOKIE, OBJECTPOINT, 22), + + /* This points to a linked list of headers, struct curl_slist kind */ + CINIT(HTTPHEADER, OBJECTPOINT, 23), + + /* This points to a linked list of post entries, struct HttpPost */ + CINIT(HTTPPOST, OBJECTPOINT, 24), + + /* name of the file keeping your private SSL-certificate */ + CINIT(SSLCERT, OBJECTPOINT, 25), + + /* password for the SSL or SSH private key */ + CINIT(KEYPASSWD, OBJECTPOINT, 26), + + /* send TYPE parameter? */ + CINIT(CRLF, LONG, 27), + + /* send linked-list of QUOTE commands */ + CINIT(QUOTE, OBJECTPOINT, 28), + + /* send FILE * or void * to store headers to, if you use a callback it + is simply passed to the callback unmodified */ + CINIT(WRITEHEADER, OBJECTPOINT, 29), + + /* point to a file to read the initial cookies from, also enables + "cookie awareness" */ + CINIT(COOKIEFILE, OBJECTPOINT, 31), + + /* What version to specifly try to use. + See CURL_SSLVERSION defines below. */ + CINIT(SSLVERSION, LONG, 32), + + /* What kind of HTTP time condition to use, see defines */ + CINIT(TIMECONDITION, LONG, 33), + + /* Time to use with the above condition. Specified in number of seconds + since 1 Jan 1970 */ + CINIT(TIMEVALUE, LONG, 34), + + /* 35 = OBSOLETE */ + + /* Custom request, for customizing the get command like + HTTP: DELETE, TRACE and others + FTP: to use a different list command + */ + CINIT(CUSTOMREQUEST, OBJECTPOINT, 36), + + /* HTTP request, for odd commands like DELETE, TRACE and others */ + CINIT(STDERR, OBJECTPOINT, 37), + + /* 38 is not used */ + + /* send linked-list of post-transfer QUOTE commands */ + CINIT(POSTQUOTE, OBJECTPOINT, 39), + + /* Pass a pointer to string of the output using full variable-replacement + as described elsewhere. */ + CINIT(WRITEINFO, OBJECTPOINT, 40), + + CINIT(VERBOSE, LONG, 41), /* talk a lot */ + CINIT(HEADER, LONG, 42), /* throw the header out too */ + CINIT(NOPROGRESS, LONG, 43), /* shut off the progress meter */ + CINIT(NOBODY, LONG, 44), /* use HEAD to get http document */ + CINIT(FAILONERROR, LONG, 45), /* no output on http error codes >= 300 */ + CINIT(UPLOAD, LONG, 46), /* this is an upload */ + CINIT(POST, LONG, 47), /* HTTP POST method */ + CINIT(DIRLISTONLY, LONG, 48), /* return bare names when listing directories */ + + CINIT(APPEND, LONG, 50), /* Append instead of overwrite on upload! */ + + /* Specify whether to read the user+password from the .netrc or the URL. + * This must be one of the CURL_NETRC_* enums below. */ + CINIT(NETRC, LONG, 51), + + CINIT(FOLLOWLOCATION, LONG, 52), /* use Location: Luke! */ + + CINIT(TRANSFERTEXT, LONG, 53), /* transfer data in text/ASCII format */ + CINIT(PUT, LONG, 54), /* HTTP PUT */ + + /* 55 = OBSOLETE */ + + /* Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_progress_callback + * prototype defines. */ + CINIT(PROGRESSFUNCTION, FUNCTIONPOINT, 56), + + /* Data passed to the progress callback */ + CINIT(PROGRESSDATA, OBJECTPOINT, 57), + + /* We want the referer field set automatically when following locations */ + CINIT(AUTOREFERER, LONG, 58), + + /* Port of the proxy, can be set in the proxy string as well with: + "[host]:[port]" */ + CINIT(PROXYPORT, LONG, 59), + + /* size of the POST input data, if strlen() is not good to use */ + CINIT(POSTFIELDSIZE, LONG, 60), + + /* tunnel non-http operations through a HTTP proxy */ + CINIT(HTTPPROXYTUNNEL, LONG, 61), + + /* Set the interface string to use as outgoing network interface */ + CINIT(INTERFACE, OBJECTPOINT, 62), + + /* Set the krb4/5 security level, this also enables krb4/5 awareness. This + * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string + * is set but doesn't match one of these, 'private' will be used. */ + CINIT(KRBLEVEL, OBJECTPOINT, 63), + + /* Set if we should verify the peer in ssl handshake, set 1 to verify. */ + CINIT(SSL_VERIFYPEER, LONG, 64), + + /* The CApath or CAfile used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CINIT(CAINFO, OBJECTPOINT, 65), + + /* 66 = OBSOLETE */ + /* 67 = OBSOLETE */ + + /* Maximum number of http redirects to follow */ + CINIT(MAXREDIRS, LONG, 68), + + /* Pass a long set to 1 to get the date of the requested document (if + possible)! Pass a zero to shut it off. */ + CINIT(FILETIME, LONG, 69), + + /* This points to a linked list of telnet options */ + CINIT(TELNETOPTIONS, OBJECTPOINT, 70), + + /* Max amount of cached alive connections */ + CINIT(MAXCONNECTS, LONG, 71), + + /* What policy to use when closing connections when the cache is filled + up */ + CINIT(CLOSEPOLICY, LONG, 72), + + /* 73 = OBSOLETE */ + + /* Set to explicitly use a new connection for the upcoming transfer. + Do not use this unless you're absolutely sure of this, as it makes the + operation slower and is less friendly for the network. */ + CINIT(FRESH_CONNECT, LONG, 74), + + /* Set to explicitly forbid the upcoming transfer's connection to be re-used + when done. Do not use this unless you're absolutely sure of this, as it + makes the operation slower and is less friendly for the network. */ + CINIT(FORBID_REUSE, LONG, 75), + + /* Set to a file name that contains random data for libcurl to use to + seed the random engine when doing SSL connects. */ + CINIT(RANDOM_FILE, OBJECTPOINT, 76), + + /* Set to the Entropy Gathering Daemon socket pathname */ + CINIT(EGDSOCKET, OBJECTPOINT, 77), + + /* Time-out connect operations after this amount of seconds, if connects + are OK within this time, then fine... This only aborts the connect + phase. [Only works on unix-style/SIGALRM operating systems] */ + CINIT(CONNECTTIMEOUT, LONG, 78), + + /* Function that will be called to store headers (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79), + + /* Set this to force the HTTP request to get back to GET. Only really usable + if POST, PUT or a custom request have been used first. + */ + CINIT(HTTPGET, LONG, 80), + + /* Set if we should verify the Common name from the peer certificate in ssl + * handshake, set 1 to check existence, 2 to ensure that it matches the + * provided hostname. */ + CINIT(SSL_VERIFYHOST, LONG, 81), + + /* Specify which file name to write all known cookies in after completed + operation. Set file name to "-" (dash) to make it go to stdout. */ + CINIT(COOKIEJAR, OBJECTPOINT, 82), + + /* Specify which SSL ciphers to use */ + CINIT(SSL_CIPHER_LIST, OBJECTPOINT, 83), + + /* Specify which HTTP version to use! This must be set to one of the + CURL_HTTP_VERSION* enums set below. */ + CINIT(HTTP_VERSION, LONG, 84), + + /* Specificly switch on or off the FTP engine's use of the EPSV command. By + default, that one will always be attempted before the more traditional + PASV command. */ + CINIT(FTP_USE_EPSV, LONG, 85), + + /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */ + CINIT(SSLCERTTYPE, OBJECTPOINT, 86), + + /* name of the file keeping your private SSL-key */ + CINIT(SSLKEY, OBJECTPOINT, 87), + + /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */ + CINIT(SSLKEYTYPE, OBJECTPOINT, 88), + + /* crypto engine for the SSL-sub system */ + CINIT(SSLENGINE, OBJECTPOINT, 89), + + /* set the crypto engine for the SSL-sub system as default + the param has no meaning... + */ + CINIT(SSLENGINE_DEFAULT, LONG, 90), + + /* Non-zero value means to use the global dns cache */ + CINIT(DNS_USE_GLOBAL_CACHE, LONG, 91), /* To become OBSOLETE soon */ + + /* DNS cache timeout */ + CINIT(DNS_CACHE_TIMEOUT, LONG, 92), + + /* send linked-list of pre-transfer QUOTE commands (Wesley Laxton)*/ + CINIT(PREQUOTE, OBJECTPOINT, 93), + + /* set the debug function */ + CINIT(DEBUGFUNCTION, FUNCTIONPOINT, 94), + + /* set the data for the debug function */ + CINIT(DEBUGDATA, OBJECTPOINT, 95), + + /* mark this as start of a cookie session */ + CINIT(COOKIESESSION, LONG, 96), + + /* The CApath directory used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CINIT(CAPATH, OBJECTPOINT, 97), + + /* Instruct libcurl to use a smaller receive buffer */ + CINIT(BUFFERSIZE, LONG, 98), + + /* Instruct libcurl to not use any signal/alarm handlers, even when using + timeouts. This option is useful for multi-threaded applications. + See libcurl-the-guide for more background information. */ + CINIT(NOSIGNAL, LONG, 99), + + /* Provide a CURLShare for mutexing non-ts data */ + CINIT(SHARE, OBJECTPOINT, 100), + + /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default), + CURLPROXY_SOCKS4 and CURLPROXY_SOCKS5. */ + CINIT(PROXYTYPE, LONG, 101), + + /* Set the Accept-Encoding string. Use this to tell a server you would like + the response to be compressed. */ + CINIT(ENCODING, OBJECTPOINT, 102), + + /* Set pointer to private data */ + CINIT(PRIVATE, OBJECTPOINT, 103), + + /* Set aliases for HTTP 200 in the HTTP Response header */ + CINIT(HTTP200ALIASES, OBJECTPOINT, 104), + + /* Continue to send authentication (user+password) when following locations, + even when hostname changed. This can potentionally send off the name + and password to whatever host the server decides. */ + CINIT(UNRESTRICTED_AUTH, LONG, 105), + + /* Specificly switch on or off the FTP engine's use of the EPRT command ( it + also disables the LPRT attempt). By default, those ones will always be + attempted before the good old traditional PORT command. */ + CINIT(FTP_USE_EPRT, LONG, 106), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_USERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CINIT(HTTPAUTH, LONG, 107), + + /* Set the ssl context callback function, currently only for OpenSSL ssl_ctx + in second argument. The function must be matching the + curl_ssl_ctx_callback proto. */ + CINIT(SSL_CTX_FUNCTION, FUNCTIONPOINT, 108), + + /* Set the userdata for the ssl context callback function's third + argument */ + CINIT(SSL_CTX_DATA, OBJECTPOINT, 109), + + /* FTP Option that causes missing dirs to be created on the remote server */ + CINIT(FTP_CREATE_MISSING_DIRS, LONG, 110), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_PROXYUSERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CINIT(PROXYAUTH, LONG, 111), + + /* FTP option that changes the timeout, in seconds, associated with + getting a response. This is different from transfer timeout time and + essentially places a demand on the FTP server to acknowledge commands + in a timely manner. */ + CINIT(FTP_RESPONSE_TIMEOUT, LONG, 112), + + /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to + tell libcurl to resolve names to those IP versions only. This only has + affect on systems with support for more than one, i.e IPv4 _and_ IPv6. */ + CINIT(IPRESOLVE, LONG, 113), + + /* Set this option to limit the size of a file that will be downloaded from + an HTTP or FTP server. + + Note there is also _LARGE version which adds large file support for + platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */ + CINIT(MAXFILESIZE, LONG, 114), + + /* See the comment for INFILESIZE above, but in short, specifies + * the size of the file being uploaded. -1 means unknown. + */ + CINIT(INFILESIZE_LARGE, OFF_T, 115), + + /* Sets the continuation offset. There is also a LONG version of this; + * look above for RESUME_FROM. + */ + CINIT(RESUME_FROM_LARGE, OFF_T, 116), + + /* Sets the maximum size of data that will be downloaded from + * an HTTP or FTP server. See MAXFILESIZE above for the LONG version. + */ + CINIT(MAXFILESIZE_LARGE, OFF_T, 117), + + /* Set this option to the file name of your .netrc file you want libcurl + to parse (using the CURLOPT_NETRC option). If not set, libcurl will do + a poor attempt to find the user's home directory and check for a .netrc + file in there. */ + CINIT(NETRC_FILE, OBJECTPOINT, 118), + + /* Enable SSL/TLS for FTP, pick one of: + CURLFTPSSL_TRY - try using SSL, proceed anyway otherwise + CURLFTPSSL_CONTROL - SSL for the control connection or fail + CURLFTPSSL_ALL - SSL for all communication or fail + */ + CINIT(USE_SSL, LONG, 119), + + /* The _LARGE version of the standard POSTFIELDSIZE option */ + CINIT(POSTFIELDSIZE_LARGE, OFF_T, 120), + + /* Enable/disable the TCP Nagle algorithm */ + CINIT(TCP_NODELAY, LONG, 121), + + /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 123 OBSOLETE. Gone in 7.16.0 */ + /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 127 OBSOLETE. Gone in 7.16.0 */ + /* 128 OBSOLETE. Gone in 7.16.0 */ + + /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option + can be used to change libcurl's default action which is to first try + "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK + response has been received. + + Available parameters are: + CURLFTPAUTH_DEFAULT - let libcurl decide + CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS + CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL + */ + CINIT(FTPSSLAUTH, LONG, 129), + + CINIT(IOCTLFUNCTION, FUNCTIONPOINT, 130), + CINIT(IOCTLDATA, OBJECTPOINT, 131), + + /* 132 OBSOLETE. Gone in 7.16.0 */ + /* 133 OBSOLETE. Gone in 7.16.0 */ + + /* zero terminated string for pass on to the FTP server when asked for + "account" info */ + CINIT(FTP_ACCOUNT, OBJECTPOINT, 134), + + /* feed cookies into cookie engine */ + CINIT(COOKIELIST, OBJECTPOINT, 135), + + /* ignore Content-Length */ + CINIT(IGNORE_CONTENT_LENGTH, LONG, 136), + + /* Set to non-zero to skip the IP address received in a 227 PASV FTP server + response. Typically used for FTP-SSL purposes but is not restricted to + that. libcurl will then instead use the same IP address it used for the + control connection. */ + CINIT(FTP_SKIP_PASV_IP, LONG, 137), + + /* Select "file method" to use when doing FTP, see the curl_ftpmethod + above. */ + CINIT(FTP_FILEMETHOD, LONG, 138), + + /* Local port number to bind the socket to */ + CINIT(LOCALPORT, LONG, 139), + + /* Number of ports to try, including the first one set with LOCALPORT. + Thus, setting it to 1 will make no additional attempts but the first. + */ + CINIT(LOCALPORTRANGE, LONG, 140), + + /* no transfer, set up connection and let application use the socket by + extracting it with CURLINFO_LASTSOCKET */ + CINIT(CONNECT_ONLY, LONG, 141), + + /* Function that will be called to convert from the + network encoding (instead of using the iconv calls in libcurl) */ + CINIT(CONV_FROM_NETWORK_FUNCTION, FUNCTIONPOINT, 142), + + /* Function that will be called to convert to the + network encoding (instead of using the iconv calls in libcurl) */ + CINIT(CONV_TO_NETWORK_FUNCTION, FUNCTIONPOINT, 143), + + /* Function that will be called to convert from UTF8 + (instead of using the iconv calls in libcurl) + Note that this is used only for SSL certificate processing */ + CINIT(CONV_FROM_UTF8_FUNCTION, FUNCTIONPOINT, 144), + + /* if the connection proceeds too quickly then need to slow it down */ + /* limit-rate: maximum number of bytes per second to send or receive */ + CINIT(MAX_SEND_SPEED_LARGE, OFF_T, 145), + CINIT(MAX_RECV_SPEED_LARGE, OFF_T, 146), + + /* Pointer to command string to send if USER/PASS fails. */ + CINIT(FTP_ALTERNATIVE_TO_USER, OBJECTPOINT, 147), + + /* callback function for setting socket options */ + CINIT(SOCKOPTFUNCTION, FUNCTIONPOINT, 148), + CINIT(SOCKOPTDATA, OBJECTPOINT, 149), + + /* set to 0 to disable session ID re-use for this transfer, default is + enabled (== 1) */ + CINIT(SSL_SESSIONID_CACHE, LONG, 150), + + /* allowed SSH authentication methods */ + CINIT(SSH_AUTH_TYPES, LONG, 151), + + /* Used by scp/sftp to do public/private key authentication */ + CINIT(SSH_PUBLIC_KEYFILE, OBJECTPOINT, 152), + CINIT(SSH_PRIVATE_KEYFILE, OBJECTPOINT, 153), + + /* Send CCC (Clear Command Channel) after authentication */ + CINIT(FTP_SSL_CCC, LONG, 154), + + /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */ + CINIT(TIMEOUT_MS, LONG, 155), + CINIT(CONNECTTIMEOUT_MS, LONG, 156), + + /* set to zero to disable the libcurl's decoding and thus pass the raw body + data to the appliction even when it is encoded/compressed */ + CINIT(HTTP_TRANSFER_DECODING, LONG, 157), + CINIT(HTTP_CONTENT_DECODING, LONG, 158), + + /* Permission used when creating new files and directories on the remote + server for protocols that support it, SFTP/SCP/FILE */ + CINIT(NEW_FILE_PERMS, LONG, 159), + CINIT(NEW_DIRECTORY_PERMS, LONG, 160), + + CURLOPT_LASTENTRY /* the last unused */ +} CURLoption; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ +/* These are scheduled to disappear by 2009 */ + +/* The following were added in 7.17.0 */ +#define CURLOPT_SSLKEYPASSWD CURLOPT_KEYPASSWD +#define CURLOPT_FTPAPPEND CURLOPT_APPEND +#define CURLOPT_FTPLISTONLY CURLOPT_DIRLISTONLY +#define CURLOPT_FTP_SSL CURLOPT_USE_SSL + +/* The following were added earlier */ + +#define CURLOPT_SSLCERTPASSWD CURLOPT_KEYPASSWD +#define CURLOPT_KRB4LEVEL CURLOPT_KRBLEVEL + +#else +/* This is set if CURL_NO_OLDIES is defined at compile-time */ +#undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */ +#endif + + + /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host + name resolves addresses using more than one IP protocol version, this + option might be handy to force libcurl to use a specific IP version. */ +#define CURL_IPRESOLVE_WHATEVER 0 /* default, resolves addresses to all IP + versions that your system allows */ +#define CURL_IPRESOLVE_V4 1 /* resolve to ipv4 addresses */ +#define CURL_IPRESOLVE_V6 2 /* resolve to ipv6 addresses */ + + /* three convenient "aliases" that follow the name scheme better */ +#define CURLOPT_WRITEDATA CURLOPT_FILE +#define CURLOPT_READDATA CURLOPT_INFILE +#define CURLOPT_HEADERDATA CURLOPT_WRITEHEADER + + /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ +enum { + CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd + like the library to choose the best possible + for us! */ + CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ + CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ + + CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */ +}; + + /* These enums are for use with the CURLOPT_NETRC option. */ +enum CURL_NETRC_OPTION { + CURL_NETRC_IGNORED, /* The .netrc will never be read. + * This is the default. */ + CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred + * to one in the .netrc. */ + CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored. + * Unless one is set programmatically, the .netrc + * will be queried. */ + CURL_NETRC_LAST +}; + +enum { + CURL_SSLVERSION_DEFAULT, + CURL_SSLVERSION_TLSv1, + CURL_SSLVERSION_SSLv2, + CURL_SSLVERSION_SSLv3, + + CURL_SSLVERSION_LAST /* never use, keep last */ +}; + + +typedef enum { + CURL_TIMECOND_NONE, + + CURL_TIMECOND_IFMODSINCE, + CURL_TIMECOND_IFUNMODSINCE, + CURL_TIMECOND_LASTMOD, + + CURL_TIMECOND_LAST +} curl_TimeCond; + +#ifdef __BEOS__ +#include +#endif + + +/* curl_strequal() and curl_strnequal() are subject for removal in a future + libcurl, see lib/README.curlx for details */ +CURL_EXTERN int (curl_strequal)(const char *s1, const char *s2); +CURL_EXTERN int (curl_strnequal)(const char *s1, const char *s2, size_t n); + +/* name is uppercase CURLFORM_ */ +#ifdef CFINIT +#undef CFINIT +#endif + +#ifdef CURL_ISOCPP +#define CFINIT(name) CURLFORM_ ## name +#else +/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */ +#define CFINIT(name) CURLFORM_/**/name +#endif + +typedef enum { + CFINIT(NOTHING), /********* the first one is unused ************/ + + /* */ + CFINIT(COPYNAME), + CFINIT(PTRNAME), + CFINIT(NAMELENGTH), + CFINIT(COPYCONTENTS), + CFINIT(PTRCONTENTS), + CFINIT(CONTENTSLENGTH), + CFINIT(FILECONTENT), + CFINIT(ARRAY), + CFINIT(OBSOLETE), + CFINIT(FILE), + + CFINIT(BUFFER), + CFINIT(BUFFERPTR), + CFINIT(BUFFERLENGTH), + + CFINIT(CONTENTTYPE), + CFINIT(CONTENTHEADER), + CFINIT(FILENAME), + CFINIT(END), + CFINIT(OBSOLETE2), + + CURLFORM_LASTENTRY /* the last unusued */ +} CURLformoption; + +#undef CFINIT /* done */ + +/* structure to be used as parameter for CURLFORM_ARRAY */ +struct curl_forms { + CURLformoption option; + const char *value; +}; + +/* use this for multipart formpost building */ +/* Returns code for curl_formadd() + * + * Returns: + * CURL_FORMADD_OK on success + * CURL_FORMADD_MEMORY if the FormInfo allocation fails + * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form + * CURL_FORMADD_NULL if a null pointer was given for a char + * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed + * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used + * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error) + * CURL_FORMADD_MEMORY if a HttpPost struct cannot be allocated + * CURL_FORMADD_MEMORY if some allocation for string copying failed. + * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array + * + ***************************************************************************/ +typedef enum { + CURL_FORMADD_OK, /* first, no error */ + + CURL_FORMADD_MEMORY, + CURL_FORMADD_OPTION_TWICE, + CURL_FORMADD_NULL, + CURL_FORMADD_UNKNOWN_OPTION, + CURL_FORMADD_INCOMPLETE, + CURL_FORMADD_ILLEGAL_ARRAY, + CURL_FORMADD_DISABLED, /* libcurl was built with this disabled */ + + CURL_FORMADD_LAST /* last */ +} CURLFORMcode; + +/* + * NAME curl_formadd() + * + * DESCRIPTION + * + * Pretty advanved function for building multi-part formposts. Each invoke + * adds one part that together construct a full post. Then use + * CURLOPT_HTTPPOST to send it off to libcurl. + */ +CURL_EXTERN CURLFORMcode curl_formadd(struct curl_httppost **httppost, + struct curl_httppost **last_post, + ...); + +/* + * callback function for curl_formget() + * The void *arg pointer will be the one passed as second argument to curl_formget(). + * The character buffer passed to it must not be freed. + * Should return the buffer length passed to it as the argument "len" on success. + */ +typedef size_t (*curl_formget_callback)(void *arg, const char *buf, size_t len); + +/* + * NAME curl_formget() + * + * DESCRIPTION + * + * Serialize a curl_httppost struct built with curl_formadd(). + * Accepts a void pointer as second argument which will be passed to + * the curl_formget_callback function. + * Returns 0 on success. + */ +CURL_EXTERN int curl_formget(struct curl_httppost *form, void *arg, + curl_formget_callback append); +/* + * NAME curl_formfree() + * + * DESCRIPTION + * + * Free a multipart formpost previously built with curl_formadd(). + */ +CURL_EXTERN void curl_formfree(struct curl_httppost *form); + +/* + * NAME curl_getenv() + * + * DESCRIPTION + * + * Returns a malloc()'ed string that MUST be curl_free()ed after usage is + * complete. DEPRECATED - see lib/README.curlx + */ +CURL_EXTERN char *curl_getenv(const char *variable); + +/* + * NAME curl_version() + * + * DESCRIPTION + * + * Returns a static ascii string of the libcurl version. + */ +CURL_EXTERN char *curl_version(void); + +/* + * NAME curl_easy_escape() + * + * DESCRIPTION + * + * Escapes URL strings (converts all letters consider illegal in URLs to their + * %XX versions). This function returns a new allocated string or NULL if an + * error occurred. + */ +CURL_EXTERN char *curl_easy_escape(CURL *handle, + const char *string, + int length); + +/* the previous version: */ +CURL_EXTERN char *curl_escape(const char *string, + int length); + + +/* + * NAME curl_easy_unescape() + * + * DESCRIPTION + * + * Unescapes URL encoding in strings (converts all %XX codes to their 8bit + * versions). This function returns a new allocated string or NULL if an error + * occurred. + * Conversion Note: On non-ASCII platforms the ASCII %XX codes are + * converted into the host encoding. + */ +CURL_EXTERN char *curl_easy_unescape(CURL *handle, + const char *string, + int length, + int *outlength); + +/* the previous version */ +CURL_EXTERN char *curl_unescape(const char *string, + int length); + +/* + * NAME curl_free() + * + * DESCRIPTION + * + * Provided for de-allocation in the same translation unit that did the + * allocation. Added in libcurl 7.10 + */ +CURL_EXTERN void curl_free(void *p); + +/* + * NAME curl_global_init() + * + * DESCRIPTION + * + * curl_global_init() should be invoked exactly once for each application that + * uses libcurl + */ +CURL_EXTERN CURLcode curl_global_init(long flags); + +/* + * NAME curl_global_init_mem() + * + * DESCRIPTION + * + * curl_global_init() or curl_global_init_mem() should be invoked exactly once + * for each application that uses libcurl. This function can be used to + * initialize libcurl and set user defined memory management callback + * functions. Users can implement memory management routines to check for + * memory leaks, check for mis-use of the curl library etc. User registered + * callback routines with be invoked by this library instead of the system + * memory management routines like malloc, free etc. + */ +CURL_EXTERN CURLcode curl_global_init_mem(long flags, + curl_malloc_callback m, + curl_free_callback f, + curl_realloc_callback r, + curl_strdup_callback s, + curl_calloc_callback c); + +/* + * NAME curl_global_cleanup() + * + * DESCRIPTION + * + * curl_global_cleanup() should be invoked exactly once for each application + * that uses libcurl + */ +CURL_EXTERN void curl_global_cleanup(void); + +/* linked-list structure for the CURLOPT_QUOTE option (and other) */ +struct curl_slist { + char *data; + struct curl_slist *next; +}; + +/* + * NAME curl_slist_append() + * + * DESCRIPTION + * + * Appends a string to a linked list. If no list exists, it will be created + * first. Returns the new list, after appending. + */ +CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *, + const char *); + +/* + * NAME curl_slist_free_all() + * + * DESCRIPTION + * + * free a previously built curl_slist. + */ +CURL_EXTERN void curl_slist_free_all(struct curl_slist *); + +/* + * NAME curl_getdate() + * + * DESCRIPTION + * + * Returns the time, in seconds since 1 Jan 1970 of the time string given in + * the first argument. The time argument in the second parameter is unused + * and should be set to NULL. + */ +CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused); + +#define CURLINFO_STRING 0x100000 +#define CURLINFO_LONG 0x200000 +#define CURLINFO_DOUBLE 0x300000 +#define CURLINFO_SLIST 0x400000 +#define CURLINFO_MASK 0x0fffff +#define CURLINFO_TYPEMASK 0xf00000 + +typedef enum { + CURLINFO_NONE, /* first, never use this */ + CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1, + CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2, + CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3, + CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4, + CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5, + CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6, + CURLINFO_SIZE_UPLOAD = CURLINFO_DOUBLE + 7, + CURLINFO_SIZE_DOWNLOAD = CURLINFO_DOUBLE + 8, + CURLINFO_SPEED_DOWNLOAD = CURLINFO_DOUBLE + 9, + CURLINFO_SPEED_UPLOAD = CURLINFO_DOUBLE + 10, + CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11, + CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12, + CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13, + CURLINFO_FILETIME = CURLINFO_LONG + 14, + CURLINFO_CONTENT_LENGTH_DOWNLOAD = CURLINFO_DOUBLE + 15, + CURLINFO_CONTENT_LENGTH_UPLOAD = CURLINFO_DOUBLE + 16, + CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17, + CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18, + CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, + CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, + CURLINFO_PRIVATE = CURLINFO_STRING + 21, + CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22, + CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23, + CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24, + CURLINFO_OS_ERRNO = CURLINFO_LONG + 25, + CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26, + CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27, + CURLINFO_COOKIELIST = CURLINFO_SLIST + 28, + CURLINFO_LASTSOCKET = CURLINFO_LONG + 29, + CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30, + /* Fill in new entries below here! */ + + CURLINFO_LASTONE = 30 +} CURLINFO; + +/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as + CURLINFO_HTTP_CODE */ +#define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE + +typedef enum { + CURLCLOSEPOLICY_NONE, /* first, never use this */ + + CURLCLOSEPOLICY_OLDEST, + CURLCLOSEPOLICY_LEAST_RECENTLY_USED, + CURLCLOSEPOLICY_LEAST_TRAFFIC, + CURLCLOSEPOLICY_SLOWEST, + CURLCLOSEPOLICY_CALLBACK, + + CURLCLOSEPOLICY_LAST /* last, never use this */ +} curl_closepolicy; + +#define CURL_GLOBAL_SSL (1<<0) +#define CURL_GLOBAL_WIN32 (1<<1) +#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) +#define CURL_GLOBAL_NOTHING 0 +#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL + + +/***************************************************************************** + * Setup defines, protos etc for the sharing stuff. + */ + +/* Different data locks for a single share */ +typedef enum { + CURL_LOCK_DATA_NONE = 0, + /* CURL_LOCK_DATA_SHARE is used internaly to say that + * the locking is just made to change the internal state of the share + * itself. + */ + CURL_LOCK_DATA_SHARE, + CURL_LOCK_DATA_COOKIE, + CURL_LOCK_DATA_DNS, + CURL_LOCK_DATA_SSL_SESSION, + CURL_LOCK_DATA_CONNECT, + CURL_LOCK_DATA_LAST +} curl_lock_data; + +/* Different lock access types */ +typedef enum { + CURL_LOCK_ACCESS_NONE = 0, /* unspecified action */ + CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */ + CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */ + CURL_LOCK_ACCESS_LAST /* never use */ +} curl_lock_access; + +typedef void (*curl_lock_function)(CURL *handle, + curl_lock_data data, + curl_lock_access locktype, + void *userptr); +typedef void (*curl_unlock_function)(CURL *handle, + curl_lock_data data, + void *userptr); + +typedef void CURLSH; + +typedef enum { + CURLSHE_OK, /* all is fine */ + CURLSHE_BAD_OPTION, /* 1 */ + CURLSHE_IN_USE, /* 2 */ + CURLSHE_INVALID, /* 3 */ + CURLSHE_NOMEM, /* out of memory */ + CURLSHE_LAST /* never use */ +} CURLSHcode; + +typedef enum { + CURLSHOPT_NONE, /* don't use */ + CURLSHOPT_SHARE, /* specify a data type to share */ + CURLSHOPT_UNSHARE, /* specify shich data type to stop sharing */ + CURLSHOPT_LOCKFUNC, /* pass in a 'curl_lock_function' pointer */ + CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */ + CURLSHOPT_USERDATA, /* pass in a user data pointer used in the lock/unlock + callback functions */ + CURLSHOPT_LAST /* never use */ +} CURLSHoption; + +CURL_EXTERN CURLSH *curl_share_init(void); +CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *, CURLSHoption option, ...); +CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *); + +/**************************************************************************** + * Structures for querying information about the curl library at runtime. + */ + +typedef enum { + CURLVERSION_FIRST, + CURLVERSION_SECOND, + CURLVERSION_THIRD, + CURLVERSION_FOURTH, + CURLVERSION_LAST /* never actually use this */ +} CURLversion; + +/* The 'CURLVERSION_NOW' is the symbolic name meant to be used by + basicly all programs ever, that want to get version information. It is + meant to be a built-in version number for what kind of struct the caller + expects. If the struct ever changes, we redefine the NOW to another enum + from above. */ +#define CURLVERSION_NOW CURLVERSION_FOURTH + +typedef struct { + CURLversion age; /* age of the returned struct */ + const char *version; /* LIBCURL_VERSION */ + unsigned int version_num; /* LIBCURL_VERSION_NUM */ + const char *host; /* OS/host/cpu/machine when configured */ + int features; /* bitmask, see defines below */ + const char *ssl_version; /* human readable string */ + long ssl_version_num; /* not used anymore, always 0 */ + const char *libz_version; /* human readable string */ + /* protocols is terminated by an entry with a NULL protoname */ + const char * const *protocols; + + /* The fields below this were added in CURLVERSION_SECOND */ + const char *ares; + int ares_num; + + /* This field was added in CURLVERSION_THIRD */ + const char *libidn; + + /* These field were added in CURLVERSION_FOURTH */ + + /* Same as '_libiconv_version' if built with HAVE_ICONV */ + int iconv_ver_num; + + const char *libssh_version; /* human readable string */ + +} curl_version_info_data; + +#define CURL_VERSION_IPV6 (1<<0) /* IPv6-enabled */ +#define CURL_VERSION_KERBEROS4 (1<<1) /* kerberos auth is supported */ +#define CURL_VERSION_SSL (1<<2) /* SSL options are present */ +#define CURL_VERSION_LIBZ (1<<3) /* libz features are present */ +#define CURL_VERSION_NTLM (1<<4) /* NTLM auth is supported */ +#define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth support */ +#define CURL_VERSION_DEBUG (1<<6) /* built with debug capabilities */ +#define CURL_VERSION_ASYNCHDNS (1<<7) /* asynchronous dns resolves */ +#define CURL_VERSION_SPNEGO (1<<8) /* SPNEGO auth */ +#define CURL_VERSION_LARGEFILE (1<<9) /* supports files bigger than 2GB */ +#define CURL_VERSION_IDN (1<<10) /* International Domain Names support */ +#define CURL_VERSION_SSPI (1<<11) /* SSPI is supported */ +#define CURL_VERSION_CONV (1<<12) /* character conversions are + supported */ + +/* + * NAME curl_version_info() + * + * DESCRIPTION + * + * This function returns a pointer to a static copy of the version info + * struct. See above. + */ +CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion); + +/* + * NAME curl_easy_strerror() + * + * DESCRIPTION + * + * The curl_easy_strerror function may be used to turn a CURLcode value + * into the equivalent human readable error string. This is useful + * for printing meaningful error messages. + */ +CURL_EXTERN const char *curl_easy_strerror(CURLcode); + +/* + * NAME curl_share_strerror() + * + * DESCRIPTION + * + * The curl_share_strerror function may be used to turn a CURLSHcode value + * into the equivalent human readable error string. This is useful + * for printing meaningful error messages. + */ +CURL_EXTERN const char *curl_share_strerror(CURLSHcode); + +#ifdef __cplusplus +} +#endif + +/* unfortunately, the easy.h and multi.h include files need options and info + stuff before they can be included! */ +#include "easy.h" /* nothing in curl is fun without the easy stuff */ +#include "multi.h" + +#endif /* __CURL_CURL_H */ diff --git a/contrib/ise_library/cURL/spec/include/curl/curlver.h b/contrib/ise_library/cURL/spec/include/curl/curlver.h new file mode 100644 index 00000000..1936c317 --- /dev/null +++ b/contrib/ise_library/cURL/spec/include/curl/curlver.h @@ -0,0 +1,67 @@ +#ifndef __CURL_CURLVER_H +#define __CURL_CURLVER_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2007, Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * $Id$ + ***************************************************************************/ + +/* This header file contains nothing but libcurl version info, generated by + a script at release-time. This was made its own header file in 7.11.2 */ + +/* This is the version number of the libcurl package from which this header + file origins: */ +#define LIBCURL_VERSION "7.17.0" + +/* The numeric version number is also available "in parts" by using these + defines: */ +#define LIBCURL_VERSION_MAJOR 7 +#define LIBCURL_VERSION_MINOR 17 +#define LIBCURL_VERSION_PATCH 0 + +/* This is the numeric version of the libcurl version number, meant for easier + parsing and comparions by programs. The LIBCURL_VERSION_NUM define will + always follow this syntax: + + 0xXXYYZZ + + Where XX, YY and ZZ are the main version, release and patch numbers in + hexadecimal (using 8 bits each). All three numbers are always represented + using two digits. 1.2 would appear as "0x010200" while version 9.11.7 + appears as "0x090b07". + + This 6-digit (24 bits) hexadecimal number does not show pre-release number, + and it is always a greater number in a more recent release. It makes + comparisons with greater than and less than work. +*/ +#define LIBCURL_VERSION_NUM 0x071100 + +/* + * This is the date and time when the full source package was created. The + * timestamp is not stored in CVS, as the timestamp is properly set in the + * tarballs by the maketgz script. + * + * The format of the date should follow this template: + * + * "Mon Feb 12 11:35:33 UTC 2007" + */ +#define LIBCURL_TIMESTAMP "Thu Sep 13 20:22:24 UTC 2007" + +#endif /* __CURL_CURLVER_H */ diff --git a/contrib/ise_library/cURL/spec/include/curl/easy.h b/contrib/ise_library/cURL/spec/include/curl/easy.h new file mode 100644 index 00000000..17de2107 --- /dev/null +++ b/contrib/ise_library/cURL/spec/include/curl/easy.h @@ -0,0 +1,81 @@ +#ifndef __CURL_EASY_H +#define __CURL_EASY_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * $Id$ + ***************************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif + +CURL_EXTERN CURL *curl_easy_init(void); +CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...); +CURL_EXTERN CURLcode curl_easy_perform(CURL *curl); +CURL_EXTERN void curl_easy_cleanup(CURL *curl); + +/* + * NAME curl_easy_getinfo() + * + * DESCRIPTION + * + * Request internal information from the curl session with this function. The + * third argument MUST be a pointer to a long, a pointer to a char * or a + * pointer to a double (as the documentation describes elsewhere). The data + * pointed to will be filled in accordingly and can be relied upon only if the + * function returns CURLE_OK. This function is intended to get used *AFTER* a + * performed transfer, all results from this function are undefined until the + * transfer is completed. + */ +CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...); + + +/* + * NAME curl_easy_duphandle() + * + * DESCRIPTION + * + * Creates a new curl session handle with the same options set for the handle + * passed in. Duplicating a handle could only be a matter of cloning data and + * options, internal state info and things like persistant connections cannot + * be transfered. It is useful in multithreaded applications when you can run + * curl_easy_duphandle() for each new thread to avoid a series of identical + * curl_easy_setopt() invokes in every thread. + */ +CURL_EXTERN CURL* curl_easy_duphandle(CURL *curl); + +/* + * NAME curl_easy_reset() + * + * DESCRIPTION + * + * Re-initializes a CURL handle to the default values. This puts back the + * handle to the same state as it was in when it was just created. + * + * It does keep: live connections, the Session ID cache, the DNS cache and the + * cookies. + */ +CURL_EXTERN void curl_easy_reset(CURL *curl); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/contrib/ise_library/cURL/spec/include/curl/mprintf.h b/contrib/ise_library/cURL/spec/include/curl/mprintf.h new file mode 100644 index 00000000..5c526882 --- /dev/null +++ b/contrib/ise_library/cURL/spec/include/curl/mprintf.h @@ -0,0 +1,80 @@ +#ifndef __CURL_MPRINTF_H +#define __CURL_MPRINTF_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2006, Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * $Id$ + ***************************************************************************/ + +#include +#include /* needed for FILE */ + +#include "curl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +CURL_EXTERN int curl_mprintf(const char *format, ...); +CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...); +CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...); +CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength, const char *format, ...); +CURL_EXTERN int curl_mvprintf(const char *format, va_list args); +CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args); +CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args); +CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength, const char *format, va_list args); +CURL_EXTERN char *curl_maprintf(const char *format, ...); +CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args); + +#ifdef _MPRINTF_REPLACE +# undef printf +# undef fprintf +# undef sprintf +# undef vsprintf +# undef snprintf +# undef vprintf +# undef vfprintf +# undef vsnprintf +# undef aprintf +# undef vaprintf +# define printf curl_mprintf +# define fprintf curl_mfprintf +#ifdef CURLDEBUG +/* When built with CURLDEBUG we define away the sprintf() functions since we + don't want internal code to be using them */ +# define sprintf sprintf_was_used +# define vsprintf vsprintf_was_used +#else +# define sprintf curl_msprintf +# define vsprintf curl_mvsprintf +#endif +# define snprintf curl_msnprintf +# define vprintf curl_mvprintf +# define vfprintf curl_mvfprintf +# define vsnprintf curl_mvsnprintf +# define aprintf curl_maprintf +# define vaprintf curl_mvaprintf +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __CURL_MPRINTF_H */ diff --git a/contrib/ise_library/cURL/spec/include/curl/multi.h b/contrib/ise_library/cURL/spec/include/curl/multi.h new file mode 100644 index 00000000..094c6484 --- /dev/null +++ b/contrib/ise_library/cURL/spec/include/curl/multi.h @@ -0,0 +1,346 @@ +#ifndef __CURL_MULTI_H +#define __CURL_MULTI_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2007, Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * $Id$ + ***************************************************************************/ +/* + This is an "external" header file. Don't give away any internals here! + + GOALS + + o Enable a "pull" interface. The application that uses libcurl decides where + and when to ask libcurl to get/send data. + + o Enable multiple simultaneous transfers in the same thread without making it + complicated for the application. + + o Enable the application to select() on its own file descriptors and curl's + file descriptors simultaneous easily. + +*/ + +/* + * This header file should not really need to include "curl.h" since curl.h + * itself includes this file and we expect user applications to do #include + * without the need for especially including multi.h. + * + * For some reason we added this include here at one point, and rather than to + * break existing (wrongly written) libcurl applications, we leave it as-is + * but with this warning attached. + */ +#include "curl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void CURLM; + +typedef enum { + CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or + curl_multi_socket*() soon */ + CURLM_OK, + CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */ + CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */ + CURLM_OUT_OF_MEMORY, /* if you ever get this, you're in deep sh*t */ + CURLM_INTERNAL_ERROR, /* this is a libcurl bug */ + CURLM_BAD_SOCKET, /* the passed in socket argument did not match */ + CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */ + CURLM_LAST +} CURLMcode; + +/* just to make code nicer when using curl_multi_socket() you can now check + for CURLM_CALL_MULTI_SOCKET too in the same style it works for + curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */ +#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM + +typedef enum { + CURLMSG_NONE, /* first, not used */ + CURLMSG_DONE, /* This easy handle has completed. 'result' contains + the CURLcode of the transfer */ + CURLMSG_LAST /* last, not used */ +} CURLMSG; + +struct CURLMsg { + CURLMSG msg; /* what this message means */ + CURL *easy_handle; /* the handle it concerns */ + union { + void *whatever; /* message-specific data */ + CURLcode result; /* return code for transfer */ + } data; +}; +typedef struct CURLMsg CURLMsg; + +/* + * Name: curl_multi_init() + * + * Desc: inititalize multi-style curl usage + * + * Returns: a new CURLM handle to use in all 'curl_multi' functions. + */ +CURL_EXTERN CURLM *curl_multi_init(void); + +/* + * Name: curl_multi_add_handle() + * + * Desc: add a standard curl handle to the multi stack + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle, + CURL *curl_handle); + + /* + * Name: curl_multi_remove_handle() + * + * Desc: removes a curl handle from the multi stack again + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle, + CURL *curl_handle); + + /* + * Name: curl_multi_fdset() + * + * Desc: Ask curl for its fd_set sets. The app can use these to select() or + * poll() on. We want curl_multi_perform() called as soon as one of + * them are ready. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle, + fd_set *read_fd_set, + fd_set *write_fd_set, + fd_set *exc_fd_set, + int *max_fd); + + /* + * Name: curl_multi_perform() + * + * Desc: When the app thinks there's data available for curl it calls this + * function to read/write whatever there is right now. This returns + * as soon as the reads and writes are done. This function does not + * require that there actually is data available for reading or that + * data can be written, it can be called just in case. It returns + * the number of handles that still transfer data in the second + * argument's integer-pointer. + * + * Returns: CURLMcode type, general multi error code. *NOTE* that this only + * returns errors etc regarding the whole multi stack. There might + * still have occurred problems on invidual transfers even when this + * returns OK. + */ +CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle, + int *running_handles); + + /* + * Name: curl_multi_cleanup() + * + * Desc: Cleans up and removes a whole multi stack. It does not free or + * touch any individual easy handles in any way. We need to define + * in what state those handles will be if this function is called + * in the middle of a transfer. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle); + +/* + * Name: curl_multi_info_read() + * + * Desc: Ask the multi handle if there's any messages/informationals from + * the individual transfers. Messages include informationals such as + * error code from the transfer or just the fact that a transfer is + * completed. More details on these should be written down as well. + * + * Repeated calls to this function will return a new struct each + * time, until a special "end of msgs" struct is returned as a signal + * that there is no more to get at this point. + * + * The data the returned pointer points to will not survive calling + * curl_multi_cleanup(). + * + * The 'CURLMsg' struct is meant to be very simple and only contain + * very basic informations. If more involved information is wanted, + * we will provide the particular "transfer handle" in that struct + * and that should/could/would be used in subsequent + * curl_easy_getinfo() calls (or similar). The point being that we + * must never expose complex structs to applications, as then we'll + * undoubtably get backwards compatibility problems in the future. + * + * Returns: A pointer to a filled-in struct, or NULL if it failed or ran out + * of structs. It also writes the number of messages left in the + * queue (after this read) in the integer the second argument points + * to. + */ +CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle, + int *msgs_in_queue); + +/* + * Name: curl_multi_strerror() + * + * Desc: The curl_multi_strerror function may be used to turn a CURLMcode + * value into the equivalent human readable error string. This is + * useful for printing meaningful error messages. + * + * Returns: A pointer to a zero-terminated error message. + */ +CURL_EXTERN const char *curl_multi_strerror(CURLMcode); + +/* + * Name: curl_multi_socket() and + * curl_multi_socket_all() + * + * Desc: An alternative version of curl_multi_perform() that allows the + * application to pass in one of the file descriptors that have been + * detected to have "action" on them and let libcurl perform. + * See man page for details. + */ +#define CURL_POLL_NONE 0 +#define CURL_POLL_IN 1 +#define CURL_POLL_OUT 2 +#define CURL_POLL_INOUT 3 +#define CURL_POLL_REMOVE 4 + +#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD + +#define CURL_CSELECT_IN 0x01 +#define CURL_CSELECT_OUT 0x02 +#define CURL_CSELECT_ERR 0x04 + +typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */ + curl_socket_t s, /* socket */ + int what, /* see above */ + void *userp, /* private callback + pointer */ + void *socketp); /* private socket + pointer */ +/* + * Name: curl_multi_timer_callback + * + * Desc: Called by libcurl whenever the library detects a change in the + * maximum number of milliseconds the app is allowed to wait before + * curl_multi_socket() or curl_multi_perform() must be called + * (to allow libcurl's timed events to take place). + * + * Returns: The callback should return zero. + */ +typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */ + long timeout_ms, /* see above */ + void *userp); /* private callback + pointer */ + +CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s, + int *running_handles); + +CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle, + curl_socket_t s, + int ev_bitmask, + int *running_handles); + +CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle, + int *running_handles); + +#ifndef CURL_ALLOW_OLD_MULTI_SOCKET +/* This macro below was added in 7.16.3 to push users who recompile to use + the new curl_multi_socket_action() instead of the old curl_multi_socket() +*/ +#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z) +#endif + +/* + * Name: curl_multi_timeout() + * + * Desc: Returns the maximum number of milliseconds the app is allowed to + * wait before curl_multi_socket() or curl_multi_perform() must be + * called (to allow libcurl's timed events to take place). + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle, + long *milliseconds); + +#undef CINIT /* re-using the same name as in curl.h */ + +#ifdef CURL_ISOCPP +#define CINIT(name,type,number) CURLMOPT_ ## name = CURLOPTTYPE_ ## type + number +#else +/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */ +#define LONG CURLOPTTYPE_LONG +#define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT +#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT +#define OFF_T CURLOPTTYPE_OFF_T +#define CINIT(name,type,number) CURLMOPT_/**/name = type + number +#endif + +typedef enum { + /* This is the socket callback function pointer */ + CINIT(SOCKETFUNCTION, FUNCTIONPOINT, 1), + + /* This is the argument passed to the socket callback */ + CINIT(SOCKETDATA, OBJECTPOINT, 2), + + /* set to 1 to enable pipelining for this multi handle */ + CINIT(PIPELINING, LONG, 3), + + /* This is the timer callback function pointer */ + CINIT(TIMERFUNCTION, FUNCTIONPOINT, 4), + + /* This is the argument passed to the timer callback */ + CINIT(TIMERDATA, OBJECTPOINT, 5), + + /* maximum number of entries in the connection cache */ + CINIT(MAXCONNECTS, LONG, 6), + + CURLMOPT_LASTENTRY /* the last unused */ +} CURLMoption; + + +/* + * Name: curl_multi_setopt() + * + * Desc: Sets options for the multi handle. + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle, + CURLMoption option, ...); + + +/* + * Name: curl_multi_assign() + * + * Desc: This function sets an association in the multi handle between the + * given socket and a private pointer of the application. This is + * (only) useful for curl_multi_socket uses. + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle, + curl_socket_t sockfd, void *sockp); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif diff --git a/contrib/ise_library/cURL/spec/include/curl/stdcheaders.h b/contrib/ise_library/cURL/spec/include/curl/stdcheaders.h new file mode 100644 index 00000000..11c1e2f6 --- /dev/null +++ b/contrib/ise_library/cURL/spec/include/curl/stdcheaders.h @@ -0,0 +1,34 @@ +#ifndef __STDC_HEADERS_H +#define __STDC_HEADERS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * $Id$ + ***************************************************************************/ + +#include + +size_t fread (void *, size_t, size_t, FILE *); +size_t fwrite (const void *, size_t, size_t, FILE *); + +int strcasecmp(const char *, const char *); +int strncasecmp(const char *, const char *, size_t); + +#endif diff --git a/contrib/ise_library/cURL/spec/include/curl/types.h b/contrib/ise_library/cURL/spec/include/curl/types.h new file mode 100644 index 00000000..d37d6ae9 --- /dev/null +++ b/contrib/ise_library/cURL/spec/include/curl/types.h @@ -0,0 +1 @@ +/* not used */ diff --git a/contrib/ise_library/cURL/spec/include/eiffel_curl.h b/contrib/ise_library/cURL/spec/include/eiffel_curl.h new file mode 100644 index 00000000..3dd9b005 --- /dev/null +++ b/contrib/ise_library/cURL/spec/include/eiffel_curl.h @@ -0,0 +1,47 @@ +/* +indexing + description: "Functions used by the class CURL_FUNCTION." + copyright: "Copyright (c) 1984-2006, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" + source: "[ + Eiffel Software + 356 Storke Road, Goleta, CA 93117 USA + Telephone 805-685-1006, Fax 805-685-6869 + Website http://www.eiffel.com + Customer support http://support.eiffel.com + ]" +*/ + +#ifndef _eiffel_curl_h_ +#define _eiffel_curl_h_ + +#include "eif_eiffel.h" + +/* unix-specific */ +#ifndef EIF_WINDOWS +#include +#include +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern void c_set_object(EIF_REFERENCE a_address); +extern void c_release_object(void); +extern void c_set_progress_function_address( EIF_POINTER a_address); +extern void c_set_read_function_address( EIF_POINTER a_address); +extern void c_set_write_function_address( EIF_POINTER a_address); +extern void c_set_debug_function_address (EIF_POINTER a_address); +extern size_t curl_write_function (void *ptr, size_t size, size_t nmemb, void *data); +extern size_t curl_read_function (void *ptr, size_t size, size_t nmemb, void *data); +extern size_t curl_progress_function (void * a_object_id, double a_dltotal, double a_dlnow, double a_ultotal, double a_ulnow); +extern size_t curl_debug_function (CURL * a_curl_handle, curl_infotype a_curl_infotype, unsigned char * a_char_pointer, size_t a_size, void * a_object_id); + +#ifdef __cplusplus +} +#endif + +#endif