minor style changes
[ocurl.git] / curl.ml
blob9090b575e74d4901dfd152305a00966f7bf616bb
1 (*
2 * curl.ml
4 * Copyright (c) 2003-2008, Lars Nilsson, <lars@quantumchamaeleon.com>
5 * Copyright (c) 2009, ygrek, <ygrek@autistici.org>
6 *)
8 type t
10 type curlCode =
11 | CURLE_OK
12 | CURLE_UNSUPPORTED_PROTOCOL
13 | CURLE_FAILED_INIT
14 | CURLE_URL_MALFORMAT
15 | CURLE_URL_MALFORMAT_USER
16 | CURLE_COULDNT_RESOLVE_PROXY
17 | CURLE_COULDNT_RESOLVE_HOST
18 | CURLE_COULDNT_CONNECT
19 | CURLE_FTP_WEIRD_SERVER_REPLY
20 | CURLE_FTP_ACCESS_DENIED
21 | CURLE_FTP_USER_PASSWORD_INCORRECT
22 | CURLE_FTP_WEIRD_PASS_REPLY
23 | CURLE_FTP_WEIRD_USER_REPLY
24 | CURLE_FTP_WEIRD_PASV_REPLY
25 | CURLE_FTP_WEIRD_227_FORMAT
26 | CURLE_FTP_CANT_GET_HOST
27 | CURLE_FTP_CANT_RECONNECT
28 | CURLE_FTP_COULDNT_SET_BINARY
29 | CURLE_PARTIAL_FILE
30 | CURLE_FTP_COULDNT_RETR_FILE
31 | CURLE_FTP_WRITE_ERROR
32 | CURLE_FTP_QUOTE_ERROR
33 | CURLE_HTTP_NOT_FOUND
34 | CURLE_WRITE_ERROR
35 | CURLE_MALFORMAT_USER
36 | CURLE_FTP_COULDNT_STOR_FILE
37 | CURLE_READ_ERROR
38 | CURLE_OUT_OF_MEMORY
39 | CURLE_OPERATION_TIMEOUTED
40 | CURLE_FTP_COULDNT_SET_ASCII
41 | CURLE_FTP_PORT_FAILED
42 | CURLE_FTP_COULDNT_USE_REST
43 | CURLE_FTP_COULDNT_GET_SIZE
44 | CURLE_HTTP_RANGE_ERROR
45 | CURLE_HTTP_POST_ERROR
46 | CURLE_SSL_CONNECT_ERROR
47 | CURLE_FTP_BAD_DOWNLOAD_RESUME
48 | CURLE_FILE_COULDNT_READ_FILE
49 | CURLE_LDAP_CANNOT_BIND
50 | CURLE_LDAP_SEARCH_FAILED
51 | CURLE_LIBRARY_NOT_FOUND
52 | CURLE_FUNCTION_NOT_FOUND
53 | CURLE_ABORTED_BY_CALLBACK
54 | CURLE_BAD_FUNCTION_ARGUMENT
55 | CURLE_BAD_CALLING_ORDER
56 | CURLE_HTTP_PORT_FAILED
57 | CURLE_BAD_PASSWORD_ENTERED
58 | CURLE_TOO_MANY_REDIRECTS
59 | CURLE_UNKNOWN_TELNET_OPTION
60 | CURLE_TELNET_OPTION_SYNTAX
61 | CURLE_OBSOLETE
62 | CURLE_SSL_PEER_CERTIFICATE
63 | CURLE_GOT_NOTHING
64 | CURLE_SSL_ENGINE_NOTFOUND
65 | CURLE_SSL_ENGINE_SETFAILED
66 | CURLE_SEND_ERROR
67 | CURLE_RECV_ERROR
68 | CURLE_SHARE_IN_USE
69 | CURLE_SSL_CERTPROBLEM
70 | CURLE_SSL_CIPHER
71 | CURLE_SSL_CACERT
72 | CURLE_BAD_CONTENT_ENCODING
73 | CURLE_LDAP_INVALID_URL
74 | CURLE_FILESIZE_EXCEEDED
75 | CURLE_USE_SSL_FAILED
76 | CURLE_SEND_FAIL_REWIND
77 | CURLE_SSL_ENGINE_INITFAILED
78 | CURLE_LOGIN_DENIED
79 | CURLE_TFTP_NOTFOUND
80 | CURLE_TFTP_PERM
81 | CURLE_REMOTE_DISK_FULL
82 | CURLE_TFTP_ILLEGAL
83 | CURLE_TFTP_UNKNOWNID
84 | CURLE_REMOTE_FILE_EXISTS
85 | CURLE_TFTP_NOSUCHUSER
86 | CURLE_CONV_FAILED
87 | CURLE_CONV_REQD
88 | CURLE_SSL_CACERT_BADFILE
89 | CURLE_REMOTE_FILE_NOT_FOUND
90 | CURLE_SSH
91 | CURLE_SSL_SHUTDOWN_FAILED
92 | CURLE_AGAIN
94 exception CurlException of (curlCode * int * string)
96 type curlNETRCOption =
97 | CURL_NETRC_OPTIONAL
98 | CURL_NETRC_IGNORED
99 | CURL_NETRC_REQUIRED
101 type curlEncoding =
102 | CURL_ENCODING_NONE
103 | CURL_ENCODING_DEFLATE
104 | CURL_ENCODING_GZIP
105 | CURL_ENCODING_ANY
107 type curlContentType =
108 | DEFAULT
109 | CONTENTTYPE of string
111 type curlHTTPPost =
112 | CURLFORM_CONTENT of string * string * curlContentType
113 | CURLFORM_FILECONTENT of string * string * curlContentType
114 | CURLFORM_FILE of string * string * curlContentType
115 | CURLFORM_BUFFER of string * string * string * curlContentType
118 type curlHTTPPost =
119 | CURLFORM_COPYNAME of string
120 | CURLFORM_PTRNAME of string
121 | CURLFORM_NAMELENGTH of int
122 | CURLFORM_COPYCONTENTS of string
123 | CURLFORM_PTRCONTENTS of string
124 | CURLFORM_FILE of string
125 | CURLFORM_FILECONTENT of string
126 | CURLFORM_CONTENTSLENGTH of int
127 | CURLFORM_CONTENTTYPE of string
130 type curlSSLVersion =
131 | SSLVERSION_DEFAULT
132 | SSLVERSION_TLSv1
133 | SSLVERSION_SSLv2
134 | SSLVERSION_SSLv3
135 | SSLVERSION_TLSv1_0
136 | SSLVERSION_TLSv1_1
137 | SSLVERSION_TLSv1_2
138 | SSLVERSION_TLSv1_3
140 type curlTimeCondition =
141 | TIMECOND_NONE
142 | TIMECOND_IFMODSINCE
143 | TIMECOND_IFUNMODSINCE
144 | TIMECOND_LASTMOD
146 type curlKRB4Level =
147 | KRB4_NONE
148 | KRB4_CLEAR
149 | KRB4_SAFE
150 | KRB4_CONFIDENTIAL
151 | KRB4_PRIVATE
153 type curlClosePolicy =
154 | CLOSEPOLICY_OLDEST
155 | CLOSEPOLICY_LEAST_RECENTLY_USED
157 type curlSSLVerifyHost =
158 | SSLVERIFYHOST_NONE
159 | SSLVERIFYHOST_EXISTENCE
160 | SSLVERIFYHOST_HOSTNAME
162 type curlHTTPVersion =
163 | HTTP_VERSION_NONE
164 | HTTP_VERSION_1_0
165 | HTTP_VERSION_1_1
166 | HTTP_VERSION_2
167 | HTTP_VERSION_2TLS
168 | HTTP_VERSION_2_PRIOR_KNOWLEDGE
169 | HTTP_VERSION_3
171 type curlDebugType =
172 | DEBUGTYPE_TEXT
173 | DEBUGTYPE_HEADER_IN
174 | DEBUGTYPE_HEADER_OUT
175 | DEBUGTYPE_DATA_IN
176 | DEBUGTYPE_DATA_OUT
177 | DEBUGTYPE_SSL_DATA_IN
178 | DEBUGTYPE_SSL_DATA_OUT
179 | DEBUGTYPE_END
181 type curlAuth =
182 | CURLAUTH_BASIC
183 | CURLAUTH_DIGEST
184 | CURLAUTH_GSSNEGOTIATE
185 | CURLAUTH_NTLM
186 | CURLAUTH_ANY
187 | CURLAUTH_ANYSAFE
189 type curlIPResolve =
190 | IPRESOLVE_WHATEVER
191 | IPRESOLVE_V4
192 | IPRESOLVE_V6
194 type curlFTPSSL =
195 | FTPSSL_NONE
196 | FTPSSL_TRY
197 | FTPSSL_CONTROL
198 | FTPSSL_ALL
200 type curlFTPSSLAuth =
201 | FTPAUTH_DEFAULT
202 | FTPAUTH_SSL
203 | FTPAUTH_TLS
205 type curlIOCmd =
206 | IOCMD_NOP
207 | IOCMD_RESTARTREAD
209 type curlIOErr =
210 | IOE_OK
211 | IOE_UNKNOWNCMD
212 | IOE_FAILRESTART
214 type curlSeekResult =
215 | SEEKFUNC_OK
216 | SEEKFUNC_FAIL
217 | SEEKFUNC_CANTSEEK
219 type curlFTPMethod =
220 | FTPMETHOD_DEFAULT
221 | FTPMETHOD_MULTICWD
222 | FTPMETHOD_NOCWD
223 | FTPMETHOD_SINGLECWD
225 type curlSSHAuthTypes =
226 | SSHAUTH_ANY
227 | SSHAUTH_PUBLICKEY
228 | SSHAUTH_PASSWORD
229 | SSHAUTH_HOST
230 | SSHAUTH_KEYBOARD
232 type curlFTPSSLCCC =
233 | FTPSSL_CCC_NONE
234 | FTPSSL_CCC_PASSIVE
235 | FTPSSL_CCC_ACTIVE
237 type curlSeek =
238 | SEEK_SET
239 | SEEK_CUR
240 | SEEK_END
242 type curlProxyType =
243 | CURLPROXY_HTTP
244 | CURLPROXY_HTTP_1_0 (** added in 7.19.4 *)
245 | CURLPROXY_SOCKS4 (** added in 7.15.2 *)
246 | CURLPROXY_SOCKS5
247 | CURLPROXY_SOCKS4A (** added in 7.18.0 *)
248 | CURLPROXY_SOCKS5_HOSTNAME (** added in 7.18.0 *)
250 type data_source =
251 | String of string (** Equivalent to `CURLMIME_DATA` *)
252 | File of string (** Equivalent to `CURLMIME_FILEDATA` *)
254 type curlMIMEPartData =
255 | CURLMIME_DATA of string
256 | CURLMIME_FILEDATA of string
257 | CURLMIME_DATA_WITH_NAME of {
258 data: data_source;
259 name: string option;
260 filename: string option;
263 type curlMIMEEncoding =
264 | CURLMIME_8BIT
265 | CURLMIME_BINARY
266 | CURLMIME_7BIT
267 | CURLMIME_QUOTEDPRINTABLE
268 | CURLMIME_BASE64
269 | CURLMIME_NONE
271 type curlMIMEPart =
273 encoding: curlMIMEEncoding;
274 headers: string list;
275 subparts: curlMIMEPart list;
276 data: curlMIMEPartData;
279 type curlKHMatch =
280 | CURLKHMATCH_OK
281 | CURLKHMATCH_MISMATCH of string
282 | CURLKHMATCH_MISSING
284 type curlKHStat =
285 | CURLKHSTAT_FINE_ADD_TO_FILE
286 | CURLKHSTAT_FINE
287 | CURLKHSTAT_REJECT
288 | CURLKHSTAT_DEFER
290 (** Protocols to enable (via CURLOPT_PROTOCOLS and CURLOPT_REDIR_PROTOCOLS) *)
291 type curlProto =
292 | CURLPROTO_ALL (** enable everything *)
293 | CURLPROTO_HTTP
294 | CURLPROTO_HTTPS
295 | CURLPROTO_FTP
296 | CURLPROTO_FTPS
297 | CURLPROTO_SCP
298 | CURLPROTO_SFTP
299 | CURLPROTO_TELNET
300 | CURLPROTO_LDAP
301 | CURLPROTO_LDAPS
302 | CURLPROTO_DICT
303 | CURLPROTO_FILE
304 | CURLPROTO_TFTP
305 | CURLPROTO_IMAP
306 | CURLPROTO_IMAPS
307 | CURLPROTO_POP3
308 | CURLPROTO_POP3S
309 | CURLPROTO_SMTP
310 | CURLPROTO_SMTPS
311 | CURLPROTO_RTSP
312 | CURLPROTO_RTMP
313 | CURLPROTO_RTMPT
314 | CURLPROTO_RTMPE
315 | CURLPROTO_RTMPTE
316 | CURLPROTO_RTMPS
317 | CURLPROTO_RTMPTS
318 | CURLPROTO_GOPHER
320 (* sync curlPostRedir_table *)
321 type curlPostRedir =
322 | REDIR_POST_ALL
323 | REDIR_POST_301
324 | REDIR_POST_302
325 | REDIR_POST_303
327 type curlSslOption =
328 | CURLSSLOPT_ALLOW_BEAST
329 | CURLSSLOPT_NO_REVOKE
330 | CURLSSLOPT_NO_PARTIALCHAIN
331 | CURLSSLOPT_REVOKE_BEST_EFFORT
332 | CURLSSLOPT_NATIVE_CA
333 | CURLSSLOPT_AUTO_CLIENT_CERT
335 type 'a xfer_result = Proceed of 'a | Pause | Abort
337 type write_result = unit xfer_result
338 type read_result = string xfer_result
340 let proceed = Proceed ()
342 type curlOption =
343 | CURLOPT_WRITEFUNCTION of (string -> int)
344 | CURLOPT_READFUNCTION of (int -> string)
345 | CURLOPT_INFILESIZE of int
346 | CURLOPT_URL of string
347 | CURLOPT_PROXY of string
348 | CURLOPT_PROXYPORT of int
349 | CURLOPT_HTTPPROXYTUNNEL of bool
350 | CURLOPT_VERBOSE of bool
351 | CURLOPT_HEADER of bool
352 | CURLOPT_NOPROGRESS of bool
353 | CURLOPT_NOSIGNAL of bool
354 | CURLOPT_NOBODY of bool
355 | CURLOPT_FAILONERROR of bool
356 | CURLOPT_UPLOAD of bool
357 | CURLOPT_POST of bool
358 | CURLOPT_FTPLISTONLY of bool
359 | CURLOPT_FTPAPPEND of bool
360 | CURLOPT_NETRC of curlNETRCOption
361 | CURLOPT_ENCODING of curlEncoding
362 | CURLOPT_FOLLOWLOCATION of bool
363 | CURLOPT_TRANSFERTEXT of bool
364 | CURLOPT_PUT of bool
365 | CURLOPT_USERPWD of string
366 | CURLOPT_PROXYUSERPWD of string
367 | CURLOPT_RANGE of string
368 | CURLOPT_ERRORBUFFER of string ref
369 | CURLOPT_TIMEOUT of int
370 | CURLOPT_POSTFIELDS of string
371 | CURLOPT_POSTFIELDSIZE of int
372 | CURLOPT_REFERER of string
373 | CURLOPT_USERAGENT of string
374 | CURLOPT_FTPPORT of string
375 | CURLOPT_LOWSPEEDLIMIT of int
376 | CURLOPT_LOWSPEEDTIME of int
377 | CURLOPT_RESUMEFROM of int
378 | CURLOPT_COOKIE of string
379 | CURLOPT_HTTPHEADER of string list
380 | CURLOPT_HTTPPOST of curlHTTPPost list
381 | CURLOPT_SSLCERT of string
382 | CURLOPT_SSLCERTTYPE of string
383 | CURLOPT_SSLCERTPASSWD of string
384 | CURLOPT_SSLKEY of string
385 | CURLOPT_SSLKEYTYPE of string
386 | CURLOPT_SSLKEYPASSWD of string
387 | CURLOPT_SSLENGINE of string
388 | CURLOPT_SSLENGINEDEFAULT of bool
389 | CURLOPT_CRLF of bool
390 | CURLOPT_QUOTE of string list
391 | CURLOPT_POSTQUOTE of string list
392 | CURLOPT_HEADERFUNCTION of (string -> int)
393 | CURLOPT_COOKIEFILE of string
394 | CURLOPT_SSLVERSION of curlSSLVersion
395 | CURLOPT_TIMECONDITION of curlTimeCondition
396 | CURLOPT_TIMEVALUE of int32
397 | CURLOPT_CUSTOMREQUEST of string
398 | CURLOPT_INTERFACE of string
399 | CURLOPT_KRB4LEVEL of curlKRB4Level
400 | CURLOPT_PROGRESSFUNCTION of (float -> float -> float -> float -> bool)
401 | CURLOPT_SSLVERIFYPEER of bool
402 | CURLOPT_CAINFO of string
403 | CURLOPT_CAPATH of string
404 | CURLOPT_FILETIME of bool
405 | CURLOPT_MAXREDIRS of int
406 | CURLOPT_MAXCONNECTS of int
407 | CURLOPT_CLOSEPOLICY of curlClosePolicy
408 | CURLOPT_FRESHCONNECT of bool
409 | CURLOPT_FORBIDREUSE of bool
410 | CURLOPT_RANDOMFILE of string
411 | CURLOPT_EGDSOCKET of string
412 | CURLOPT_CONNECTTIMEOUT of int
413 | CURLOPT_HTTPGET of bool
414 | CURLOPT_SSLVERIFYHOST of curlSSLVerifyHost
415 | CURLOPT_COOKIEJAR of string
416 | CURLOPT_SSLCIPHERLIST of string
417 | CURLOPT_HTTPVERSION of curlHTTPVersion
418 | CURLOPT_FTPUSEEPSV of bool
419 | CURLOPT_DNSCACHETIMEOUT of int
420 | CURLOPT_DNSUSEGLOBALCACHE of bool
421 | CURLOPT_DEBUGFUNCTION of (t -> curlDebugType -> string -> unit)
422 | CURLOPT_PRIVATE of string
423 | CURLOPT_HTTP200ALIASES of string list
424 | CURLOPT_UNRESTRICTEDAUTH of bool
425 | CURLOPT_FTPUSEEPRT of bool
426 | CURLOPT_HTTPAUTH of curlAuth list
427 | CURLOPT_FTPCREATEMISSINGDIRS of bool
428 | CURLOPT_PROXYAUTH of curlAuth list
429 | CURLOPT_FTPRESPONSETIMEOUT of int
430 | CURLOPT_IPRESOLVE of curlIPResolve
431 | CURLOPT_MAXFILESIZE of int32
432 | CURLOPT_INFILESIZELARGE of int64
433 | CURLOPT_RESUMEFROMLARGE of int64
434 | CURLOPT_MAXFILESIZELARGE of int64
435 | CURLOPT_NETRCFILE of string
436 | CURLOPT_FTPSSL of curlFTPSSL
437 | CURLOPT_POSTFIELDSIZELARGE of int64
438 | CURLOPT_TCPNODELAY of bool
439 | CURLOPT_TCP_FASTOPEN of bool
440 | CURLOPT_FTPSSLAUTH of curlFTPSSLAuth
441 | CURLOPT_IOCTLFUNCTION of (t -> curlIOCmd -> curlIOErr)
442 | CURLOPT_FTPACCOUNT of string
443 | CURLOPT_COOKIELIST of string
444 | CURLOPT_IGNORECONTENTLENGTH of bool
445 | CURLOPT_FTPSKIPPASVIP of bool
446 | CURLOPT_FTPFILEMETHOD of curlFTPMethod
447 | CURLOPT_LOCALPORT of int
448 | CURLOPT_LOCALPORTRANGE of int
449 | CURLOPT_CONNECTONLY of bool
450 | CURLOPT_MAXSENDSPEEDLARGE of int64
451 | CURLOPT_MAXRECVSPEEDLARGE of int64
452 | CURLOPT_FTPALTERNATIVETOUSER of string
453 | CURLOPT_SSLSESSIONIDCACHE of bool
454 | CURLOPT_SSHAUTHTYPES of curlSSHAuthTypes list
455 | CURLOPT_SSHPUBLICKEYFILE of string
456 | CURLOPT_SSHPRIVATEKEYFILE of string
457 | CURLOPT_FTPSSLCCC of curlFTPSSLCCC
458 | CURLOPT_TIMEOUTMS of int
459 | CURLOPT_CONNECTTIMEOUTMS of int
460 | CURLOPT_HTTPTRANSFERDECODING of bool
461 | CURLOPT_HTTPCONTENTDECODING of bool
462 | CURLOPT_NEWFILEPERMS of int
463 | CURLOPT_NEWDIRECTORYPERMS of int
464 | CURLOPT_POST301 of bool
465 | CURLOPT_SSHHOSTPUBLICKEYMD5 of string
466 | CURLOPT_COPYPOSTFIELDS of string
467 | CURLOPT_PROXYTRANSFERMODE of bool
468 | CURLOPT_SEEKFUNCTION of (int64 -> curlSeek -> curlSeekResult)
469 | CURLOPT_AUTOREFERER of bool
470 | CURLOPT_OPENSOCKETFUNCTION of (Unix.file_descr -> unit)
471 (* | CURLOPT_CLOSESOCKETFUNCTION of (Unix.file_descr -> unit) *)
472 | CURLOPT_PROXYTYPE of curlProxyType
473 | CURLOPT_PROTOCOLS of curlProto list
474 | CURLOPT_REDIR_PROTOCOLS of curlProto list
475 | CURLOPT_RESOLVE of string list
476 | CURLOPT_DNS_SERVERS of string
477 | CURLOPT_MAIL_FROM of string
478 | CURLOPT_MAIL_RCPT of string list
479 | CURLOPT_PIPEWAIT of bool
480 | CURLOPT_CERTINFO of bool
481 | CURLOPT_USERNAME of string
482 | CURLOPT_PASSWORD of string
483 | CURLOPT_LOGIN_OPTIONS of string
484 | CURLOPT_CONNECT_TO of string list
485 | CURLOPT_POSTREDIR of curlPostRedir list
486 | CURLOPT_MIMEPOST of curlMIMEPart list
487 | CURLOPT_SSHKNOWNHOSTS of string
488 | CURLOPT_SSHKEYFUNCTION of (curlKHMatch -> string -> curlKHStat)
489 | CURLOPT_BUFFERSIZE of int
490 | CURLOPT_DOH_URL of string
491 | CURLOPT_SSL_OPTIONS of curlSslOption list
492 | CURLOPT_WRITEFUNCTION2 of (string -> write_result)
493 | CURLOPT_READFUNCTION2 of (int -> read_result)
494 | CURLOPT_XFERINFOFUNCTION of (int64 -> int64 -> int64 -> int64 -> bool)
495 | CURLOPT_PREREQFUNCTION of (string -> string -> int -> int -> bool)
496 | CURLOPT_AWS_SIGV4 of string
497 | CURLOPT_TCP_KEEPALIVE of bool
498 | CURLOPT_TCP_KEEPIDLE of int
499 | CURLOPT_TCP_KEEPINTVL of int
501 type initOption =
502 | CURLINIT_GLOBALALL
503 | CURLINIT_GLOBALSSL
504 | CURLINIT_GLOBALWIN32
505 | CURLINIT_GLOBALNOTHING
507 type curlInfo =
508 | CURLINFO_EFFECTIVE_URL
509 | CURLINFO_HTTP_CODE
510 | CURLINFO_RESPONSE_CODE
511 | CURLINFO_TOTAL_TIME
512 | CURLINFO_NAMELOOKUP_TIME
513 | CURLINFO_CONNECT_TIME
514 | CURLINFO_PRETRANSFER_TIME
515 | CURLINFO_SIZE_UPLOAD
516 | CURLINFO_SIZE_DOWNLOAD
517 | CURLINFO_SPEED_DOWNLOAD
518 | CURLINFO_SPEED_UPLOAD
519 | CURLINFO_HEADER_SIZE
520 | CURLINFO_REQUEST_SIZE
521 | CURLINFO_SSL_VERIFYRESULT
522 | CURLINFO_FILETIME
523 | CURLINFO_CONTENT_LENGTH_DOWNLOAD
524 | CURLINFO_CONTENT_LENGTH_UPLOAD
525 | CURLINFO_STARTTRANSFER_TIME
526 | CURLINFO_CONTENT_TYPE
527 | CURLINFO_REDIRECT_TIME
528 | CURLINFO_REDIRECT_COUNT
529 | CURLINFO_PRIVATE
530 | CURLINFO_HTTP_CONNECTCODE
531 | CURLINFO_HTTPAUTH_AVAIL
532 | CURLINFO_PROXYAUTH_AVAIL
533 | CURLINFO_OS_ERRNO
534 | CURLINFO_NUM_CONNECTS
535 | CURLINFO_SSL_ENGINES
536 | CURLINFO_COOKIELIST
537 | CURLINFO_LASTSOCKET
538 | CURLINFO_FTP_ENTRY_PATH
539 | CURLINFO_REDIRECT_URL
540 | CURLINFO_PRIMARY_IP
541 | CURLINFO_LOCAL_IP
542 | CURLINFO_LOCAL_PORT
543 | CURLINFO_CONDITION_UNMET
544 | CURLINFO_CERTINFO
545 | CURLINFO_ACTIVESOCKET
546 | CURLINFO_HTTP_VERSION
548 type curlInfoResult =
549 | CURLINFO_String of string
550 | CURLINFO_Long of int
551 | CURLINFO_Double of float
552 | CURLINFO_StringList of string list
553 | CURLINFO_StringListList of string list list
554 | CURLINFO_Socket of Unix.file_descr
555 | CURLINFO_Version of curlHTTPVersion
557 type curlSslBackend =
558 | CURLSSLBACKEND_NONE
559 | CURLSSLBACKEND_OPENSSL
560 | CURLSSLBACKEND_GNUTLS
561 | CURLSSLBACKEND_NSS
562 | CURLSSLBACKEND_GSKIT
563 | CURLSSLBACKEND_WOLFSSL
564 | CURLSSLBACKEND_SCHANNEL
565 | CURLSSLBACKEND_SECURETRANSPORT
566 | CURLSSLBACKEND_MBEDTLS
567 | CURLSSLBACKEND_MESALINK
568 | CURLSSLBACKEND_BEARSSL
570 type curlSslSet =
571 | CURLSSLSET_OK
572 | CURLSSLSET_UNKNOWN_BACKEND
573 | CURLSSLSET_TOO_LATE
574 | CURLSSLSET_NO_BACKENDS
576 exception NotImplemented of string
578 let () = Callback.register_exception "Curl.NotImplemented" (NotImplemented "")
580 exception CurlSslSetException of curlSslSet
582 let () =
583 Callback.register_exception "CurlSslSetException"
584 (CurlSslSetException CURLSSLSET_OK)
586 external global_sslset : curlSslBackend -> unit = "caml_curl_global_sslset"
587 external global_sslset_str : string -> unit = "caml_curl_global_sslset_str"
588 external global_sslsetavail : unit -> curlSslBackend list = "caml_curl_global_sslsetavail"
589 external global_sslsetavail_str : unit -> string list = "caml_curl_global_sslsetavail_str"
590 external global_init : initOption -> unit = "caml_curl_global_init"
591 external global_cleanup : unit -> unit = "caml_curl_global_cleanup"
592 external init : unit -> t = "caml_curl_easy_init"
593 external reset : t -> unit = "caml_curl_easy_reset"
594 external setopt : t -> curlOption -> unit = "caml_curl_easy_setopt"
595 external perform : t -> unit = "caml_curl_easy_perform"
596 external cleanup : t -> unit = "caml_curl_easy_cleanup"
597 external getinfo : t -> curlInfo -> curlInfoResult = "caml_curl_easy_getinfo"
598 external escape : string -> string = "caml_curl_escape"
599 external unescape : string -> string = "caml_curl_unescape"
600 external getdate : string -> float -> float = "caml_curl_getdate"
601 external version : unit -> string = "caml_curl_version"
603 type version_info = {
604 version : string;
605 number : int * int * int;
606 host : string;
607 features : string list;
608 ssl_version : string option;
609 libz_version : string option;
610 protocols : string list;
611 ares : string;
612 ares_num : int;
613 libidn : string;
614 iconv_ver_num : int;
615 libssh_version : string;
618 external version_info : unit -> version_info = "caml_curl_version_info"
620 external strerror : curlCode -> string = "caml_curl_strerror"
621 external curlCode_of_int : int -> curlCode option = "caml_curl_curlCode_of_int"
622 external int_of_curlCode : curlCode -> int = "caml_curl_int_of_curlCode"
623 let errno = int_of_curlCode
625 type pauseOption = PAUSE_SEND | PAUSE_RECV | PAUSE_ALL
627 external pause : t -> pauseOption list -> unit = "caml_curl_pause"
629 let set_writefunction conn closure =
630 setopt conn (CURLOPT_WRITEFUNCTION closure)
632 let set_writefunction2 conn closure =
633 setopt conn (CURLOPT_WRITEFUNCTION2 closure)
635 let set_readfunction conn closure =
636 setopt conn (CURLOPT_READFUNCTION closure)
638 let set_readfunction2 conn closure =
639 setopt conn (CURLOPT_READFUNCTION2 closure)
641 let set_infilesize conn size =
642 setopt conn (CURLOPT_INFILESIZE size)
644 let set_url conn url =
645 setopt conn (CURLOPT_URL url)
647 let set_proxy conn proxy =
648 setopt conn (CURLOPT_PROXY proxy)
650 let set_proxyport conn proxyport =
651 setopt conn (CURLOPT_PROXYPORT proxyport)
653 let set_httpproxytunnel conn flag =
654 setopt conn (CURLOPT_HTTPPROXYTUNNEL flag)
656 let set_verbose conn flag =
657 setopt conn (CURLOPT_VERBOSE flag)
659 let set_header conn flag =
660 setopt conn (CURLOPT_HEADER flag)
662 let set_noprogress conn flag =
663 setopt conn (CURLOPT_NOPROGRESS flag)
665 let set_nosignal conn flag =
666 setopt conn (CURLOPT_NOSIGNAL flag)
668 let set_nobody conn flag =
669 setopt conn (CURLOPT_NOBODY flag)
671 let set_failonerror conn flag =
672 setopt conn (CURLOPT_FAILONERROR flag)
674 let set_upload conn flag =
675 setopt conn (CURLOPT_UPLOAD flag)
677 let set_post conn flag =
678 setopt conn (CURLOPT_POST flag)
680 let set_ftplistonly conn flag =
681 setopt conn (CURLOPT_FTPLISTONLY flag)
683 let set_ftpappend conn flag =
684 setopt conn (CURLOPT_FTPAPPEND flag)
686 let set_netrc conn netrc =
687 setopt conn (CURLOPT_NETRC netrc)
689 let set_encoding conn encoding =
690 setopt conn (CURLOPT_ENCODING encoding)
692 let set_followlocation conn flag =
693 setopt conn (CURLOPT_FOLLOWLOCATION flag)
695 let set_transfertext conn flag =
696 setopt conn (CURLOPT_TRANSFERTEXT flag)
698 let set_put conn flag =
699 setopt conn (CURLOPT_PUT flag)
701 let set_userpwd conn userpwd =
702 setopt conn (CURLOPT_USERPWD userpwd)
704 let set_proxyuserpwd conn proxyuserpwd =
705 setopt conn (CURLOPT_PROXYUSERPWD proxyuserpwd)
707 let set_range conn range =
708 setopt conn (CURLOPT_RANGE range)
710 let set_errorbuffer conn errorbuffer =
711 setopt conn (CURLOPT_ERRORBUFFER errorbuffer)
713 let set_timeout conn timeout =
714 setopt conn (CURLOPT_TIMEOUT timeout)
716 let set_postfields conn postfields =
717 setopt conn (CURLOPT_POSTFIELDS postfields)
719 let set_postfieldsize conn postfieldsize =
720 setopt conn (CURLOPT_POSTFIELDSIZE postfieldsize)
722 let set_referer conn referer =
723 setopt conn (CURLOPT_REFERER referer)
725 let set_useragent conn useragent =
726 setopt conn (CURLOPT_USERAGENT useragent)
728 let set_ftpport conn ftpport =
729 setopt conn (CURLOPT_FTPPORT ftpport)
731 let set_lowspeedlimit conn lowspeedlimit =
732 setopt conn (CURLOPT_LOWSPEEDLIMIT lowspeedlimit)
734 let set_lowspeedtime conn lowspeedtime =
735 setopt conn (CURLOPT_LOWSPEEDTIME lowspeedtime)
737 let set_resumefrom conn resumefrom =
738 setopt conn (CURLOPT_RESUMEFROM resumefrom)
740 let set_cookie conn cookie =
741 setopt conn (CURLOPT_COOKIE cookie)
743 let set_httpheader conn httpheader =
744 setopt conn (CURLOPT_HTTPHEADER httpheader)
746 let set_httppost conn httppost =
747 setopt conn (CURLOPT_HTTPPOST httppost)
749 let set_sslcert conn sslcert =
750 setopt conn (CURLOPT_SSLCERT sslcert)
752 let set_sslcerttype conn sslcerttype =
753 setopt conn (CURLOPT_SSLCERTTYPE sslcerttype)
755 let set_sslcertpasswd conn sslcertpasswd =
756 setopt conn (CURLOPT_SSLCERTPASSWD sslcertpasswd)
758 let set_sslkey conn sslkey =
759 setopt conn (CURLOPT_SSLKEY sslkey)
761 let set_sslkeytype conn sslkeytype =
762 setopt conn (CURLOPT_SSLKEYTYPE sslkeytype)
764 let set_sslkeypasswd conn sslkeypasswd =
765 setopt conn (CURLOPT_SSLKEYPASSWD sslkeypasswd)
767 let set_sslengine conn sslengine =
768 setopt conn (CURLOPT_SSLENGINE sslengine)
770 let set_sslenginedefault conn flag =
771 setopt conn (CURLOPT_SSLENGINEDEFAULT flag)
773 let set_certinfo conn flag =
774 setopt conn (CURLOPT_CERTINFO flag)
776 let set_crlf conn flag =
777 setopt conn (CURLOPT_CRLF flag)
779 let set_quote conn quote =
780 setopt conn (CURLOPT_QUOTE quote)
782 let set_postquote conn postquote =
783 setopt conn (CURLOPT_POSTQUOTE postquote)
785 let set_headerfunction conn closure =
786 setopt conn (CURLOPT_HEADERFUNCTION closure)
788 let set_cookiefile conn cookiefile =
789 setopt conn (CURLOPT_COOKIEFILE cookiefile)
791 let set_sslversion conn sslversion =
792 setopt conn (CURLOPT_SSLVERSION sslversion)
794 let set_timecondition conn timecondition =
795 setopt conn (CURLOPT_TIMECONDITION timecondition)
797 let set_timevalue conn timevalue =
798 setopt conn (CURLOPT_TIMEVALUE timevalue)
800 let set_customrequest conn customrequest =
801 setopt conn (CURLOPT_CUSTOMREQUEST customrequest)
803 let set_interface conn interface =
804 setopt conn (CURLOPT_INTERFACE interface)
806 let set_krb4level conn krb4level =
807 setopt conn (CURLOPT_KRB4LEVEL krb4level)
809 let set_progressfunction conn closure =
810 setopt conn (CURLOPT_PROGRESSFUNCTION closure)
812 let set_xferinfofunction conn closure =
813 setopt conn (CURLOPT_XFERINFOFUNCTION closure)
815 let set_prereqfunction conn closure =
816 setopt conn (CURLOPT_PREREQFUNCTION closure)
818 let set_sslverifypeer conn flag =
819 setopt conn (CURLOPT_SSLVERIFYPEER flag)
821 let set_cainfo conn cainfo =
822 setopt conn (CURLOPT_CAINFO cainfo)
824 let set_capath conn capath =
825 setopt conn (CURLOPT_CAPATH capath)
827 let set_filetime conn filetime =
828 setopt conn (CURLOPT_FILETIME filetime)
830 let set_maxredirs conn maxredirs =
831 setopt conn (CURLOPT_MAXREDIRS maxredirs)
833 let set_maxconnects conn maxconnects =
834 setopt conn (CURLOPT_MAXCONNECTS maxconnects)
836 let set_closepolicy conn closepolicy =
837 setopt conn (CURLOPT_CLOSEPOLICY closepolicy)
839 let set_freshconnect conn flag =
840 setopt conn (CURLOPT_FRESHCONNECT flag)
842 let set_forbidreuse conn flag =
843 setopt conn (CURLOPT_FORBIDREUSE flag)
845 let set_randomfile conn randomfile =
846 setopt conn (CURLOPT_RANDOMFILE randomfile)
848 let set_egdsocket conn egdsocket =
849 setopt conn (CURLOPT_EGDSOCKET egdsocket)
851 let set_connecttimeout conn connecttimeout =
852 setopt conn (CURLOPT_CONNECTTIMEOUT connecttimeout)
854 let set_httpget conn flag =
855 setopt conn (CURLOPT_HTTPGET flag)
857 let set_sslverifyhost conn sslverifyhost =
858 setopt conn (CURLOPT_SSLVERIFYHOST sslverifyhost)
860 let set_cookiejar conn cookiejar =
861 setopt conn (CURLOPT_COOKIEJAR cookiejar)
863 let set_sslcipherlist conn sslcipherlist =
864 setopt conn (CURLOPT_SSLCIPHERLIST sslcipherlist)
866 let set_httpversion conn httpversion =
867 setopt conn (CURLOPT_HTTPVERSION httpversion)
869 let set_ftpuseepsv conn flag =
870 setopt conn (CURLOPT_FTPUSEEPSV flag)
872 let set_dnscachetimeout conn dnscachetimeout =
873 setopt conn (CURLOPT_DNSCACHETIMEOUT dnscachetimeout)
875 let set_dnsuseglobalcache conn flag =
876 setopt conn (CURLOPT_DNSUSEGLOBALCACHE flag)
878 let set_debugfunction conn closure =
879 setopt conn (CURLOPT_DEBUGFUNCTION closure)
881 let set_private conn privateData =
882 setopt conn (CURLOPT_PRIVATE privateData)
884 let set_http200aliases conn aliases =
885 setopt conn (CURLOPT_HTTP200ALIASES aliases)
887 let set_unrestrictedauth conn flag =
888 setopt conn (CURLOPT_UNRESTRICTEDAUTH flag)
890 let set_ftpuseeprt conn flag =
891 setopt conn (CURLOPT_FTPUSEEPRT flag)
893 let set_httpauth conn auth =
894 setopt conn (CURLOPT_HTTPAUTH auth)
896 let set_ftpcreatemissingdirs conn flag =
897 setopt conn (CURLOPT_FTPCREATEMISSINGDIRS flag)
899 let set_proxyauth conn auth =
900 setopt conn (CURLOPT_PROXYAUTH auth)
902 let set_ftpresponsetimeout conn timeout =
903 setopt conn (CURLOPT_FTPRESPONSETIMEOUT timeout)
905 let set_ipresolve conn ipresolve =
906 setopt conn (CURLOPT_IPRESOLVE ipresolve)
908 let set_maxfilesize conn size =
909 setopt conn (CURLOPT_MAXFILESIZE size)
911 let set_infilesizelarge conn size =
912 setopt conn (CURLOPT_INFILESIZELARGE size)
914 let set_resumefromlarge conn size =
915 setopt conn (CURLOPT_RESUMEFROMLARGE size)
917 let set_maxfilesizelarge conn size =
918 setopt conn (CURLOPT_MAXFILESIZELARGE size)
920 let set_netrcfile conn file =
921 setopt conn (CURLOPT_NETRCFILE file)
923 let set_ftpssl conn ftpssl =
924 setopt conn (CURLOPT_FTPSSL ftpssl)
926 let set_postfieldsizelarge conn size =
927 setopt conn (CURLOPT_POSTFIELDSIZELARGE size)
929 let set_tcpnodelay conn flag =
930 setopt conn (CURLOPT_TCPNODELAY flag)
932 let set_tcpfastopen conn flag =
933 setopt conn (CURLOPT_TCP_FASTOPEN flag)
935 let set_tcpkeepalive conn flag =
936 setopt conn (CURLOPT_TCP_KEEPALIVE flag)
938 let set_tcpkeepidle conn seconds =
939 setopt conn (CURLOPT_TCP_KEEPIDLE seconds)
941 let set_tcpkeepintvl conn seconds =
942 setopt conn (CURLOPT_TCP_KEEPINTVL seconds)
944 let set_ftpsslauth conn auth =
945 setopt conn (CURLOPT_FTPSSLAUTH auth)
947 let set_ioctlfunction conn closure =
948 setopt conn (CURLOPT_IOCTLFUNCTION closure)
950 let set_ftpaccount conn account =
951 setopt conn (CURLOPT_FTPACCOUNT account)
953 let set_cookielist conn cookielist =
954 setopt conn (CURLOPT_COOKIELIST cookielist)
956 let set_ignorecontentlength conn flag =
957 setopt conn (CURLOPT_IGNORECONTENTLENGTH flag)
959 let set_ftpskippasvip conn flag =
960 setopt conn (CURLOPT_FTPSKIPPASVIP flag)
962 let set_ftpfilemethod conn ftpMethod =
963 setopt conn (CURLOPT_FTPFILEMETHOD ftpMethod)
965 let set_localport conn port =
966 setopt conn (CURLOPT_LOCALPORT port)
968 let set_localportrange conn range =
969 setopt conn (CURLOPT_LOCALPORTRANGE range)
971 let set_connectonly conn flag =
972 setopt conn (CURLOPT_CONNECTONLY flag)
974 let set_maxsendspeedlarge conn speed =
975 setopt conn (CURLOPT_MAXSENDSPEEDLARGE speed)
977 let set_maxrecvspeedlarge conn speed =
978 setopt conn (CURLOPT_MAXRECVSPEEDLARGE speed)
980 let set_ftpalternativetouser conn user =
981 setopt conn (CURLOPT_FTPALTERNATIVETOUSER user)
983 let set_sslsessionidcache conn flag =
984 setopt conn (CURLOPT_SSLSESSIONIDCACHE flag)
986 let set_sshauthtypes conn types =
987 setopt conn (CURLOPT_SSHAUTHTYPES types)
989 let set_sshpublickeyfile conn keyfile =
990 setopt conn (CURLOPT_SSHPUBLICKEYFILE keyfile)
992 let set_sshprivatekeyfile conn keyfile =
993 setopt conn (CURLOPT_SSHPRIVATEKEYFILE keyfile)
995 let set_ftpsslccc conn ccc =
996 setopt conn (CURLOPT_FTPSSLCCC ccc)
998 let set_timeoutms conn ms =
999 setopt conn (CURLOPT_TIMEOUTMS ms)
1001 let set_connecttimeoutms conn ms =
1002 setopt conn (CURLOPT_CONNECTTIMEOUTMS ms)
1004 let set_httptransferdecoding conn flag =
1005 setopt conn (CURLOPT_HTTPTRANSFERDECODING flag)
1007 let set_httpcontentdecoding conn flag =
1008 setopt conn (CURLOPT_HTTPCONTENTDECODING flag)
1010 let set_newfileperms conn perms =
1011 setopt conn (CURLOPT_NEWFILEPERMS perms)
1013 let set_newdirectoryperms conn perms =
1014 setopt conn (CURLOPT_NEWDIRECTORYPERMS perms)
1016 let set_post301 conn flag =
1017 setopt conn (CURLOPT_POST301 flag)
1019 let set_sshhostpublickeymd5 conn key =
1020 setopt conn (CURLOPT_SSHHOSTPUBLICKEYMD5 key)
1022 let set_copypostfields conn post =
1023 setopt conn (CURLOPT_COPYPOSTFIELDS post)
1025 let set_proxytransfermode conn flag =
1026 setopt conn (CURLOPT_PROXYTRANSFERMODE flag)
1028 let set_seekfunction conn closure =
1029 setopt conn (CURLOPT_SEEKFUNCTION closure)
1031 let set_autoreferer conn b =
1032 setopt conn (CURLOPT_AUTOREFERER b)
1034 let set_opensocketfunction conn closure =
1035 setopt conn (CURLOPT_OPENSOCKETFUNCTION closure)
1038 let set_closesocketfunction conn closure =
1039 setopt conn (CURLOPT_CLOSESOCKETFUNCTION closure)
1042 let set_proxytype conn ptype =
1043 setopt conn (CURLOPT_PROXYTYPE ptype)
1045 let set_protocols conn l =
1046 setopt conn (CURLOPT_PROTOCOLS l)
1048 let set_redirprotocols conn l =
1049 setopt conn (CURLOPT_REDIR_PROTOCOLS l)
1051 let set_resolve conn l_add l_del =
1052 let acc = List.fold_left (fun acc (host,port,address) -> (host ^ ":" ^ string_of_int port ^ ":" ^ address) :: acc) [] l_add in
1053 let acc = List.fold_left (fun acc (host,port) -> ("-" ^ host ^ ":" ^ string_of_int port) :: acc) acc l_del in
1054 setopt conn (CURLOPT_RESOLVE acc)
1056 let set_dns_servers conn l =
1057 setopt conn (CURLOPT_DNS_SERVERS (String.concat "," l))
1059 let set_mailfrom conn l =
1060 setopt conn (CURLOPT_MAIL_FROM l)
1062 let set_mailrcpt conn l =
1063 setopt conn (CURLOPT_MAIL_RCPT l)
1065 let set_pipewait conn b =
1066 setopt conn (CURLOPT_PIPEWAIT b)
1068 let set_username conn s =
1069 setopt conn (CURLOPT_USERNAME s)
1071 let set_password conn s =
1072 setopt conn (CURLOPT_PASSWORD s)
1074 let set_login_options conn s =
1075 setopt conn (CURLOPT_LOGIN_OPTIONS s)
1077 let set_connect_to conn l =
1078 setopt conn (CURLOPT_CONNECT_TO l)
1080 let set_postredir conn l =
1081 setopt conn (CURLOPT_POSTREDIR l)
1083 let set_mimepost conn part =
1084 setopt conn (CURLOPT_MIMEPOST part)
1086 let set_sshknownhosts conn s =
1087 setopt conn (CURLOPT_SSHKNOWNHOSTS s)
1089 let set_sshkeyfunction conn f =
1090 setopt conn (CURLOPT_SSHKEYFUNCTION f)
1092 let set_buffersize conn buffersize =
1093 setopt conn (CURLOPT_BUFFERSIZE buffersize)
1095 let set_doh_url conn url =
1096 setopt conn (CURLOPT_DOH_URL url)
1098 let set_ssl_options conn opts =
1099 setopt conn (CURLOPT_SSL_OPTIONS opts)
1101 let set_aws_sigv4 conn param =
1102 setopt conn (CURLOPT_AWS_SIGV4 param)
1104 let get_effectiveurl conn =
1105 match (getinfo conn CURLINFO_EFFECTIVE_URL) with
1106 | CURLINFO_String s -> s
1107 | _ -> ""
1109 let get_redirecturl conn =
1110 match (getinfo conn CURLINFO_REDIRECT_URL) with
1111 | CURLINFO_String s -> s
1112 | _ -> ""
1114 let get_responsecode conn =
1115 match (getinfo conn CURLINFO_HTTP_CODE) with
1116 | CURLINFO_Long l -> l
1117 | _ -> 0
1119 let get_httpcode conn =
1120 get_responsecode conn
1122 let get_totaltime conn =
1123 match (getinfo conn CURLINFO_TOTAL_TIME) with
1124 | CURLINFO_Double d -> d
1125 | _ -> 0.0
1127 let get_namelookuptime conn =
1128 match (getinfo conn CURLINFO_NAMELOOKUP_TIME) with
1129 | CURLINFO_Double d -> d
1130 | _ -> 0.0
1132 let get_connecttime conn =
1133 match (getinfo conn CURLINFO_CONNECT_TIME) with
1134 | CURLINFO_Double d -> d
1135 | _ -> 0.0
1137 let get_pretransfertime conn =
1138 match (getinfo conn CURLINFO_PRETRANSFER_TIME) with
1139 | CURLINFO_Double d -> d
1140 | _ -> 0.0
1142 let get_sizeupload conn =
1143 match (getinfo conn CURLINFO_SIZE_UPLOAD) with
1144 | CURLINFO_Double d -> d
1145 | _ -> 0.0
1147 let get_sizedownload conn =
1148 match (getinfo conn CURLINFO_SIZE_DOWNLOAD) with
1149 | CURLINFO_Double d -> d
1150 | _ -> 0.0
1152 let get_speeddownload conn =
1153 match (getinfo conn CURLINFO_SPEED_DOWNLOAD) with
1154 | CURLINFO_Double d -> d
1155 | _ -> 0.0
1157 let get_speedupload conn =
1158 match (getinfo conn CURLINFO_SPEED_UPLOAD) with
1159 | CURLINFO_Double d -> d
1160 | _ -> 0.0
1162 let get_headersize conn =
1163 match (getinfo conn CURLINFO_HEADER_SIZE) with
1164 | CURLINFO_Long l -> l
1165 | _ -> 0
1167 let get_requestsize conn =
1168 match (getinfo conn CURLINFO_REQUEST_SIZE) with
1169 | CURLINFO_Long l -> l
1170 | _ -> 0
1172 let get_sslverifyresult conn =
1173 match (getinfo conn CURLINFO_SSL_VERIFYRESULT) with
1174 | CURLINFO_Long l -> l
1175 | _ -> 0
1177 let get_filetime conn =
1178 match (getinfo conn CURLINFO_FILETIME) with
1179 | CURLINFO_Double d -> d
1180 | _ -> 0.0
1182 let get_contentlengthdownload conn =
1183 match (getinfo conn CURLINFO_CONTENT_LENGTH_DOWNLOAD) with
1184 | CURLINFO_Double d -> d
1185 | _ -> 0.0
1187 let get_contentlengthupload conn =
1188 match (getinfo conn CURLINFO_CONTENT_LENGTH_UPLOAD) with
1189 | CURLINFO_Double d -> d
1190 | _ -> 0.0
1192 let get_starttransfertime conn =
1193 match (getinfo conn CURLINFO_STARTTRANSFER_TIME) with
1194 | CURLINFO_Double d -> d
1195 | _ -> 0.0
1197 let get_contenttype conn =
1198 match (getinfo conn CURLINFO_CONTENT_TYPE) with
1199 | CURLINFO_String s -> s
1200 | _ -> ""
1202 let get_redirecttime conn =
1203 match (getinfo conn CURLINFO_REDIRECT_TIME) with
1204 | CURLINFO_Double d -> d
1205 | _ -> 0.0
1207 let get_redirectcount conn =
1208 match (getinfo conn CURLINFO_REDIRECT_COUNT) with
1209 | CURLINFO_Long l -> l
1210 | _ -> 0
1212 let get_private conn =
1213 match (getinfo conn CURLINFO_PRIVATE) with
1214 | CURLINFO_String s -> s
1215 | _ -> ""
1217 let get_httpconnectcode conn =
1218 match (getinfo conn CURLINFO_HTTP_CONNECTCODE) with
1219 | CURLINFO_Long l -> l
1220 | _ -> 0
1222 let get_certinfo conn =
1223 match (getinfo conn CURLINFO_CERTINFO) with
1224 | CURLINFO_StringListList l -> l
1225 | _ -> []
1227 let generate_auth auth =
1228 let result = ref [] in
1229 if auth land 1 != 0 then result := [CURLAUTH_BASIC];
1230 if auth land 2 != 0 then result := CURLAUTH_DIGEST :: !result;
1231 if auth land 4 != 0 then result := CURLAUTH_GSSNEGOTIATE :: !result;
1232 if auth land 8 != 0 then result := CURLAUTH_NTLM :: !result;
1233 !result
1235 let get_httpauthavail conn =
1236 match (getinfo conn CURLINFO_HTTPAUTH_AVAIL) with
1237 | CURLINFO_Long l -> generate_auth l
1238 | _ -> []
1240 let get_proxyauthavail conn =
1241 match (getinfo conn CURLINFO_PROXYAUTH_AVAIL) with
1242 | CURLINFO_Long l -> generate_auth l
1243 | _ -> []
1245 let get_oserrno conn =
1246 match (getinfo conn CURLINFO_OS_ERRNO) with
1247 | CURLINFO_Long l -> l
1248 | _ -> 0
1250 let get_numconnects conn =
1251 match (getinfo conn CURLINFO_NUM_CONNECTS) with
1252 | CURLINFO_Long l -> l
1253 | _ -> 0
1255 let get_sslengines conn =
1256 match (getinfo conn CURLINFO_SSL_ENGINES) with
1257 | CURLINFO_StringList l -> l
1258 | _ -> []
1260 let get_cookielist conn =
1261 match (getinfo conn CURLINFO_COOKIELIST) with
1262 | CURLINFO_StringList l -> l
1263 | _ -> []
1265 let get_lastsocket conn =
1266 match (getinfo conn CURLINFO_LASTSOCKET) with
1267 | CURLINFO_Long l -> l
1268 | _ -> 0
1270 let get_activesocket conn =
1271 match (getinfo conn CURLINFO_ACTIVESOCKET) with
1272 | CURLINFO_Socket s -> Some s
1273 | _ -> None
1275 let get_ftpentrypath conn =
1276 match (getinfo conn CURLINFO_FTP_ENTRY_PATH) with
1277 | CURLINFO_String s -> s
1278 | _ -> ""
1280 let get_primaryip conn =
1281 match (getinfo conn CURLINFO_PRIMARY_IP) with
1282 | CURLINFO_String s -> s
1283 | _ -> ""
1285 let get_localip conn =
1286 match (getinfo conn CURLINFO_LOCAL_IP) with
1287 | CURLINFO_String s -> s
1288 | _ -> ""
1290 let get_localport conn =
1291 match (getinfo conn CURLINFO_LOCAL_PORT) with
1292 | CURLINFO_Long n -> n
1293 | _ -> 0
1295 let get_conditionunmet conn =
1296 match (getinfo conn CURLINFO_CONDITION_UNMET) with
1297 | CURLINFO_Long n -> n <> 0
1298 | _ -> assert false
1300 let get_http_version conn =
1301 match (getinfo conn CURLINFO_HTTP_VERSION) with
1302 | CURLINFO_Version v -> v
1303 | _ -> assert false
1305 let () =
1306 Callback.register_exception "CurlException"
1307 (CurlException (CURLE_OK, 0, ""))
1309 class handle =
1310 object
1311 val conn = init ()
1312 method handle = conn
1313 method perform = perform conn
1314 method cleanup = cleanup conn
1315 method set_writefunction closure = set_writefunction conn closure
1316 method set_writefunction2 closure = set_writefunction2 conn closure
1317 method set_readfunction closure = set_readfunction conn closure
1318 method set_readfunction2 closure = set_readfunction2 conn closure
1319 method set_infilesize size = set_infilesize conn size
1320 method set_url url = set_url conn url
1321 method set_proxy proxy = set_proxy conn proxy
1322 method set_proxyport proxyport = set_proxyport conn proxyport
1323 method set_httpproxytunnel flag = set_httpproxytunnel conn flag
1324 method set_verbose flag = set_verbose conn flag
1325 method set_header flag = set_header conn flag
1326 method set_noprogress flag = set_noprogress conn flag
1327 method set_nosignal flag = set_nosignal conn flag
1328 method set_nobody flag = set_nobody conn flag
1329 method set_failonerror flag = set_failonerror conn flag
1330 method set_upload flag = set_upload conn flag
1331 method set_post flag = set_post conn flag
1332 method set_ftplistonly flag = set_ftplistonly conn flag
1333 method set_ftpappend flag = set_ftpappend conn flag
1334 method set_netrc netrc = set_netrc conn netrc
1335 method set_encoding encoding = set_encoding conn encoding
1336 method set_followlocation flag = set_followlocation conn flag
1337 method set_transfertext flag = set_transfertext conn flag
1338 method set_put flag = set_put conn flag
1339 method set_userpwd userpwd = set_userpwd conn userpwd
1340 method set_proxyuserpwd proxyuserpwd = set_proxyuserpwd conn proxyuserpwd
1341 method set_range range = set_range conn range
1342 method set_errorbuffer errorbuffer = set_errorbuffer conn errorbuffer
1343 method set_timeout timeout = set_timeout conn timeout
1344 method set_postfields postfields = set_postfields conn postfields
1345 method set_referer referer = set_referer conn referer
1346 method set_useragent useragent = set_useragent conn useragent
1347 method set_ftpport ftpport = set_ftpport conn ftpport
1348 method set_lowspeedlimit lowspeedlimit = set_lowspeedlimit conn lowspeedlimit
1349 method set_lowspeedtime lowspeedtime = set_lowspeedtime conn lowspeedtime
1350 method set_resumefrom resumefrom = set_resumefrom conn resumefrom
1351 method set_cookie cookie = set_cookie conn cookie
1352 method set_httpheader httpheader = set_httpheader conn httpheader
1353 method set_httppost httppost = set_httppost conn httppost
1354 method set_sslcert sslcert = set_sslcert conn sslcert
1355 method set_sslcerttype sslcerttype = set_sslcerttype conn sslcerttype
1356 method set_sslcertpasswd sslcertpasswd = set_sslcertpasswd conn sslcertpasswd
1357 method set_sslkey sslkey = set_sslkey conn sslkey
1358 method set_sslkeytype sslkeytype = set_sslkeytype conn sslkeytype
1359 method set_sslkeypasswd sslkeypasswd = set_sslkeypasswd conn sslkeypasswd
1360 method set_sslengine sslengine = set_sslengine conn sslengine
1361 method set_sslenginedefault flag = set_sslenginedefault conn flag
1362 method set_certinfo flag = set_certinfo conn flag
1363 method set_crlf flag = set_crlf conn flag
1364 method set_quote quote = set_quote conn quote
1365 method set_postquote postquote = set_postquote conn postquote
1366 method set_headerfunction closure = set_headerfunction conn closure
1367 method set_cookiefile cookiefile = set_cookiefile conn cookiefile
1368 method set_sslversion sslversion = set_sslversion conn sslversion
1369 method set_timecondition timecondition = set_timecondition conn timecondition
1370 method set_timevalue timevalue = set_timevalue conn timevalue
1371 method set_customrequest customrequest = set_customrequest conn customrequest
1372 method set_interface interface = set_interface conn interface
1373 method set_krb4level krb4level = set_krb4level conn krb4level
1374 method set_progressfunction closure = set_progressfunction conn closure
1375 method set_xferinfofunction closure = set_xferinfofunction conn closure
1376 method set_prereqfunction closure = set_prereqfunction conn closure
1377 method set_sslverifypeer flag = set_sslverifypeer conn flag
1378 method set_cainfo cainfo = set_cainfo conn cainfo
1379 method set_capath capath = set_capath conn capath
1380 method set_filetime filetime = set_filetime conn filetime
1381 method set_maxredirs maxredirs = set_maxredirs conn maxredirs
1382 method set_maxconnects maxconnects = set_maxconnects conn maxconnects
1383 method set_closepolicy closepolicy = set_closepolicy conn closepolicy
1384 method set_freshconnect flag = set_freshconnect conn flag
1385 method set_forbidreuse flag = set_forbidreuse conn flag
1386 method set_randomfile randomfile = set_randomfile conn randomfile
1387 method set_egdsocket egdsocket = set_egdsocket conn egdsocket
1388 method set_connecttimeout connecttimeout =
1389 set_connecttimeout conn connecttimeout
1390 method set_httpget flag = set_httpget conn flag
1391 method set_sslverifyhost sslverifyhost = set_sslverifyhost conn sslverifyhost
1392 method set_cookiejar cookiejar = set_cookiejar conn cookiejar
1393 method set_sslcipherlist sslcipherlist = set_sslcipherlist conn sslcipherlist
1394 method set_httpversion httpversion = set_httpversion conn httpversion
1395 method set_ftpuseepsv flag = set_ftpuseepsv conn flag
1396 method set_dnscachetimeout dnscachetimeout = set_dnscachetimeout conn dnscachetimeout
1397 method set_dnsuseglobalcache flag = set_dnsuseglobalcache conn flag
1398 method set_debugfunction closure = set_debugfunction conn closure
1399 method set_private privateData = set_private conn privateData
1400 method set_http200aliases aliases = set_http200aliases conn aliases
1401 method set_unrestrictedauth flag = set_unrestrictedauth conn flag
1402 method set_ftpuseeprt flag = set_ftpuseeprt conn flag
1403 method set_httpauth auth = set_httpauth conn auth
1404 method set_ftpcreatemissingdirs flag = set_ftpcreatemissingdirs conn flag
1405 method set_proxyauth auth = set_proxyauth conn auth
1406 method set_ftpresponsetimeout timeout = set_ftpresponsetimeout conn timeout
1407 method set_ipresolve ipresolve = set_ipresolve conn ipresolve
1408 method set_maxfilesize size = set_maxfilesize conn size
1409 method set_infilesizelarge size = set_infilesizelarge conn size
1410 method set_resumefromlarge size = set_resumefromlarge conn size
1411 method set_maxfilesizelarge size = set_maxfilesizelarge conn size
1412 method set_netrcfile file = set_netrcfile conn file
1413 method set_ftpssl ftpssl = set_ftpssl conn ftpssl
1414 method set_postfieldsize size = set_postfieldsize conn size
1415 method set_postfieldsizelarge size = set_postfieldsizelarge conn size
1416 method set_tcpnodelay flag = set_tcpnodelay conn flag
1417 method set_tcpfastopen flag = set_tcpfastopen conn flag
1418 method set_ftpsslauth flag = set_ftpsslauth conn flag
1419 method set_ioctlfunction closure = set_ioctlfunction conn closure
1420 method set_ftpaccount account = set_ftpaccount conn account
1421 method set_cookielist cookielist = set_cookielist conn cookielist
1422 method set_ignorecontentlength flag = set_ignorecontentlength conn flag
1423 method set_ftpskippasvip flag = set_ftpskippasvip conn flag
1424 method set_ftpfilemethod ftpMethod = set_ftpfilemethod conn ftpMethod
1425 method set_localport port = set_localport conn port
1426 method set_localportrange range = set_localportrange conn range
1427 method set_connectonly flag = set_connectonly conn flag
1428 method set_maxsendspeedlarge speed = set_maxsendspeedlarge conn speed
1429 method set_maxrecvspeedlarge speed = set_maxrecvspeedlarge conn speed
1430 method set_ftpalternativetouser user = set_ftpalternativetouser conn user
1431 method set_sslsessionidcache flag = set_sslsessionidcache conn flag
1432 method set_sshauthtypes types = set_sshauthtypes conn types
1433 method set_sshpublickeyfile keyfile = set_sshpublickeyfile conn keyfile
1434 method set_sshprivatekeyfile keyfile = set_sshprivatekeyfile conn keyfile
1435 method set_ftpsslccc ccc = set_ftpsslccc conn ccc
1436 method set_timeoutms ms = set_timeoutms conn ms
1437 method set_connecttimeoutms ms = set_connecttimeoutms conn ms
1438 method set_httptransferdecoding flag = set_httptransferdecoding conn flag
1439 method set_httpcontentdecoding flag = set_httpcontentdecoding conn flag
1440 method set_newfileperms perms = set_newfileperms conn perms
1441 method set_newdirectoryperms perms = set_newdirectoryperms conn perms
1442 method set_post301 flag = set_post301 conn flag
1443 method set_sshhostpublickeymd5 key = set_sshhostpublickeymd5 conn key
1444 method set_copypostfields post = set_copypostfields conn post
1445 method set_proxytransfermode flag = set_proxytransfermode conn flag
1446 method set_seekfunction closure = set_seekfunction conn closure
1447 method set_resolve l = set_resolve conn l
1448 method set_dns_servers l = set_dns_servers conn l
1449 method set_autoreferer b = set_autoreferer conn b
1450 method set_opensocketfunction closure = set_opensocketfunction conn closure
1451 (* method set_closesocketfunction closure = set_closesocketfunction conn closure *)
1452 method set_proxytype t = set_proxytype conn t
1453 method set_mimepost p = set_mimepost conn p
1454 method set_sshknownhosts s = set_sshknownhosts conn s
1455 method set_sshkeyfunction f = set_sshkeyfunction conn f
1456 method set_buffersize buffersize = set_buffersize conn buffersize
1457 method set_doh_url url = set_doh_url conn url
1458 method set_ssl_options opts = set_ssl_options conn opts
1459 method set_aws_sigv4 param = set_aws_sigv4 conn param
1460 method set_tcpkeepalive flag = set_tcpkeepalive conn flag
1461 method set_tcpkeepidle seconds = set_tcpkeepidle conn seconds
1462 method set_tcpkeepintvl seconds = set_tcpkeepintvl conn seconds
1464 method get_effectiveurl = get_effectiveurl conn
1465 method get_redirecturl = get_redirecturl conn
1466 method get_responsecode = get_responsecode conn
1467 method get_httpcode = get_responsecode conn
1468 method get_totaltime = get_totaltime conn
1469 method get_namelookuptime = get_namelookuptime conn
1470 method get_connecttime = get_connecttime conn
1471 method get_pretransfertime = get_pretransfertime conn
1472 method get_sizeupload = get_sizeupload conn
1473 method get_sizedownload = get_sizedownload conn
1474 method get_speeddownload = get_speeddownload conn
1475 method get_speedupload = get_speedupload conn
1476 method get_headersize = get_headersize conn
1477 method get_requestsize = get_requestsize conn
1478 method get_sslverifyresult = get_sslverifyresult conn
1479 method get_filetime = get_filetime conn
1480 method get_contentlengthdownload = get_contentlengthdownload conn
1481 method get_contentlengthupload = get_contentlengthupload conn
1482 method get_starttransfertime = get_starttransfertime conn
1483 method get_contenttype = get_contenttype conn
1484 method get_redirecttime = get_redirecttime conn
1485 method get_redirectcount = get_redirectcount conn
1486 method get_private = get_private conn
1487 method get_httpconnectcode = get_httpconnectcode conn
1488 method get_httpauthavail = get_httpauthavail conn
1489 method get_proxyauthavail = get_proxyauthavail conn
1490 method get_oserrno = get_oserrno conn
1491 method get_numconnects = get_numconnects conn
1492 method get_sslengines = get_sslengines conn
1493 method get_cookielist = get_cookielist conn
1494 method get_lastsocket = get_lastsocket conn
1495 method get_activesocket = get_activesocket conn
1496 method get_ftpentrypath = get_ftpentrypath conn
1497 method get_primaryip = get_primaryip conn
1498 method get_localip = get_localip conn
1499 method get_localport = get_localport conn
1500 method get_conditionunmet = get_conditionunmet conn
1501 method get_certinfo = get_certinfo conn
1502 method get_http_version = get_http_version conn
1505 module Multi = struct
1507 type mt
1509 type curlPipelining = PIPE_NOTHING | PIPE_HTTP1 | PIPE_MULTIPLEX
1511 type curlMultiOption =
1512 | CURLMOPT_PIPELINING of curlPipelining list
1513 | CURLMOPT_MAXCONNECTS of int
1514 | CURLMOPT_MAX_PIPELINE_LENGTH of int
1515 | CURLMOPT_MAX_HOST_CONNECTIONS of int
1516 | CURLMOPT_MAX_TOTAL_CONNECTIONS of int
1518 exception Error of string
1520 type cerror = int
1522 let int_of_cerror err = err
1524 exception CError of string * cerror * string
1526 let () = Callback.register_exception "Curl.Multi.Error" (Error "")
1527 let () = Callback.register_exception "Curl.Multi.CError" (CError ("",0,""))
1529 type waitfd_event =
1530 | CURL_WAIT_POLLIN
1531 | CURL_WAIT_POLLPRI
1532 | CURL_WAIT_POLLOUT
1534 type waitfd = {
1535 fd: Unix.file_descr;
1536 events: waitfd_event list;
1537 mutable revents: waitfd_event list;
1540 let waitfd fd events = {fd; events; revents = []}
1541 let waitfd_fd fd = fd.fd
1542 let waitfd_isset fd event = List.mem event fd.revents
1544 external create : unit -> mt = "caml_curl_multi_init"
1545 external add : mt -> t -> unit = "caml_curl_multi_add_handle"
1546 external perform : mt -> int = "caml_curl_multi_perform_all"
1547 external wait : int -> waitfd list -> mt -> bool = "caml_curl_multi_wait"
1548 let wait ?(timeout_ms=1000) ?(extra_fds = []) mt = wait timeout_ms extra_fds mt
1549 external poll : int -> waitfd list -> mt -> bool = "caml_curl_multi_poll"
1550 let poll ?(timeout_ms=1000) ?(extra_fds = []) mt = poll timeout_ms extra_fds mt
1551 external remove : mt -> t -> unit = "caml_curl_multi_remove_handle"
1552 external remove_finished : mt -> (t * curlCode) option = "caml_curlm_remove_finished"
1553 external cleanup : mt -> unit = "caml_curl_multi_cleanup"
1555 (* see curlm_sock_cb *)
1556 type poll = POLL_NONE | POLL_IN | POLL_OUT | POLL_INOUT | POLL_REMOVE
1558 (* see caml_curl_multi_socket_action *)
1559 type fd_status = EV_AUTO | EV_IN | EV_OUT | EV_INOUT
1561 external set_socket_function : mt -> (Unix.file_descr -> poll -> unit) -> unit = "caml_curl_multi_socketfunction"
1562 external set_timer_function : mt -> (int -> unit) -> unit = "caml_curl_multi_timerfunction"
1563 external action_all : mt -> int = "caml_curl_multi_socket_all"
1564 external socket_action : mt -> Unix.file_descr option -> fd_status -> int = "caml_curl_multi_socket_action"
1566 let action_timeout mt = ignore (socket_action mt None EV_AUTO)
1567 let action mt fd status = socket_action mt (Some fd) status
1569 external timeout : mt -> int = "caml_curl_multi_timeout"
1571 external setopt : mt -> curlMultiOption -> unit = "caml_curl_multi_setopt"