├── .gitignore ├── LICENSE.txt ├── README.md ├── libcurl.nim └── libcurl.nimble /.gitignore: -------------------------------------------------------------------------------- 1 | nimcache/ 2 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Andreas Rumpf 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## libcurl.nim 2 | Nim wrapper for libcurl (v7.x) 3 | 4 | ## libcurl v7.x 5 | - source/binary packages - all platforms: https://curl.haxx.se/download.html 6 | - buid instructions - all platforms: https://curl.haxx.se/docs/install.html 7 | - binary package (.dll) - windows users: https://curl.haxx.se/windows/ 8 | 9 | ## basic example 10 | 11 | ```nim 12 | import libcurl 13 | 14 | proc curlWriteFn( 15 | buffer: cstring, 16 | size: int, 17 | count: int, 18 | outstream: pointer): int = 19 | 20 | let outbuf = cast[ref string](outstream) 21 | outbuf[] &= buffer 22 | result = size * count 23 | 24 | let webData: ref string = new string 25 | let curl = easy_init() 26 | 27 | discard curl.easy_setopt(OPT_USERAGENT, "Mozilla/5.0") 28 | discard curl.easy_setopt(OPT_HTTPGET, 1) 29 | discard curl.easy_setopt(OPT_WRITEDATA, webData) 30 | discard curl.easy_setopt(OPT_WRITEFUNCTION, curlWriteFn) 31 | discard curl.easy_setopt(OPT_URL, "http://localhost/") 32 | 33 | let ret = curl.easy_perform() 34 | if ret == E_OK: 35 | echo(webData[]) 36 | ``` 37 | 38 | see also: https://curl.haxx.se/libcurl/c/example.html 39 | -------------------------------------------------------------------------------- /libcurl.nim: -------------------------------------------------------------------------------- 1 | # 2 | # 3 | # Curl Wrapper for Nim 4 | # (c) Copyright 2015 Andreas Rumpf, Dominik Picheta 5 | # 6 | # See the file "LICENSE.txt", included in this 7 | # distribution, for details about the copyright. 8 | # 9 | 10 | ## The curl library is governed by its own copyright, see the curl 11 | ## website for this. 12 | 13 | import 14 | times 15 | 16 | when defined(windows): 17 | const 18 | libname = "libcurl.dll" 19 | elif defined(macosx): 20 | const 21 | libname = "libcurl(|.4).dylib" 22 | elif defined(unix): 23 | const 24 | libname = "libcurl.so(|.4)" 25 | type 26 | Pcalloc_callback* = ptr Calloc_callback 27 | Pclosepolicy* = ptr Closepolicy 28 | Pforms* = ptr Forms 29 | Pftpauth* = ptr Ftpauth 30 | Pftpmethod* = ptr Ftpmethod 31 | Pftpssl* = ptr Ftpssl 32 | PHTTP_VERSION* = ptr HTTP_VERSION 33 | Phttppost* = ptr Httppost 34 | PPcurl_httppost* = ptr Phttppost 35 | Pinfotype* = ptr Infotype 36 | Plock_access* = ptr Lock_access 37 | Plock_data* = ptr Lock_data 38 | Pmalloc_callback* = ptr Malloc_callback 39 | PNETRC_OPTION* = ptr NETRC_OPTION 40 | Pproxytype* = ptr Proxytype 41 | Prealloc_callback* = ptr Realloc_callback 42 | Pslist* = ptr Slist 43 | Psocket* = ptr Socket 44 | PSSL_VERSION* = ptr SSL_VERSION 45 | Pstrdup_callback* = ptr Strdup_callback 46 | PTIMECOND* = ptr TIMECOND 47 | Pversion_info_data* = ptr Version_info_data 48 | Pcode* = ptr Code 49 | PFORMcode* = ptr FORMcode 50 | Pformoption* = ptr Formoption 51 | PINFO* = ptr INFO 52 | Piocmd* = ptr Iocmd 53 | Pioerr* = ptr Ioerr 54 | PM* = ptr M 55 | PMcode* = ptr Mcode 56 | PMoption* = ptr Moption 57 | PMSG* = ptr MSG 58 | Poption* = ptr Option 59 | PSH* = ptr SH 60 | PSHcode* = ptr SHcode 61 | PSHoption* = ptr SHoption 62 | Pversion* = ptr Version 63 | Pfd_set* = pointer 64 | PCurl* = ptr Curl 65 | Curl* = pointer 66 | Httppost*{.final, pure.} = object 67 | next*: Phttppost 68 | name*: cstring 69 | namelength*: int32 70 | contents*: cstring 71 | contentslength*: int32 72 | buffer*: cstring 73 | bufferlength*: int32 74 | contenttype*: cstring 75 | contentheader*: Pslist 76 | more*: Phttppost 77 | flags*: int32 78 | showfilename*: cstring 79 | 80 | Progress_callback* = proc (clientp: pointer, dltotal: float64, 81 | dlnow: float64, ultotal: float64, 82 | ulnow: float64): int32 {.cdecl.} 83 | Write_callback* = proc (buffer: cstring, size: int, nitems: int, 84 | outstream: pointer): int{.cdecl.} 85 | Read_callback* = proc (buffer: cstring, size: int, nitems: int, 86 | instream: pointer): int{.cdecl.} 87 | Passwd_callback* = proc (clientp: pointer, prompt: cstring, buffer: cstring, 88 | buflen: int32): int32{.cdecl.} 89 | Ioerr* = enum 90 | IOE_OK, IOE_UNKNOWNCMD, IOE_FAILRESTART, IOE_LAST 91 | Iocmd* = enum 92 | IOCMD_NOP, IOCMD_RESTARTREAD, IOCMD_LAST 93 | Ioctl_callback* = proc (handle: PCurl, cmd: int32, clientp: pointer): Ioerr{. 94 | cdecl.} 95 | Malloc_callback* = proc (size: int): pointer{.cdecl.} 96 | Free_callback* = proc (p: pointer){.cdecl.} 97 | Realloc_callback* = proc (p: pointer, size: int): pointer{.cdecl.} 98 | Strdup_callback* = proc (str: cstring): cstring{.cdecl.} 99 | Calloc_callback* = proc (nmemb: int, size: int): pointer{.noconv.} 100 | Infotype* = enum 101 | INFO_TEXT = 0, INFO_HEADER_IN, INFO_HEADER_OUT, INFO_DATA_IN, INFO_DATA_OUT, 102 | INFO_SSL_DATA_IN, INFO_SSL_DATA_OUT, INFO_END 103 | Debug_callback* = proc (handle: PCurl, theType: Infotype, data: cstring, 104 | size: int, userptr: pointer): int32{.cdecl.} 105 | Code* = enum 106 | E_OK = 0, E_UNSUPPORTED_PROTOCOL, E_FAILED_INIT, E_URL_MALFORMAT, 107 | E_URL_MALFORMAT_USER, E_COULDNT_RESOLVE_PROXY, E_COULDNT_RESOLVE_HOST, 108 | E_COULDNT_CONNECT, E_FTP_WEIRD_SERVER_REPLY, E_FTP_ACCESS_DENIED, 109 | E_FTP_USER_PASSWORD_INCORRECT, E_FTP_WEIRD_PASS_REPLY, 110 | E_FTP_WEIRD_USER_REPLY, E_FTP_WEIRD_PASV_REPLY, E_FTP_WEIRD_227_FORMAT, 111 | E_FTP_CANT_GET_HOST, E_FTP_CANT_RECONNECT, E_FTP_COULDNT_SET_BINARY, 112 | E_PARTIAL_FILE, E_FTP_COULDNT_RETR_FILE, E_FTP_WRITE_ERROR, 113 | E_FTP_QUOTE_ERROR, E_HTTP_RETURNED_ERROR, E_WRITE_ERROR, E_MALFORMAT_USER, 114 | E_FTP_COULDNT_STOR_FILE, E_READ_ERROR, E_OUT_OF_MEMORY, 115 | E_OPERATION_TIMEOUTED, E_FTP_COULDNT_SET_ASCII, E_FTP_PORT_FAILED, 116 | E_FTP_COULDNT_USE_REST, E_FTP_COULDNT_GET_SIZE, E_HTTP_RANGE_ERROR, 117 | E_HTTP_POST_ERROR, E_SSL_CONNECT_ERROR, E_BAD_DOWNLOAD_RESUME, 118 | E_FILE_COULDNT_READ_FILE, E_LDAP_CANNOT_BIND, E_LDAP_SEARCH_FAILED, 119 | E_LIBRARY_NOT_FOUND, E_FUNCTION_NOT_FOUND, E_ABORTED_BY_CALLBACK, 120 | E_BAD_FUNCTION_ARGUMENT, E_BAD_CALLING_ORDER, E_INTERFACE_FAILED, 121 | E_BAD_PASSWORD_ENTERED, E_TOO_MANY_REDIRECTS, E_UNKNOWN_TELNET_OPTION, 122 | E_TELNET_OPTION_SYNTAX, E_OBSOLETE, E_SSL_PEER_CERTIFICATE, E_GOT_NOTHING, 123 | E_SSL_ENGINE_NOTFOUND, E_SSL_ENGINE_SETFAILED, E_SEND_ERROR, E_RECV_ERROR, 124 | E_SHARE_IN_USE, E_SSL_CERTPROBLEM, E_SSL_CIPHER, E_SSL_CACERT, 125 | E_BAD_CONTENT_ENCODING, E_LDAP_INVALID_URL, E_FILESIZE_EXCEEDED, 126 | E_FTP_SSL_FAILED, E_SEND_FAIL_REWIND, E_SSL_ENGINE_INITFAILED, 127 | E_LOGIN_DENIED, E_TFTP_NOTFOUND, E_TFTP_PERM, E_TFTP_DISKFULL, 128 | E_TFTP_ILLEGAL, E_TFTP_UNKNOWNID, E_TFTP_EXISTS, E_TFTP_NOSUCHUSER, 129 | E_CONV_FAILED, E_CONV_REQD, LAST 130 | Conv_callback* = proc (buffer: cstring, len: int): Code{.cdecl.} 131 | Ssl_ctx_callback* = proc (curl: PCurl, ssl_ctx, userptr: pointer): Code{.cdecl.} 132 | Proxytype* = enum 133 | PROXY_HTTP = 0, PROXY_SOCKS4 = 4, PROXY_SOCKS5 = 5 134 | Ftpssl* = enum 135 | FTPSSL_NONE, FTPSSL_TRY, FTPSSL_CONTROL, FTPSSL_ALL, FTPSSL_LAST 136 | Ftpauth* = enum 137 | FTPAUTH_DEFAULT, FTPAUTH_SSL, FTPAUTH_TLS, FTPAUTH_LAST 138 | Ftpmethod* = enum 139 | FTPMETHOD_DEFAULT, FTPMETHOD_MULTICWD, FTPMETHOD_NOCWD, FTPMETHOD_SINGLECWD, 140 | FTPMETHOD_LAST 141 | Option* = enum 142 | OPT_PORT = 0 + 3, OPT_TIMEOUT = 0 + 13, OPT_INFILESIZE = 0 + 14, 143 | OPT_LOW_SPEED_LIMIT = 0 + 19, OPT_LOW_SPEED_TIME = 0 + 20, 144 | OPT_RESUME_FROM = 0 + 21, OPT_CRLF = 0 + 27, OPT_SSLVERSION = 0 + 32, 145 | OPT_TIMECONDITION = 0 + 33, OPT_TIMEVALUE = 0 + 34, OPT_VERBOSE = 0 + 41, 146 | OPT_HEADER = 0 + 42, OPT_NOPROGRESS = 0 + 43, OPT_NOBODY = 0 + 44, 147 | OPT_FAILONERROR = 0 + 45, OPT_UPLOAD = 0 + 46, OPT_POST = 0 + 47, 148 | OPT_FTPLISTONLY = 0 + 48, OPT_FTPAPPEND = 0 + 50, OPT_NETRC = 0 + 51, 149 | OPT_FOLLOWLOCATION = 0 + 52, OPT_TRANSFERTEXT = 0 + 53, OPT_PUT = 0 + 54, 150 | OPT_AUTOREFERER = 0 + 58, OPT_PROXYPORT = 0 + 59, 151 | OPT_POSTFIELDSIZE = 0 + 60, OPT_HTTPPROXYTUNNEL = 0 + 61, 152 | OPT_SSL_VERIFYPEER = 0 + 64, OPT_MAXREDIRS = 0 + 68, OPT_FILETIME = 0 + 69, 153 | OPT_MAXCONNECTS = 0 + 71, OPT_CLOSEPOLICY = 0 + 72, 154 | OPT_FRESH_CONNECT = 0 + 74, OPT_FORBID_REUSE = 0 + 75, 155 | OPT_CONNECTTIMEOUT = 0 + 78, OPT_HTTPGET = 0 + 80, 156 | OPT_SSL_VERIFYHOST = 0 + 81, OPT_HTTP_VERSION = 0 + 84, 157 | OPT_FTP_USE_EPSV = 0 + 85, OPT_SSLENGINE_DEFAULT = 0 + 90, 158 | OPT_DNS_USE_GLOBAL_CACHE = 0 + 91, OPT_DNS_CACHE_TIMEOUT = 0 + 92, 159 | OPT_COOKIESESSION = 0 + 96, OPT_BUFFERSIZE = 0 + 98, OPT_NOSIGNAL = 0 + 99, 160 | OPT_PROXYTYPE = 0 + 101, OPT_UNRESTRICTED_AUTH = 0 + 105, 161 | OPT_FTP_USE_EPRT = 0 + 106, OPT_HTTPAUTH = 0 + 107, 162 | OPT_FTP_CREATE_MISSING_DIRS = 0 + 110, OPT_PROXYAUTH = 0 + 111, 163 | OPT_FTP_RESPONSE_TIMEOUT = 0 + 112, OPT_IPRESOLVE = 0 + 113, 164 | OPT_MAXFILESIZE = 0 + 114, OPT_FTP_SSL = 0 + 119, OPT_TCP_NODELAY = 0 + 121, 165 | OPT_FTPSSLAUTH = 0 + 129, OPT_IGNORE_CONTENT_LENGTH = 0 + 136, 166 | OPT_FTP_SKIP_PASV_IP = 0 + 137, OPT_FTP_FILEMETHOD = 0 + 138, 167 | OPT_LOCALPORT = 0 + 139, OPT_LOCALPORTRANGE = 0 + 140, 168 | OPT_CONNECT_ONLY = 0 + 141, OPT_FILE = 10000 + 1, OPT_URL = 10000 + 2, 169 | OPT_PROXY = 10000 + 4, OPT_USERPWD = 10000 + 5, 170 | OPT_PROXYUSERPWD = 10000 + 6, OPT_RANGE = 10000 + 7, OPT_INFILE = 10000 + 9, 171 | OPT_ERRORBUFFER = 10000 + 10, OPT_POSTFIELDS = 10000 + 15, 172 | OPT_REFERER = 10000 + 16, OPT_FTPPORT = 10000 + 17, 173 | OPT_USERAGENT = 10000 + 18, OPT_COOKIE = 10000 + 22, 174 | OPT_HTTPHEADER = 10000 + 23, OPT_HTTPPOST = 10000 + 24, 175 | OPT_SSLCERT = 10000 + 25, OPT_SSLCERTPASSWD = 10000 + 26, 176 | OPT_QUOTE = 10000 + 28, OPT_WRITEHEADER = 10000 + 29, 177 | OPT_COOKIEFILE = 10000 + 31, OPT_CUSTOMREQUEST = 10000 + 36, 178 | OPT_STDERR = 10000 + 37, OPT_POSTQUOTE = 10000 + 39, 179 | OPT_WRITEINFO = 10000 + 40, OPT_PROGRESSDATA = 10000 + 57, 180 | OPT_INTERFACE = 10000 + 62, OPT_KRB4LEVEL = 10000 + 63, 181 | OPT_CAINFO = 10000 + 65, OPT_TELNETOPTIONS = 10000 + 70, 182 | OPT_RANDOM_FILE = 10000 + 76, OPT_EGDSOCKET = 10000 + 77, 183 | OPT_COOKIEJAR = 10000 + 82, OPT_SSL_CIPHER_LIST = 10000 + 83, 184 | OPT_SSLCERTTYPE = 10000 + 86, OPT_SSLKEY = 10000 + 87, 185 | OPT_SSLKEYTYPE = 10000 + 88, OPT_SSLENGINE = 10000 + 89, 186 | OPT_PREQUOTE = 10000 + 93, OPT_DEBUGDATA = 10000 + 95, 187 | OPT_CAPATH = 10000 + 97, OPT_SHARE = 10000 + 100, 188 | OPT_ENCODING = 10000 + 102, OPT_PRIVATE = 10000 + 103, 189 | OPT_HTTP200ALIASES = 10000 + 104, OPT_SSL_CTX_DATA = 10000 + 109, 190 | OPT_NETRC_FILE = 10000 + 118, OPT_SOURCE_USERPWD = 10000 + 123, 191 | OPT_SOURCE_PREQUOTE = 10000 + 127, OPT_SOURCE_POSTQUOTE = 10000 + 128, 192 | OPT_IOCTLDATA = 10000 + 131, OPT_SOURCE_URL = 10000 + 132, 193 | OPT_SOURCE_QUOTE = 10000 + 133, OPT_FTP_ACCOUNT = 10000 + 134, 194 | OPT_COOKIELIST = 10000 + 135, OPT_FTP_ALTERNATIVE_TO_USER = 10000 + 147, 195 | OPT_LASTENTRY = 10000 + 148, OPT_USERNAME = 10000 + 173, 196 | OPT_PASSWORD = 10000 + 174, OPT_UNIX_SOCKET_PATH = 10000 + 231 197 | OPT_MIMEPOST = 10000 + 269, OPT_WRITEFUNCTION = 20000 + 11, 198 | OPT_READFUNCTION = 20000 + 12, OPT_PROGRESSFUNCTION = 20000 + 56, 199 | OPT_HEADERFUNCTION = 20000 + 79, OPT_DEBUGFUNCTION = 20000 + 94, 200 | OPT_SSL_CTX_FUNCTION = 20000 + 108, OPT_IOCTLFUNCTION = 20000 + 130, 201 | OPT_CONV_FROM_NETWORK_FUNCTION = 20000 + 142, 202 | OPT_CONV_TO_NETWORK_FUNCTION = 20000 + 143, 203 | OPT_CONV_FROM_UTF8_FUNCTION = 20000 + 144, 204 | OPT_INFILESIZE_LARGE = 30000 + 115, OPT_RESUME_FROM_LARGE = 30000 + 116, 205 | OPT_MAXFILESIZE_LARGE = 30000 + 117, OPT_POSTFIELDSIZE_LARGE = 30000 + 120, 206 | OPT_MAX_SEND_SPEED_LARGE = 30000 + 145, 207 | OPT_MAX_RECV_SPEED_LARGE = 30000 + 146 208 | HTTP_VERSION* = enum 209 | HTTP_VERSION_NONE, HTTP_VERSION_1_0, HTTP_VERSION_1_1, HTTP_VERSION_LAST 210 | NETRC_OPTION* = enum 211 | NETRC_IGNORED, NETRC_OPTIONAL, NETRC_REQUIRED, NETRC_LAST 212 | SSL_VERSION* = enum 213 | SSLVERSION_DEFAULT, SSLVERSION_TLSv1, SSLVERSION_SSLv2, SSLVERSION_SSLv3, 214 | SSLVERSION_TLSv1_0, SSLVERSION_TLSv1_1, SSLVERSION_TLSv1_2, SSLVERSION_TLSv1_3, 215 | SSLVERSION_LAST 216 | TIMECOND* = enum 217 | TIMECOND_NONE, TIMECOND_IFMODSINCE, TIMECOND_IFUNMODSINCE, TIMECOND_LASTMOD, 218 | TIMECOND_LAST 219 | Formoption* = enum 220 | FORM_NOTHING, FORM_COPYNAME, FORM_PTRNAME, FORM_NAMELENGTH, 221 | FORM_COPYCONTENTS, FORM_PTRCONTENTS, FORM_CONTENTSLENGTH, FORM_FILECONTENT, 222 | FORM_ARRAY, FORM_OBSOLETE, FORM_FILE, FORM_BUFFER, FORM_BUFFERPTR, 223 | FORM_BUFFERLENGTH, FORM_CONTENTTYPE, FORM_CONTENTHEADER, FORM_FILENAME, 224 | FORM_END, FORM_OBSOLETE2, FORM_LASTENTRY 225 | Forms*{.pure, final.} = object 226 | option*: Formoption 227 | value*: cstring 228 | 229 | FORMcode* = enum 230 | FORMADD_OK, FORMADD_MEMORY, FORMADD_OPTION_TWICE, FORMADD_NULL, 231 | FORMADD_UNKNOWN_OPTION, FORMADD_INCOMPLETE, FORMADD_ILLEGAL_ARRAY, 232 | FORMADD_DISABLED, FORMADD_LAST 233 | Formget_callback* = proc (arg: pointer, buf: cstring, length: int): int{. 234 | cdecl.} 235 | Slist*{.pure, final.} = object 236 | data*: cstring 237 | next*: Pslist 238 | 239 | INFO* = enum 240 | INFO_NONE = 0, INFO_LASTONE = 30, INFO_EFFECTIVE_URL = 0x00100000 + 1, 241 | INFO_CONTENT_TYPE = 0x00100000 + 18, INFO_PRIVATE = 0x00100000 + 21, 242 | INFO_FTP_ENTRY_PATH = 0x00100000 + 30, INFO_RESPONSE_CODE = 0x00200000 + 2, 243 | INFO_HEADER_SIZE = 0x00200000 + 11, INFO_REQUEST_SIZE = 0x00200000 + 12, 244 | INFO_SSL_VERIFYRESULT = 0x00200000 + 13, INFO_FILETIME = 0x00200000 + 14, 245 | INFO_REDIRECT_COUNT = 0x00200000 + 20, 246 | INFO_HTTP_CONNECTCODE = 0x00200000 + 22, 247 | INFO_HTTPAUTH_AVAIL = 0x00200000 + 23, 248 | INFO_PROXYAUTH_AVAIL = 0x00200000 + 24, INFO_OS_ERRNO = 0x00200000 + 25, 249 | INFO_NUM_CONNECTS = 0x00200000 + 26, INFO_LASTSOCKET = 0x00200000 + 29, 250 | INFO_TOTAL_TIME = 0x00300000 + 3, INFO_NAMELOOKUP_TIME = 0x00300000 + 4, 251 | INFO_CONNECT_TIME = 0x00300000 + 5, INFO_PRETRANSFER_TIME = 0x00300000 + 6, 252 | INFO_SIZE_UPLOAD = 0x00300000 + 7, INFO_SIZE_DOWNLOAD = 0x00300000 + 8, 253 | INFO_SPEED_DOWNLOAD = 0x00300000 + 9, INFO_SPEED_UPLOAD = 0x00300000 + 10, 254 | INFO_CONTENT_LENGTH_DOWNLOAD = 0x00300000 + 15, 255 | INFO_CONTENT_LENGTH_UPLOAD = 0x00300000 + 16, 256 | INFO_STARTTRANSFER_TIME = 0x00300000 + 17, 257 | INFO_REDIRECT_TIME = 0x00300000 + 19, INFO_SSL_ENGINES = 0x00400000 + 27, 258 | INFO_COOKIELIST = 0x00400000 + 28 259 | Closepolicy* = enum 260 | CLOSEPOLICY_NONE, CLOSEPOLICY_OLDEST, CLOSEPOLICY_LEAST_RECENTLY_USED, 261 | CLOSEPOLICY_LEAST_TRAFFIC, CLOSEPOLICY_SLOWEST, CLOSEPOLICY_CALLBACK, 262 | CLOSEPOLICY_LAST 263 | Lock_data* = enum 264 | LOCK_DATA_NONE = 0, LOCK_DATA_SHARE, LOCK_DATA_COOKIE, LOCK_DATA_DNS, 265 | LOCK_DATA_SSL_SESSION, LOCK_DATA_CONNECT, LOCK_DATA_LAST 266 | Lock_access* = enum 267 | LOCK_ACCESS_NONE = 0, LOCK_ACCESS_SHARED = 1, LOCK_ACCESS_SINGLE = 2, 268 | LOCK_ACCESS_LAST 269 | Lock_function* = proc (handle: PCurl, data: Lock_data, 270 | locktype: Lock_access, 271 | userptr: pointer){.cdecl.} 272 | Unlock_function* = proc (handle: PCurl, data: Lock_data, userptr: pointer){. 273 | cdecl.} 274 | SH* = pointer 275 | SHcode* = enum 276 | SHE_OK, SHE_BAD_OPTION, SHE_IN_USE, SHE_INVALID, SHE_NOMEM, SHE_LAST 277 | SHoption* = enum 278 | SHOPT_NONE, SHOPT_SHARE, SHOPT_UNSHARE, SHOPT_LOCKFUNC, SHOPT_UNLOCKFUNC, 279 | SHOPT_USERDATA, SHOPT_LAST 280 | Version* = enum 281 | VERSION_FIRST, VERSION_SECOND, VERSION_THIRD, VERSION_LAST 282 | Version_info_data*{.pure, final.} = object 283 | age*: Version 284 | version*: cstring 285 | version_num*: int32 286 | host*: cstring 287 | features*: int32 288 | ssl_version*: cstring 289 | ssl_version_num*: int32 290 | libz_version*: cstring 291 | protocols*: cstringArray 292 | ares*: cstring 293 | ares_num*: int32 294 | libidn*: cstring 295 | iconv_ver_num*: int32 296 | 297 | M* = pointer 298 | Socket* = int32 299 | Mcode* = enum 300 | M_CALL_MULTI_PERFORM = - 1, M_OK = 0, M_BAD_HANDLE, M_BAD_EASY_HANDLE, 301 | M_OUT_OF_MEMORY, M_INTERNAL_ERROR, M_BAD_SOCKET, M_UNKNOWN_OPTION, M_LAST 302 | MSGEnum* = enum 303 | MSG_NONE, MSG_DONE, MSG_LAST 304 | Msg*{.pure, final.} = object 305 | msg*: MSGEnum 306 | easy_handle*: PCurl 307 | whatever*: pointer #data : record 308 | # case longint of 309 | # 0 : ( whatever : pointer ); 310 | # 1 : ( result : CURLcode ); 311 | # end; 312 | 313 | Socket_callback* = proc (easy: PCurl, s: Socket, what: int32, 314 | userp, socketp: pointer): int32{.cdecl.} 315 | Moption* = enum 316 | MOPT_SOCKETDATA = 10000 + 2, MOPT_LASTENTRY = 10000 + 3, 317 | MOPT_SOCKETFUNCTION = 20000 + 1 318 | {.deprecated: [TMsg: Msg, TCurl: Curl, Thttppost: Httppost, 319 | Tprogress_callback: Progress_callback, Twrite_callback: Write_callback, 320 | Tread_callback: Read_callback, Tpasswd_callback: Passwd_callback, Tioerr: Ioerr, 321 | Tiocmd: Iocmd, Tioctl_callback: Ioctl_callback, Tmalloc_callback: Malloc_callback, 322 | Tfree_callback: Free_callback, Trealloc_callback: Realloc_callback, 323 | Tstrdup_callback: Strdup_callback, Tcalloc_callback: Calloc_callback, 324 | Tinfotype: Infotype, Tdebug_callback: Debug_callback, Tcode: Code, 325 | Tconv_callback: Conv_callback, Tssl_ctx_callback: Ssl_ctx_callback, 326 | Tproxytype: Proxytype, Tftpssl: Ftpssl, Tftpauth: Ftpauth, Tftpmethod: Ftpmethod, 327 | Toption: Option, THTTP_VERSION: HTTP_VERSION, TNETRC_OPTION: NETRC_OPTION, 328 | TSSL_VERSION: SSL_VERSION, TTIMECOND: TIMECOND, Tformoption: Formoption, 329 | Tforms: Forms, TFORMcode: FORMcode, Tformget_callback: Formget_callback, 330 | Tslist: Slist, TINFO: INFO, Tclosepolicy: Closepolicy, Tlock_data: Lock_data, 331 | Tlock_access: Lock_access, Tlock_function: Lock_function, 332 | Tunlock_function: Unlock_function, TSH: Sh, TSHcode: SHcode, TSHoption: SHoption, 333 | Tversion: Version, Tversion_info_data: Version_info_data, TM: M, Tsocket: Socket, 334 | TMcode: Mcode, TMSGEnum: MsGEnum, Tsocket_callback: Socket_callback, 335 | TMoption: Moption].} 336 | 337 | const 338 | OPT_SSLKEYPASSWD* = OPT_SSLCERTPASSWD 339 | AUTH_ANY* = not (0) 340 | AUTH_BASIC* = 1 shl 0 341 | AUTH_ANYSAFE* = not (AUTH_BASIC) 342 | AUTH_DIGEST* = 1 shl 1 343 | AUTH_GSSNEGOTIATE* = 1 shl 2 344 | AUTH_NONE* = 0 345 | AUTH_NTLM* = 1 shl 3 346 | E_ALREADY_COMPLETE* = 99999 347 | E_FTP_BAD_DOWNLOAD_RESUME* = E_BAD_DOWNLOAD_RESUME 348 | E_FTP_PARTIAL_FILE* = E_PARTIAL_FILE 349 | E_HTTP_NOT_FOUND* = E_HTTP_RETURNED_ERROR 350 | E_HTTP_PORT_FAILED* = E_INTERFACE_FAILED 351 | E_OPERATION_TIMEDOUT* = E_OPERATION_TIMEOUTED 352 | ERROR_SIZE* = 256 353 | FORMAT_OFF_T* = "%ld" 354 | GLOBAL_NOTHING* = 0 355 | GLOBAL_SSL* = 1 shl 0 356 | GLOBAL_WIN32* = 1 shl 1 357 | GLOBAL_ALL* = GLOBAL_SSL or GLOBAL_WIN32 358 | GLOBAL_DEFAULT* = GLOBAL_ALL 359 | INFO_DOUBLE* = 0x00300000 360 | INFO_HTTP_CODE* = INFO_RESPONSE_CODE 361 | INFO_LONG* = 0x00200000 362 | INFO_MASK* = 0x000FFFFF 363 | INFO_SLIST* = 0x00400000 364 | INFO_STRING* = 0x00100000 365 | INFO_TYPEMASK* = 0x00F00000 366 | IPRESOLVE_V4* = 1 367 | IPRESOLVE_V6* = 2 368 | IPRESOLVE_WHATEVER* = 0 369 | MAX_WRITE_SIZE* = 16384 370 | M_CALL_MULTI_SOCKET* = M_CALL_MULTI_PERFORM 371 | OPT_CLOSEFUNCTION* = - (5) 372 | OPT_FTPASCII* = OPT_TRANSFERTEXT 373 | OPT_HEADERDATA* = OPT_WRITEHEADER 374 | OPT_HTTPREQUEST* = - (1) 375 | OPT_MUTE* = - (2) 376 | OPT_PASSWDDATA* = - (4) 377 | OPT_PASSWDFUNCTION* = - (3) 378 | OPT_PASV_HOST* = - (9) 379 | OPT_READDATA* = OPT_INFILE 380 | OPT_SOURCE_HOST* = - (6) 381 | OPT_SOURCE_PATH* = - (7) 382 | OPT_SOURCE_PORT* = - (8) 383 | OPTTYPE_FUNCTIONPOINT* = 20000 384 | OPTTYPE_LONG* = 0 385 | OPTTYPE_OBJECTPOINT* = 10000 386 | OPTTYPE_OFF_T* = 30000 387 | OPT_WRITEDATA* = OPT_FILE 388 | POLL_IN* = 1 389 | POLL_INOUT* = 3 390 | POLL_NONE* = 0 391 | POLL_OUT* = 2 392 | POLL_REMOVE* = 4 393 | READFUNC_ABORT* = 0x10000000 394 | SOCKET_BAD* = - (1) 395 | SOCKET_TIMEOUT* = SOCKET_BAD 396 | VERSION_ASYNCHDNS* = 1 shl 7 397 | VERSION_CONV* = 1 shl 12 398 | VERSION_DEBUG* = 1 shl 6 399 | VERSION_GSSNEGOTIATE* = 1 shl 5 400 | VERSION_IDN* = 1 shl 10 401 | VERSION_IPV6* = 1 shl 0 402 | VERSION_KERBEROS4* = 1 shl 1 403 | VERSION_LARGEFILE* = 1 shl 9 404 | VERSION_LIBZ* = 1 shl 3 405 | VERSION_NOW* = VERSION_THIRD 406 | VERSION_NTLM* = 1 shl 4 407 | VERSION_SPNEGO* = 1 shl 8 408 | VERSION_SSL* = 1 shl 2 409 | VERSION_SSPI* = 1 shl 11 410 | FILE_OFFSET_BITS* = 0 411 | FILESIZEBITS* = 0 412 | FUNCTIONPOINT* = OPTTYPE_FUNCTIONPOINT 413 | HTTPPOST_BUFFER* = 1 shl 4 414 | HTTPPOST_FILENAME* = 1 shl 0 415 | HTTPPOST_PTRBUFFER* = 1 shl 5 416 | HTTPPOST_PTRCONTENTS* = 1 shl 3 417 | HTTPPOST_PTRNAME* = 1 shl 2 418 | HTTPPOST_READFILE* = 1 shl 1 419 | LIBCURL_VERSION* = "7.15.5" 420 | LIBCURL_VERSION_MAJOR* = 7 421 | LIBCURL_VERSION_MINOR* = 15 422 | LIBCURL_VERSION_NUM* = 0x00070F05 423 | LIBCURL_VERSION_PATCH* = 5 424 | 425 | proc strequal*(s1, s2: cstring): int32{.cdecl, dynlib: libname, 426 | importc: "curl_strequal".} 427 | proc strnequal*(s1, s2: cstring, n: int): int32{.cdecl, dynlib: libname, 428 | importc: "curl_strnequal".} 429 | proc formadd*(httppost, last_post: PPcurl_httppost): FORMcode{.cdecl, varargs, 430 | dynlib: libname, importc: "curl_formadd".} 431 | proc formget*(form: Phttppost, arg: pointer, append: Formget_callback): int32{. 432 | cdecl, dynlib: libname, importc: "curl_formget".} 433 | proc formfree*(form: Phttppost){.cdecl, dynlib: libname, 434 | importc: "curl_formfree".} 435 | proc getenv*(variable: cstring): cstring{.cdecl, dynlib: libname, 436 | importc: "curl_getenv".} 437 | proc version*(): cstring{.cdecl, dynlib: libname, importc: "curl_version".} 438 | proc easy_escape*(handle: PCurl, str: cstring, len: int32): cstring{.cdecl, 439 | dynlib: libname, importc: "curl_easy_escape".} 440 | proc escape*(str: cstring, len: int32): cstring{.cdecl, dynlib: libname, 441 | importc: "curl_escape".} 442 | proc easy_unescape*(handle: PCurl, str: cstring, len: int32, outlength: var int32): cstring{. 443 | cdecl, dynlib: libname, importc: "curl_easy_unescape".} 444 | proc unescape*(str: cstring, len: int32): cstring{.cdecl, dynlib: libname, 445 | importc: "curl_unescape".} 446 | proc free*(p: pointer){.cdecl, dynlib: libname, importc: "curl_free".} 447 | proc global_init*(flags: int32): Code{.cdecl, dynlib: libname, 448 | importc: "curl_global_init".} 449 | proc global_init_mem*(flags: int32, m: Malloc_callback, f: Free_callback, 450 | r: Realloc_callback, s: Strdup_callback, 451 | c: Calloc_callback): Code{.cdecl, dynlib: libname, 452 | importc: "curl_global_init_mem".} 453 | proc global_cleanup*(){.cdecl, dynlib: libname, importc: "curl_global_cleanup".} 454 | proc slist_append*(slist: Pslist, p: cstring): Pslist{.cdecl, dynlib: libname, 455 | importc: "curl_slist_append".} 456 | proc slist_free_all*(para1: Pslist){.cdecl, dynlib: libname, 457 | importc: "curl_slist_free_all".} 458 | proc getdate*(p: cstring, unused: ptr Time): Time{.cdecl, dynlib: libname, 459 | importc: "curl_getdate".} 460 | proc share_init*(): PSH{.cdecl, dynlib: libname, importc: "curl_share_init".} 461 | proc share_setopt*(para1: PSH, option: SHoption): SHcode{.cdecl, varargs, 462 | dynlib: libname, importc: "curl_share_setopt".} 463 | proc share_cleanup*(para1: PSH): SHcode{.cdecl, dynlib: libname, 464 | importc: "curl_share_cleanup".} 465 | proc version_info*(para1: Version): Pversion_info_data{.cdecl, dynlib: libname, 466 | importc: "curl_version_info".} 467 | proc easy_strerror*(para1: Code): cstring{.cdecl, dynlib: libname, 468 | importc: "curl_easy_strerror".} 469 | proc share_strerror*(para1: SHcode): cstring{.cdecl, dynlib: libname, 470 | importc: "curl_share_strerror".} 471 | proc easy_init*(): PCurl{.cdecl, dynlib: libname, importc: "curl_easy_init".} 472 | proc easy_setopt*(curl: PCurl, option: Option): Code{.cdecl, varargs, dynlib: libname, 473 | importc: "curl_easy_setopt".} 474 | proc easy_perform*(curl: PCurl): Code{.cdecl, dynlib: libname, 475 | importc: "curl_easy_perform".} 476 | proc easy_cleanup*(curl: PCurl){.cdecl, dynlib: libname, importc: "curl_easy_cleanup".} 477 | proc easy_getinfo*(curl: PCurl, info: INFO): Code{.cdecl, varargs, dynlib: libname, 478 | importc: "curl_easy_getinfo".} 479 | proc easy_duphandle*(curl: PCurl): PCurl{.cdecl, dynlib: libname, 480 | importc: "curl_easy_duphandle".} 481 | proc easy_reset*(curl: PCurl){.cdecl, dynlib: libname, importc: "curl_easy_reset".} 482 | proc multi_init*(): PM{.cdecl, dynlib: libname, importc: "curl_multi_init".} 483 | proc multi_add_handle*(multi_handle: PM, handle: PCurl): Mcode{.cdecl, 484 | dynlib: libname, importc: "curl_multi_add_handle".} 485 | proc multi_remove_handle*(multi_handle: PM, handle: PCurl): Mcode{.cdecl, 486 | dynlib: libname, importc: "curl_multi_remove_handle".} 487 | proc multi_fdset*(multi_handle: PM, read_fd_set: Pfd_set, write_fd_set: Pfd_set, 488 | exc_fd_set: Pfd_set, max_fd: var int32): Mcode{.cdecl, 489 | dynlib: libname, importc: "curl_multi_fdset".} 490 | proc multi_perform*(multi_handle: PM, running_handles: var int32): Mcode{. 491 | cdecl, dynlib: libname, importc: "curl_multi_perform".} 492 | proc multi_cleanup*(multi_handle: PM): Mcode{.cdecl, dynlib: libname, 493 | importc: "curl_multi_cleanup".} 494 | proc multi_info_read*(multi_handle: PM, msgs_in_queue: var int32): PMsg{.cdecl, 495 | dynlib: libname, importc: "curl_multi_info_read".} 496 | proc multi_strerror*(para1: Mcode): cstring{.cdecl, dynlib: libname, 497 | importc: "curl_multi_strerror".} 498 | proc multi_socket*(multi_handle: PM, s: Socket, running_handles: var int32): Mcode{. 499 | cdecl, dynlib: libname, importc: "curl_multi_socket".} 500 | proc multi_socket_all*(multi_handle: PM, running_handles: var int32): Mcode{. 501 | cdecl, dynlib: libname, importc: "curl_multi_socket_all".} 502 | proc multi_timeout*(multi_handle: PM, milliseconds: var int32): Mcode{.cdecl, 503 | dynlib: libname, importc: "curl_multi_timeout".} 504 | proc multi_setopt*(multi_handle: PM, option: Moption): Mcode{.cdecl, varargs, 505 | dynlib: libname, importc: "curl_multi_setopt".} 506 | proc multi_assign*(multi_handle: PM, sockfd: Socket, sockp: pointer): Mcode{. 507 | cdecl, dynlib: libname, importc: "curl_multi_assign".} 508 | -------------------------------------------------------------------------------- /libcurl.nimble: -------------------------------------------------------------------------------- 1 | # Package 2 | version = "1.0.0" 3 | author = "Andreas Rumpf, Dominik Picheta" 4 | description = "Nim wrapper for libcurl." 5 | license = "MIT" 6 | 7 | # Deps 8 | requires "nim >= 0.10.0" 9 | --------------------------------------------------------------------------------