123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668(*
* curl.ml
*
* Copyright (c) 2003-2008, Lars Nilsson, <lars@quantumchamaeleon.com>
* Copyright (c) 2009, <root@ygrek.org>
*)typettypecurlCode=|CURLE_OK|CURLE_UNSUPPORTED_PROTOCOL|CURLE_FAILED_INIT|CURLE_URL_MALFORMAT|CURLE_URL_MALFORMAT_USER|CURLE_COULDNT_RESOLVE_PROXY|CURLE_COULDNT_RESOLVE_HOST|CURLE_COULDNT_CONNECT|CURLE_FTP_WEIRD_SERVER_REPLY|CURLE_FTP_ACCESS_DENIED|CURLE_FTP_USER_PASSWORD_INCORRECT|CURLE_FTP_WEIRD_PASS_REPLY|CURLE_FTP_WEIRD_USER_REPLY|CURLE_FTP_WEIRD_PASV_REPLY|CURLE_FTP_WEIRD_227_FORMAT|CURLE_FTP_CANT_GET_HOST|CURLE_FTP_CANT_RECONNECT|CURLE_FTP_COULDNT_SET_BINARY|CURLE_PARTIAL_FILE|CURLE_FTP_COULDNT_RETR_FILE|CURLE_FTP_WRITE_ERROR|CURLE_FTP_QUOTE_ERROR|CURLE_HTTP_NOT_FOUND|CURLE_WRITE_ERROR|CURLE_MALFORMAT_USER|CURLE_FTP_COULDNT_STOR_FILE|CURLE_READ_ERROR|CURLE_OUT_OF_MEMORY|CURLE_OPERATION_TIMEOUTED|CURLE_FTP_COULDNT_SET_ASCII|CURLE_FTP_PORT_FAILED|CURLE_FTP_COULDNT_USE_REST|CURLE_FTP_COULDNT_GET_SIZE|CURLE_HTTP_RANGE_ERROR|CURLE_HTTP_POST_ERROR|CURLE_SSL_CONNECT_ERROR|CURLE_FTP_BAD_DOWNLOAD_RESUME|CURLE_FILE_COULDNT_READ_FILE|CURLE_LDAP_CANNOT_BIND|CURLE_LDAP_SEARCH_FAILED|CURLE_LIBRARY_NOT_FOUND|CURLE_FUNCTION_NOT_FOUND|CURLE_ABORTED_BY_CALLBACK|CURLE_BAD_FUNCTION_ARGUMENT|CURLE_BAD_CALLING_ORDER|CURLE_HTTP_PORT_FAILED|CURLE_BAD_PASSWORD_ENTERED|CURLE_TOO_MANY_REDIRECTS|CURLE_UNKNOWN_TELNET_OPTION|CURLE_TELNET_OPTION_SYNTAX|CURLE_OBSOLETE|CURLE_SSL_PEER_CERTIFICATE|CURLE_GOT_NOTHING|CURLE_SSL_ENGINE_NOTFOUND|CURLE_SSL_ENGINE_SETFAILED|CURLE_SEND_ERROR|CURLE_RECV_ERROR|CURLE_SHARE_IN_USE|CURLE_SSL_CERTPROBLEM|CURLE_SSL_CIPHER|CURLE_SSL_CACERT|CURLE_BAD_CONTENT_ENCODING|CURLE_LDAP_INVALID_URL|CURLE_FILESIZE_EXCEEDED|CURLE_USE_SSL_FAILED|CURLE_SEND_FAIL_REWIND|CURLE_SSL_ENGINE_INITFAILED|CURLE_LOGIN_DENIED|CURLE_TFTP_NOTFOUND|CURLE_TFTP_PERM|CURLE_REMOTE_DISK_FULL|CURLE_TFTP_ILLEGAL|CURLE_TFTP_UNKNOWNID|CURLE_REMOTE_FILE_EXISTS|CURLE_TFTP_NOSUCHUSER|CURLE_CONV_FAILED|CURLE_CONV_REQD|CURLE_SSL_CACERT_BADFILE|CURLE_REMOTE_FILE_NOT_FOUND|CURLE_SSH|CURLE_SSL_SHUTDOWN_FAILED|CURLE_AGAIN|CURLE_SSL_CRL_BADFILE|CURLE_SSL_ISSUER_ERROR|CURLE_FTP_PRET_FAILED|CURLE_RTSP_CSEQ_ERROR|CURLE_RTSP_SESSION_ERROR|CURLE_FTP_BAD_FILE_LIST|CURLE_CHUNK_FAILED|CURLE_NO_CONNECTION_AVAILABLE|CURLE_SSL_PINNEDPUBKEYNOTMATCH|CURLE_SSL_INVALIDCERTSTATUS|CURLE_HTTP2_STREAM|CURLE_RECURSIVE_API_CALL|CURLE_AUTH_ERROR|CURLE_HTTP3|CURLE_QUIC_CONNECT_ERROR|CURLE_PROXY|CURLE_SSL_CLIENTCERT|CURLE_UNRECOVERABLE_POLL|CURLE_TOO_LARGE|CURLE_ECH_REQUIREDexceptionCurlExceptionof(curlCode*int*string)typecurlNETRCOption=|CURL_NETRC_OPTIONAL|CURL_NETRC_IGNORED|CURL_NETRC_REQUIREDtypecurlEncoding=|CURL_ENCODING_NONE|CURL_ENCODING_DEFLATE|CURL_ENCODING_GZIP|CURL_ENCODING_ANYtypecurlContentType=|DEFAULT|CONTENTTYPEofstringtypecurlHTTPPost=|CURLFORM_CONTENTofstring*string*curlContentType|CURLFORM_FILECONTENTofstring*string*curlContentType|CURLFORM_FILEofstring*string*curlContentType|CURLFORM_BUFFERofstring*string*string*curlContentType(*
type curlHTTPPost =
| CURLFORM_COPYNAME of string
| CURLFORM_PTRNAME of string
| CURLFORM_NAMELENGTH of int
| CURLFORM_COPYCONTENTS of string
| CURLFORM_PTRCONTENTS of string
| CURLFORM_FILE of string
| CURLFORM_FILECONTENT of string
| CURLFORM_CONTENTSLENGTH of int
| CURLFORM_CONTENTTYPE of string
*)typecurlSSLVersion=|SSLVERSION_DEFAULT|SSLVERSION_TLSv1|SSLVERSION_SSLv2|SSLVERSION_SSLv3|SSLVERSION_TLSv1_0|SSLVERSION_TLSv1_1|SSLVERSION_TLSv1_2|SSLVERSION_TLSv1_3|SSLVERSION_MAX_TLSv1_0|SSLVERSION_MAX_TLSv1_1|SSLVERSION_MAX_TLSv1_2|SSLVERSION_MAX_TLSv1_3typecurlTimeCondition=|TIMECOND_NONE|TIMECOND_IFMODSINCE|TIMECOND_IFUNMODSINCE|TIMECOND_LASTMODtypecurlKRB4Level=|KRB4_NONE|KRB4_CLEAR|KRB4_SAFE|KRB4_CONFIDENTIAL|KRB4_PRIVATEtypecurlClosePolicy=|CLOSEPOLICY_OLDEST|CLOSEPOLICY_LEAST_RECENTLY_USEDtypecurlSSLVerifyHost=|SSLVERIFYHOST_NONE|SSLVERIFYHOST_EXISTENCE|SSLVERIFYHOST_HOSTNAMEtypecurlHTTPVersion=|HTTP_VERSION_NONE|HTTP_VERSION_1_0|HTTP_VERSION_1_1|HTTP_VERSION_2|HTTP_VERSION_2TLS|HTTP_VERSION_2_PRIOR_KNOWLEDGE|HTTP_VERSION_3typecurlDebugType=|DEBUGTYPE_TEXT|DEBUGTYPE_HEADER_IN|DEBUGTYPE_HEADER_OUT|DEBUGTYPE_DATA_IN|DEBUGTYPE_DATA_OUT|DEBUGTYPE_SSL_DATA_IN|DEBUGTYPE_SSL_DATA_OUT|DEBUGTYPE_ENDtypecurlAuth=|CURLAUTH_BASIC|CURLAUTH_DIGEST|CURLAUTH_GSSNEGOTIATE|CURLAUTH_NTLM|CURLAUTH_ANY|CURLAUTH_ANYSAFEtypecurlIPResolve=|IPRESOLVE_WHATEVER|IPRESOLVE_V4|IPRESOLVE_V6typecurlFTPSSL=|FTPSSL_NONE|FTPSSL_TRY|FTPSSL_CONTROL|FTPSSL_ALLtypecurlFTPSSLAuth=|FTPAUTH_DEFAULT|FTPAUTH_SSL|FTPAUTH_TLStypecurlIOCmd=|IOCMD_NOP|IOCMD_RESTARTREADtypecurlIOErr=|IOE_OK|IOE_UNKNOWNCMD|IOE_FAILRESTARTtypecurlSeekResult=|SEEKFUNC_OK|SEEKFUNC_FAIL|SEEKFUNC_CANTSEEKtypecurlFTPMethod=|FTPMETHOD_DEFAULT|FTPMETHOD_MULTICWD|FTPMETHOD_NOCWD|FTPMETHOD_SINGLECWDtypecurlSSHAuthTypes=|SSHAUTH_ANY|SSHAUTH_PUBLICKEY|SSHAUTH_PASSWORD|SSHAUTH_HOST|SSHAUTH_KEYBOARDtypecurlFTPSSLCCC=|FTPSSL_CCC_NONE|FTPSSL_CCC_PASSIVE|FTPSSL_CCC_ACTIVEtypecurlSeek=|SEEK_SET|SEEK_CUR|SEEK_ENDtypecurlProxyType=|CURLPROXY_HTTP(** since libcurl 7.10 *)|CURLPROXY_HTTP_1_0(** since libcurl 7.19.4 *)|CURLPROXY_SOCKS4(** since libcurl 7.15.2 *)|CURLPROXY_SOCKS5(** since libcurl 7.10 *)|CURLPROXY_SOCKS4A(** since libcurl 7.18.0 *)|CURLPROXY_SOCKS5_HOSTNAME(** since libcurl 7.18.0 *)|CURLPROXY_HTTPS(** since libcurl 7.52.0 *)|CURLPROXY_HTTPS2(** since libcurl 8.1.0 *)typecurlSockType=|CURLSOCKTYPE_IPCXNtypecurlSockAddr={family:Unix.socket_domain;socktype:Unix.socket_type;protocol:int;address:Unix.sockaddr;}typedata_source=|Stringofstring(** Equivalent to `CURLMIME_DATA` *)|Fileofstring(** Equivalent to `CURLMIME_FILEDATA` *)typecurlMIMEPartData=|CURLMIME_DATAofstring|CURLMIME_FILEDATAofstring|CURLMIME_DATA_WITH_NAMEof{data:data_source;name:stringoption;filename:stringoption;}typecurlMIMEEncoding=|CURLMIME_8BIT|CURLMIME_BINARY|CURLMIME_7BIT|CURLMIME_QUOTEDPRINTABLE|CURLMIME_BASE64|CURLMIME_NONEtypecurlMIMEPart={encoding:curlMIMEEncoding;headers:stringlist;subparts:curlMIMEPartlist;data:curlMIMEPartData;}typecurlKHMatch=|CURLKHMATCH_OK|CURLKHMATCH_MISMATCHofstring|CURLKHMATCH_MISSINGtypecurlKHStat=|CURLKHSTAT_FINE_ADD_TO_FILE|CURLKHSTAT_FINE|CURLKHSTAT_REJECT|CURLKHSTAT_DEFER(** Protocols to enable (via CURLOPT_PROTOCOLS and CURLOPT_REDIR_PROTOCOLS) *)typecurlProto=|CURLPROTO_ALL(** enable everything *)|CURLPROTO_HTTP|CURLPROTO_HTTPS|CURLPROTO_FTP|CURLPROTO_FTPS|CURLPROTO_SCP|CURLPROTO_SFTP|CURLPROTO_TELNET|CURLPROTO_LDAP|CURLPROTO_LDAPS|CURLPROTO_DICT|CURLPROTO_FILE|CURLPROTO_TFTP|CURLPROTO_IMAP|CURLPROTO_IMAPS|CURLPROTO_POP3|CURLPROTO_POP3S|CURLPROTO_SMTP|CURLPROTO_SMTPS|CURLPROTO_RTSP|CURLPROTO_RTMP|CURLPROTO_RTMPT|CURLPROTO_RTMPE|CURLPROTO_RTMPTE|CURLPROTO_RTMPS|CURLPROTO_RTMPTS|CURLPROTO_GOPHER(* sync curlPostRedir_table *)typecurlPostRedir=|REDIR_POST_ALL|REDIR_POST_301|REDIR_POST_302|REDIR_POST_303typecurlSslOption=|CURLSSLOPT_ALLOW_BEAST|CURLSSLOPT_NO_REVOKE|CURLSSLOPT_NO_PARTIALCHAIN|CURLSSLOPT_REVOKE_BEST_EFFORT|CURLSSLOPT_NATIVE_CA|CURLSSLOPT_AUTO_CLIENT_CERTtype'axfer_result=Proceedof'a|Pause|Aborttypewrite_result=unitxfer_resulttyperead_result=stringxfer_resulttypebigstring=(char,Bigarray.int8_unsigned_elt,Bigarray.c_layout)Bigarray.Array1.tletproceed=Proceed()typecurlOption=|CURLOPT_WRITEFUNCTIONof(string->int)|CURLOPT_READFUNCTIONof(int->string)|CURLOPT_INFILESIZEofint|CURLOPT_URLofstring|CURLOPT_PROXYofstring|CURLOPT_PROXYPORTofint|CURLOPT_HTTPPROXYTUNNELofbool|CURLOPT_VERBOSEofbool|CURLOPT_HEADERofbool|CURLOPT_NOPROGRESSofbool|CURLOPT_NOSIGNALofbool|CURLOPT_NOBODYofbool|CURLOPT_FAILONERRORofbool|CURLOPT_UPLOADofbool|CURLOPT_POSTofbool|CURLOPT_FTPLISTONLYofbool|CURLOPT_FTPAPPENDofbool|CURLOPT_NETRCofcurlNETRCOption|CURLOPT_ENCODINGofcurlEncoding|CURLOPT_FOLLOWLOCATIONofbool|CURLOPT_TRANSFERTEXTofbool|CURLOPT_PUTofbool|CURLOPT_USERPWDofstring|CURLOPT_PROXYUSERPWDofstring|CURLOPT_RANGEofstring|CURLOPT_ERRORBUFFERofstringref|CURLOPT_TIMEOUTofint|CURLOPT_POSTFIELDSofstring|CURLOPT_POSTFIELDSIZEofint|CURLOPT_REFERERofstring|CURLOPT_USERAGENTofstring|CURLOPT_FTPPORTofstring|CURLOPT_LOWSPEEDLIMITofint|CURLOPT_LOWSPEEDTIMEofint|CURLOPT_RESUMEFROMofint|CURLOPT_COOKIEofstring|CURLOPT_HTTPHEADERofstringlist|CURLOPT_HTTPPOSTofcurlHTTPPostlist|CURLOPT_SSLCERTofstring|CURLOPT_SSLCERTTYPEofstring|CURLOPT_SSLCERTPASSWDofstring|CURLOPT_SSLKEYofstring|CURLOPT_SSLKEYTYPEofstring|CURLOPT_SSLKEYPASSWDofstring|CURLOPT_SSLENGINEofstring|CURLOPT_SSLENGINEDEFAULTofbool|CURLOPT_CRLFofbool|CURLOPT_QUOTEofstringlist|CURLOPT_POSTQUOTEofstringlist|CURLOPT_HEADERFUNCTIONof(string->int)|CURLOPT_COOKIEFILEofstring|CURLOPT_SSLVERSIONofcurlSSLVersion|CURLOPT_TIMECONDITIONofcurlTimeCondition|CURLOPT_TIMEVALUEofint32|CURLOPT_CUSTOMREQUESTofstring|CURLOPT_INTERFACEofstring|CURLOPT_KRB4LEVELofcurlKRB4Level|CURLOPT_PROGRESSFUNCTIONof(float->float->float->float->bool)|CURLOPT_SSLVERIFYPEERofbool|CURLOPT_CAINFOofstring|CURLOPT_CAPATHofstring|CURLOPT_FILETIMEofbool|CURLOPT_MAXREDIRSofint|CURLOPT_MAXCONNECTSofint|CURLOPT_CLOSEPOLICYofcurlClosePolicy|CURLOPT_FRESHCONNECTofbool|CURLOPT_FORBIDREUSEofbool|CURLOPT_RANDOMFILEofstring|CURLOPT_EGDSOCKETofstring|CURLOPT_CONNECTTIMEOUTofint|CURLOPT_HTTPGETofbool|CURLOPT_SSLVERIFYHOSTofcurlSSLVerifyHost|CURLOPT_COOKIEJARofstring|CURLOPT_SSLCIPHERLISTofstring|CURLOPT_HTTPVERSIONofcurlHTTPVersion|CURLOPT_FTPUSEEPSVofbool|CURLOPT_DNSCACHETIMEOUTofint|CURLOPT_DNSUSEGLOBALCACHEofbool|CURLOPT_DEBUGFUNCTIONof(t->curlDebugType->string->unit)|CURLOPT_PRIVATEofstring|CURLOPT_HTTP200ALIASESofstringlist|CURLOPT_UNRESTRICTEDAUTHofbool|CURLOPT_FTPUSEEPRTofbool|CURLOPT_HTTPAUTHofcurlAuthlist|CURLOPT_FTPCREATEMISSINGDIRSofbool|CURLOPT_PROXYAUTHofcurlAuthlist|CURLOPT_FTPRESPONSETIMEOUTofint|CURLOPT_IPRESOLVEofcurlIPResolve|CURLOPT_MAXFILESIZEofint32|CURLOPT_INFILESIZELARGEofint64|CURLOPT_RESUMEFROMLARGEofint64|CURLOPT_MAXFILESIZELARGEofint64|CURLOPT_NETRCFILEofstring|CURLOPT_FTPSSLofcurlFTPSSL|CURLOPT_POSTFIELDSIZELARGEofint64|CURLOPT_TCPNODELAYofbool|CURLOPT_TCP_FASTOPENofbool|CURLOPT_FTPSSLAUTHofcurlFTPSSLAuth|CURLOPT_IOCTLFUNCTIONof(t->curlIOCmd->curlIOErr)|CURLOPT_FTPACCOUNTofstring|CURLOPT_COOKIELISTofstring|CURLOPT_IGNORECONTENTLENGTHofbool|CURLOPT_FTPSKIPPASVIPofbool|CURLOPT_FTPFILEMETHODofcurlFTPMethod|CURLOPT_LOCALPORTofint|CURLOPT_LOCALPORTRANGEofint|CURLOPT_CONNECTONLYofbool|CURLOPT_MAXSENDSPEEDLARGEofint64|CURLOPT_MAXRECVSPEEDLARGEofint64|CURLOPT_FTPALTERNATIVETOUSERofstring|CURLOPT_SSLSESSIONIDCACHEofbool|CURLOPT_SSHAUTHTYPESofcurlSSHAuthTypeslist|CURLOPT_SSHPUBLICKEYFILEofstring|CURLOPT_SSHPRIVATEKEYFILEofstring|CURLOPT_FTPSSLCCCofcurlFTPSSLCCC|CURLOPT_TIMEOUTMSofint|CURLOPT_CONNECTTIMEOUTMSofint|CURLOPT_HTTPTRANSFERDECODINGofbool|CURLOPT_HTTPCONTENTDECODINGofbool|CURLOPT_NEWFILEPERMSofint|CURLOPT_NEWDIRECTORYPERMSofint|CURLOPT_POST301ofbool|CURLOPT_SSHHOSTPUBLICKEYMD5ofstring|CURLOPT_COPYPOSTFIELDSofstring|CURLOPT_PROXYTRANSFERMODEofbool|CURLOPT_SEEKFUNCTIONof(int64->curlSeek->curlSeekResult)|CURLOPT_AUTOREFERERofbool|CURLOPT_OPENSOCKETFUNCTIONof(Unix.file_descr->unit)|CURLOPT_OPENSOCKETFUNCTION2of(curlSockType->curlSockAddr->Unix.file_descroption)(* | CURLOPT_CLOSESOCKETFUNCTION of (Unix.file_descr -> unit) *)|CURLOPT_PROXYTYPEofcurlProxyType|CURLOPT_PROTOCOLSofcurlProtolist|CURLOPT_REDIR_PROTOCOLSofcurlProtolist|CURLOPT_RESOLVEofstringlist|CURLOPT_DNS_SERVERSofstring|CURLOPT_MAIL_FROMofstring|CURLOPT_MAIL_RCPTofstringlist|CURLOPT_PIPEWAITofbool|CURLOPT_CERTINFOofbool|CURLOPT_USERNAMEofstring|CURLOPT_PASSWORDofstring|CURLOPT_LOGIN_OPTIONSofstring|CURLOPT_CONNECT_TOofstringlist|CURLOPT_POSTREDIRofcurlPostRedirlist|CURLOPT_MIMEPOSTofcurlMIMEPartlist|CURLOPT_SSHKNOWNHOSTSofstring|CURLOPT_SSHKEYFUNCTIONof(curlKHMatch->string->curlKHStat)|CURLOPT_BUFFERSIZEofint|CURLOPT_DOH_URLofstring|CURLOPT_SSL_OPTIONSofcurlSslOptionlist|CURLOPT_PROXY_SSL_OPTIONSofcurlSslOptionlist|CURLOPT_WRITEFUNCTION2of(string->write_result)|CURLOPT_WRITEFUNCTION_BUFof(bigstring->write_result)|CURLOPT_READFUNCTION2of(int->read_result)|CURLOPT_XFERINFOFUNCTIONof(int64->int64->int64->int64->bool)|CURLOPT_PREREQFUNCTIONof(string->string->int->int->bool)|CURLOPT_AWS_SIGV4ofstring|CURLOPT_TCP_KEEPALIVEofbool|CURLOPT_TCP_KEEPIDLEofint|CURLOPT_TCP_KEEPINTVLofint|CURLOPT_NOPROXYofstring|CURLOPT_UNIX_SOCKET_PATHofstringtypeinitOption=|CURLINIT_GLOBALALL|CURLINIT_GLOBALSSL|CURLINIT_GLOBALWIN32|CURLINIT_GLOBALNOTHINGtypecurlInfo=|CURLINFO_EFFECTIVE_URL|CURLINFO_HTTP_CODE|CURLINFO_RESPONSE_CODE|CURLINFO_TOTAL_TIME|CURLINFO_NAMELOOKUP_TIME|CURLINFO_CONNECT_TIME|CURLINFO_PRETRANSFER_TIME|CURLINFO_SIZE_UPLOAD|CURLINFO_SIZE_DOWNLOAD|CURLINFO_SPEED_DOWNLOAD|CURLINFO_SPEED_UPLOAD|CURLINFO_HEADER_SIZE|CURLINFO_REQUEST_SIZE|CURLINFO_SSL_VERIFYRESULT|CURLINFO_FILETIME|CURLINFO_CONTENT_LENGTH_DOWNLOAD|CURLINFO_CONTENT_LENGTH_UPLOAD|CURLINFO_STARTTRANSFER_TIME|CURLINFO_CONTENT_TYPE|CURLINFO_REDIRECT_TIME|CURLINFO_REDIRECT_COUNT|CURLINFO_PRIVATE|CURLINFO_HTTP_CONNECTCODE|CURLINFO_HTTPAUTH_AVAIL|CURLINFO_PROXYAUTH_AVAIL|CURLINFO_OS_ERRNO|CURLINFO_NUM_CONNECTS|CURLINFO_SSL_ENGINES|CURLINFO_COOKIELIST|CURLINFO_LASTSOCKET|CURLINFO_FTP_ENTRY_PATH|CURLINFO_REDIRECT_URL|CURLINFO_PRIMARY_IP|CURLINFO_LOCAL_IP|CURLINFO_LOCAL_PORT|CURLINFO_CONDITION_UNMET|CURLINFO_CERTINFO|CURLINFO_ACTIVESOCKET|CURLINFO_HTTP_VERSIONtypecurlInfoResult=|CURLINFO_Stringofstring|CURLINFO_Longofint|CURLINFO_Doubleoffloat|CURLINFO_StringListofstringlist|CURLINFO_StringListListofstringlistlist|CURLINFO_SocketofUnix.file_descr|CURLINFO_VersionofcurlHTTPVersiontypecurlSslBackend=|CURLSSLBACKEND_NONE|CURLSSLBACKEND_OPENSSL|CURLSSLBACKEND_GNUTLS|CURLSSLBACKEND_NSS|CURLSSLBACKEND_GSKIT|CURLSSLBACKEND_WOLFSSL|CURLSSLBACKEND_SCHANNEL|CURLSSLBACKEND_SECURETRANSPORT|CURLSSLBACKEND_MBEDTLS|CURLSSLBACKEND_MESALINK|CURLSSLBACKEND_BEARSSLtypecurlSslSet=|CURLSSLSET_OK|CURLSSLSET_UNKNOWN_BACKEND|CURLSSLSET_TOO_LATE|CURLSSLSET_NO_BACKENDSexceptionNotImplementedofstringlet()=Callback.register_exception"Curl.NotImplemented"(NotImplemented"")exceptionCurlSslSetExceptionofcurlSslSetlet()=Callback.register_exception"CurlSslSetException"(CurlSslSetExceptionCURLSSLSET_OK)externalglobal_sslset:curlSslBackend->unit="caml_curl_global_sslset"externalglobal_sslset_str:string->unit="caml_curl_global_sslset_str"externalglobal_sslsetavail:unit->curlSslBackendlist="caml_curl_global_sslsetavail"externalglobal_sslsetavail_str:unit->stringlist="caml_curl_global_sslsetavail_str"externalglobal_init:initOption->unit="caml_curl_global_init"externalglobal_cleanup:unit->unit="caml_curl_global_cleanup"externalinit:unit->t="caml_curl_easy_init"externalreset:t->unit="caml_curl_easy_reset"externalsetopt:t->curlOption->unit="caml_curl_easy_setopt"externalperform:t->unit="caml_curl_easy_perform"externalcleanup:t->unit="caml_curl_easy_cleanup"externalgetinfo:t->curlInfo->curlInfoResult="caml_curl_easy_getinfo"externalescape:string->string="caml_curl_escape"externalunescape:string->string="caml_curl_unescape"externalgetdate:string->float->float="caml_curl_getdate"externalversion:unit->string="caml_curl_version"typeversion_info={version:string;number:int*int*int;host:string;features:stringlist;ssl_version:stringoption;libz_version:stringoption;protocols:stringlist;ares:string;ares_num:int;libidn:string;iconv_ver_num:int;libssh_version:string;}externalversion_info:unit->version_info="caml_curl_version_info"externalstrerror:curlCode->string="caml_curl_strerror"externalcurlCode_of_int:int->curlCodeoption="caml_curl_curlCode_of_int"externalint_of_curlCode:curlCode->int="caml_curl_int_of_curlCode"leterrno=int_of_curlCodetypepauseOption=PAUSE_SEND|PAUSE_RECV|PAUSE_ALLexternalpause:t->pauseOptionlist->unit="caml_curl_pause"typeheaderOrigin=|CURLH_HEADER|CURLH_TRAILER|CURLH_CONNECT|CURLH_1XX|CURLH_PSEUDOexternalget_headers_rev:t->headerOriginlist->int->(string*string)list="caml_curl_get_headers_rev"letget_headerstorigins~request=get_headers_revtoriginsrequest|>List.rev(** WebSocket support *)typecurlWSFlag=|CURLWS_TEXT|CURLWS_BINARY|CURLWS_CONT|CURLWS_CLOSE|CURLWS_PING|CURLWS_PONG|CURLWS_OFFSETtypecurlWSFrame={age:int;flags:curlWSFlaglist;offset:int;bytesleft:int;}externalws_meta:t->curlWSFrameoption="caml_curl_ws_meta"externalws_send:t->string->curlWSFlaglist->int="caml_curl_ws_send"letset_writefunctionconnclosure=setoptconn(CURLOPT_WRITEFUNCTIONclosure)letset_writefunction2connclosure=setoptconn(CURLOPT_WRITEFUNCTION2closure)letset_writefunction_bufconnclosure=setoptconn(CURLOPT_WRITEFUNCTION_BUFclosure)letset_readfunctionconnclosure=setoptconn(CURLOPT_READFUNCTIONclosure)letset_readfunction2connclosure=setoptconn(CURLOPT_READFUNCTION2closure)letset_infilesizeconnsize=setoptconn(CURLOPT_INFILESIZEsize)letset_urlconnurl=setoptconn(CURLOPT_URLurl)letset_proxyconnproxy=setoptconn(CURLOPT_PROXYproxy)letset_proxyportconnproxyport=setoptconn(CURLOPT_PROXYPORTproxyport)letset_httpproxytunnelconnflag=setoptconn(CURLOPT_HTTPPROXYTUNNELflag)letset_verboseconnflag=setoptconn(CURLOPT_VERBOSEflag)letset_headerconnflag=setoptconn(CURLOPT_HEADERflag)letset_noprogressconnflag=setoptconn(CURLOPT_NOPROGRESSflag)letset_nosignalconnflag=setoptconn(CURLOPT_NOSIGNALflag)letset_nobodyconnflag=setoptconn(CURLOPT_NOBODYflag)letset_failonerrorconnflag=setoptconn(CURLOPT_FAILONERRORflag)letset_uploadconnflag=setoptconn(CURLOPT_UPLOADflag)letset_postconnflag=setoptconn(CURLOPT_POSTflag)letset_ftplistonlyconnflag=setoptconn(CURLOPT_FTPLISTONLYflag)letset_ftpappendconnflag=setoptconn(CURLOPT_FTPAPPENDflag)letset_netrcconnnetrc=setoptconn(CURLOPT_NETRCnetrc)letset_encodingconnencoding=setoptconn(CURLOPT_ENCODINGencoding)letset_followlocationconnflag=setoptconn(CURLOPT_FOLLOWLOCATIONflag)letset_transfertextconnflag=setoptconn(CURLOPT_TRANSFERTEXTflag)letset_putconnflag=setoptconn(CURLOPT_PUTflag)letset_userpwdconnuserpwd=setoptconn(CURLOPT_USERPWDuserpwd)letset_proxyuserpwdconnproxyuserpwd=setoptconn(CURLOPT_PROXYUSERPWDproxyuserpwd)letset_rangeconnrange=setoptconn(CURLOPT_RANGErange)letset_errorbufferconnerrorbuffer=setoptconn(CURLOPT_ERRORBUFFERerrorbuffer)letset_timeoutconntimeout=setoptconn(CURLOPT_TIMEOUTtimeout)letset_postfieldsconnpostfields=setoptconn(CURLOPT_POSTFIELDSpostfields)letset_postfieldsizeconnpostfieldsize=setoptconn(CURLOPT_POSTFIELDSIZEpostfieldsize)letset_refererconnreferer=setoptconn(CURLOPT_REFERERreferer)letset_useragentconnuseragent=setoptconn(CURLOPT_USERAGENTuseragent)letset_ftpportconnftpport=setoptconn(CURLOPT_FTPPORTftpport)letset_lowspeedlimitconnlowspeedlimit=setoptconn(CURLOPT_LOWSPEEDLIMITlowspeedlimit)letset_lowspeedtimeconnlowspeedtime=setoptconn(CURLOPT_LOWSPEEDTIMElowspeedtime)letset_resumefromconnresumefrom=setoptconn(CURLOPT_RESUMEFROMresumefrom)letset_cookieconncookie=setoptconn(CURLOPT_COOKIEcookie)letset_httpheaderconnhttpheader=setoptconn(CURLOPT_HTTPHEADERhttpheader)letset_httppostconnhttppost=setoptconn(CURLOPT_HTTPPOSThttppost)letset_sslcertconnsslcert=setoptconn(CURLOPT_SSLCERTsslcert)letset_sslcerttypeconnsslcerttype=setoptconn(CURLOPT_SSLCERTTYPEsslcerttype)letset_sslcertpasswdconnsslcertpasswd=setoptconn(CURLOPT_SSLCERTPASSWDsslcertpasswd)letset_sslkeyconnsslkey=setoptconn(CURLOPT_SSLKEYsslkey)letset_sslkeytypeconnsslkeytype=setoptconn(CURLOPT_SSLKEYTYPEsslkeytype)letset_sslkeypasswdconnsslkeypasswd=setoptconn(CURLOPT_SSLKEYPASSWDsslkeypasswd)letset_sslengineconnsslengine=setoptconn(CURLOPT_SSLENGINEsslengine)letset_sslenginedefaultconnflag=setoptconn(CURLOPT_SSLENGINEDEFAULTflag)letset_certinfoconnflag=setoptconn(CURLOPT_CERTINFOflag)letset_crlfconnflag=setoptconn(CURLOPT_CRLFflag)letset_quoteconnquote=setoptconn(CURLOPT_QUOTEquote)letset_postquoteconnpostquote=setoptconn(CURLOPT_POSTQUOTEpostquote)letset_headerfunctionconnclosure=setoptconn(CURLOPT_HEADERFUNCTIONclosure)letset_cookiefileconncookiefile=setoptconn(CURLOPT_COOKIEFILEcookiefile)letset_sslversionconnsslversion=setoptconn(CURLOPT_SSLVERSIONsslversion)letset_timeconditionconntimecondition=setoptconn(CURLOPT_TIMECONDITIONtimecondition)letset_timevalueconntimevalue=setoptconn(CURLOPT_TIMEVALUEtimevalue)letset_customrequestconncustomrequest=setoptconn(CURLOPT_CUSTOMREQUESTcustomrequest)letset_interfaceconninterface=setoptconn(CURLOPT_INTERFACEinterface)letset_krb4levelconnkrb4level=setoptconn(CURLOPT_KRB4LEVELkrb4level)letset_progressfunctionconnclosure=setoptconn(CURLOPT_PROGRESSFUNCTIONclosure)letset_xferinfofunctionconnclosure=setoptconn(CURLOPT_XFERINFOFUNCTIONclosure)letset_prereqfunctionconnclosure=setoptconn(CURLOPT_PREREQFUNCTIONclosure)letset_sslverifypeerconnflag=setoptconn(CURLOPT_SSLVERIFYPEERflag)letset_cainfoconncainfo=setoptconn(CURLOPT_CAINFOcainfo)letset_capathconncapath=setoptconn(CURLOPT_CAPATHcapath)letset_filetimeconnfiletime=setoptconn(CURLOPT_FILETIMEfiletime)letset_maxredirsconnmaxredirs=setoptconn(CURLOPT_MAXREDIRSmaxredirs)letset_maxconnectsconnmaxconnects=setoptconn(CURLOPT_MAXCONNECTSmaxconnects)letset_closepolicyconnclosepolicy=setoptconn(CURLOPT_CLOSEPOLICYclosepolicy)letset_freshconnectconnflag=setoptconn(CURLOPT_FRESHCONNECTflag)letset_forbidreuseconnflag=setoptconn(CURLOPT_FORBIDREUSEflag)letset_randomfileconnrandomfile=setoptconn(CURLOPT_RANDOMFILErandomfile)letset_egdsocketconnegdsocket=setoptconn(CURLOPT_EGDSOCKETegdsocket)letset_connecttimeoutconnconnecttimeout=setoptconn(CURLOPT_CONNECTTIMEOUTconnecttimeout)letset_httpgetconnflag=setoptconn(CURLOPT_HTTPGETflag)letset_sslverifyhostconnsslverifyhost=setoptconn(CURLOPT_SSLVERIFYHOSTsslverifyhost)letset_cookiejarconncookiejar=setoptconn(CURLOPT_COOKIEJARcookiejar)letset_sslcipherlistconnsslcipherlist=setoptconn(CURLOPT_SSLCIPHERLISTsslcipherlist)letset_httpversionconnhttpversion=setoptconn(CURLOPT_HTTPVERSIONhttpversion)letset_ftpuseepsvconnflag=setoptconn(CURLOPT_FTPUSEEPSVflag)letset_dnscachetimeoutconndnscachetimeout=setoptconn(CURLOPT_DNSCACHETIMEOUTdnscachetimeout)letset_dnsuseglobalcacheconnflag=setoptconn(CURLOPT_DNSUSEGLOBALCACHEflag)letset_debugfunctionconnclosure=setoptconn(CURLOPT_DEBUGFUNCTIONclosure)letset_privateconnprivateData=setoptconn(CURLOPT_PRIVATEprivateData)letset_http200aliasesconnaliases=setoptconn(CURLOPT_HTTP200ALIASESaliases)letset_unrestrictedauthconnflag=setoptconn(CURLOPT_UNRESTRICTEDAUTHflag)letset_ftpuseeprtconnflag=setoptconn(CURLOPT_FTPUSEEPRTflag)letset_httpauthconnauth=setoptconn(CURLOPT_HTTPAUTHauth)letset_ftpcreatemissingdirsconnflag=setoptconn(CURLOPT_FTPCREATEMISSINGDIRSflag)letset_proxyauthconnauth=setoptconn(CURLOPT_PROXYAUTHauth)letset_ftpresponsetimeoutconntimeout=setoptconn(CURLOPT_FTPRESPONSETIMEOUTtimeout)letset_ipresolveconnipresolve=setoptconn(CURLOPT_IPRESOLVEipresolve)letset_maxfilesizeconnsize=setoptconn(CURLOPT_MAXFILESIZEsize)letset_infilesizelargeconnsize=setoptconn(CURLOPT_INFILESIZELARGEsize)letset_resumefromlargeconnsize=setoptconn(CURLOPT_RESUMEFROMLARGEsize)letset_maxfilesizelargeconnsize=setoptconn(CURLOPT_MAXFILESIZELARGEsize)letset_netrcfileconnfile=setoptconn(CURLOPT_NETRCFILEfile)letset_ftpsslconnftpssl=setoptconn(CURLOPT_FTPSSLftpssl)letset_postfieldsizelargeconnsize=setoptconn(CURLOPT_POSTFIELDSIZELARGEsize)letset_tcpnodelayconnflag=setoptconn(CURLOPT_TCPNODELAYflag)letset_tcpfastopenconnflag=setoptconn(CURLOPT_TCP_FASTOPENflag)letset_tcpkeepaliveconnflag=setoptconn(CURLOPT_TCP_KEEPALIVEflag)letset_tcpkeepidleconnseconds=setoptconn(CURLOPT_TCP_KEEPIDLEseconds)letset_tcpkeepintvlconnseconds=setoptconn(CURLOPT_TCP_KEEPINTVLseconds)letset_ftpsslauthconnauth=setoptconn(CURLOPT_FTPSSLAUTHauth)letset_ioctlfunctionconnclosure=setoptconn(CURLOPT_IOCTLFUNCTIONclosure)letset_ftpaccountconnaccount=setoptconn(CURLOPT_FTPACCOUNTaccount)letset_cookielistconncookielist=setoptconn(CURLOPT_COOKIELISTcookielist)letset_ignorecontentlengthconnflag=setoptconn(CURLOPT_IGNORECONTENTLENGTHflag)letset_ftpskippasvipconnflag=setoptconn(CURLOPT_FTPSKIPPASVIPflag)letset_ftpfilemethodconnftpMethod=setoptconn(CURLOPT_FTPFILEMETHODftpMethod)letset_localportconnport=setoptconn(CURLOPT_LOCALPORTport)letset_localportrangeconnrange=setoptconn(CURLOPT_LOCALPORTRANGErange)letset_connectonlyconnflag=setoptconn(CURLOPT_CONNECTONLYflag)letset_maxsendspeedlargeconnspeed=setoptconn(CURLOPT_MAXSENDSPEEDLARGEspeed)letset_maxrecvspeedlargeconnspeed=setoptconn(CURLOPT_MAXRECVSPEEDLARGEspeed)letset_ftpalternativetouserconnuser=setoptconn(CURLOPT_FTPALTERNATIVETOUSERuser)letset_sslsessionidcacheconnflag=setoptconn(CURLOPT_SSLSESSIONIDCACHEflag)letset_sshauthtypesconntypes=setoptconn(CURLOPT_SSHAUTHTYPEStypes)letset_sshpublickeyfileconnkeyfile=setoptconn(CURLOPT_SSHPUBLICKEYFILEkeyfile)letset_sshprivatekeyfileconnkeyfile=setoptconn(CURLOPT_SSHPRIVATEKEYFILEkeyfile)letset_ftpsslcccconnccc=setoptconn(CURLOPT_FTPSSLCCCccc)letset_timeoutmsconnms=setoptconn(CURLOPT_TIMEOUTMSms)letset_connecttimeoutmsconnms=setoptconn(CURLOPT_CONNECTTIMEOUTMSms)letset_httptransferdecodingconnflag=setoptconn(CURLOPT_HTTPTRANSFERDECODINGflag)letset_httpcontentdecodingconnflag=setoptconn(CURLOPT_HTTPCONTENTDECODINGflag)letset_newfilepermsconnperms=setoptconn(CURLOPT_NEWFILEPERMSperms)letset_newdirectorypermsconnperms=setoptconn(CURLOPT_NEWDIRECTORYPERMSperms)letset_post301connflag=setoptconn(CURLOPT_POST301flag)letset_sshhostpublickeymd5connkey=setoptconn(CURLOPT_SSHHOSTPUBLICKEYMD5key)letset_copypostfieldsconnpost=setoptconn(CURLOPT_COPYPOSTFIELDSpost)letset_proxytransfermodeconnflag=setoptconn(CURLOPT_PROXYTRANSFERMODEflag)letset_seekfunctionconnclosure=setoptconn(CURLOPT_SEEKFUNCTIONclosure)letset_autorefererconnb=setoptconn(CURLOPT_AUTOREFERERb)letset_opensocketfunctionconnclosure=setoptconn(CURLOPT_OPENSOCKETFUNCTIONclosure)letset_opensocketfunction2connclosure=setoptconn(CURLOPT_OPENSOCKETFUNCTION2closure)(*
let set_closesocketfunction conn closure =
setopt conn (CURLOPT_CLOSESOCKETFUNCTION closure)
*)letset_proxytypeconnptype=setoptconn(CURLOPT_PROXYTYPEptype)letset_protocolsconnl=setoptconn(CURLOPT_PROTOCOLSl)letset_redirprotocolsconnl=setoptconn(CURLOPT_REDIR_PROTOCOLSl)letset_resolveconnl_addl_del=letacc=List.fold_left(funacc(host,port,address)->(host^":"^string_of_intport^":"^address)::acc)[]l_addinletacc=List.fold_left(funacc(host,port)->("-"^host^":"^string_of_intport)::acc)accl_delinsetoptconn(CURLOPT_RESOLVEacc)letset_dns_serversconnl=setoptconn(CURLOPT_DNS_SERVERS(String.concat","l))letset_mailfromconnl=setoptconn(CURLOPT_MAIL_FROMl)letset_mailrcptconnl=setoptconn(CURLOPT_MAIL_RCPTl)letset_pipewaitconnb=setoptconn(CURLOPT_PIPEWAITb)letset_usernameconns=setoptconn(CURLOPT_USERNAMEs)letset_passwordconns=setoptconn(CURLOPT_PASSWORDs)letset_login_optionsconns=setoptconn(CURLOPT_LOGIN_OPTIONSs)letset_connect_toconnl=setoptconn(CURLOPT_CONNECT_TOl)letset_postredirconnl=setoptconn(CURLOPT_POSTREDIRl)letset_mimepostconnpart=setoptconn(CURLOPT_MIMEPOSTpart)letset_sshknownhostsconns=setoptconn(CURLOPT_SSHKNOWNHOSTSs)letset_sshkeyfunctionconnf=setoptconn(CURLOPT_SSHKEYFUNCTIONf)letset_buffersizeconnbuffersize=setoptconn(CURLOPT_BUFFERSIZEbuffersize)letset_doh_urlconnurl=setoptconn(CURLOPT_DOH_URLurl)letset_ssl_optionsconnopts=setoptconn(CURLOPT_SSL_OPTIONSopts)letset_aws_sigv4connparam=setoptconn(CURLOPT_AWS_SIGV4param)letset_proxy_ssl_optionsconnopts=setoptconn(CURLOPT_PROXY_SSL_OPTIONSopts)letset_noproxyconns=setoptconn(CURLOPT_NOPROXYs)letset_unix_socket_pathconnunix_socket_path=setoptconn(CURLOPT_UNIX_SOCKET_PATHunix_socket_path)letget_effectiveurlconn=match(getinfoconnCURLINFO_EFFECTIVE_URL)with|CURLINFO_Strings->s|_->""letget_redirecturlconn=match(getinfoconnCURLINFO_REDIRECT_URL)with|CURLINFO_Strings->s|_->""letget_responsecodeconn=match(getinfoconnCURLINFO_HTTP_CODE)with|CURLINFO_Longl->l|_->0letget_httpcodeconn=get_responsecodeconnletget_totaltimeconn=match(getinfoconnCURLINFO_TOTAL_TIME)with|CURLINFO_Doubled->d|_->0.0letget_namelookuptimeconn=match(getinfoconnCURLINFO_NAMELOOKUP_TIME)with|CURLINFO_Doubled->d|_->0.0letget_connecttimeconn=match(getinfoconnCURLINFO_CONNECT_TIME)with|CURLINFO_Doubled->d|_->0.0letget_pretransfertimeconn=match(getinfoconnCURLINFO_PRETRANSFER_TIME)with|CURLINFO_Doubled->d|_->0.0letget_sizeuploadconn=match(getinfoconnCURLINFO_SIZE_UPLOAD)with|CURLINFO_Doubled->d|_->0.0letget_sizedownloadconn=match(getinfoconnCURLINFO_SIZE_DOWNLOAD)with|CURLINFO_Doubled->d|_->0.0letget_speeddownloadconn=match(getinfoconnCURLINFO_SPEED_DOWNLOAD)with|CURLINFO_Doubled->d|_->0.0letget_speeduploadconn=match(getinfoconnCURLINFO_SPEED_UPLOAD)with|CURLINFO_Doubled->d|_->0.0letget_headersizeconn=match(getinfoconnCURLINFO_HEADER_SIZE)with|CURLINFO_Longl->l|_->0letget_requestsizeconn=match(getinfoconnCURLINFO_REQUEST_SIZE)with|CURLINFO_Longl->l|_->0letget_sslverifyresultconn=match(getinfoconnCURLINFO_SSL_VERIFYRESULT)with|CURLINFO_Longl->l|_->0letget_filetimeconn=match(getinfoconnCURLINFO_FILETIME)with|CURLINFO_Doubled->d|_->0.0letget_contentlengthdownloadconn=match(getinfoconnCURLINFO_CONTENT_LENGTH_DOWNLOAD)with|CURLINFO_Doubled->d|_->0.0letget_contentlengthuploadconn=match(getinfoconnCURLINFO_CONTENT_LENGTH_UPLOAD)with|CURLINFO_Doubled->d|_->0.0letget_starttransfertimeconn=match(getinfoconnCURLINFO_STARTTRANSFER_TIME)with|CURLINFO_Doubled->d|_->0.0letget_contenttypeconn=match(getinfoconnCURLINFO_CONTENT_TYPE)with|CURLINFO_Strings->s|_->""letget_redirecttimeconn=match(getinfoconnCURLINFO_REDIRECT_TIME)with|CURLINFO_Doubled->d|_->0.0letget_redirectcountconn=match(getinfoconnCURLINFO_REDIRECT_COUNT)with|CURLINFO_Longl->l|_->0letget_privateconn=match(getinfoconnCURLINFO_PRIVATE)with|CURLINFO_Strings->s|_->""letget_httpconnectcodeconn=match(getinfoconnCURLINFO_HTTP_CONNECTCODE)with|CURLINFO_Longl->l|_->0letget_certinfoconn=match(getinfoconnCURLINFO_CERTINFO)with|CURLINFO_StringListListl->l|_->[]letgenerate_authauth=letresult=ref[]inifauthland1!=0thenresult:=[CURLAUTH_BASIC];ifauthland2!=0thenresult:=CURLAUTH_DIGEST::!result;ifauthland4!=0thenresult:=CURLAUTH_GSSNEGOTIATE::!result;ifauthland8!=0thenresult:=CURLAUTH_NTLM::!result;!resultletget_httpauthavailconn=match(getinfoconnCURLINFO_HTTPAUTH_AVAIL)with|CURLINFO_Longl->generate_authl|_->[]letget_proxyauthavailconn=match(getinfoconnCURLINFO_PROXYAUTH_AVAIL)with|CURLINFO_Longl->generate_authl|_->[]letget_oserrnoconn=match(getinfoconnCURLINFO_OS_ERRNO)with|CURLINFO_Longl->l|_->0letget_numconnectsconn=match(getinfoconnCURLINFO_NUM_CONNECTS)with|CURLINFO_Longl->l|_->0letget_sslenginesconn=match(getinfoconnCURLINFO_SSL_ENGINES)with|CURLINFO_StringListl->l|_->[]letget_cookielistconn=match(getinfoconnCURLINFO_COOKIELIST)with|CURLINFO_StringListl->l|_->[]letget_lastsocketconn=match(getinfoconnCURLINFO_LASTSOCKET)with|CURLINFO_Longl->l|_->0letget_activesocketconn=match(getinfoconnCURLINFO_ACTIVESOCKET)with|CURLINFO_Sockets->Somes|_->Noneletget_ftpentrypathconn=match(getinfoconnCURLINFO_FTP_ENTRY_PATH)with|CURLINFO_Strings->s|_->""letget_primaryipconn=match(getinfoconnCURLINFO_PRIMARY_IP)with|CURLINFO_Strings->s|_->""letget_localipconn=match(getinfoconnCURLINFO_LOCAL_IP)with|CURLINFO_Strings->s|_->""letget_localportconn=match(getinfoconnCURLINFO_LOCAL_PORT)with|CURLINFO_Longn->n|_->0letget_conditionunmetconn=match(getinfoconnCURLINFO_CONDITION_UNMET)with|CURLINFO_Longn->n<>0|_->assertfalseletget_http_versionconn=match(getinfoconnCURLINFO_HTTP_VERSION)with|CURLINFO_Versionv->v|_->assertfalselet()=Callback.register_exception"CurlException"(CurlException(CURLE_OK,0,""))classhandle=objectvalconn=init()methodhandle=connmethodperform=performconnmethodcleanup=cleanupconnmethodset_writefunctionclosure=set_writefunctionconnclosuremethodset_writefunction2closure=set_writefunction2connclosuremethodset_readfunctionclosure=set_readfunctionconnclosuremethodset_readfunction2closure=set_readfunction2connclosuremethodset_infilesizesize=set_infilesizeconnsizemethodset_urlurl=set_urlconnurlmethodset_proxyproxy=set_proxyconnproxymethodset_proxyportproxyport=set_proxyportconnproxyportmethodset_httpproxytunnelflag=set_httpproxytunnelconnflagmethodset_verboseflag=set_verboseconnflagmethodset_headerflag=set_headerconnflagmethodset_noprogressflag=set_noprogressconnflagmethodset_nosignalflag=set_nosignalconnflagmethodset_nobodyflag=set_nobodyconnflagmethodset_failonerrorflag=set_failonerrorconnflagmethodset_uploadflag=set_uploadconnflagmethodset_postflag=set_postconnflagmethodset_ftplistonlyflag=set_ftplistonlyconnflagmethodset_ftpappendflag=set_ftpappendconnflagmethodset_netrcnetrc=set_netrcconnnetrcmethodset_encodingencoding=set_encodingconnencodingmethodset_followlocationflag=set_followlocationconnflagmethodset_transfertextflag=set_transfertextconnflagmethodset_putflag=set_putconnflagmethodset_userpwduserpwd=set_userpwdconnuserpwdmethodset_proxyuserpwdproxyuserpwd=set_proxyuserpwdconnproxyuserpwdmethodset_rangerange=set_rangeconnrangemethodset_errorbuffererrorbuffer=set_errorbufferconnerrorbuffermethodset_timeouttimeout=set_timeoutconntimeoutmethodset_postfieldspostfields=set_postfieldsconnpostfieldsmethodset_refererreferer=set_refererconnreferermethodset_useragentuseragent=set_useragentconnuseragentmethodset_ftpportftpport=set_ftpportconnftpportmethodset_lowspeedlimitlowspeedlimit=set_lowspeedlimitconnlowspeedlimitmethodset_lowspeedtimelowspeedtime=set_lowspeedtimeconnlowspeedtimemethodset_resumefromresumefrom=set_resumefromconnresumefrommethodset_cookiecookie=set_cookieconncookiemethodset_httpheaderhttpheader=set_httpheaderconnhttpheadermethodset_httpposthttppost=set_httppostconnhttppostmethodset_sslcertsslcert=set_sslcertconnsslcertmethodset_sslcerttypesslcerttype=set_sslcerttypeconnsslcerttypemethodset_sslcertpasswdsslcertpasswd=set_sslcertpasswdconnsslcertpasswdmethodset_sslkeysslkey=set_sslkeyconnsslkeymethodset_sslkeytypesslkeytype=set_sslkeytypeconnsslkeytypemethodset_sslkeypasswdsslkeypasswd=set_sslkeypasswdconnsslkeypasswdmethodset_sslenginesslengine=set_sslengineconnsslenginemethodset_sslenginedefaultflag=set_sslenginedefaultconnflagmethodset_certinfoflag=set_certinfoconnflagmethodset_crlfflag=set_crlfconnflagmethodset_quotequote=set_quoteconnquotemethodset_postquotepostquote=set_postquoteconnpostquotemethodset_headerfunctionclosure=set_headerfunctionconnclosuremethodset_cookiefilecookiefile=set_cookiefileconncookiefilemethodset_sslversionsslversion=set_sslversionconnsslversionmethodset_timeconditiontimecondition=set_timeconditionconntimeconditionmethodset_timevaluetimevalue=set_timevalueconntimevaluemethodset_customrequestcustomrequest=set_customrequestconncustomrequestmethodset_interfaceinterface=set_interfaceconninterfacemethodset_krb4levelkrb4level=set_krb4levelconnkrb4levelmethodset_progressfunctionclosure=set_progressfunctionconnclosuremethodset_xferinfofunctionclosure=set_xferinfofunctionconnclosuremethodset_prereqfunctionclosure=set_prereqfunctionconnclosuremethodset_sslverifypeerflag=set_sslverifypeerconnflagmethodset_cainfocainfo=set_cainfoconncainfomethodset_capathcapath=set_capathconncapathmethodset_filetimefiletime=set_filetimeconnfiletimemethodset_maxredirsmaxredirs=set_maxredirsconnmaxredirsmethodset_maxconnectsmaxconnects=set_maxconnectsconnmaxconnectsmethodset_closepolicyclosepolicy=set_closepolicyconnclosepolicymethodset_freshconnectflag=set_freshconnectconnflagmethodset_forbidreuseflag=set_forbidreuseconnflagmethodset_randomfilerandomfile=set_randomfileconnrandomfilemethodset_egdsocketegdsocket=set_egdsocketconnegdsocketmethodset_connecttimeoutconnecttimeout=set_connecttimeoutconnconnecttimeoutmethodset_httpgetflag=set_httpgetconnflagmethodset_sslverifyhostsslverifyhost=set_sslverifyhostconnsslverifyhostmethodset_cookiejarcookiejar=set_cookiejarconncookiejarmethodset_sslcipherlistsslcipherlist=set_sslcipherlistconnsslcipherlistmethodset_httpversionhttpversion=set_httpversionconnhttpversionmethodset_ftpuseepsvflag=set_ftpuseepsvconnflagmethodset_dnscachetimeoutdnscachetimeout=set_dnscachetimeoutconndnscachetimeoutmethodset_dnsuseglobalcacheflag=set_dnsuseglobalcacheconnflagmethodset_debugfunctionclosure=set_debugfunctionconnclosuremethodset_privateprivateData=set_privateconnprivateDatamethodset_http200aliasesaliases=set_http200aliasesconnaliasesmethodset_unrestrictedauthflag=set_unrestrictedauthconnflagmethodset_ftpuseeprtflag=set_ftpuseeprtconnflagmethodset_httpauthauth=set_httpauthconnauthmethodset_ftpcreatemissingdirsflag=set_ftpcreatemissingdirsconnflagmethodset_proxyauthauth=set_proxyauthconnauthmethodset_ftpresponsetimeouttimeout=set_ftpresponsetimeoutconntimeoutmethodset_ipresolveipresolve=set_ipresolveconnipresolvemethodset_maxfilesizesize=set_maxfilesizeconnsizemethodset_infilesizelargesize=set_infilesizelargeconnsizemethodset_resumefromlargesize=set_resumefromlargeconnsizemethodset_maxfilesizelargesize=set_maxfilesizelargeconnsizemethodset_netrcfilefile=set_netrcfileconnfilemethodset_ftpsslftpssl=set_ftpsslconnftpsslmethodset_postfieldsizesize=set_postfieldsizeconnsizemethodset_postfieldsizelargesize=set_postfieldsizelargeconnsizemethodset_tcpnodelayflag=set_tcpnodelayconnflagmethodset_tcpfastopenflag=set_tcpfastopenconnflagmethodset_ftpsslauthflag=set_ftpsslauthconnflagmethodset_ioctlfunctionclosure=set_ioctlfunctionconnclosuremethodset_ftpaccountaccount=set_ftpaccountconnaccountmethodset_cookielistcookielist=set_cookielistconncookielistmethodset_ignorecontentlengthflag=set_ignorecontentlengthconnflagmethodset_ftpskippasvipflag=set_ftpskippasvipconnflagmethodset_ftpfilemethodftpMethod=set_ftpfilemethodconnftpMethodmethodset_localportport=set_localportconnportmethodset_localportrangerange=set_localportrangeconnrangemethodset_connectonlyflag=set_connectonlyconnflagmethodset_maxsendspeedlargespeed=set_maxsendspeedlargeconnspeedmethodset_maxrecvspeedlargespeed=set_maxrecvspeedlargeconnspeedmethodset_ftpalternativetouseruser=set_ftpalternativetouserconnusermethodset_sslsessionidcacheflag=set_sslsessionidcacheconnflagmethodset_sshauthtypestypes=set_sshauthtypesconntypesmethodset_sshpublickeyfilekeyfile=set_sshpublickeyfileconnkeyfilemethodset_sshprivatekeyfilekeyfile=set_sshprivatekeyfileconnkeyfilemethodset_ftpsslcccccc=set_ftpsslcccconncccmethodset_timeoutmsms=set_timeoutmsconnmsmethodset_connecttimeoutmsms=set_connecttimeoutmsconnmsmethodset_httptransferdecodingflag=set_httptransferdecodingconnflagmethodset_httpcontentdecodingflag=set_httpcontentdecodingconnflagmethodset_newfilepermsperms=set_newfilepermsconnpermsmethodset_newdirectorypermsperms=set_newdirectorypermsconnpermsmethodset_post301flag=set_post301connflagmethodset_sshhostpublickeymd5key=set_sshhostpublickeymd5connkeymethodset_copypostfieldspost=set_copypostfieldsconnpostmethodset_proxytransfermodeflag=set_proxytransfermodeconnflagmethodset_seekfunctionclosure=set_seekfunctionconnclosuremethodset_resolvel=set_resolveconnlmethodset_dns_serversl=set_dns_serversconnlmethodset_autorefererb=set_autorefererconnbmethodset_opensocketfunctionclosure=set_opensocketfunctionconnclosuremethodset_opensocketfunction2closure=set_opensocketfunction2connclosure(* method set_closesocketfunction closure = set_closesocketfunction conn closure *)methodset_proxytypet=set_proxytypeconntmethodset_mimepostp=set_mimepostconnpmethodset_sshknownhostss=set_sshknownhostsconnsmethodset_sshkeyfunctionf=set_sshkeyfunctionconnfmethodset_buffersizebuffersize=set_buffersizeconnbuffersizemethodset_doh_urlurl=set_doh_urlconnurlmethodset_ssl_optionsopts=set_ssl_optionsconnoptsmethodset_proxy_ssl_optionsopts=set_proxy_ssl_optionsconnoptsmethodset_aws_sigv4param=set_aws_sigv4connparammethodset_tcpkeepaliveflag=set_tcpkeepaliveconnflagmethodset_tcpkeepidleseconds=set_tcpkeepidleconnsecondsmethodset_tcpkeepintvlseconds=set_tcpkeepintvlconnsecondsmethodset_noproxys=set_noproxyconnsmethodset_unix_socket_pathunix_socket_path=set_unix_socket_pathconnunix_socket_pathmethodget_effectiveurl=get_effectiveurlconnmethodget_redirecturl=get_redirecturlconnmethodget_responsecode=get_responsecodeconnmethodget_httpcode=get_responsecodeconnmethodget_totaltime=get_totaltimeconnmethodget_namelookuptime=get_namelookuptimeconnmethodget_connecttime=get_connecttimeconnmethodget_pretransfertime=get_pretransfertimeconnmethodget_sizeupload=get_sizeuploadconnmethodget_sizedownload=get_sizedownloadconnmethodget_speeddownload=get_speeddownloadconnmethodget_speedupload=get_speeduploadconnmethodget_headersize=get_headersizeconnmethodget_requestsize=get_requestsizeconnmethodget_sslverifyresult=get_sslverifyresultconnmethodget_filetime=get_filetimeconnmethodget_contentlengthdownload=get_contentlengthdownloadconnmethodget_contentlengthupload=get_contentlengthuploadconnmethodget_starttransfertime=get_starttransfertimeconnmethodget_contenttype=get_contenttypeconnmethodget_redirecttime=get_redirecttimeconnmethodget_redirectcount=get_redirectcountconnmethodget_private=get_privateconnmethodget_httpconnectcode=get_httpconnectcodeconnmethodget_httpauthavail=get_httpauthavailconnmethodget_proxyauthavail=get_proxyauthavailconnmethodget_oserrno=get_oserrnoconnmethodget_numconnects=get_numconnectsconnmethodget_sslengines=get_sslenginesconnmethodget_cookielist=get_cookielistconnmethodget_lastsocket=get_lastsocketconnmethodget_activesocket=get_activesocketconnmethodget_ftpentrypath=get_ftpentrypathconnmethodget_primaryip=get_primaryipconnmethodget_localip=get_localipconnmethodget_localport=get_localportconnmethodget_conditionunmet=get_conditionunmetconnmethodget_certinfo=get_certinfoconnmethodget_http_version=get_http_versionconnmethodws_meta=ws_metaconnmethodws_send=ws_sendconnendmoduleMulti=structtypemttypecurlPipelining=PIPE_NOTHING|PIPE_HTTP1|PIPE_MULTIPLEXtypecurlMultiOption=|CURLMOPT_PIPELININGofcurlPipelininglist|CURLMOPT_MAXCONNECTSofint|CURLMOPT_MAX_PIPELINE_LENGTHofint|CURLMOPT_MAX_HOST_CONNECTIONSofint|CURLMOPT_MAX_TOTAL_CONNECTIONSofintexceptionErrorofstringtypecerror=intletint_of_cerrorerr=errexceptionCErrorofstring*cerror*stringlet()=Callback.register_exception"Curl.Multi.Error"(Error"")let()=Callback.register_exception"Curl.Multi.CError"(CError("",0,""))typewaitfd_event=|CURL_WAIT_POLLIN|CURL_WAIT_POLLPRI|CURL_WAIT_POLLOUTtypewaitfd={fd:Unix.file_descr;events:waitfd_eventlist;mutablerevents:waitfd_eventlist;}letwaitfdfdevents={fd;events;revents=[]}letwaitfd_fdfd=fd.fdletwaitfd_issetfdevent=List.memeventfd.reventsexternalcreate:unit->mt="caml_curl_multi_init"externaladd:mt->t->unit="caml_curl_multi_add_handle"externalperform:mt->int="caml_curl_multi_perform_all"externalwait:int->waitfdlist->mt->bool="caml_curl_multi_wait"letwait?(timeout_ms=1000)?(extra_fds=[])mt=waittimeout_msextra_fdsmtexternalpoll:int->waitfdlist->mt->bool="caml_curl_multi_poll"letpoll?(timeout_ms=1000)?(extra_fds=[])mt=polltimeout_msextra_fdsmtexternalremove:mt->t->unit="caml_curl_multi_remove_handle"externalremove_finished:mt->(t*curlCode)option="caml_curlm_remove_finished"externalcleanup:mt->unit="caml_curl_multi_cleanup"(* see curlm_sock_cb *)typepoll=POLL_NONE|POLL_IN|POLL_OUT|POLL_INOUT|POLL_REMOVE(* see caml_curl_multi_socket_action *)typefd_status=EV_AUTO|EV_IN|EV_OUT|EV_INOUTexternalset_socket_function:mt->(Unix.file_descr->poll->unit)->unit="caml_curl_multi_socketfunction"externalset_timer_function:mt->(int->unit)->unit="caml_curl_multi_timerfunction"externalset_closesocket_function:mt->(Unix.file_descr->unit)->unit="caml_curl_multi_closesocketfunction"externalaction_all:mt->int="caml_curl_multi_socket_all"externalsocket_action:mt->Unix.file_descroption->fd_status->int="caml_curl_multi_socket_action"letaction_timeout'mt=socket_actionmtNoneEV_AUTOletaction_timeoutmt=ignore(action_timeout'mt)letactionmtfdstatus=socket_actionmt(Somefd)statusexternaltimeout:mt->int="caml_curl_multi_timeout"externalsetopt:mt->curlMultiOption->unit="caml_curl_multi_setopt"end