travis: + OCaml 4.07
[ocurl.git] / curl.ml
blob30ccffc59ac3b8bb2a578d8c940143d527e5ad66
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
169 type curlDebugType =
170 | DEBUGTYPE_TEXT
171 | DEBUGTYPE_HEADER_IN
172 | DEBUGTYPE_HEADER_OUT
173 | DEBUGTYPE_DATA_IN
174 | DEBUGTYPE_DATA_OUT
175 | DEBUGTYPE_SSL_DATA_IN
176 | DEBUGTYPE_SSL_DATA_OUT
177 | DEBUGTYPE_END
179 type curlAuth =
180 | CURLAUTH_BASIC
181 | CURLAUTH_DIGEST
182 | CURLAUTH_GSSNEGOTIATE
183 | CURLAUTH_NTLM
184 | CURLAUTH_ANY
185 | CURLAUTH_ANYSAFE
187 type curlIPResolve =
188 | IPRESOLVE_WHATEVER
189 | IPRESOLVE_V4
190 | IPRESOLVE_V6
192 type curlFTPSSL =
193 | FTPSSL_NONE
194 | FTPSSL_TRY
195 | FTPSSL_CONTROL
196 | FTPSSL_ALL
198 type curlFTPSSLAuth =
199 | FTPAUTH_DEFAULT
200 | FTPAUTH_SSL
201 | FTPAUTH_TLS
203 type curlIOCmd =
204 | IOCMD_NOP
205 | IOCMD_RESTARTREAD
207 type curlIOErr =
208 | IOE_OK
209 | IOE_UNKNOWNCMD
210 | IOE_FAILRESTART
212 type curlSeekResult =
213 | SEEKFUNC_OK
214 | SEEKFUNC_FAIL
215 | SEEKFUNC_CANTSEEK
217 type curlFTPMethod =
218 | FTPMETHOD_DEFAULT
219 | FTPMETHOD_MULTICWD
220 | FTPMETHOD_NOCWD
221 | FTPMETHOD_SINGLECWD
223 type curlSSHAuthTypes =
224 | SSHAUTH_ANY
225 | SSHAUTH_PUBLICKEY
226 | SSHAUTH_PASSWORD
227 | SSHAUTH_HOST
228 | SSHAUTH_KEYBOARD
230 type curlFTPSSLCCC =
231 | FTPSSL_CCC_NONE
232 | FTPSSL_CCC_PASSIVE
233 | FTPSSL_CCC_ACTIVE
235 type curlSeek =
236 | SEEK_SET
237 | SEEK_CUR
238 | SEEK_END
240 type curlProxyType =
241 | CURLPROXY_HTTP
242 | CURLPROXY_HTTP_1_0 (** added in 7.19.4 *)
243 | CURLPROXY_SOCKS4 (** added in 7.15.2 *)
244 | CURLPROXY_SOCKS5
245 | CURLPROXY_SOCKS4A (** added in 7.18.0 *)
246 | CURLPROXY_SOCKS5_HOSTNAME (** added in 7.18.0 *)
248 type curlMIMEPartData =
249 | CURLMIME_DATA of string
250 | CURLMIME_FILEDATA of string
252 type curlMIMEEncoding =
253 | CURLMIME_8BIT
254 | CURLMIME_BINARY
255 | CURLMIME_7BIT
256 | CURLMIME_QUOTEDPRINTABLE
257 | CURLMIME_BASE64
258 | CURLMIME_NONE
260 type curlMIMEPart =
262 encoding: curlMIMEEncoding;
263 headers: string list;
264 subparts: curlMIMEPart list;
265 data: curlMIMEPartData;
268 type curlKHMatch =
269 | CURLKHMATCH_OK
270 | CURLKHMATCH_MISMATCH of string
271 | CURLKHMATCH_MISSING
273 type curlKHStat =
274 | CURLKHSTAT_FINE_ADD_TO_FILE
275 | CURLKHSTAT_FINE
276 | CURLKHSTAT_REJECT
277 | CURLKHSTAT_DEFER
279 (** Protocols to enable (via CURLOPT_PROTOCOLS and CURLOPT_REDIR_PROTOCOLS) *)
280 type curlProto =
281 | CURLPROTO_ALL (** enable everything *)
282 | CURLPROTO_HTTP
283 | CURLPROTO_HTTPS
284 | CURLPROTO_FTP
285 | CURLPROTO_FTPS
286 | CURLPROTO_SCP
287 | CURLPROTO_SFTP
288 | CURLPROTO_TELNET
289 | CURLPROTO_LDAP
290 | CURLPROTO_LDAPS
291 | CURLPROTO_DICT
292 | CURLPROTO_FILE
293 | CURLPROTO_TFTP
294 | CURLPROTO_IMAP
295 | CURLPROTO_IMAPS
296 | CURLPROTO_POP3
297 | CURLPROTO_POP3S
298 | CURLPROTO_SMTP
299 | CURLPROTO_SMTPS
300 | CURLPROTO_RTSP
301 | CURLPROTO_RTMP
302 | CURLPROTO_RTMPT
303 | CURLPROTO_RTMPE
304 | CURLPROTO_RTMPTE
305 | CURLPROTO_RTMPS
306 | CURLPROTO_RTMPTS
307 | CURLPROTO_GOPHER
309 (* sync curlPostRedir_table *)
310 type curlPostRedir =
311 | REDIR_POST_ALL
312 | REDIR_POST_301
313 | REDIR_POST_302
314 | REDIR_POST_303
316 type curlOption =
317 | CURLOPT_WRITEFUNCTION of (string -> int)
318 | CURLOPT_READFUNCTION of (int -> string)
319 | CURLOPT_INFILESIZE of int
320 | CURLOPT_URL of string
321 | CURLOPT_PROXY of string
322 | CURLOPT_PROXYPORT of int
323 | CURLOPT_HTTPPROXYTUNNEL of bool
324 | CURLOPT_VERBOSE of bool
325 | CURLOPT_HEADER of bool
326 | CURLOPT_NOPROGRESS of bool
327 | CURLOPT_NOSIGNAL of bool
328 | CURLOPT_NOBODY of bool
329 | CURLOPT_FAILONERROR of bool
330 | CURLOPT_UPLOAD of bool
331 | CURLOPT_POST of bool
332 | CURLOPT_FTPLISTONLY of bool
333 | CURLOPT_FTPAPPEND of bool
334 | CURLOPT_NETRC of curlNETRCOption
335 | CURLOPT_ENCODING of curlEncoding
336 | CURLOPT_FOLLOWLOCATION of bool
337 | CURLOPT_TRANSFERTEXT of bool
338 | CURLOPT_PUT of bool
339 | CURLOPT_USERPWD of string
340 | CURLOPT_PROXYUSERPWD of string
341 | CURLOPT_RANGE of string
342 | CURLOPT_ERRORBUFFER of string ref
343 | CURLOPT_TIMEOUT of int
344 | CURLOPT_POSTFIELDS of string
345 | CURLOPT_POSTFIELDSIZE of int
346 | CURLOPT_REFERER of string
347 | CURLOPT_USERAGENT of string
348 | CURLOPT_FTPPORT of string
349 | CURLOPT_LOWSPEEDLIMIT of int
350 | CURLOPT_LOWSPEEDTIME of int
351 | CURLOPT_RESUMEFROM of int
352 | CURLOPT_COOKIE of string
353 | CURLOPT_HTTPHEADER of string list
354 | CURLOPT_HTTPPOST of curlHTTPPost list
355 | CURLOPT_SSLCERT of string
356 | CURLOPT_SSLCERTTYPE of string
357 | CURLOPT_SSLCERTPASSWD of string
358 | CURLOPT_SSLKEY of string
359 | CURLOPT_SSLKEYTYPE of string
360 | CURLOPT_SSLKEYPASSWD of string
361 | CURLOPT_SSLENGINE of string
362 | CURLOPT_SSLENGINEDEFAULT of bool
363 | CURLOPT_CRLF of bool
364 | CURLOPT_QUOTE of string list
365 | CURLOPT_POSTQUOTE of string list
366 | CURLOPT_HEADERFUNCTION of (string -> int)
367 | CURLOPT_COOKIEFILE of string
368 | CURLOPT_SSLVERSION of curlSSLVersion
369 | CURLOPT_TIMECONDITION of curlTimeCondition
370 | CURLOPT_TIMEVALUE of int32
371 | CURLOPT_CUSTOMREQUEST of string
372 | CURLOPT_INTERFACE of string
373 | CURLOPT_KRB4LEVEL of curlKRB4Level
374 | CURLOPT_PROGRESSFUNCTION of (float -> float -> float -> float -> bool)
375 | CURLOPT_SSLVERIFYPEER of bool
376 | CURLOPT_CAINFO of string
377 | CURLOPT_CAPATH of string
378 | CURLOPT_FILETIME of bool
379 | CURLOPT_MAXREDIRS of int
380 | CURLOPT_MAXCONNECTS of int
381 | CURLOPT_CLOSEPOLICY of curlClosePolicy
382 | CURLOPT_FRESHCONNECT of bool
383 | CURLOPT_FORBIDREUSE of bool
384 | CURLOPT_RANDOMFILE of string
385 | CURLOPT_EGDSOCKET of string
386 | CURLOPT_CONNECTTIMEOUT of int
387 | CURLOPT_HTTPGET of bool
388 | CURLOPT_SSLVERIFYHOST of curlSSLVerifyHost
389 | CURLOPT_COOKIEJAR of string
390 | CURLOPT_SSLCIPHERLIST of string
391 | CURLOPT_HTTPVERSION of curlHTTPVersion
392 | CURLOPT_FTPUSEEPSV of bool
393 | CURLOPT_DNSCACHETIMEOUT of int
394 | CURLOPT_DNSUSEGLOBALCACHE of bool
395 | CURLOPT_DEBUGFUNCTION of (t -> curlDebugType -> string -> unit)
396 | CURLOPT_PRIVATE of string
397 | CURLOPT_HTTP200ALIASES of string list
398 | CURLOPT_UNRESTRICTEDAUTH of bool
399 | CURLOPT_FTPUSEEPRT of bool
400 | CURLOPT_HTTPAUTH of curlAuth list
401 | CURLOPT_FTPCREATEMISSINGDIRS of bool
402 | CURLOPT_PROXYAUTH of curlAuth list
403 | CURLOPT_FTPRESPONSETIMEOUT of int
404 | CURLOPT_IPRESOLVE of curlIPResolve
405 | CURLOPT_MAXFILESIZE of int32
406 | CURLOPT_INFILESIZELARGE of int64
407 | CURLOPT_RESUMEFROMLARGE of int64
408 | CURLOPT_MAXFILESIZELARGE of int64
409 | CURLOPT_NETRCFILE of string
410 | CURLOPT_FTPSSL of curlFTPSSL
411 | CURLOPT_POSTFIELDSIZELARGE of int64
412 | CURLOPT_TCPNODELAY of bool
413 | CURLOPT_FTPSSLAUTH of curlFTPSSLAuth
414 | CURLOPT_IOCTLFUNCTION of (t -> curlIOCmd -> curlIOErr)
415 | CURLOPT_FTPACCOUNT of string
416 | CURLOPT_COOKIELIST of string
417 | CURLOPT_IGNORECONTENTLENGTH of bool
418 | CURLOPT_FTPSKIPPASVIP of bool
419 | CURLOPT_FTPFILEMETHOD of curlFTPMethod
420 | CURLOPT_LOCALPORT of int
421 | CURLOPT_LOCALPORTRANGE of int
422 | CURLOPT_CONNECTONLY of bool
423 | CURLOPT_MAXSENDSPEEDLARGE of int64
424 | CURLOPT_MAXRECVSPEEDLARGE of int64
425 | CURLOPT_FTPALTERNATIVETOUSER of string
426 | CURLOPT_SSLSESSIONIDCACHE of bool
427 | CURLOPT_SSHAUTHTYPES of curlSSHAuthTypes list
428 | CURLOPT_SSHPUBLICKEYFILE of string
429 | CURLOPT_SSHPRIVATEKEYFILE of string
430 | CURLOPT_FTPSSLCCC of curlFTPSSLCCC
431 | CURLOPT_TIMEOUTMS of int
432 | CURLOPT_CONNECTTIMEOUTMS of int
433 | CURLOPT_HTTPTRANSFERDECODING of bool
434 | CURLOPT_HTTPCONTENTDECODING of bool
435 | CURLOPT_NEWFILEPERMS of int
436 | CURLOPT_NEWDIRECTORYPERMS of int
437 | CURLOPT_POST301 of bool
438 | CURLOPT_SSHHOSTPUBLICKEYMD5 of string
439 | CURLOPT_COPYPOSTFIELDS of string
440 | CURLOPT_PROXYTRANSFERMODE of bool
441 | CURLOPT_SEEKFUNCTION of (int64 -> curlSeek -> curlSeekResult)
442 | CURLOPT_AUTOREFERER of bool
443 | CURLOPT_OPENSOCKETFUNCTION of (Unix.file_descr -> unit)
444 | CURLOPT_PROXYTYPE of curlProxyType
445 | CURLOPT_PROTOCOLS of curlProto list
446 | CURLOPT_REDIR_PROTOCOLS of curlProto list
447 | CURLOPT_RESOLVE of string list
448 | CURLOPT_DNS_SERVERS of string
449 | CURLOPT_MAIL_FROM of string
450 | CURLOPT_MAIL_RCPT of string list
451 | CURLOPT_PIPEWAIT of bool
452 | CURLOPT_CERTINFO of bool
453 | CURLOPT_USERNAME of string
454 | CURLOPT_PASSWORD of string
455 | CURLOPT_LOGIN_OPTIONS of string
456 | CURLOPT_CONNECT_TO of string list
457 | CURLOPT_POSTREDIR of curlPostRedir list
458 | CURLOPT_MIMEPOST of curlMIMEPart list
459 | CURLOPT_SSHKNOWNHOSTS of string
460 | CURLOPT_SSHKEYFUNCTION of (curlKHMatch -> string -> curlKHStat)
462 type initOption =
463 | CURLINIT_GLOBALALL
464 | CURLINIT_GLOBALSSL
465 | CURLINIT_GLOBALWIN32
466 | CURLINIT_GLOBALNOTHING
468 type curlInfo =
469 | CURLINFO_EFFECTIVE_URL
470 | CURLINFO_HTTP_CODE
471 | CURLINFO_RESPONSE_CODE
472 | CURLINFO_TOTAL_TIME
473 | CURLINFO_NAMELOOKUP_TIME
474 | CURLINFO_CONNECT_TIME
475 | CURLINFO_PRETRANSFER_TIME
476 | CURLINFO_SIZE_UPLOAD
477 | CURLINFO_SIZE_DOWNLOAD
478 | CURLINFO_SPEED_DOWNLOAD
479 | CURLINFO_SPEED_UPLOAD
480 | CURLINFO_HEADER_SIZE
481 | CURLINFO_REQUEST_SIZE
482 | CURLINFO_SSL_VERIFYRESULT
483 | CURLINFO_FILETIME
484 | CURLINFO_CONTENT_LENGTH_DOWNLOAD
485 | CURLINFO_CONTENT_LENGTH_UPLOAD
486 | CURLINFO_STARTTRANSFER_TIME
487 | CURLINFO_CONTENT_TYPE
488 | CURLINFO_REDIRECT_TIME
489 | CURLINFO_REDIRECT_COUNT
490 | CURLINFO_PRIVATE
491 | CURLINFO_HTTP_CONNECTCODE
492 | CURLINFO_HTTPAUTH_AVAIL
493 | CURLINFO_PROXYAUTH_AVAIL
494 | CURLINFO_OS_ERRNO
495 | CURLINFO_NUM_CONNECTS
496 | CURLINFO_SSL_ENGINES
497 | CURLINFO_COOKIELIST
498 | CURLINFO_LASTSOCKET
499 | CURLINFO_FTP_ENTRY_PATH
500 | CURLINFO_REDIRECT_URL
501 | CURLINFO_PRIMARY_IP
502 | CURLINFO_LOCAL_IP
503 | CURLINFO_LOCAL_PORT
504 | CURLINFO_CONDITION_UNMET
505 | CURLINFO_CERTINFO
507 type curlInfoResult =
508 | CURLINFO_String of string
509 | CURLINFO_Long of int
510 | CURLINFO_Double of float
511 | CURLINFO_StringList of string list
512 | CURLINFO_StringListList of string list list
514 exception NotImplemented of string
516 let () = Callback.register_exception "Curl.NotImplemented" (NotImplemented "")
518 external global_init : initOption -> unit = "caml_curl_global_init"
519 external global_cleanup : unit -> unit = "caml_curl_global_cleanup"
520 external init : unit -> t = "caml_curl_easy_init"
521 external reset : t -> unit = "caml_curl_easy_reset"
522 external duphandle : t -> t = "caml_curl_easy_duphandle"
523 external setopt : t -> curlOption -> unit = "caml_curl_easy_setopt"
524 external perform : t -> unit = "caml_curl_easy_perform"
525 external cleanup : t -> unit = "caml_curl_easy_cleanup"
526 external getinfo : t -> curlInfo -> curlInfoResult = "caml_curl_easy_getinfo"
527 external escape : string -> string = "caml_curl_escape"
528 external unescape : string -> string = "caml_curl_unescape"
529 external getdate : string -> float -> float = "caml_curl_getdate"
530 external version : unit -> string = "caml_curl_version"
532 type version_info = {
533 version : string;
534 number : int * int * int;
535 host : string;
536 features : string list;
537 ssl_version : string option;
538 libz_version : string option;
539 protocols : string list;
540 ares : string;
541 ares_num : int;
542 libidn : string;
543 iconv_ver_num : int;
544 libssh_version : string;
547 external version_info : unit -> version_info = "caml_curl_version_info"
549 external strerror : curlCode -> string = "caml_curl_strerror"
550 external curlCode_of_int : int -> curlCode option = "caml_curl_curlCode_of_int"
551 external int_of_curlCode : curlCode -> int = "caml_curl_int_of_curlCode"
552 let errno = int_of_curlCode
554 type pauseOption = PAUSE_SEND | PAUSE_RECV | PAUSE_ALL
556 external pause : t -> pauseOption list -> unit = "caml_curl_pause"
558 let set_writefunction conn closure =
559 setopt conn (CURLOPT_WRITEFUNCTION closure)
561 let set_readfunction conn closure =
562 setopt conn (CURLOPT_READFUNCTION closure)
564 let set_infilesize conn size =
565 setopt conn (CURLOPT_INFILESIZE size)
567 let set_url conn url =
568 setopt conn (CURLOPT_URL url)
570 let set_proxy conn proxy =
571 setopt conn (CURLOPT_PROXY proxy)
573 let set_proxyport conn proxyport =
574 setopt conn (CURLOPT_PROXYPORT proxyport)
576 let set_httpproxytunnel conn flag =
577 setopt conn (CURLOPT_HTTPPROXYTUNNEL flag)
579 let set_verbose conn flag =
580 setopt conn (CURLOPT_VERBOSE flag)
582 let set_header conn flag =
583 setopt conn (CURLOPT_HEADER flag)
585 let set_noprogress conn flag =
586 setopt conn (CURLOPT_NOPROGRESS flag)
588 let set_nosignal conn flag =
589 setopt conn (CURLOPT_NOSIGNAL flag)
591 let set_nobody conn flag =
592 setopt conn (CURLOPT_NOBODY flag)
594 let set_failonerror conn flag =
595 setopt conn (CURLOPT_FAILONERROR flag)
597 let set_upload conn flag =
598 setopt conn (CURLOPT_UPLOAD flag)
600 let set_post conn flag =
601 setopt conn (CURLOPT_POST flag)
603 let set_ftplistonly conn flag =
604 setopt conn (CURLOPT_FTPLISTONLY flag)
606 let set_ftpappend conn flag =
607 setopt conn (CURLOPT_FTPAPPEND flag)
609 let set_netrc conn netrc =
610 setopt conn (CURLOPT_NETRC netrc)
612 let set_encoding conn encoding =
613 setopt conn (CURLOPT_ENCODING encoding)
615 let set_followlocation conn flag =
616 setopt conn (CURLOPT_FOLLOWLOCATION flag)
618 let set_transfertext conn flag =
619 setopt conn (CURLOPT_TRANSFERTEXT flag)
621 let set_put conn flag =
622 setopt conn (CURLOPT_PUT flag)
624 let set_userpwd conn userpwd =
625 setopt conn (CURLOPT_USERPWD userpwd)
627 let set_proxyuserpwd conn proxyuserpwd =
628 setopt conn (CURLOPT_PROXYUSERPWD proxyuserpwd)
630 let set_range conn range =
631 setopt conn (CURLOPT_RANGE range)
633 let set_errorbuffer conn errorbuffer =
634 setopt conn (CURLOPT_ERRORBUFFER errorbuffer)
636 let set_timeout conn timeout =
637 setopt conn (CURLOPT_TIMEOUT timeout)
639 let set_postfields conn postfields =
640 setopt conn (CURLOPT_POSTFIELDS postfields)
642 let set_postfieldsize conn postfieldsize =
643 setopt conn (CURLOPT_POSTFIELDSIZE postfieldsize)
645 let set_referer conn referer =
646 setopt conn (CURLOPT_REFERER referer)
648 let set_useragent conn useragent =
649 setopt conn (CURLOPT_USERAGENT useragent)
651 let set_ftpport conn ftpport =
652 setopt conn (CURLOPT_FTPPORT ftpport)
654 let set_lowspeedlimit conn lowspeedlimit =
655 setopt conn (CURLOPT_LOWSPEEDLIMIT lowspeedlimit)
657 let set_lowspeedtime conn lowspeedtime =
658 setopt conn (CURLOPT_LOWSPEEDTIME lowspeedtime)
660 let set_resumefrom conn resumefrom =
661 setopt conn (CURLOPT_RESUMEFROM resumefrom)
663 let set_cookie conn cookie =
664 setopt conn (CURLOPT_COOKIE cookie)
666 let set_httpheader conn httpheader =
667 setopt conn (CURLOPT_HTTPHEADER httpheader)
669 let set_httppost conn httppost =
670 setopt conn (CURLOPT_HTTPPOST httppost)
672 let set_sslcert conn sslcert =
673 setopt conn (CURLOPT_SSLCERT sslcert)
675 let set_sslcerttype conn sslcerttype =
676 setopt conn (CURLOPT_SSLCERTTYPE sslcerttype)
678 let set_sslcertpasswd conn sslcertpasswd =
679 setopt conn (CURLOPT_SSLCERTPASSWD sslcertpasswd)
681 let set_sslkey conn sslkey =
682 setopt conn (CURLOPT_SSLKEY sslkey)
684 let set_sslkeytype conn sslkeytype =
685 setopt conn (CURLOPT_SSLKEYTYPE sslkeytype)
687 let set_sslkeypasswd conn sslkeypasswd =
688 setopt conn (CURLOPT_SSLKEYPASSWD sslkeypasswd)
690 let set_sslengine conn sslengine =
691 setopt conn (CURLOPT_SSLENGINE sslengine)
693 let set_sslenginedefault conn flag =
694 setopt conn (CURLOPT_SSLENGINEDEFAULT flag)
696 let set_certinfo conn flag =
697 setopt conn (CURLOPT_CERTINFO flag)
699 let set_crlf conn flag =
700 setopt conn (CURLOPT_CRLF flag)
702 let set_quote conn quote =
703 setopt conn (CURLOPT_QUOTE quote)
705 let set_postquote conn postquote =
706 setopt conn (CURLOPT_POSTQUOTE postquote)
708 let set_headerfunction conn closure =
709 setopt conn (CURLOPT_HEADERFUNCTION closure)
711 let set_cookiefile conn cookiefile =
712 setopt conn (CURLOPT_COOKIEFILE cookiefile)
714 let set_sslversion conn sslversion =
715 setopt conn (CURLOPT_SSLVERSION sslversion)
717 let set_timecondition conn timecondition =
718 setopt conn (CURLOPT_TIMECONDITION timecondition)
720 let set_timevalue conn timevalue =
721 setopt conn (CURLOPT_TIMEVALUE timevalue)
723 let set_customrequest conn customrequest =
724 setopt conn (CURLOPT_CUSTOMREQUEST customrequest)
726 let set_interface conn interface =
727 setopt conn (CURLOPT_INTERFACE interface)
729 let set_krb4level conn krb4level =
730 setopt conn (CURLOPT_KRB4LEVEL krb4level)
732 let set_progressfunction conn closure =
733 setopt conn (CURLOPT_PROGRESSFUNCTION closure)
735 let set_sslverifypeer conn flag =
736 setopt conn (CURLOPT_SSLVERIFYPEER flag)
738 let set_cainfo conn cainfo =
739 setopt conn (CURLOPT_CAINFO cainfo)
741 let set_capath conn capath =
742 setopt conn (CURLOPT_CAPATH capath)
744 let set_filetime conn filetime =
745 setopt conn (CURLOPT_FILETIME filetime)
747 let set_maxredirs conn maxredirs =
748 setopt conn (CURLOPT_MAXREDIRS maxredirs)
750 let set_maxconnects conn maxconnects =
751 setopt conn (CURLOPT_MAXCONNECTS maxconnects)
753 let set_closepolicy conn closepolicy =
754 setopt conn (CURLOPT_CLOSEPOLICY closepolicy)
756 let set_freshconnect conn flag =
757 setopt conn (CURLOPT_FRESHCONNECT flag)
759 let set_forbidreuse conn flag =
760 setopt conn (CURLOPT_FORBIDREUSE flag)
762 let set_randomfile conn randomfile =
763 setopt conn (CURLOPT_RANDOMFILE randomfile)
765 let set_egdsocket conn egdsocket =
766 setopt conn (CURLOPT_EGDSOCKET egdsocket)
768 let set_connecttimeout conn connecttimeout =
769 setopt conn (CURLOPT_CONNECTTIMEOUT connecttimeout)
771 let set_httpget conn flag =
772 setopt conn (CURLOPT_HTTPGET flag)
774 let set_sslverifyhost conn sslverifyhost =
775 setopt conn (CURLOPT_SSLVERIFYHOST sslverifyhost)
777 let set_cookiejar conn cookiejar =
778 setopt conn (CURLOPT_COOKIEJAR cookiejar)
780 let set_sslcipherlist conn sslcipherlist =
781 setopt conn (CURLOPT_SSLCIPHERLIST sslcipherlist)
783 let set_httpversion conn httpversion =
784 setopt conn (CURLOPT_HTTPVERSION httpversion)
786 let set_ftpuseepsv conn flag =
787 setopt conn (CURLOPT_FTPUSEEPSV flag)
789 let set_dnscachetimeout conn dnscachetimeout =
790 setopt conn (CURLOPT_DNSCACHETIMEOUT dnscachetimeout)
792 let set_dnsuseglobalcache conn flag =
793 setopt conn (CURLOPT_DNSUSEGLOBALCACHE flag)
795 let set_debugfunction conn closure =
796 setopt conn (CURLOPT_DEBUGFUNCTION closure)
798 let set_private conn privateData =
799 setopt conn (CURLOPT_PRIVATE privateData)
801 let set_http200aliases conn aliases =
802 setopt conn (CURLOPT_HTTP200ALIASES aliases)
804 let set_unrestrictedauth conn flag =
805 setopt conn (CURLOPT_UNRESTRICTEDAUTH flag)
807 let set_ftpuseeprt conn flag =
808 setopt conn (CURLOPT_FTPUSEEPRT flag)
810 let set_httpauth conn auth =
811 setopt conn (CURLOPT_HTTPAUTH auth)
813 let set_ftpcreatemissingdirs conn flag =
814 setopt conn (CURLOPT_FTPCREATEMISSINGDIRS flag)
816 let set_proxyauth conn auth =
817 setopt conn (CURLOPT_PROXYAUTH auth)
819 let set_ftpresponsetimeout conn timeout =
820 setopt conn (CURLOPT_FTPRESPONSETIMEOUT timeout)
822 let set_ipresolve conn ipresolve =
823 setopt conn (CURLOPT_IPRESOLVE ipresolve)
825 let set_maxfilesize conn size =
826 setopt conn (CURLOPT_MAXFILESIZE size)
828 let set_infilesizelarge conn size =
829 setopt conn (CURLOPT_INFILESIZELARGE size)
831 let set_resumefromlarge conn size =
832 setopt conn (CURLOPT_RESUMEFROMLARGE size)
834 let set_maxfilesizelarge conn size =
835 setopt conn (CURLOPT_MAXFILESIZELARGE size)
837 let set_netrcfile conn file =
838 setopt conn (CURLOPT_NETRCFILE file)
840 let set_ftpssl conn ftpssl =
841 setopt conn (CURLOPT_FTPSSL ftpssl)
843 let set_postfieldsizelarge conn size =
844 setopt conn (CURLOPT_POSTFIELDSIZELARGE size)
846 let set_tcpnodelay conn flag =
847 setopt conn (CURLOPT_TCPNODELAY flag)
849 let set_ftpsslauth conn auth =
850 setopt conn (CURLOPT_FTPSSLAUTH auth)
852 let set_ioctlfunction conn closure =
853 setopt conn (CURLOPT_IOCTLFUNCTION closure)
855 let set_ftpaccount conn account =
856 setopt conn (CURLOPT_FTPACCOUNT account)
858 let set_cookielist conn cookielist =
859 setopt conn (CURLOPT_COOKIELIST cookielist)
861 let set_ignorecontentlength conn flag =
862 setopt conn (CURLOPT_IGNORECONTENTLENGTH flag)
864 let set_ftpskippasvip conn flag =
865 setopt conn (CURLOPT_FTPSKIPPASVIP flag)
867 let set_ftpfilemethod conn ftpMethod =
868 setopt conn (CURLOPT_FTPFILEMETHOD ftpMethod)
870 let set_localport conn port =
871 setopt conn (CURLOPT_LOCALPORT port)
873 let set_localportrange conn range =
874 setopt conn (CURLOPT_LOCALPORTRANGE range)
876 let set_connectonly conn flag =
877 setopt conn (CURLOPT_CONNECTONLY flag)
879 let set_maxsendspeedlarge conn speed =
880 setopt conn (CURLOPT_MAXSENDSPEEDLARGE speed)
882 let set_maxrecvspeedlarge conn speed =
883 setopt conn (CURLOPT_MAXRECVSPEEDLARGE speed)
885 let set_ftpalternativetouser conn user =
886 setopt conn (CURLOPT_FTPALTERNATIVETOUSER user)
888 let set_sslsessionidcache conn flag =
889 setopt conn (CURLOPT_SSLSESSIONIDCACHE flag)
891 let set_sshauthtypes conn types =
892 setopt conn (CURLOPT_SSHAUTHTYPES types)
894 let set_sshpublickeyfile conn keyfile =
895 setopt conn (CURLOPT_SSHPUBLICKEYFILE keyfile)
897 let set_sshprivatekeyfile conn keyfile =
898 setopt conn (CURLOPT_SSHPRIVATEKEYFILE keyfile)
900 let set_ftpsslccc conn ccc =
901 setopt conn (CURLOPT_FTPSSLCCC ccc)
903 let set_timeoutms conn ms =
904 setopt conn (CURLOPT_TIMEOUTMS ms)
906 let set_connecttimeoutms conn ms =
907 setopt conn (CURLOPT_CONNECTTIMEOUTMS ms)
909 let set_httptransferdecoding conn flag =
910 setopt conn (CURLOPT_HTTPTRANSFERDECODING flag)
912 let set_httpcontentdecoding conn flag =
913 setopt conn (CURLOPT_HTTPCONTENTDECODING flag)
915 let set_newfileperms conn perms =
916 setopt conn (CURLOPT_NEWFILEPERMS perms)
918 let set_newdirectoryperms conn perms =
919 setopt conn (CURLOPT_NEWDIRECTORYPERMS perms)
921 let set_post301 conn flag =
922 setopt conn (CURLOPT_POST301 flag)
924 let set_sshhostpublickeymd5 conn key =
925 setopt conn (CURLOPT_SSHHOSTPUBLICKEYMD5 key)
927 let set_copypostfields conn post =
928 setopt conn (CURLOPT_COPYPOSTFIELDS post)
930 let set_proxytransfermode conn flag =
931 setopt conn (CURLOPT_PROXYTRANSFERMODE flag)
933 let set_seekfunction conn closure =
934 setopt conn (CURLOPT_SEEKFUNCTION closure)
936 let set_autoreferer conn b =
937 setopt conn (CURLOPT_AUTOREFERER b)
939 let set_opensocketfunction conn closure =
940 setopt conn (CURLOPT_OPENSOCKETFUNCTION closure)
942 let set_proxytype conn ptype =
943 setopt conn (CURLOPT_PROXYTYPE ptype)
945 let set_protocols conn l =
946 setopt conn (CURLOPT_PROTOCOLS l)
948 let set_redirprotocols conn l =
949 setopt conn (CURLOPT_REDIR_PROTOCOLS l)
951 let set_resolve conn l_add l_del =
952 let acc = List.fold_left (fun acc (host,port,address) -> (host ^ ":" ^ string_of_int port ^ ":" ^ address) :: acc) [] l_add in
953 let acc = List.fold_left (fun acc (host,port) -> ("-" ^ host ^ ":" ^ string_of_int port) :: acc) acc l_del in
954 setopt conn (CURLOPT_RESOLVE acc)
956 let set_dns_servers conn l =
957 setopt conn (CURLOPT_DNS_SERVERS (String.concat "," l))
959 let set_mailfrom conn l =
960 setopt conn (CURLOPT_MAIL_FROM l)
962 let set_mailrcpt conn l =
963 setopt conn (CURLOPT_MAIL_RCPT l)
965 let set_pipewait conn b =
966 setopt conn (CURLOPT_PIPEWAIT b)
968 let set_username conn s =
969 setopt conn (CURLOPT_USERNAME s)
971 let set_password conn s =
972 setopt conn (CURLOPT_PASSWORD s)
974 let set_login_options conn s =
975 setopt conn (CURLOPT_LOGIN_OPTIONS s)
977 let set_connect_to conn l =
978 setopt conn (CURLOPT_CONNECT_TO l)
980 let set_postredir conn l =
981 setopt conn (CURLOPT_POSTREDIR l)
983 let set_mimepost conn part =
984 setopt conn (CURLOPT_MIMEPOST part)
986 let set_sshknownhosts conn s =
987 setopt conn (CURLOPT_SSHKNOWNHOSTS s)
989 let set_sshkeyfunction conn f =
990 setopt conn (CURLOPT_SSHKEYFUNCTION f)
992 let get_effectiveurl conn =
993 match (getinfo conn CURLINFO_EFFECTIVE_URL) with
994 | CURLINFO_String s -> s
995 | _ -> ""
997 let get_redirecturl conn =
998 match (getinfo conn CURLINFO_REDIRECT_URL) with
999 | CURLINFO_String s -> s
1000 | _ -> ""
1002 let get_responsecode conn =
1003 match (getinfo conn CURLINFO_HTTP_CODE) with
1004 | CURLINFO_Long l -> l
1005 | _ -> 0
1007 let get_httpcode conn =
1008 get_responsecode conn
1010 let get_totaltime conn =
1011 match (getinfo conn CURLINFO_TOTAL_TIME) with
1012 | CURLINFO_Double d -> d
1013 | _ -> 0.0
1015 let get_namelookuptime conn =
1016 match (getinfo conn CURLINFO_NAMELOOKUP_TIME) with
1017 | CURLINFO_Double d -> d
1018 | _ -> 0.0
1020 let get_connecttime conn =
1021 match (getinfo conn CURLINFO_CONNECT_TIME) with
1022 | CURLINFO_Double d -> d
1023 | _ -> 0.0
1025 let get_pretransfertime conn =
1026 match (getinfo conn CURLINFO_PRETRANSFER_TIME) with
1027 | CURLINFO_Double d -> d
1028 | _ -> 0.0
1030 let get_sizeupload conn =
1031 match (getinfo conn CURLINFO_SIZE_UPLOAD) with
1032 | CURLINFO_Double d -> d
1033 | _ -> 0.0
1035 let get_sizedownload conn =
1036 match (getinfo conn CURLINFO_SIZE_DOWNLOAD) with
1037 | CURLINFO_Double d -> d
1038 | _ -> 0.0
1040 let get_speeddownload conn =
1041 match (getinfo conn CURLINFO_SPEED_DOWNLOAD) with
1042 | CURLINFO_Double d -> d
1043 | _ -> 0.0
1045 let get_speedupload conn =
1046 match (getinfo conn CURLINFO_SPEED_UPLOAD) with
1047 | CURLINFO_Double d -> d
1048 | _ -> 0.0
1050 let get_headersize conn =
1051 match (getinfo conn CURLINFO_HEADER_SIZE) with
1052 | CURLINFO_Long l -> l
1053 | _ -> 0
1055 let get_requestsize conn =
1056 match (getinfo conn CURLINFO_REQUEST_SIZE) with
1057 | CURLINFO_Long l -> l
1058 | _ -> 0
1060 let get_sslverifyresult conn =
1061 match (getinfo conn CURLINFO_SSL_VERIFYRESULT) with
1062 | CURLINFO_Long l -> l
1063 | _ -> 0
1065 let get_filetime conn =
1066 match (getinfo conn CURLINFO_FILETIME) with
1067 | CURLINFO_Double d -> d
1068 | _ -> 0.0
1070 let get_contentlengthdownload conn =
1071 match (getinfo conn CURLINFO_CONTENT_LENGTH_DOWNLOAD) with
1072 | CURLINFO_Double d -> d
1073 | _ -> 0.0
1075 let get_contentlengthupload conn =
1076 match (getinfo conn CURLINFO_CONTENT_LENGTH_UPLOAD) with
1077 | CURLINFO_Double d -> d
1078 | _ -> 0.0
1080 let get_starttransfertime conn =
1081 match (getinfo conn CURLINFO_STARTTRANSFER_TIME) with
1082 | CURLINFO_Double d -> d
1083 | _ -> 0.0
1085 let get_contenttype conn =
1086 match (getinfo conn CURLINFO_CONTENT_TYPE) with
1087 | CURLINFO_String s -> s
1088 | _ -> ""
1090 let get_redirecttime conn =
1091 match (getinfo conn CURLINFO_REDIRECT_TIME) with
1092 | CURLINFO_Double d -> d
1093 | _ -> 0.0
1095 let get_redirectcount conn =
1096 match (getinfo conn CURLINFO_REDIRECT_COUNT) with
1097 | CURLINFO_Long l -> l
1098 | _ -> 0
1100 let get_private conn =
1101 match (getinfo conn CURLINFO_PRIVATE) with
1102 | CURLINFO_String s -> s
1103 | _ -> ""
1105 let get_httpconnectcode conn =
1106 match (getinfo conn CURLINFO_HTTP_CONNECTCODE) with
1107 | CURLINFO_Long l -> l
1108 | _ -> 0
1110 let get_certinfo conn =
1111 match (getinfo conn CURLINFO_CERTINFO) with
1112 | CURLINFO_StringListList l -> l
1113 | _ -> []
1115 let generate_auth auth =
1116 let result = ref [] in
1117 if auth land 1 != 0 then result := [CURLAUTH_BASIC];
1118 if auth land 2 != 0 then result := CURLAUTH_DIGEST :: !result;
1119 if auth land 4 != 0 then result := CURLAUTH_GSSNEGOTIATE :: !result;
1120 if auth land 8 != 0 then result := CURLAUTH_NTLM :: !result;
1121 !result
1123 let get_httpauthavail conn =
1124 match (getinfo conn CURLINFO_HTTPAUTH_AVAIL) with
1125 | CURLINFO_Long l -> generate_auth l
1126 | _ -> []
1128 let get_proxyauthavail conn =
1129 match (getinfo conn CURLINFO_PROXYAUTH_AVAIL) with
1130 | CURLINFO_Long l -> generate_auth l
1131 | _ -> []
1133 let get_oserrno conn =
1134 match (getinfo conn CURLINFO_OS_ERRNO) with
1135 | CURLINFO_Long l -> l
1136 | _ -> 0
1138 let get_numconnects conn =
1139 match (getinfo conn CURLINFO_NUM_CONNECTS) with
1140 | CURLINFO_Long l -> l
1141 | _ -> 0
1143 let get_sslengines conn =
1144 match (getinfo conn CURLINFO_SSL_ENGINES) with
1145 | CURLINFO_StringList l -> l
1146 | _ -> []
1148 let get_cookielist conn =
1149 match (getinfo conn CURLINFO_COOKIELIST) with
1150 | CURLINFO_StringList l -> l
1151 | _ -> []
1153 let get_lastsocket conn =
1154 match (getinfo conn CURLINFO_LASTSOCKET) with
1155 | CURLINFO_Long l -> l
1156 | _ -> 0
1158 let get_ftpentrypath conn =
1159 match (getinfo conn CURLINFO_FTP_ENTRY_PATH) with
1160 | CURLINFO_String s -> s
1161 | _ -> ""
1163 let get_primaryip conn =
1164 match (getinfo conn CURLINFO_PRIMARY_IP) with
1165 | CURLINFO_String s -> s
1166 | _ -> ""
1168 let get_localip conn =
1169 match (getinfo conn CURLINFO_LOCAL_IP) with
1170 | CURLINFO_String s -> s
1171 | _ -> ""
1173 let get_localport conn =
1174 match (getinfo conn CURLINFO_LOCAL_PORT) with
1175 | CURLINFO_Long n -> n
1176 | _ -> 0
1178 let get_conditionunmet conn =
1179 match (getinfo conn CURLINFO_CONDITION_UNMET) with
1180 | CURLINFO_Long n -> n <> 0
1181 | _ -> assert false
1183 let () =
1184 Callback.register_exception "CurlException"
1185 (CurlException (CURLE_OK, 0, ""))
1187 class handle =
1188 object
1189 val conn = init ()
1190 method handle = conn
1191 method duphandle = {< conn = duphandle conn >}
1192 method perform = perform conn
1193 method cleanup = cleanup conn
1194 method set_writefunction closure = set_writefunction conn closure
1195 method set_readfunction closure = set_readfunction conn closure
1196 method set_infilesize size = set_infilesize conn size
1197 method set_url url = set_url conn url
1198 method set_proxy proxy = set_proxy conn proxy
1199 method set_proxyport proxyport = set_proxyport conn proxyport
1200 method set_httpproxytunnel flag = set_httpproxytunnel conn flag
1201 method set_verbose flag = set_verbose conn flag
1202 method set_header flag = set_header conn flag
1203 method set_noprogress flag = set_noprogress conn flag
1204 method set_nosignal flag = set_nosignal conn flag
1205 method set_nobody flag = set_nobody conn flag
1206 method set_failonerror flag = set_failonerror conn flag
1207 method set_upload flag = set_upload conn flag
1208 method set_post flag = set_post conn flag
1209 method set_ftplistonly flag = set_ftplistonly conn flag
1210 method set_ftpappend flag = set_ftpappend conn flag
1211 method set_netrc netrc = set_netrc conn netrc
1212 method set_encoding encoding = set_encoding conn encoding
1213 method set_followlocation flag = set_followlocation conn flag
1214 method set_transfertext flag = set_transfertext conn flag
1215 method set_put flag = set_put conn flag
1216 method set_userpwd userpwd = set_userpwd conn userpwd
1217 method set_proxyuserpwd proxyuserpwd = set_proxyuserpwd conn proxyuserpwd
1218 method set_range range = set_range conn range
1219 method set_errorbuffer errorbuffer = set_errorbuffer conn errorbuffer
1220 method set_timeout timeout = set_timeout conn timeout
1221 method set_postfields postfields = set_postfields conn postfields
1222 method set_referer referer = set_referer conn referer
1223 method set_useragent useragent = set_useragent conn useragent
1224 method set_ftpport ftpport = set_ftpport conn ftpport
1225 method set_lowspeedlimit lowspeedlimit = set_lowspeedlimit conn lowspeedlimit
1226 method set_lowspeedtime lowspeedtime = set_lowspeedtime conn lowspeedtime
1227 method set_resumefrom resumefrom = set_resumefrom conn resumefrom
1228 method set_cookie cookie = set_cookie conn cookie
1229 method set_httpheader httpheader = set_httpheader conn httpheader
1230 method set_httppost httppost = set_httppost conn httppost
1231 method set_sslcert sslcert = set_sslcert conn sslcert
1232 method set_sslcerttype sslcerttype = set_sslcerttype conn sslcerttype
1233 method set_sslcertpasswd sslcertpasswd = set_sslcertpasswd conn sslcertpasswd
1234 method set_sslkey sslkey = set_sslkey conn sslkey
1235 method set_sslkeytype sslkeytype = set_sslkeytype conn sslkeytype
1236 method set_sslkeypasswd sslkeypasswd = set_sslkeypasswd conn sslkeypasswd
1237 method set_sslengine sslengine = set_sslengine conn sslengine
1238 method set_sslenginedefault flag = set_sslenginedefault conn flag
1239 method set_certinfo flag = set_certinfo conn flag
1240 method set_crlf flag = set_crlf conn flag
1241 method set_quote quote = set_quote conn quote
1242 method set_postquote postquote = set_postquote conn postquote
1243 method set_headerfunction closure = set_headerfunction conn closure
1244 method set_cookiefile cookiefile = set_cookiefile conn cookiefile
1245 method set_sslversion sslversion = set_sslversion conn sslversion
1246 method set_timecondition timecondition = set_timecondition conn timecondition
1247 method set_timevalue timevalue = set_timevalue conn timevalue
1248 method set_customrequest customrequest = set_customrequest conn customrequest
1249 method set_interface interface = set_interface conn interface
1250 method set_krb4level krb4level = set_krb4level conn krb4level
1251 method set_progressfunction closure = set_progressfunction conn closure
1252 method set_sslverifypeer flag = set_sslverifypeer conn flag
1253 method set_cainfo cainfo = set_cainfo conn cainfo
1254 method set_capath capath = set_capath conn capath
1255 method set_filetime filetime = set_filetime conn filetime
1256 method set_maxredirs maxredirs = set_maxredirs conn maxredirs
1257 method set_maxconnects maxconnects = set_maxconnects conn maxconnects
1258 method set_closepolicy closepolicy = set_closepolicy conn closepolicy
1259 method set_freshconnect flag = set_freshconnect conn flag
1260 method set_forbidreuse flag = set_forbidreuse conn flag
1261 method set_randomfile randomfile = set_randomfile conn randomfile
1262 method set_egdsocket egdsocket = set_egdsocket conn egdsocket
1263 method set_connecttimeout connecttimeout =
1264 set_connecttimeout conn connecttimeout
1265 method set_httpget flag = set_httpget conn flag
1266 method set_sslverifyhost sslverifyhost = set_sslverifyhost conn sslverifyhost
1267 method set_cookiejar cookiejar = set_cookiejar conn cookiejar
1268 method set_sslcipherlist sslcipherlist = set_sslcipherlist conn sslcipherlist
1269 method set_httpversion httpversion = set_httpversion conn httpversion
1270 method set_ftpuseepsv flag = set_ftpuseepsv conn flag
1271 method set_dnscachetimeout dnscachetimeout = set_dnscachetimeout conn dnscachetimeout
1272 method set_dnsuseglobalcache flag = set_dnsuseglobalcache conn flag
1273 method set_debugfunction closure = set_debugfunction conn closure
1274 method set_private privateData = set_private conn privateData
1275 method set_http200aliases aliases = set_http200aliases conn aliases
1276 method set_unrestrictedauth flag = set_unrestrictedauth conn flag
1277 method set_ftpuseeprt flag = set_ftpuseeprt conn flag
1278 method set_httpauth auth = set_httpauth conn auth
1279 method set_ftpcreatemissingdirs flag = set_ftpcreatemissingdirs conn flag
1280 method set_proxyauth auth = set_proxyauth conn auth
1281 method set_ftpresponsetimeout timeout = set_ftpresponsetimeout conn timeout
1282 method set_ipresolve ipresolve = set_ipresolve conn ipresolve
1283 method set_maxfilesize size = set_maxfilesize conn size
1284 method set_infilesizelarge size = set_infilesizelarge conn size
1285 method set_resumefromlarge size = set_resumefromlarge conn size
1286 method set_maxfilesizelarge size = set_maxfilesizelarge conn size
1287 method set_netrcfile file = set_netrcfile conn file
1288 method set_ftpssl ftpssl = set_ftpssl conn ftpssl
1289 method set_postfieldsize size = set_postfieldsize conn size
1290 method set_postfieldsizelarge size = set_postfieldsizelarge conn size
1291 method set_tcpnodelay flag = set_tcpnodelay conn flag
1292 method set_ftpsslauth flag = set_ftpsslauth conn flag
1293 method set_ioctlfunction closure = set_ioctlfunction conn closure
1294 method set_ftpaccount account = set_ftpaccount conn account
1295 method set_cookielist cookielist = set_cookielist conn cookielist
1296 method set_ignorecontentlength flag = set_ignorecontentlength conn flag
1297 method set_ftpskippasvip flag = set_ftpskippasvip conn flag
1298 method set_ftpfilemethod ftpMethod = set_ftpfilemethod conn ftpMethod
1299 method set_localport port = set_localport conn port
1300 method set_localportrange range = set_localportrange conn range
1301 method set_connectonly flag = set_connectonly conn flag
1302 method set_maxsendspeedlarge speed = set_maxsendspeedlarge conn speed
1303 method set_maxrecvspeedlarge speed = set_maxrecvspeedlarge conn speed
1304 method set_ftpalternativetouser user = set_ftpalternativetouser conn user
1305 method set_sslsessionidcache flag = set_sslsessionidcache conn flag
1306 method set_sshauthtypes types = set_sshauthtypes conn types
1307 method set_sshpublickeyfile keyfile = set_sshpublickeyfile conn keyfile
1308 method set_sshprivatekeyfile keyfile = set_sshprivatekeyfile conn keyfile
1309 method set_ftpsslccc ccc = set_ftpsslccc conn ccc
1310 method set_timeoutms ms = set_timeoutms conn ms
1311 method set_connecttimeoutms ms = set_connecttimeoutms conn ms
1312 method set_httptransferdecoding flag = set_httptransferdecoding conn flag
1313 method set_httpcontentdecoding flag = set_httpcontentdecoding conn flag
1314 method set_newfileperms perms = set_newfileperms conn perms
1315 method set_newdirectoryperms perms = set_newdirectoryperms conn perms
1316 method set_post301 flag = set_post301 conn flag
1317 method set_sshhostpublickeymd5 key = set_sshhostpublickeymd5 conn key
1318 method set_copypostfields post = set_copypostfields conn post
1319 method set_proxytransfermode flag = set_proxytransfermode conn flag
1320 method set_seekfunction closure = set_seekfunction conn closure
1321 method set_resolve l = set_resolve conn l
1322 method set_dns_servers l = set_dns_servers conn l
1323 method set_autoreferer b = set_autoreferer conn b
1324 method set_opensocketfunction closure = set_opensocketfunction conn closure
1325 method set_proxytype t = set_proxytype conn t
1326 method set_mimepost p = set_mimepost conn p
1327 method set_sshknownhosts s = set_sshknownhosts conn s
1328 method set_sshkeyfunction f = set_sshkeyfunction conn f
1330 method get_effectiveurl = get_effectiveurl conn
1331 method get_redirecturl = get_redirecturl conn
1332 method get_responsecode = get_responsecode conn
1333 method get_httpcode = get_responsecode conn
1334 method get_totaltime = get_totaltime conn
1335 method get_namelookuptime = get_namelookuptime conn
1336 method get_connecttime = get_connecttime conn
1337 method get_pretransfertime = get_pretransfertime conn
1338 method get_sizeupload = get_sizeupload conn
1339 method get_sizedownload = get_sizedownload conn
1340 method get_speeddownload = get_speeddownload conn
1341 method get_speedupload = get_speedupload conn
1342 method get_headersize = get_headersize conn
1343 method get_requestsize = get_requestsize conn
1344 method get_sslverifyresult = get_sslverifyresult conn
1345 method get_filetime = get_filetime conn
1346 method get_contentlengthdownload = get_contentlengthdownload conn
1347 method get_contentlengthupload = get_contentlengthupload conn
1348 method get_starttransfertime = get_starttransfertime conn
1349 method get_contenttype = get_contenttype conn
1350 method get_redirecttime = get_redirecttime conn
1351 method get_redirectcount = get_redirectcount conn
1352 method get_private = get_private conn
1353 method get_httpconnectcode = get_httpconnectcode conn
1354 method get_httpauthavail = get_httpauthavail conn
1355 method get_proxyauthavail = get_proxyauthavail conn
1356 method get_oserrno = get_oserrno conn
1357 method get_numconnects = get_numconnects conn
1358 method get_sslengines = get_sslengines conn
1359 method get_cookielist = get_cookielist conn
1360 method get_lastsocket = get_lastsocket conn
1361 method get_ftpentrypath = get_ftpentrypath conn
1362 method get_primaryip = get_primaryip conn
1363 method get_localip = get_localip conn
1364 method get_localport = get_localport conn
1365 method get_conditionunmet = get_conditionunmet conn
1366 method get_certinfo = get_certinfo conn
1369 module Multi = struct
1371 type mt
1373 type curlPipelining = PIPE_NOTHING | PIPE_HTTP1 | PIPE_MULTIPLEX
1375 type curlMultiOption =
1376 | CURLMOPT_PIPELINING of curlPipelining list
1377 | CURLMOPT_MAXCONNECTS of int
1378 | CURLMOPT_MAX_PIPELINE_LENGTH of int
1379 | CURLMOPT_MAX_HOST_CONNECTIONS of int
1381 exception Error of string
1383 let () = Callback.register_exception "Curl.Multi.Error" (Error "")
1385 external create : unit -> mt = "caml_curl_multi_init"
1386 external add : mt -> t -> unit = "caml_curl_multi_add_handle"
1387 external perform : mt -> int = "caml_curl_multi_perform_all"
1388 external wait : int -> mt -> bool = "caml_curl_multi_wait"
1389 let wait ?(timeout_ms=1000) mt = wait timeout_ms mt
1390 external remove : mt -> t -> unit = "caml_curl_multi_remove_handle"
1391 external remove_finished : mt -> (t * curlCode) option = "caml_curlm_remove_finished"
1392 external cleanup : mt -> unit = "caml_curl_multi_cleanup"
1394 (* see curlm_sock_cb *)
1395 type poll = POLL_NONE | POLL_IN | POLL_OUT | POLL_INOUT | POLL_REMOVE
1397 (* see caml_curl_multi_socket_action *)
1398 type fd_status = EV_AUTO | EV_IN | EV_OUT | EV_INOUT
1400 external set_socket_function : mt -> (Unix.file_descr -> poll -> unit) -> unit = "caml_curl_multi_socketfunction"
1401 external set_timer_function : mt -> (int -> unit) -> unit = "caml_curl_multi_timerfunction"
1402 external action_all : mt -> int = "caml_curl_multi_socket_all"
1403 external socket_action : mt -> Unix.file_descr option -> fd_status -> int = "caml_curl_multi_socket_action"
1405 let action_timeout mt = ignore (socket_action mt None EV_AUTO)
1406 let action mt fd status = socket_action mt (Some fd) status
1408 external timeout : mt -> int = "caml_curl_multi_timeout"
1410 external setopt : mt -> curlMultiOption -> unit = "caml_curl_multi_setopt"