]> gitweb.factorcode.org Git - factor.git/commitdiff
curl: bindings to libcurl.
authorJohn Benediktsson <mrjbq7@gmail.com>
Sat, 28 Jun 2014 22:44:17 +0000 (15:44 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sat, 28 Jun 2014 22:44:17 +0000 (15:44 -0700)
extra/curl/authors.txt [new file with mode: 0644]
extra/curl/curl.factor [new file with mode: 0644]
extra/curl/ffi/ffi.factor [new file with mode: 0644]
extra/curl/ffi/platforms.txt [new file with mode: 0644]
extra/curl/platforms.txt [new file with mode: 0644]
extra/curl/summary.txt [new file with mode: 0644]

diff --git a/extra/curl/authors.txt b/extra/curl/authors.txt
new file mode 100644 (file)
index 0000000..e091bb8
--- /dev/null
@@ -0,0 +1 @@
+John Benediktsson
diff --git a/extra/curl/curl.factor b/extra/curl/curl.factor
new file mode 100644 (file)
index 0000000..ba728f2
--- /dev/null
@@ -0,0 +1,36 @@
+USING: alien alien.c-types alien.data alien.destructors
+alien.syntax curl.ffi destructors io io.encodings.string
+io.encodings.utf8 io.streams.c kernel math namespaces present
+sequences ;
+
+IN: curl
+
+<PRIVATE
+
+DESTRUCTOR: curl_easy_cleanup
+
+DESTRUCTOR: fclose
+
+: curl-init ( -- CURL )
+    curl_easy_init &curl_easy_cleanup ;
+
+: curl-set-url ( CURL url -- )
+    CURLOPT_URL swap present
+    curl_easy_setopt CURLE_OK assert= ;
+
+: curl-set-file ( CURL path -- )
+    CURLOPT_FILE swap "wb" fopen &fclose
+    curl_easy_setopt CURLE_OK assert= ;
+
+: curl-perform ( CURL -- )
+    curl_easy_perform CURLE_OK assert= ;
+
+PRIVATE>
+
+: curl-download-to ( url path -- )
+    [
+        curl-init
+        [ swap curl-set-file ]
+        [ swap curl-set-url ]
+        [ curl-perform ] tri
+    ] with-destructors ;
diff --git a/extra/curl/ffi/ffi.factor b/extra/curl/ffi/ffi.factor
new file mode 100644 (file)
index 0000000..6d4c788
--- /dev/null
@@ -0,0 +1,450 @@
+USING: alien alien.c-types alien.enums alien.libraries
+alien.libraries.finder alien.syntax classes.struct combinators
+kernel math unix.types words ;
+
+IN: curl.ffi
+
+<< "curl" dup find-library cdecl add-library >>
+
+LIBRARY: curl
+
+! curl.h
+
+FUNCTION: c-string curl_version ( ) ;
+
+FUNCTION: c-string curl_getenv ( c-string variable ) ;
+
+CONSTANT: CURL_WRITEFUNC_PAUSE 0x10000001
+
+ENUM: curlfiletype
+    CURLFILETYPE_FILE
+    CURLFILETYPE_DIRECTORY
+    CURLFILETYPE_SYMLINK
+    CURLFILETYPE_DEVICE_BLOCK
+    CURLFILETYPE_DEVICE_CHAR
+    CURLFILETYPE_NAMEDPIPE
+    CURLFILETYPE_SOCKET
+    CURLFILETYPE_DOOR
+    CURLFILETYPE_UNKNOWN
+;
+
+ENUM: CURLcode
+    CURLE_OK
+    CURLE_UNSUPPORTED_PROTOCOL
+    CURLE_FAILED_INIT
+    CURLE_URL_MALFORMAT
+    CURLE_NOT_BUILT_IN
+    CURLE_COULDNT_RESOLVE_PROXY
+    CURLE_COULDNT_RESOLVE_HOST
+    CURLE_COULDNT_CONNECT
+    CURLE_FTYP_WEIRD_SERVER_REPLY
+    CURLE_REMOTE_ACCESS_DENIED
+    CURLE_FTP_ACCEPT_FAILED
+    CURLE_FTP_WEIRD_PASS_REPLY
+    CURLE_FTP_ACCEPT_TIMEOUT
+    CURLE_FTP_WEIRD_PASV_REPLY
+    CURLE_FTP_WEIRD_227_FORMAT
+    CURLE_FTP_CANT_GET_HOST
+    CURLE_OBSOLETE16
+    CURLE_FTP_COULDNT_SET_TYPE
+    CURLE_PARTIAL_FILE
+    CURLE_FTP_COULDNT_RETR_FILE
+    CURLE_OBSOLETE20
+    CURLE_QUOTE_ERROR
+    CURLE_HTTP_RETURNED_ERROR
+    CURLE_WRITE_ERROR
+    CURLE_OBSOLETE24
+    CURLE_UPLOAD_FAILED
+    CURLE_READ_ERROR
+    CURLE_OUT_OF_MEMORY
+    CURLE_OPERATION_TIMEOUT
+    CURLE_OBSOLETE29
+    CURLE_FTP_PORT_FAILED
+    CURLE_FTP_COULDNT_USE_REST
+    CURLE_OBSOLETE32
+    CURLE_RANGE_ERROR
+    CURLE_HTTP_POST_ERROR
+    CURLE_SSL_CONNECT_ERROR
+    CURLE_BAD_DOWNLOAD_RESUME
+    CURLE_FILE_COULDNT_READ_FILE
+    CURLE_LDAP_CANNOT_BIND
+    CURLE_LDAP_SEARCH_FAILED
+    CURLE_OBSOLETE40
+    CURLE_FUNCTION_NOT_FOUND
+    CURLE_ABORTED_BY_CALLBACK
+    CURLE_BAD_FUNCTION_ARGUMENT
+    CURLE_OBSOLETE44
+    CURLE_INTERFACE_FAILED
+    CURLE_OBSOLETE46
+    CURLE_TOO_MANY_REDIRECTS
+    CURLE_UNKNOWN_OPTION
+    CURLE_TELNET_OPTION_SYNTAX
+    CURLE_OBSOLETE50
+    CURLE_PEER_FAILED_VERIFICATION
+    CURLE_GOT_NOTHING
+    CURLE_SSL_ENGINE_NOTFOUND
+    CURLE_SSL_ENGINE_SETFAILED
+    CURLE_SEND_ERROR
+    CURLE_RECV_ERROR
+    CURLE_OBSOLETE57
+    CURLE_SSL_CERTPROBLEM
+    CURLE_SSL_CIPHER
+    CURLE_SSL_CACERT
+    CURLE_BAD_CONTENT_ENCODING
+    CURLE_LDAP_INVALID_URL
+    CURLE_FILESIZE_EXCEEDED
+    CURLE_USE_SSL_FAILED
+    CURLE_SEND_FAIL_REWIND
+    CURLE_SSL_ENGINE_INITFAILED
+    CURLE_LOGIN_DENIED
+    CURLE_TFTP_NOTFOUND
+    CURLE_TFTP_PERM
+    CURLE_REMOTE_DISK_FULL
+    CURLE_TFTP_ILLEGAL
+    CURLE_TFTP_UNKNOWNID
+    CURLE_REMOTE_FILE_EXISTS
+    CURLE_TFTP_NOSUCHUSER
+    CURLE_CONV_FAILED
+    CURLE_CONV_REQD
+    CURLE_SSL_CACERT_BADFILE
+    CURLE_REMOTE_FILE_NOT_FOUND
+    CURLE_SSH
+    CURLE_SSL_SHUTDOWN_FAILED
+    CURLE_AGAIN
+    CURLE_SSL_CRL_BADFILE
+    CURLE_SSL_ISSUER_ERROR
+    CURLE_FTP_PRET_FAILED
+    CURLE_RTSP_CSEQ_ERROR
+    CURLE_RTSP_SESSION_ERROR
+    CURLE_FTP_BAD_FILE_LIST
+    CURLE_CHUNK_FAILED
+    CURLE_NO_CONNECTION_AVAILABLE
+;
+
+ENUM: CURLoption
+    { CURLOPT_FILE 10001 }
+    { CURLOPT_URL 10002 }
+    { CURLOPT_PORT 3 }
+    { CURLOPT_PROXY 10004 }
+    { CURLOPT_USERPWD 10005 }
+    { CURLOPT_PROXYUSERPWD 10006 }
+    { CURLOPT_RANGE 10007 }
+    { CURLOPT_INFILE 10009 }
+    { CURLOPT_ERRORBUFFER 10010 }
+    { CURLOPT_WRITEFUNCTION 20011 }
+    { CURLOPT_READFUNCTION 20012 }
+    { CURLOPT_TIMEOUT 13 }
+    { CURLOPT_INFILESIZE 14 }
+    { CURLOPT_POSTFIELDS 10015 }
+    { CURLOPT_REFERER 10016 }
+    { CURLOPT_FTPPORT 10017 }
+    { CURLOPT_USERAGENT 10018 }
+    { CURLOPT_LOW_SPEED_LIMIT 19 }
+    { CURLOPT_LOW_SPEED_TIME 20 }
+    { CURLOPT_RESUME_FROM 21 }
+    { CURLOPT_COOKIE 10022 }
+    { CURLOPT_HTTPHEADER 10023 }
+    { CURLOPT_HTTPPOST 10024 }
+    { CURLOPT_SSLCERT 10025 }
+    { CURLOPT_KEYPASSWD 10026 }
+    { CURLOPT_CRLF 27 }
+    { CURLOPT_QUOTE 10028 }
+    { CURLOPT_WRITEHEADER 10029 }
+    { CURLOPT_COOKIEFILE 10031 }
+    { CURLOPT_SSLVERSION 32 }
+    { CURLOPT_TIMECONDITION 33 }
+    { CURLOPT_TIMEVALUE 34 }
+    { CURLOPT_CUSTOMREQUEST 10036 }
+    { CURLOPT_STDERR 10037 }
+    { CURLOPT_POSTQUOTE 10039 }
+    { CURLOPT_WRITEINFO 10040 }
+    { CURLOPT_VERBOSE 41 }
+    { CURLOPT_HEADER 42 }
+    { CURLOPT_NOPROGRESS 43 }
+    { CURLOPT_NOBODY 44 }
+    { CURLOPT_FAILONERROR 45 }
+    { CURLOPT_UPLOAD 46 }
+    { CURLOPT_POST 47 }
+    { CURLOPT_DIRLISTONLY 48 }
+    { CURLOPT_APPEND 50 }
+    { CURLOPT_NETRC 51 }
+    { CURLOPT_FOLLOWLOCATION 52 }
+    { CURLOPT_TRANSFERTEXT 53 }
+    { CURLOPT_PUT 54 }
+    { CURLOPT_PROGRESSFUNCTION 20056 }
+    { CURLOPT_PROGRESSDATA 10057 }
+    { CURLOPT_AUTOREFERER 58 }
+    { CURLOPT_PROXYPORT 59 }
+    { CURLOPT_POSTFIELDSIZE 60 }
+    { CURLOPT_HTTPPROXYTUNNEL 61 }
+    { CURLOPT_INTERFACE 10062 }
+    { CURLOPT_KRBLEVEL 10063 }
+    { CURLOPT_SSL_VERIFYPEER 64 }
+    { CURLOPT_CAINFO 10065 }
+    { CURLOPT_MAXREDIRS 68 }
+    { CURLOPT_FILETIME 69 }
+    { CURLOPT_TELNETOPTIONS 10070 }
+    { CURLOPT_MAXCONNECTS 71 }
+    { CURLOPT_CLOSEPOLICY 72 }
+    { CURLOPT_FRESH_CONNECT 74 }
+    { CURLOPT_FORBID_REUSE 75 }
+    { CURLOPT_RANDOM_FILE 10076 }
+    { CURLOPT_EGDSOCKET 10077 }
+    { CURLOPT_CONNECTTIMEOUT 78 }
+    { CURLOPT_HEADERFUNCTION 20079 }
+    { CURLOPT_HTTPGET 80 }
+    { CURLOPT_SSL_VERIFYHOST 81 }
+    { CURLOPT_COOKIEJAR 10082 }
+    { CURLOPT_SSL_CIPHER_LIST 10083 }
+    { CURLOPT_HTTP_VERSION 84 }
+    { CURLOPT_FTP_USE_EPSV 85 }
+    { CURLOPT_SSLCERTTYPE 10086 }
+    { CURLOPT_SSLKEY 10087 }
+    { CURLOPT_SSLKEYTYPE 10088 }
+    { CURLOPT_SSLENGINE 10089 }
+    { CURLOPT_SSLENGINE_DEFAULT 90 }
+    { CURLOPT_DNS_USE_GLOBAL_CACHE 91 }
+    { CURLOPT_DNS_CACHE_TIMEOUT 92 }
+    { CURLOPT_PREQUOTE 10093 }
+    { CURLOPT_DEBUGFUNCTION 20094 }
+    { CURLOPT_DEBUGDATA 10095 }
+    { CURLOPT_COOKIESESSION 96 }
+    { CURLOPT_CAPATH 10097 }
+    { CURLOPT_BUFFERSIZE 98 }
+    { CURLOPT_NOSIGNAL 99 }
+    { CURLOPT_SHARE 10100 }
+    { CURLOPT_PROXYTYPE 101 }
+    { CURLOPT_ACCEPT_ENCODING 10102 }
+    { CURLOPT_PRIVATE 10103 }
+    { CURLOPT_HTTP200ALIASES 10104 }
+    { CURLOPT_UNRESTRICTED_AUTH 105 }
+    { CURLOPT_FTP_USE_EPRT 106 }
+    { CURLOPT_HTTPAUTH 107 }
+    { CURLOPT_SSL_CTX_FUNCTION 20108 }
+    { CURLOPT_SSL_CTX_DATA 10109 }
+    { CURLOPT_FTP_CREATE_MISSING_DIRS 110 }
+    { CURLOPT_PROXYAUTH 111 }
+    { CURLOPT_SERVER_RESPONSE_TIMEOUT 112 }
+    { CURLOPT_IPRESOLVE 113 }
+    { CURLOPT_MAXFILESIZE 114 }
+    { CURLOPT_INFILESIZE_LARGE 30115 }
+    { CURLOPT_RESUME_FROM_LARGE 30116 }
+    { CURLOPT_MAXFILESIZE_LARGE 30117 }
+    { CURLOPT_NETRC_FILE 10118 }
+    { CURLOPT_USE_SSL 119 }
+    { CURLOPT_POSTFIELDSIZE_LARGE 30120 }
+    { CURLOPT_TCP_NODELAY 121 }
+    { CURLOPT_FTPSSLAUTH 129 }
+    { CURLOPT_IOCTLFUNCTION 20130 }
+    { CURLOPT_IOCTLDATA 10131 }
+    { CURLOPT_FTP_ACCOUNT 10134 }
+    { CURLOPT_COOKIELIST 10135 }
+    { CURLOPT_IGNORE_CONTENT_LENGTH 136 }
+    { CURLOPT_FTP_SKIP_PASV_IP 137 }
+    { CURLOPT_FTP_FILEMETHOD 138 }
+    { CURLOPT_LOCALPORT 139 }
+    { CURLOPT_LOCALPORTRANGE 140 }
+    { CURLOPT_CONNECT_ONLY 141 }
+    { CURLOPT_CONV_FROM_NETWORK_FUNCTION 20142 }
+    { CURLOPT_CONV_TO_NETWORK_FUNCTION 20143 }
+    { CURLOPT_CONV_FROM_UTF8_FUNCTION 20144 }
+    { CURLOPT_MAX_SEND_SPEED_LARGE 30145 }
+    { CURLOPT_MAX_RECV_SPEED_LARGE 30146 }
+    { CURLOPT_FTP_ALTERNATIVE_TO_USER 10147 }
+    { CURLOPT_SOCKOPTFUNCTION 20148 }
+    { CURLOPT_SOCKOPTDATA 10149 }
+    { CURLOPT_SSL_SESSIONID_CACHE 150 }
+    { CURLOPT_SSH_AUTH_TYPES 151 }
+    { CURLOPT_SSH_PUBLIC_KEYFILE 10152 }
+    { CURLOPT_SSH_PRIVATE_KEYFILE 10153 }
+    { CURLOPT_FTP_SSL_CCC 154 }
+    { CURLOPT_TIMEOUT_MS 155 }
+    { CURLOPT_CONNECTTIMEOUT_MS 156 }
+    { CURLOPT_HTTP_TRANSFER_DECODING 157 }
+    { CURLOPT_HTTP_CONTENT_DECODING 158 }
+    { CURLOPT_NEWFILE_PERMS 159 }
+    { CURLOPT_NEW_DIRECTORY_PERMS 160 }
+    { CURLOPT_POSTREDIR 161 }
+    { CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 10162 }
+    { CURLOPT_OPENSOCKETFUNCTION 20163 }
+    { CURLOPT_OPENSOCKETDATA 10164 }
+    { CURLOPT_COPYPOSTFIELD 10165 }
+    { CURLOPT_PROXY_TRANSFER_MODE 166 }
+    { CURLOPT_SEEKFUNCTION 20167 }
+    { CURLOPT_SEEKDATA 10168 }
+    { CURLOPT_CRLFILE 10169 }
+    { CURLOPT_ISSUERCERT 10170 }
+    { CURLOPT_ADDRESS_SCOPE 171 }
+    { CURLOPT_CERTINFO 172 }
+    { CURLOPT_USERNAME 10173 }
+    { CURLOPT_PASSWORD 10174 }
+    { CURLOPT_PROXYUSERNAME 10175 }
+    { CURLOPT_PROXYPASSWORD 10176 }
+    { CURLOPT_NOPROXY 10177 }
+    { CURLOPT_TFTP_BLKSIZE 178 }
+    { CURLOPT_SOCKS5_GSSAPI_SERVICE 10179 }
+    { CURLOPT_SOCKS5_GSSAPI_NEC 10180 }
+    { CURLOPT_PROTOCOLS 181 }
+    { CURLOPT_REDIR_PROTOCOLS 182 }
+    { CURLOPT_SSH_KNOWNHOSTS 10183 }
+    { CURLOPT_SSH_KEYFUNCTION 20184 }
+    { CURLOPT_SSH_KEYDATA 10185 }
+    { CURLOPT_MAIL_FROM 10186 }
+    { CURLOPT_MAIL_RCPT 10187 }
+    { CURLOPT_FTP_USE_PRET 188 }
+    { CURLOPT_RTSP_REQUEST 189 }
+    { CURLOPT_RTSP_SESSION_ID 10190 }
+    { CURLOPT_RTSP_STREAM_URI 10191 }
+    { CURLOPT_RTSP_TRANSPORT 10192 }
+    { CURLOPT_RTSP_CLIENT_CSEQ 193 }
+    { CURLOPT_RTSP_SERVER_CSEQ 194 }
+    { CURLOPT_INTERLEAVEDATA 10195 }
+    { CURLOPT_INTERLEAVEFUNCTION 20196 }
+    { CURLOPT_WILDCARDMATCH 197 }
+    { CURLOPT_CHUNK_BGN_FUNCTION 20198 }
+    { CURLOPT_CHUNK_END_FUNCTION 20199 }
+    { CURLOPT_FNMATCH_FUNCTION 20200 }
+    { CURLOPT_CHUNK_DATA 10201 }
+    { CURLOPT_FNMATCH_DATA 10202 }
+    { CURLOPT_RESOLVE 10203 }
+    { CURLOPT_TLSAUTH_USERNAME 10204 }
+    { CURLOPT_TLSAUTH_PASSWORD 10205 }
+    { CURLOPT_TLSAUTH_TYPE 10206 }
+    { CURLOPT_TRANSFER_ENCODING 207 }
+    { CURLOPT_CLOSESOCKETFUNCTION 20208 }
+    { CURLOPT_CLOSESOCKETDATA 10209 }
+    { CURLOPT_GSSAPI_DELEGATION 210 }
+    { CURLOPT_DNS_SERVERS 10211 }
+    { CURLOPT_ACCEPTTIMEOUT_MS 212 }
+    { CURLOPT_TCP_KEEPALIVE 213 }
+    { CURLOPT_TCP_KEEPIDLE 214 }
+    { CURLOPT_TCP_KEEPINTVL 215 }
+    { CURLOPT_SSL_OPTIONS 216 }
+    { CURLOPT_MAIL_AUTH 10217 }
+;
+
+ALIAS: CURLOPT_WRITEDATA CURLOPT_FILE
+ALIAS: CURLOPT_READDATA CURLOPT_INFILE
+ALIAS: CURLOPT_HEADERDATA CURLOPT_WRITEHEADER
+ALIAS: CURLOPT_RTSPHEADER CURLOPT_HTTPHEADER
+
+! easy.h
+
+TYPEDEF: void CURL
+TYPEDEF: int64_t curl_off_t
+
+FUNCTION: CURL* curl_easy_init ( ) ;
+
+FUNCTION-ALIAS: curl_easy_setopt_long
+    CURLcode curl_easy_setopt ( CURL* curl, CURLoption option, long value ) ;
+
+FUNCTION-ALIAS: curl_easy_setopt_string
+    CURLcode curl_easy_setopt ( CURL* curl, CURLoption option, c-string value ) ;
+
+FUNCTION-ALIAS: curl_easy_setopt_pointer
+    CURLcode curl_easy_setopt ( CURL* curl, CURLoption option, void* value ) ;
+
+FUNCTION-ALIAS: curl_easy_setopt_curl_off_t
+    CURLcode curl_easy_setopt ( CURL* curl, CURLoption option, curl_off_t value ) ;
+
+FUNCTION: CURLcode curl_easy_perform ( CURL* curl ) ;
+
+FUNCTION: void curl_easy_cleanup ( CURL* curl ) ;
+
+FUNCTION: c-string curl_easy_escape ( CURL* curl, c-string string, int length ) ;
+
+FUNCTION: c-string curl_easy_unescape ( CURL* handle, c-string string, int length, int* outlength ) ;
+
+: curl_easy_setopt ( curl option value -- code )
+    over enum>number {
+        { [ dup 30000 > ] [ drop curl_easy_setopt_curl_off_t ] }
+        { [ dup 20000 > ] [ drop curl_easy_setopt_pointer ] }
+        { [ dup 10000 > ] [ drop curl_easy_setopt_string ] }
+        [ drop curl_easy_setopt_long ]
+    } cond ;
+
+CALLBACK: size_t write_callback ( char *buffer, size_t size, size_t nitems, void *outstream ) ;
+
+CALLBACK: long chunk_bgn_callback ( void* transfer_info, void* ptr, int remains ) ;
+
+CALLBACK: long chunk_end_callback ( void* ptr ) ;
+
+CALLBACK: int fnmatch_callback ( void* ptr, c-string pattern, c-string string ) ;
+
+CALLBACK: int seek_callback ( void* instream, curl_off_t offset, int origin ) ;
+
+CALLBACK: size_t read_callback ( char* buffer, size_t size, size_t nitems, void* instream ) ;
+
+ENUM: curlsocktype
+    CURLSOCKTYPE_IPCXN
+    CURLSOCKTYPE_ACCEPT
+    CURLSOCKTYPE_LAST
+;
+
+CONSTANT: CURL_SOCKOPT_OK 0
+CONSTANT: CURL_SOCKOPT_ERROR 1
+CONSTANT: CURL_SOCKOPT_ALREADY_CONNECTED 2
+
+TYPEDEF: int curl_socket_t
+
+CALLBACK: int sockopt_callback ( void* clientp, curl_socket_t curlfd, curlsocktype purpose ) ;
+
+STRUCT: curl_sockaddr
+    { family int }
+    { socktype int }
+    { protocol int }
+    { addrlen uint }
+;
+
+CALLBACK: curl_socket_t opensocket_callback ( void* clientp, curlsocktype purpose, curl_sockaddr* address ) ;
+
+CALLBACK: int closesocket_callback ( void* clientp, curl_socket_t item ) ;
+
+ENUM: curlioerr
+    CURLIOE_OK
+    CURLIOE_UNKNOWNCMD
+    CURLIOE_FAILRESTART
+    CURLIOE_LAST
+;
+
+ENUM: curliocmd
+    CURLIOCMD_NOP
+    CURLIOCMD_RESTARTREAD
+    CURLIOCMD_LAST
+;
+
+CALLBACK: curlioerr ioctl_callback ( CURL* handle, int cmd, void* clientp ) ;
+
+CALLBACK: void* malloc_callback ( size_t size ) ;
+CALLBACK: void free_callback ( void* ptr ) ;
+CALLBACK: void* realloc_callback ( void* ptr, size_t size ) ;
+CALLBACK: char* strdup_callback ( char* str ) ;
+CALLBACK: void* calloc_callback ( size_t nmemb, size_t size ) ;
+
+ENUM: curl_infotype
+    CURLINFO_TEXT
+    CURLINFO_HEADER_IN
+    CURLINFO_HEADER_OUT
+    CURLINFO_DATA_IN
+    CURLINFO_DATA_OUT
+    CURLINFO_SSL_DATA_IN
+    CURLINFO_SSL_DATA_OUT
+    CURLINFO_END
+;
+
+CALLBACK: int debug_callback ( CURL* handle, curl_infotype type, char* data, size_t size, void* userptr ) ;
+
+CALLBACK: CURLcode conv_callback ( char* buffer, size_t length ) ;
+
+CALLBACK: CURLcode ssl_ctx_callback ( CURL* curl, void* ssl_ctx, void* userptr ) ;
+
+ENUM: curl_proxytype
+    { CURLPROXY_HTTP 0 }
+    { CURLPROXY_HTTP_1_0 1 }
+    { CURLPROXY_SOCKS4 4 }
+    { CURLPROXY_SOCKS5 5 }
+    { CURLPROXY_SOCKS4A 6 }
+    { CURLPROXY_SOCKS5_HOSTNAME 7 }
+;
+
+! multi.h
diff --git a/extra/curl/ffi/platforms.txt b/extra/curl/ffi/platforms.txt
new file mode 100644 (file)
index 0000000..509143d
--- /dev/null
@@ -0,0 +1 @@
+unix
diff --git a/extra/curl/platforms.txt b/extra/curl/platforms.txt
new file mode 100644 (file)
index 0000000..509143d
--- /dev/null
@@ -0,0 +1 @@
+unix
diff --git a/extra/curl/summary.txt b/extra/curl/summary.txt
new file mode 100644 (file)
index 0000000..46ff146
--- /dev/null
@@ -0,0 +1 @@
+Bindings to libcurl