Suite.
Code: Select all
; POST volatile input fields.
#CURLOPT_COPYPOSTFIELDS = #CURLOPTTYPE_OBJECTPOINT + 165
; set transfer mode (;type=<a|i>) when doing FTP via an HTTP proxy
#CURLOPT_PROXY_TRANSFER_MODE = #CURLOPTTYPE_LONG + 166
; Callback function For seeking in the input stream
#CURLOPT_SEEKFUNCTION = #CURLOPTTYPE_FUNCTIONPOINT + 167
#CURLOPT_SEEKDATA = #CURLOPTTYPE_OBJECTPOINT + 168
; CRL file
#CURLOPT_CRLFILE = #CURLOPTTYPE_STRINGPOINT + 169
; Issuer certificate
#CURLOPT_ISSUERCERT = #CURLOPTTYPE_STRINGPOINT + 170
; (IPv6) Address scope
#CURLOPT_ADDRESS_SCOPE = #CURLOPTTYPE_LONG + 171
; Collect certificate chain info And allow it To get retrievable With
; CURLINFO_CERTINFO after the transfer is complete.
#CURLOPT_CERTINFO = #CURLOPTTYPE_LONG + 172
; "name" and "pwd" to use when fetching.
#CURLOPT_USERNAME = #CURLOPTTYPE_OBJECTPOINT + 173
#CURLOPT_PASSWORD = #CURLOPTTYPE_OBJECTPOINT + 174
; "name" and "pwd" to use with Proxy when fetching.
#PROXYUSERNAME = #CURLOPTTYPE_OBJECTPOINT + 175
#PROXYPASSWORD = #CURLOPTTYPE_OBJECTPOINT + 176
#CURLOPT_MAIL_FROM = #CURLOPTTYPE_OBJECTPOINT + 186
#CURLOPT_MAIL_RCPT = #CURLOPTTYPE_OBJECTPOINT + 187
; CURLOPT_LASTENTRY ; the last unused
#CURLOPT_FTPLISTONLY = #CURLOPT_DIRLISTONLY
;}
;{ #HTTPPOST
#HTTPPOST_FILENAME = 1<<0 ; specified content is a file name
#HTTPPOST_READFILE = 1<<1 ; specified content is a file name
#HTTPPOST_PTRNAME = 1<<2 ; name is only stored pointer
; do Not free in formfree
#HTTPPOST_PTRCONTENTS = 1<<3 ; contents is only stored pointer
; do Not free in formfree
#HTTPPOST_BUFFER = 1<<4 ; upload file from buffer
#HTTPPOST_PTRBUFFER = 1<<5 ; upload file from pointer contents
;}
; #CURLE_OBSOLETE = #CURLE_OBSOLETE50 ; noone should be using this!
; #CURLE_BAD_PASSWORD_ENTERED = #CURLE_OBSOLETE46
; #CURLE_BAD_CALLING_ORDER = #CURLE_OBSOLETE44
; #CURLE_FTP_USER_PASSWORD_INCORRECT = #CURLE_OBSOLETE10
; #CURLE_FTP_CANT_RECONNECT = #CURLE_OBSOLETE16
; #CURLE_FTP_COULDNT_GET_SIZE = #CURLE_OBSOLETE32
; #CURLE_FTP_COULDNT_SET_ASCII = #CURLE_OBSOLETE29
; #CURLE_FTP_WEIRD_USER_REPLY = #CURLE_OBSOLETE12
; #CURLE_FTP_WRITE_ERROR = #CURLE_OBSOLETE20
; #CURLE_LIBRARY_NOT_FOUND = #CURLE_OBSOLETE40
; #CURLE_MALFORMAT_USER = #CURLE_OBSOLETE24
; #CURLE_SHARE_IN_USE = #CURLE_OBSOLETE57
; #CURLE_URL_MALFORMAT_USER = #CURLE_OBSOLETE4
; #CURLE_FTP_ACCESS_DENIED = #CURLE_REMOTE_ACCESS_DENIED
; #CURLE_FTP_COULDNT_SET_BINARY = #CURLE_FTP_COULDNT_SET_TYPE
; #CURLE_FTP_QUOTE_ERROR = #CURLE_QUOTE_ERROR
; #CURLE_TFTP_DISKFULL = #CURLE_REMOTE_DISK_FULL
; #CURLE_TFTP_EXISTS = #CURLE_REMOTE_FILE_EXISTS
; #CURLE_HTTP_RANGE_ERROR = #CURLE_RANGE_ERROR
; #CURLE_FTP_SSL_FAILED = #CURLE_USE_SSL_FAILED
; #CURLE_OPERATION_TIMEOUTED = #CURLE_OPERATION_TIMEDOUT
#CURLE_HTTP_NOT_FOUND = #CURLE_HTTP_RETURNED_ERROR
#CURLE_HTTP_PORT_FAILED = #CURLE_INTERFACE_FAILED
; #CURLE_FTP_COULDNT_STOR_FILE = #CURLE_UPLOAD_FAILED
#CURLE_FTP_PARTIAL_FILE = #CURLE_PARTIAL_FILE
#CURLE_FTP_BAD_DOWNLOAD_RESUME = #CURLE_BAD_DOWNLOAD_RESUME
#CURLE_ALREADY_COMPLETE = 99999
#CURLAUTH_NONE = 0 ; nothing
#CURLAUTH_BASIC = 1<<0 ; Basic (Default)
#CURLAUTH_DIGEST = 1<<1 ; Digest
#CURLAUTH_GSSNEGOTIATE = 1<<2 ; GSS-Negotiate
#CURLAUTH_NTLM = 1<<3 ; NTLM
#CURLAUTH_ANY = ~0 ; all types set
#CURLAUTH_ANYSAFE = ~#CURLAUTH_BASIC
#CURLSSH_AUTH_ANY = ~0 ; all types supported by the server
#CURLSSH_AUTH_NONE = 0 ; none allowed, silly but complete
#CURLSSH_AUTH_PUBLICKEY = 1<<0 ; public/private key files
#CURLSSH_AUTH_PASSWORD = 1<<1 ; password
#CURLSSH_AUTH_HOST = 1<<2 ; host key files
#CURLSSH_AUTH_KEYBOARD = 1<<3 ; keyboard interactive
#CURLSSH_AUTH_DEFAULT = #CURLSSH_AUTH_ANY
#CURL_ERROR_SIZE = 256
#CURLFTPSSL_NONE = #CURLUSESSL_NONE
#CURLFTPSSL_TRY = #CURLUSESSL_TRY
#CURLFTPSSL_CONTROL = #CURLUSESSL_CONTROL
#CURLFTPSSL_ALL = #CURLUSESSL_ALL
#CURLFTPSSL_LAST = #CURLUSESSL_LAST
#CURLOPT_SSLKEYPASSWD = #CURLOPT_KEYPASSWD
#CURLOPT_FTPAPPEND = #CURLOPT_APPEND
#CURLOPT_FTPLISTONLY = #CURLOPT_DIRLISTONLY
#CURLOPT_FTP_SSL = #CURLOPT_USE_SSL
#CURLOPT_SSLCERTPASSWD = #CURLOPT_KEYPASSWD
#CURLOPT_KRB4LEVEL = #CURLOPT_KRBLEVEL
; 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.
#CURL_IPRESOLVE_WHATEVER = 0 ; Default, resolves addresses To all IP versions that your system allows
#CURL_IPRESOLVE_V4 = 1 ; resolve To ipv4 addresses
#CURL_IPRESOLVE_V6 = 2 ; resolve To ipv6 addresses
; three convenient "aliases" that follow the name scheme better
#CURLOPT_WRITEDATA = #CURLOPT_FILE
#CURLOPT_READDATA = #CURLOPT_INFILE
#CURLOPT_HEADERDATA = #CURLOPT_WRITEHEADER
#CURLOPT_RTSPHEADER = #CURLOPT_HTTPHEADER
; These enums are For use With the CURLOPT_HTTP_VERSION option.
Enumeration ; curl_http
#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_2_0 ; please use HTTP 2.0 in the request
#CURL_HTTP_VERSION_LAST ; *ILLEGAL* http version
EndEnumeration
;
; Public API enums For RTSP requests
;
Enumeration
#CURL_RTSPREQ_NONE ; first in List
#CURL_RTSPREQ_OPTIONS
#CURL_RTSPREQ_DESCRIBE
#CURL_RTSPREQ_ANNOUNCE
#CURL_RTSPREQ_SETUP
#CURL_RTSPREQ_PLAY
#CURL_RTSPREQ_PAUSE
#CURL_RTSPREQ_TEARDOWN
#CURL_RTSPREQ_GET_PARAMETER
#CURL_RTSPREQ_SET_PARAMETER
#CURL_RTSPREQ_RECORD
#CURL_RTSPREQ_RECEIVE
#CURL_RTSPREQ_LAST ;last in List
EndEnumeration
; These enums are For use With the CURLOPT_NETRC option.
Enumeration
#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
EndEnumeration
Enumeration
#CURL_SSLVERSION_DEFAULT
#CURL_SSLVERSION_TLSv1 ; TLS 1.x
#CURL_SSLVERSION_SSLv2
#CURL_SSLVERSION_SSLv3
#CURL_SSLVERSION_TLSv1_0
#CURL_SSLVERSION_TLSv1_1
#CURL_SSLVERSION_TLSv1_2
#CURL_SSLVERSION_LAST ; never use keep last
EndEnumeration
Enumeration ;CURL_TLSAUTH
#CURL_TLSAUTH_NONE
#CURL_TLSAUTH_SRP
#CURL_TLSAUTH_LAST ; never use, keep last
EndEnumeration
Enumeration ; curl_TimeCond
#CURL_TIMECOND_NONE
#CURL_TIMECOND_IFMODSINCE
#CURL_TIMECOND_IFUNMODSINCE
#CURL_TIMECOND_LASTMOD
#CURL_TIMECOND_LAST
EndEnumeration ;
; CURLINFO_RESPONSE_CODE is the new name For the option previously known As
; CURLINFO_HTTP_CODE
#CURLINFO_HTTP_CODE = #CURLINFO_RESPONSE_CODE
#CURL_GLOBAL_SSL = 1<<0
#CURL_GLOBAL_WIN32 = 1<<1
#CURL_GLOBAL_ALL = #CURL_GLOBAL_SSL|#CURL_GLOBAL_WIN32
#CURL_GLOBAL_NOTHING= 0
#CURL_GLOBAL_DEFAULT= #CURL_GLOBAL_ALL
;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 rethe NOW To another enum
; from above.
#CURLVERSION_NOW = #CURLVERSION_FOURTH
#CURL_VERSION_IPV6 = 1<<0 ;IPv6-enabled
#CURL_VERSION_KERBEROS4 = 1<<1 ;kerberos auth is supported
#CURL_VERSION_SSL = 1<<2 ;SSL options are present
#CURL_VERSION_LIBZ = 1<<3 ;libz features are present
#CURL_VERSION_NTLM = 1<<4 ;NTLM auth is supported
#CURL_VERSION_GSSNEGOTIATE = 1<<5; Negotiate auth support
#CURL_VERSION_DEBUG = 1<<6 ;built With Debug capabilities
#CURL_VERSION_ASYNCHDNS = 1<<7 ;asynchronous dns resolves
#CURL_VERSION_SPNEGO = 1<<8 ;SPNEGO auth
#CURL_VERSION_LARGEFILE = 1<<9 ;supports files bigger than 2GB
#CURL_VERSION_IDN = 1<<10 ;International Domain Names support
#CURL_VERSION_SSPI = 1<<11 ;SSPI is supported
#CURL_VERSION_CONV = 1<<12 ;character conversions are supported
;}
;- Structures
Structure Curl_HTTPPost
*Next_.Curl_HTTPPost ; Next entry in the list
*name.String ; Ptr to allocated name
namelength.i ; Length of name length
*contents.String ; Ptr to allocated data contents
contentslength.i ; Length of contents field
*buffer.String ; Ptr to allocated buffer contents
bufferlength.i ; Length of buffer field
*contenttype.String ; Content-Type
*contentheader ; List of extra headers for this form
*more.Curl_HTTPPost ; If one field name has more than one
; file, this link should link To following files
flags.i ; constante #HTTPPOST
*showfilename ; The file name to show. If not set, the
; actual file name will be used (If this
; is a file part)
EndStructure
; Structure To be used As parameter For CURLFORM_ARRAY
Structure Curl_Forms
option.i
*value.String
EndStructure
; linked-list Structure For the CURLOPT_QUOTE option (And other)
Structure Curl_Slist
*Data.String
*Next_.curl_slist
EndStructure
Structure curl_version_info_data
age.i ; age of the returned struct
*version.String ; LIBCURL_VERSION
version_num.i ; LIBCURL_VERSION_NUM
*host.String ; OS/host/cpu/machine when configured
features.i ; bitmask, see defines below
*ssl_version.String ; human readable string
ssl_version_num.i ; not used anymore, always 0
*libz_version.String; human readable string
; protocols is terminated by an entry With a NULL protoname
*protocols.String
; The fields below this were added in CURLVERSION_SECOND
*ares.String
ares_num.i
; This field was added in CURLVERSION_THIRD
*libidn.String;
; These field were added in CURLVERSION_FOURTH
; Same As '_libiconv_version' If built With HAVE_ICONV
iconv_ver_num.i
*libssh_version.String ; human readable string
EndStructure
Structure curl_certinfo
num_of_certs.i ;number of certificates With information */
*certinfo.curl_slist[0]
EndStructure
CompilerIf #LibCurl_ExternalDLL
PrototypeC.i Prototype_curl_easy_cleanup(handle.i)
PrototypeC.i Prototype_curl_easy_duphandle(handle.i)
PrototypeC.i Prototype_curl_easy_getinfo(curl.i, info_type.i, info.i)
PrototypeC.i Prototype_curl_easy_init()
PrototypeC.i Prototype_curl_easy_perform(handle.i)
PrototypeC.i Prototype_curl_easy_reset(handle.i)
PrototypeC.i Prototype_curl_easy_setopt(handle.i, option.i, parameter.i)
;Prototype.i Prototype_curl_easy_setopt_str(handle.i, option.i, parameter.p-utf8)
PrototypeC.i Prototype_curl_easy_strerror(errornum.i)
PrototypeC.i Prototype_curl_escape(url.i, length.i)
PrototypeC.i Prototype_curl_formadd(firstitem.i, lastitem.i, p1.i=#Null, p2.i=#Null, p3.i=#Null, p4.i=#Null, p5.i=#Null)
PrototypeC.i Prototype_curl_formfree(form.i)
PrototypeC.i Prototype_curl_free(ptr.i)
PrototypeC.i Prototype_curl_getdate(datestring.i, now.i)
PrototypeC.i Prototype_curl_getenv(name.i)
PrototypeC.i Prototype_curl_global_cleanup()
PrototypeC.i Prototype_curl_global_init(flags.i)
PrototypeC.i Prototype_curl_global_init_mem(flags.i, m.i, f.i, r.i, s.i, c.i)
PrototypeC.i Prototype_curl_mprintf(format.i)
PrototypeC.i Prototype_curl_mfprintf(fd.i, format.i)
PrototypeC.i Prototype_curl_msprintf(buffer.i, format.i)
PrototypeC.i Prototype_curl_msnprintf(buffer.i, maxlength.i, format.i)
PrototypeC.i Prototype_curl_mvprintf(format.i, args.i)
PrototypeC.i Prototype_curl_mvfprintf(fd.i, format.i, args.i)
PrototypeC.i Prototype_curl_mvsprintf(buffer.i, format.i, args.i)
PrototypeC.i Prototype_curl_mvsnprintf(buffer.i, maxlength.i, format.i, args.i)
PrototypeC.i Prototype_curl_maprintf(format.i)
PrototypeC.i Prototype_curl_mvaprintf(format.i, args.i)
PrototypeC.i Prototype_curl_multi_add_handle(multi_handle.i, easy_handle.i)
PrototypeC.i Prototype_curl_multi_cleanup(multi_handle.i)
PrototypeC.i Prototype_curl_multi_fdset(multi_handle.i, read_fd_set.i, write_fd_set.i, exc_fd_set.i, max_fd.i)
PrototypeC.i Prototype_curl_multi_info_read(multi_handle.i, msgs_in_queue.i)
PrototypeC.i Prototype_curl_multi_init()
PrototypeC.i Prototype_curl_multi_perform(multi_handle.i, running_handles.i)
PrototypeC.i Prototype_curl_multi_remove_handle(multi_handle.i, easy_handle.i)
PrototypeC.i Prototype_curl_multi_strerror(errornum.i)
PrototypeC.i Prototype_curl_share_cleanup(share_handle.i)
PrototypeC.i Prototype_curl_share_init()
PrototypeC.i Prototype_curl_share_setopt(share.i, option.i, parameter.i)
PrototypeC.i Prototype_curl_share_strerror(errornum.i)
PrototypeC.i Prototype_curl_slist_append(slist.i, string.p-utf8)
PrototypeC.i Prototype_curl_slist_free_all(slist.i)
PrototypeC.i Prototype_curl_strequal(str1.i, str2.i)
PrototypeC.i Prototype_curl_strnequal(str1.i, str2.i, len.i)
PrototypeC.i Prototype_curl_unescape(url.i, length.i)
PrototypeC.i Prototype_curl_version()
PrototypeC.i Prototype_curl_version_info(type.i)
Global curl_easy_cleanup.Prototype_curl_easy_cleanup
Global curl_easy_duphandle.Prototype_curl_easy_duphandle
Global curl_easy_getinfo.Prototype_curl_easy_getinfo
Global curl_easy_init.Prototype_curl_easy_init
Global curl_easy_perform.Prototype_curl_easy_perform
Global curl_easy_reset.Prototype_curl_easy_reset
Global curl_easy_setopt.Prototype_curl_easy_setopt
;Global curl_easy_setopt_str.Prototype_curl_easy_setopt_str
Global curl_easy_strerror_.Prototype_curl_easy_strerror
Global curl_escape.Prototype_curl_escape
Global curl_formadd.Prototype_curl_formadd
Global curl_formfree.Prototype_curl_formfree
Global curl_free.Prototype_curl_free
Global curl_getdate.Prototype_curl_getdate
Global curl_getenv.Prototype_curl_getenv
Global curl_global_cleanup.Prototype_curl_global_cleanup
Global curl_global_init.Prototype_curl_global_init
Global curl_global_init_mem.Prototype_curl_global_init_mem
Global curl_mprintf.Prototype_curl_mprintf
Global curl_mfprintf.Prototype_curl_mfprintf
Global curl_msprintf.Prototype_curl_msprintf
Global curl_msnprintf.Prototype_curl_msnprintf
Global curl_mvprintf.Prototype_curl_mvprintf
Global curl_mvfprintf.Prototype_curl_mvfprintf
Global curl_mvsprintf.Prototype_curl_mvsprintf
Global curl_mvsnprintf.Prototype_curl_mvsnprintf
Global curl_maprintf.Prototype_curl_maprintf
Global curl_mvaprintf.Prototype_curl_mvaprintf
Global curl_multi_add_handle.Prototype_curl_multi_add_handle
Global curl_multi_cleanup.Prototype_curl_multi_cleanup
Global curl_multi_fdset.Prototype_curl_multi_fdset
Global curl_multi_info_read.Prototype_curl_multi_info_read
Global curl_multi_init.Prototype_curl_multi_init
Global curl_multi_perform.Prototype_curl_multi_perform
Global curl_multi_remove_handle.Prototype_curl_multi_remove_handle
Global curl_multi_strerror.Prototype_curl_multi_strerror
Global curl_share_cleanup.Prototype_curl_share_cleanup
Global curl_share_init.Prototype_curl_share_init
Global curl_share_setopt.Prototype_curl_share_setopt
Global curl_share_strerror.Prototype_curl_share_strerror
Global curl_slist_append.Prototype_curl_slist_append
Global curl_slist_free_all.Prototype_curl_slist_free_all
Global curl_strequal.Prototype_curl_strequal
Global curl_strnequal.Prototype_curl_strnequal
Global curl_unescape.Prototype_curl_unescape
Global curl_version_.Prototype_curl_version
Global curl_version_info.Prototype_curl_version_info
Define LibCurlDLL.i
LibCurlDLL = OpenLibrary(#PB_Any, "libcurl.dll")
If LibCurlDLL
curl_easy_cleanup = GetFunction(LibCurlDLL, "curl_easy_cleanup")
curl_easy_duphandle = GetFunction(LibCurlDLL, "curl_easy_duphandle")
curl_easy_getinfo = GetFunction(LibCurlDLL, "curl_easy_getinfo")
curl_easy_init = GetFunction(LibCurlDLL, "curl_easy_init")
curl_easy_perform = GetFunction(LibCurlDLL, "curl_easy_perform")
curl_easy_reset = GetFunction(LibCurlDLL, "curl_easy_reset")
curl_easy_setopt = GetFunction(LibCurlDLL, "curl_easy_setopt")
;curl_easy_setopt_str = GetFunction(LibCurlDLL, "curl_easy_setopt")
curl_easy_strerror_ = GetFunction(LibCurlDLL, "curl_easy_strerror")
curl_escape = GetFunction(LibCurlDLL, "curl_escape")
curl_formadd = GetFunction(LibCurlDLL, "curl_formadd")
curl_formfree = GetFunction(LibCurlDLL, "curl_formfree")
curl_free = GetFunction(LibCurlDLL, "curl_free")
curl_getdate = GetFunction(LibCurlDLL, "curl_getdate")
curl_getenv = GetFunction(LibCurlDLL, "curl_getenv")
curl_global_cleanup = GetFunction(LibCurlDLL, "curl_global_cleanup")
curl_global_init = GetFunction(LibCurlDLL, "curl_global_init")
curl_global_init_mem = GetFunction(LibCurlDLL, "curl_global_init_mem")
curl_mprintf = GetFunction(LibCurlDLL, "curl_mprintf")
curl_mfprintf = GetFunction(LibCurlDLL, "curl_mfprintf")
curl_msprintf = GetFunction(LibCurlDLL, "curl_msprintf")
curl_msnprintf = GetFunction(LibCurlDLL, "curl_msnprintf")
curl_mvprintf = GetFunction(LibCurlDLL, "curl_mvprintf")
curl_mvfprintf = GetFunction(LibCurlDLL, "curl_mvfprintf")
curl_mvsprintf = GetFunction(LibCurlDLL, "curl_mvsprintf")
curl_mvsnprintf = GetFunction(LibCurlDLL, "curl_mvsnprintf")
curl_maprintf = GetFunction(LibCurlDLL, "curl_maprintf")
curl_mvaprintf = GetFunction(LibCurlDLL, "curl_mvaprintf")
curl_multi_add_handle = GetFunction(LibCurlDLL, "curl_multi_add_handle")
curl_multi_cleanup = GetFunction(LibCurlDLL, "curl_multi_cleanup")
curl_multi_fdset = GetFunction(LibCurlDLL, "curl_multi_fdset")
curl_multi_info_read = GetFunction(LibCurlDLL, "curl_multi_info_read")
curl_multi_init = GetFunction(LibCurlDLL, "curl_multi_init")
curl_multi_perform = GetFunction(LibCurlDLL, "curl_multi_perform")
curl_multi_remove_handle = GetFunction(LibCurlDLL, "curl_multi_remove_handle")
curl_multi_strerror = GetFunction(LibCurlDLL, "curl_multi_strerror")
curl_share_cleanup = GetFunction(LibCurlDLL, "curl_share_cleanup")
curl_share_init = GetFunction(LibCurlDLL, "curl_share_init")
curl_share_setopt = GetFunction(LibCurlDLL, "curl_share_setopt")
curl_share_strerror = GetFunction(LibCurlDLL, "curl_share_strerror")
curl_slist_append = GetFunction(LibCurlDLL, "curl_slist_append")
curl_slist_free_all = GetFunction(LibCurlDLL, "curl_slist_free_all")
curl_strequal = GetFunction(LibCurlDLL, "curl_strequal")
curl_strnequal = GetFunction(LibCurlDLL, "curl_strnequal")
curl_unescape = GetFunction(LibCurlDLL, "curl_unescape")
curl_version_ = GetFunction(LibCurlDLL, "curl_version")
curl_version_info = GetFunction(LibCurlDLL, "curl_version_info")
EndIf
Procedure.i curl_easy_setopt_str(handle.i, option.i, parameter$)
Protected Result.i, *UTF8
*UTF8 = UTF8(parameter$)
Result = curl_easy_setopt(handle, option, *UTF8)
ProcedureReturn Result
EndProcedure
CompilerElse
;- Imports
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
ImportC "/usr/lib/libcurl.so"
CompilerCase #PB_OS_Windows
ImportC "crypt32.lib"
EndImport
ImportC "ws2_32.lib"
EndImport
CompilerIf Defined(LibCurl_ExternalDLL, #PB_Constant)
CompilerIf #LibCurl_ExternalDLL = #True
ImportC "libcurl_ExternalDLL.lib"
CompilerElse
ImportC "libcurl.lib"
CompilerEndIf
CompilerElse
ImportC "libcurl.lib"
CompilerEndIf
CompilerCase #PB_OS_MacOS
ImportC "/usr/lib/libcurl.dylib"
CompilerEndSelect
curl_easy_cleanup(handle.i)
curl_easy_duphandle(handle.i)
curl_easy_getinfo(curl.i, info_type.i, info.i)
curl_easy_init()
curl_easy_perform(handle.i)
curl_easy_reset(handle.i)
curl_easy_setopt(handle.i, option.i, parameter.i)
curl_escape(url.i, length.i)
curl_formadd(firstitem.i, lastitem.i, p1.i=#Null, p2.i=#Null, p3.i=#Null, p4.i=#Null, p5.i=#Null)
curl_formfree(form.i)
curl_free(ptr.i)
curl_getdate(datestring.i, now.i)
curl_getenv(name.i)
curl_global_cleanup()
curl_global_init(flags.i)
curl_global_init_mem(flags.i, m.i, f.i, r.i, s.i, c.i)
curl_mprintf(format.i)
curl_mfprintf(fd.i, format.i)
curl_msprintf(buffer.i, format.i)
curl_msnprintf(buffer.i, maxlength.i, format.i)
curl_mvprintf(format.i, args.i)
curl_mvfprintf(fd.i, format.i, args.i)
curl_mvsprintf(buffer.i, format.i, args.i)
curl_mvsnprintf(buffer.i, maxlength.i, format.i, args.i)
curl_maprintf(format.i)
curl_mvaprintf(format.i, args.i)
curl_multi_add_handle(multi_handle.i, easy_handle.i)
curl_multi_cleanup(multi_handle.i)
curl_multi_fdset(multi_handle.i, read_fd_set.i, write_fd_set.i, exc_fd_set.i, max_fd.i)
curl_multi_info_read(multi_handle.i, msgs_in_queue.i)
curl_multi_init()
curl_multi_perform(multi_handle.i, running_handles.i)
curl_multi_remove_handle(multi_handle.i, easy_handle.i)
curl_multi_strerror(errornum.i)
curl_share_cleanup(share_handle.i)
curl_share_init()
curl_share_setopt(share.i, option.i, parameter.i)
curl_share_strerror(errornum.i)
curl_slist_append(slist.i, string.p-utf8)
curl_slist_free_all(slist.i)
curl_strequal(str1.i, str2.i)
curl_strnequal(str1.i, str2.i, len.i)
curl_unescape(url.i, length.i)
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
curl_version_() As "curl_version"
CompilerElse
curl_version_() As "_curl_version"
CompilerEndIf
curl_version_info(type.i)
CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
curl_easy_setopt_str(handle.i, option.i, parameter.p-utf8) As "curl_easy_setopt"
curl_easy_strerror_(errornum.i) As "curl_easy_strerror"
CompilerElse
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
curl_easy_setopt_str(handle.i, option.i, parameter.p-utf8) As "curl_easy_setopt"
curl_easy_strerror_(errornum.i) As "curl_easy_strerror"
CompilerElse
curl_easy_setopt_str(handle.i, option.i, parameter.p-utf8) As "_curl_easy_setopt"
curl_easy_strerror_(errornum.i) As "_curl_easy_strerror"
CompilerEndIf
CompilerEndIf
EndImport
CompilerEndIf
Define LibCurl_ReceivedData$
ProcedureC.l LibCurl_ReadFunction(*ptr, Size, NMemB, Stream.i)
; ToDo
ProcedureReturn 0
EndProcedure
ProcedureC.l LibCurl_WriteFunction(*ptr, Size, NMemB, Target.i)
;retreives utf-8/ascii encoded data
Protected SizeProper.i = Size & 255
Protected NMemBProper.i = NMemB
Protected *String.String
Shared LibCurl_ReceivedData$
If Target = #Null
LibCurl_ReceivedData$ + PeekS(*ptr, SizeProper * NMemBProper, #PB_UTF8|#PB_ByteLength)
Else
If IsFile(Target)
WriteData(Target, *ptr, SizeProper * NMemBProper)
Else
;*String\s + PeekS(*ptr, SizeProper * NMemBProper, #PB_UTF8|#PB_ByteLength)
LibCurl_ReceivedData$ + PeekS(*ptr, SizeProper * NMemBProper, #PB_UTF8|#PB_ByteLength)
EndIf
EndIf
ProcedureReturn SizeProper * NMemBProper
EndProcedure
Procedure.s LibCurl_GetData()
Shared LibCurl_ReceivedData$
Protected ReturnData$
ReturnData$ = LibCurl_ReceivedData$
LibCurl_ReceivedData$ = ""
ProcedureReturn ReturnData$
EndProcedure
Macro curl_easy_strerror(error)
PeekS(curl_easy_strerror_(error), -1, #PB_UTF8)
EndMacro
Macro curl_version()
PeekS(curl_version_(), -1, #PB_UTF8)
EndMacro
;-Demo
CompilerIf #PB_Compiler_IsMainFile
Define URL$, curl.i, res.i, result$, Post$, *CurlVersionInfo.curl_version_info_data
Define Protocol$, *Protocol, i.i
CompilerIf #PB_Compiler_Version < 600
InitNetwork()
CompilerEndIf
curl = curl_easy_init()
If curl
*CurlVersionInfo = curl_version_info(#CURLVERSION_NOW)
Debug "Version: " + PeekS(*CurlVersionInfo\version, -1, #PB_UTF8)
Debug "Host: " + PeekS(*CurlVersionInfo\host, -1, #PB_UTF8)
Debug "SSL: " + PeekS(*CurlVersionInfo\ssl_version, -1, #PB_UTF8)
If *CurlVersionInfo\libz_version
Debug "Libz: " + PeekS(*CurlVersionInfo\libz_version, -1, #PB_UTF8)
EndIf
If *CurlVersionInfo\libssh_version
Debug "libSSH: " + PeekS(*CurlVersionInfo\libssh_version, -1, #PB_UTF8)
EndIf
Debug "Protocols:"
Repeat
*Protocol = PeekI(*CurlVersionInfo\protocols + i)
If *Protocol
Debug PeekS(*Protocol, -1, #PB_UTF8)
i + SizeOf(Integer)
EndIf
Until *Protocol = #Null
Debug "------"
; Debug curl_version()
;
; Debug curl_easy_strerror(#CURLE_OK)
; Debug curl_easy_strerror(#CURLE_ABORTED_BY_CALLBACK)
curl_easy_setopt_str(curl, #CURLOPT_URL, "https://www.google.com")
; follow a redirection automatically
curl_easy_setopt(curl, #CURLOPT_FOLLOWLOCATION, 1)
; accept insecure certificates
curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYPEER, 0)
curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYHOST, 0)
; to put the header inside the received data
curl_easy_setopt(curl, #CURLOPT_HEADER, 1)
; use own receive function
curl_easy_setopt(curl, #CURLOPT_WRITEFUNCTION, @LibCurl_WriteFunction())
If curl_easy_perform(curl) = #CURLE_OK
result$ = LibCurl_GetData()
MessageRequester("", result$)
EndIf
curl_easy_cleanup(curl)
EndIf
CompilerEndIf