packages feed

VKHS 0.5.1 → 0.5.2

raw patch · 13 files changed

+46/−3800 lines, 13 filesdep +curlhssetup-changed

Dependencies added: curlhs

Files

Setup.hs view
@@ -1,109 +1,2 @@-module Main where- import Distribution.Simple-import Distribution.Simple.Utils-import Distribution.Simple.PreProcess-import Distribution.Simple.LocalBuildInfo (LocalBuildInfo, buildDir)-import Distribution.PackageDescription    (BuildInfo)-import Distribution.Verbosity             (Verbosity)-import System.FilePath                    ((</>), replaceExtension)-import Text.ParserCombinators.ReadP-import Text.Read.Lex (readDecP)-import Data.IORef    (IORef, newIORef, readIORef, writeIORef)-import Data.List     (find, isPrefixOf)-----------------------------------------------------------------------------------main = newIORef Nothing >>= \cvr -> defaultMainWithHooks simpleUserHooks-  { hookedPreProcessors = ("hs", ppHsX cvr) : ("hsc", ppHscX cvr)-                        : knownSuffixHandlers }-----------------------------------------------------------------------------------ppHsX :: IORef (Maybe Int) -> BuildInfo -> LocalBuildInfo -> PreProcessor-ppHsX cvr bi lbi = PreProcessor-  { platformIndependent = False-  , runPreProcessor = mkSimplePreProcessor $ \inFile outFile verbosity -> do-      cv <- findCURLVER cvr bi lbi verbosity-      withUTF8FileContents inFile (writeUTF8File outFile . processFile cv)-  }----------------------------------------------------------------------------------ppHscX :: IORef (Maybe Int) -> BuildInfo -> LocalBuildInfo -> PreProcessor-ppHscX cvr bi lbi = PreProcessor-  { platformIndependent = False-  , runPreProcessor = mkSimplePreProcessor $ \inFile outFile verbosity -> do-      cv <- findCURLVER cvr bi lbi verbosity-      let hscFile = replaceExtension outFile "hsc"-      withUTF8FileContents inFile (writeUTF8File hscFile . processFile cv)-      runSimplePreProcessor (ppHsc2hs bi lbi) hscFile outFile verbosity-  }----------------------------------------------------------------------------------findCURLVER :: IORef (Maybe Int)-            -> BuildInfo -> LocalBuildInfo -> Verbosity -> IO Int-findCURLVER cvr bi lbi verbosity = readIORef cvr >>= \mcv -> case mcv of-  Just cv -> return cv-  Nothing -> do-    info verbosity "Looking for LIBCURL_VERSION_NUM in \"curl/curl.h\""-    let cvFile = buildDir lbi </> "CURLVER"-    writeUTF8File cvFile curlverFileContent-    runSimplePreProcessor (ppHsc2hs bi lbi) cvFile cvFile verbosity-    mcv <- fmap parseCV $ readUTF8File cvFile-    case mcv of-      Nothing -> die "Can't find libcurl version info"-      Just cv -> writeIORef cvr mcv >> return cv--curlverFileContent :: String-curlverFileContent = unlines-  [ "#include \"curl/curl.h\""-  , "CURLVER = #{const LIBCURL_VERSION_NUM}" ]--parseCV :: String -> Maybe Int-parseCV cvf = do-  cvl <- find (isPrefixOf "CURLVER") $ lines cvf-  case (readP_to_S readDecP $ last $ words cvl) of-    [(cv,[])] -> Just cv-    _         -> Nothing----------------------------------------------------------------------------------processFile :: Int -> String -> String-processFile cv file = unlines $ map (processLine cv) $ lines file--processLine :: Int -> String -> String-processLine cv line =-  case (readP_to_S parseLine $ reverse line) of-    [((vmin, vmax, text),[])]-      -> if (vmin <= cv && cv <= vmax) then text else concat ["-- ", line]-    _ -> line--parseLine :: ReadP (Int, Int, String)-parseLine =-  char '|' >> parseVTAG >>= \vmax ->-  char ':' >> parseVTAG >>= \vmin ->-  char '|' >> parseTEXT >>= \text ->-  return (maybe 0x000000 id vmin, maybe 0xFFFFFF id vmax, text)--parseTEXT :: ReadP String-parseTEXT = skipSpaces >> manyTill get eof >>= return . reverse--parseVTAG :: ReadP (Maybe Int)-parseVTAG = count 4 get >>= \vtag -> if (vtag == "----") then return Nothing-  else maybe pfail (return . Just) $ lookup (reverse vtag)-    [ ("7200", 0x071400)-    , ("7201", 0x071401)-    , ("7210", 0x071500)-    , ("7211", 0x071501)-    , ("7212", 0x071502)-    , ("7213", 0x071503)-    , ("7214", 0x071504)-    , ("7215", 0x071505)-    , ("7216", 0x071506)-    , ("7217", 0x071507)-    , ("7220", 0x071600)-    , ("7230", 0x071700)-    , ("7231", 0x071701)-    , ("7240", 0x071800)-    , ("7250", 0x071900)-    ]-+main = defaultMain
VKHS.cabal view
@@ -1,6 +1,6 @@  name:                VKHS-version:             0.5.1+version:             0.5.2 synopsis:            Provides access to Vkontakte social network via public API description:     Provides access to Vkontakte API methods. Library requires no interaction@@ -12,13 +12,13 @@ maintainer:          ierton@gmail.com copyright:           Copyright (c) 2012, Sergey Mironov category:            Web-build-type:          Custom+build-type:          Simple cabal-version:       >=1.6-homepage:            http://github.com/ierton/vkhs+homepage:            http://github.com/grwlf/vkhs  source-repository head     type:     git-    location: https://github.com/ierton/vkhs.git+    location: https://github.com/grwlf/vkhs.git  executable vknews   extra-libraries: curl@@ -26,33 +26,12 @@   main-is:           VKNews.hs   build-tools:     hsc2hs   ghc-options:     -Wall -fwarn-tabs-  other-modules:-    Network.Curlhs.Base,-    Network.Curlhs.Core,-    Network.Curlhs.Easy,-    Network.Curlhs.Setopt,-    Network.Curlhs.Errors,-    Network.Curlhs.Types  executable vkq-  extra-libraries: curl   hs-source-dirs:    src   main-is:           VKQ.hs-  build-tools:     hsc2hs-  ghc-options:     -Wall -fwarn-tabs-  other-modules:-    Network.Curlhs.Base,-    Network.Curlhs.Core,-    Network.Curlhs.Easy,-    Network.Curlhs.Setopt,-    Network.Curlhs.Errors,-    Network.Curlhs.Types - library-  extra-libraries: curl-  build-tools:     hsc2hs-  ghc-options:     -Wall -fwarn-tabs   hs-source-dirs:    src   other-modules:     Test.Debug, Test.Data, Test.API, Network.Shpider.Forms,     Network.Protocol.Uri, Network.Protocol.Mime, Network.Protocol.Http,@@ -64,12 +43,6 @@     Network.Protocol.Http.Printer, Network.Protocol.Http.Parser,     Network.Protocol.Http.Headers, Network.Protocol.Http.Data, Text.Namefilter,     Text.PFormat,-    Network.Curlhs.Base,-    Network.Curlhs.Core,-    Network.Curlhs.Easy,-    Network.Curlhs.Setopt,-    Network.Curlhs.Errors,-    Network.Curlhs.Types,     Data.Label.Abstract,     Data.Label.Derive,     Data.Label.Maybe,@@ -100,6 +73,7 @@                      tagsoup-parsec ==0.0.*,                      tagsoup ==0.12.*,                      failure ==0.2.*,+                     curlhs,                      safe ==0.3.*,                      parsec ==3.1.*,                      split ==0.2.*,
− src/Network/Curlhs/Base.hsc
@@ -1,1814 +0,0 @@----------------------------------------------------------------------------------- |--- Module      :  Network.Curlhs.Base--- Copyright   :  Copyright © 2012 Krzysztof Kardzis--- License     :  ISC License (MIT/BSD-style, see LICENSE file for details)--- --- Maintainer  :  Krzysztof Kardzis <kkardzis@gmail.com>--- Stability   :  experimental--- Portability :  non-portable--------- Module "Network.Curlhs.Base" provides a direct low-level bindings to--- @libcurl@. It is basically a 1:1 mapping of the @libcurl@'s C API,--- a direct translation of \"curl/curl.h\" header files to Haskell FFI.--- A higher level interface, without ubiquitous pointers and all of that--- C stuff, is provided through the module "Network.Curlhs.Core".------ Documentation about the library and/or particular functions may be found--- in the @libcurl@'s manual pages or on the @libcurl@'s project site--- (<http://curl.haxx.se/libcurl/>). Because API of this module mirrors API--- of the external library, particular symbols may exist or not,--- dependently of that, which version of @libcurl@ is used during compilation--- of the package. The module as closely as possible tries to follow--- the original @libcurl@ API. The main differences are in types of functions--- such as @curl_easy_setopt@ and @curl_easy_getinfo@. Besides that all--- symbol names are prefixed with \'c\' or \'C\'. ------ As the name of the module may suggest, this module is a basis for the--- rest of @curlhs@ package. For now exposed API is somewhat incomplete,--- still lacks some things (like the \"multi interface\"), but the aim is--- to provide here a complete API of @libcurl@, as defined in its C headers.-------------------------------------------------------------------------------------{-# LANGUAGE ForeignFunctionInterface #-}-{-# LANGUAGE EmptyDataDecls           #-}--module Network.Curlhs.Base where--import Foreign.C.Types-import Foreign.Storable (Storable (..))-import Foreign.Ptr      (Ptr, FunPtr, castPtr)--import Control.Applicative ((<$>), (<*>))-----------------------------------------------------------------------------------#{let alignof type = "(%ld)", (long) offsetof (struct {char x; type y;}, y)}--#define CURL_NO_OLDIES-#include "curl/curl.h"--#define hsc_symbol(name, type) \-  printf("c" #name " :: C" #type "\n"); \-  printf("c" #name " =  C" #type " "); hsc_const(name);--#define hsc_cconst(name, type) \-  printf("c" #name " :: " #type "\n"); \-  printf("c" #name " =  "); hsc_const(name);------------------------------------------------------------------------------------- * Definitions from \"curl/curlver.h\"---------------------------------------------------------------------------------libCURL_COPYRIGHT :: String-libCURL_COPYRIGHT = #{const_str LIBCURL_COPYRIGHT}--libCURL_TIMESTAMP :: String-libCURL_TIMESTAMP = #{const_str LIBCURL_TIMESTAMP}--libCURL_VERSION   :: String-libCURL_VERSION   = #{const_str LIBCURL_VERSION  }--libCURL_VERSION_NUM   :: Int-libCURL_VERSION_NUM   = #{const LIBCURL_VERSION_NUM  }--libCURL_VERSION_MAJOR :: Int-libCURL_VERSION_MAJOR = #{const LIBCURL_VERSION_MAJOR}--libCURL_VERSION_MINOR :: Int-libCURL_VERSION_MINOR = #{const LIBCURL_VERSION_MINOR}--libCURL_VERSION_PATCH :: Int-libCURL_VERSION_PATCH = #{const LIBCURL_VERSION_PATCH}------------------------------------------------------------------------------------- * Definitions from \"curl/curlbuild.h\"---------------------------------------------------------------------------------type CCURL_off_t = CLLong  -- ??------------------------------------------------------------------------------------- * Definitions from \"curl/curlrules.h\"----------------------------------------------------------------------------------- todo------------------------------------------------------------------------------------- * Definitions from \"curl/curl.h\"---------------------------------------------------------------------------------data CCURL-----------------------------------------------------------------------------------#if defined(WIN32) && !defined(__LWIP_OPT_H__)-type CCURL_socket_t = CUIntPtr -- SOCKET??-#else-type CCURL_socket_t = CInt-#endif--#{cconst CURL_SOCKET_BAD, CCURL_socket_t}------------------------------------------------------------------------------------- ** CURL_httppost---------------------------------------------------------------------------------data CCURL_httppost = CCURL_httppost-  { ccurl_httppost_next           :: Ptr CCURL_httppost-  , ccurl_httppost_name           :: Ptr CChar-  , ccurl_httppost_namelength     :: CLong-  , ccurl_httppost_contents       :: Ptr CChar-  , ccurl_httppost_contentslength :: CLong-  , ccurl_httppost_buffer         :: Ptr CChar-  , ccurl_httppost_bufferlength   :: CLong-  , ccurl_httppost_contenttype    :: Ptr CChar-  , ccurl_httppost_contentheader  :: Ptr CCURL_slist-  , ccurl_httppost_more           :: Ptr CCURL_httppost-  , ccurl_httppost_flags          :: CLong-  , ccurl_httppost_showfilename   :: Ptr CChar-  , ccurl_httppost_userp          :: Ptr ()-  } deriving (Show)---- instance Storable CCURL_httppost where---   sizeOf _    = #{size    struct curl_httppost}---   alignment _ = #{alignof struct curl_httppost}---   poke _ _    = undefined---   peek _      = undefined--#{cconst HTTPPOST_FILENAME   , CLong}-#{cconst HTTPPOST_READFILE   , CLong}-#{cconst HTTPPOST_PTRNAME    , CLong}-#{cconst HTTPPOST_PTRCONTENTS, CLong}-#{cconst HTTPPOST_BUFFER     , CLong}-#{cconst HTTPPOST_PTRBUFFER  , CLong}-#{cconst HTTPPOST_CALLBACK   , CLong}- ----------------------------------------------------------------------------------- ** Callbacks----------------------------------------------------------------------------------- *** CURL_progress_callback---------------------------------------------------------------------------------type CCURL_progress_callback-  = Ptr () -> CDouble -> CDouble -> CDouble -> CDouble -> IO CInt--foreign import ccall "wrapper"-  wrap_ccurl_progress_callback-    :: CCURL_progress_callback-    -> IO (FunPtr CCURL_progress_callback)------------------------------------------------------------------------------------- *** CURL_write_callback---------------------------------------------------------------------------------#{cconst CURL_MAX_WRITE_SIZE , CSize}-#{cconst CURL_MAX_HTTP_HEADER, CSize}-#{cconst CURL_WRITEFUNC_PAUSE, CSize}--type CCURL_write_callback-  = Ptr CChar -> CSize -> CSize -> Ptr () -> IO CSize--foreign import ccall "wrapper"-  wrap_ccurl_write_callback-    :: CCURL_write_callback-    -> IO (FunPtr CCURL_write_callback)------------------------------------------------------------------------------------- ** CURL_fileinfo---------------------------------------------------------------------------------newtype CCURLfiletype = CCURLfiletype CInt deriving (Eq, Show)   |7210:----|--#{symbol CURLFILETYPE_FILE        , CURLfiletype}                |7210:----|-#{symbol CURLFILETYPE_DIRECTORY   , CURLfiletype}                |7210:----|-#{symbol CURLFILETYPE_SYMLINK     , CURLfiletype}                |7210:----|-#{symbol CURLFILETYPE_DEVICE_BLOCK, CURLfiletype}                |7210:----|-#{symbol CURLFILETYPE_DEVICE_CHAR , CURLfiletype}                |7210:----|-#{symbol CURLFILETYPE_NAMEDPIPE   , CURLfiletype}                |7210:----|-#{symbol CURLFILETYPE_SOCKET      , CURLfiletype}                |7210:----|-#{symbol CURLFILETYPE_DOOR        , CURLfiletype}                |7210:----|-#{symbol CURLFILETYPE_UNKNOWN     , CURLfiletype}                |7210:----|--#{cconst CURLFINFOFLAG_KNOWN_FILENAME  , CUInt}                  |7210:----|-#{cconst CURLFINFOFLAG_KNOWN_FILETYPE  , CUInt}                  |7210:----|-#{cconst CURLFINFOFLAG_KNOWN_TIME      , CUInt}                  |7210:----|-#{cconst CURLFINFOFLAG_KNOWN_PERM      , CUInt}                  |7210:----|-#{cconst CURLFINFOFLAG_KNOWN_UID       , CUInt}                  |7210:----|-#{cconst CURLFINFOFLAG_KNOWN_GID       , CUInt}                  |7210:----|-#{cconst CURLFINFOFLAG_KNOWN_SIZE      , CUInt}                  |7210:----|-#{cconst CURLFINFOFLAG_KNOWN_HLINKCOUNT, CUInt}                  |7210:----|--data CCURL_fileinfo = CCURL_fileinfo                             |7210:----|-  { ccurl_fileinfo_filename       :: Ptr CChar                   |7210:----|-  , ccurl_fileinfo_filetype       :: CCURLfiletype               |7210:----|-  , ccurl_fileinfo_time           :: CTime                       |7210:----|-  , ccurl_fileinfo_perm           :: CUInt                       |7210:----|-  , ccurl_fileinfo_uid            :: CInt                        |7210:----|-  , ccurl_fileinfo_gid            :: CInt                        |7210:----|-  , ccurl_fileinfo_size           :: CCURL_off_t                 |7210:----|-  , ccurl_fileinfo_hardlinks      :: CLong                       |7210:----|-  , ccurl_fileinfo_strings_time   :: Ptr CChar                   |7210:----|-  , ccurl_fileinfo_strings_perm   :: Ptr CChar                   |7210:----|-  , ccurl_fileinfo_strings_user   :: Ptr CChar                   |7210:----|-  , ccurl_fileinfo_strings_group  :: Ptr CChar                   |7210:----|-  , ccurl_fileinfo_strings_target :: Ptr CChar                   |7210:----|-  , ccurl_fileinfo_flags          :: CUInt                       |7210:----|-  , ccurl_fileinfo_b_data         :: Ptr CChar                   |7210:----|-  , ccurl_fileinfo_b_size         :: CSize                       |7210:----|-  , ccurl_fileinfo_b_used         :: CSize                       |7210:----|-  } deriving (Show)                                              |7210:----|---- instance Storable CCURL_fileinfo where                        |7210:----|---   sizeOf _    = #{size    struct curl_fileinfo}               |7210:----|---   alignment _ = #{alignof struct curl_fileinfo}               |7210:----|---   poke _ _    = undefined                                     |7210:----|---   peek _      = undefined                                     |7210:----|-- ----------------------------------------------------------------------------------- ** Callbacks----------------------------------------------------------------------------------- *** CURL_chunk_bgn_callback---------------------------------------------------------------------------------#{cconst CURL_CHUNK_BGN_FUNC_OK  , CLong}                        |7210:----|-#{cconst CURL_CHUNK_BGN_FUNC_FAIL, CLong}                        |7210:----|-#{cconst CURL_CHUNK_BGN_FUNC_SKIP, CLong}                        |7210:----|--type CCURL_chunk_bgn_callback                                    |7210:----|-  = Ptr () -> Ptr () -> CInt -> IO CLong                         |7210:----|--foreign import ccall "wrapper"                                   |7210:----|-  wrap_ccurl_chunk_bgn_callback                                  |7210:----|-    :: CCURL_chunk_bgn_callback                                  |7210:----|-    -> IO (FunPtr CCURL_chunk_bgn_callback)                      |7210:----|------------------------------------------------------------------------------------- *** CURL_chunk_end_callback---------------------------------------------------------------------------------#{cconst CURL_CHUNK_END_FUNC_OK  , CLong}                        |7210:----|-#{cconst CURL_CHUNK_END_FUNC_FAIL, CLong}                        |7210:----|--type CCURL_chunk_end_callback                                    |7210:----|-  = Ptr () -> IO CLong                                           |7210:----|--foreign import ccall "wrapper"                                   |7210:----|-  wrap_ccurl_chunk_end_callback                                  |7210:----|-    :: CCURL_chunk_end_callback                                  |7210:----|-    -> IO (FunPtr CCURL_chunk_end_callback)                      |7210:----|-- ----------------------------------------------------------------------------------- *** CURL_fnmatch_callback---------------------------------------------------------------------------------#{cconst CURL_FNMATCHFUNC_MATCH  , CInt}                         |7210:----|-#{cconst CURL_FNMATCHFUNC_NOMATCH, CInt}                         |7210:----|-#{cconst CURL_FNMATCHFUNC_FAIL   , CInt}                         |7210:----|--type CCURL_fnmatch_callback                                      |7210:----|-  = Ptr () -> Ptr CChar -> Ptr CChar -> IO CInt                  |7210:----|--foreign import ccall "wrapper"                                   |7210:----|-  wrap_ccurl_fnmatch_callback                                    |7210:----|-    :: CCURL_fnmatch_callback                                    |7210:----|-    -> IO (FunPtr CCURL_fnmatch_callback)                        |7210:----|-- ----------------------------------------------------------------------------------- *** CURL_seek_callback---------------------------------------------------------------------------------#{cconst CURL_SEEKFUNC_OK      , CInt}-#{cconst CURL_SEEKFUNC_FAIL    , CInt}-#{cconst CURL_SEEKFUNC_CANTSEEK, CInt}--type CCURL_seek_callback-  = Ptr () -> CCURL_off_t -> CInt -> IO CInt--foreign import ccall "wrapper"-  wrap_ccurl_seek_callback-    :: CCURL_seek_callback-    -> IO (FunPtr CCURL_seek_callback)------------------------------------------------------------------------------------- *** CURL_read_callback---------------------------------------------------------------------------------#{cconst CURL_READFUNC_ABORT, CSize}-#{cconst CURL_READFUNC_PAUSE, CSize}--type CCURL_read_callback-  = Ptr CChar -> CSize -> CSize -> Ptr () -> IO CSize--foreign import ccall "wrapper"-  wrap_ccurl_read_callback-    :: CCURL_read_callback-    -> IO (FunPtr CCURL_read_callback)------------------------------------------------------------------------------------- *** CURL_sockopt_callback---------------------------------------------------------------------------------newtype CCURLsocktype = CCURLsocktype CInt deriving (Eq, Show)--#{symbol CURLSOCKTYPE_IPCXN, CURLsocktype}--#{cconst CURL_SOCKOPT_OK               , CInt}                   |7215:----|-#{cconst CURL_SOCKOPT_ERROR            , CInt}                   |7215:----|-#{cconst CURL_SOCKOPT_ALREADY_CONNECTED, CInt}                   |7215:----|--type CCURL_sockopt_callback-  = Ptr () -> CCURL_socket_t -> CCURLsocktype -> IO CInt--foreign import ccall "wrapper"-  wrap_ccurl_sockopt_callback-    :: CCURL_sockopt_callback-    -> IO (FunPtr CCURL_sockopt_callback)------------------------------------------------------------------------------------- *** CURL_opensocket_callback---------------------------------------------------------------------------------data CCURL_sockaddr = CCURL_sockaddr-  { ccurl_sockaddr_family   :: CInt-  , ccurl_sockaddr_socktype :: CInt-  , ccurl_sockaddr_protocol :: CInt-  , ccurl_sockaddr_addrlen  :: CUInt-  , ccurl_sockaddr_addr     :: Ptr ()  -- sockaddr?? TODO-  } deriving (Show)---- instance Storable CCURL_sockaddr where---   sizeOf _    = #{size    struct curl_sockaddr}---   alignment _ = #{alignof struct curl_sockaddr}---   poke _ _    = undefined---   peek _      = undefined--type CCURL_opensocket_callback-  = Ptr () -> CCURLsocktype -> Ptr CCURL_sockaddr -> IO CCURL_socket_t--foreign import ccall "wrapper"-  wrap_ccurl_opensocket_callback-    :: CCURL_opensocket_callback-    -> IO (FunPtr CCURL_opensocket_callback)------------------------------------------------------------------------------------- *** CURL_closesocket_callback---------------------------------------------------------------------------------type CCURL_closesocket_callback                                  |7217:----|-  = Ptr () -> CCURL_socket_t -> IO CInt                          |7217:----|--foreign import ccall "wrapper"                                   |7217:----|-  wrap_ccurl_closesocket_callback                                |7217:----|-    :: CCURL_closesocket_callback                                |7217:----|-    -> IO (FunPtr CCURL_closesocket_callback)                    |7217:----|-- ----------------------------------------------------------------------------------- *** CURL_ioctl_callback---------------------------------------------------------------------------------newtype CCURLioerr = CCURLioerr CInt deriving (Eq, Show)--#{symbol CURLIOE_OK           , CURLioerr}-#{symbol CURLIOE_UNKNOWNCMD   , CURLioerr}-#{symbol CURLIOE_FAILRESTART  , CURLioerr}--newtype CCURLiocmd = CCURLiocmd CInt deriving (Eq, Show)--#{symbol CURLIOCMD_NOP        , CURLiocmd}-#{symbol CURLIOCMD_RESTARTREAD, CURLiocmd}--type CCURL_ioctl_callback-  = Ptr CCURL -> CCURLiocmd -> Ptr () -> IO CCURLioerr--foreign import ccall "wrapper"-  wrap_ccurl_ioctl_callback-    :: CCURL_ioctl_callback-    -> IO (FunPtr CCURL_ioctl_callback)------------------------------------------------------------------------------------- *** CURL_malloc_callback---------------------------------------------------------------------------------type CCURL_malloc_callback-  = CSize -> IO (Ptr ())--foreign import ccall "wrapper"-  wrap_ccurl_malloc_callback-    :: CCURL_malloc_callback-    -> IO (FunPtr CCURL_malloc_callback)------------------------------------------------------------------------------------- *** CURL_free_callback---------------------------------------------------------------------------------type CCURL_free_callback-  = Ptr () -> IO ()--foreign import ccall "wrapper"-  wrap_ccurl_free_callback-    :: CCURL_free_callback-    -> IO (FunPtr CCURL_free_callback)------------------------------------------------------------------------------------- *** CURL_realloc_callback---------------------------------------------------------------------------------type CCURL_realloc_callback-  = Ptr () -> CSize -> IO (Ptr ())--foreign import ccall "wrapper"-  wrap_ccurl_realloc_callback-    :: CCURL_realloc_callback-    -> IO (FunPtr CCURL_realloc_callback)------------------------------------------------------------------------------------- *** CURL_strdup_callback---------------------------------------------------------------------------------type CCURL_strdup_callback-  = Ptr CChar -> IO (Ptr CChar)--foreign import ccall "wrapper"-  wrap_ccurl_strdup_callback-    :: CCURL_strdup_callback-    -> IO (FunPtr CCURL_strdup_callback)------------------------------------------------------------------------------------- *** CURL_calloc_callback---------------------------------------------------------------------------------type CCURL_calloc_callback-  = CSize -> CSize -> IO (Ptr ())--foreign import ccall "wrapper"-  wrap_ccurl_calloc_callback-    :: CCURL_calloc_callback-    -> IO (FunPtr CCURL_calloc_callback)-- ----------------------------------------------------------------------------------- *** CURL_debug_callback---------------------------------------------------------------------------------newtype CCURL_infotype = CCURL_infotype CInt deriving (Eq, Show)--#{symbol CURLINFO_TEXT        , CURL_infotype}-#{symbol CURLINFO_HEADER_IN   , CURL_infotype}-#{symbol CURLINFO_HEADER_OUT  , CURL_infotype}-#{symbol CURLINFO_DATA_IN     , CURL_infotype}-#{symbol CURLINFO_DATA_OUT    , CURL_infotype}-#{symbol CURLINFO_SSL_DATA_IN , CURL_infotype}-#{symbol CURLINFO_SSL_DATA_OUT, CURL_infotype}-#{symbol CURLINFO_END         , CURL_infotype}--type CCURL_debug_callback-  = Ptr CCURL -> CCURL_infotype -> Ptr CChar -> CSize -> Ptr () -> IO CInt--foreign import ccall "wrapper"-  wrap_ccurl_debug_callback-    :: CCURL_debug_callback-    -> IO (FunPtr CCURL_debug_callback)------------------------------------------------------------------------------------- ** Constants----------------------------------------------------------------------------------- *** CURLcode---------------------------------------------------------------------------------newtype CCURLcode = CCURLcode CInt deriving (Eq, Show)--#{symbol CURLE_OK                      , CURLcode}-#{symbol CURLE_UNSUPPORTED_PROTOCOL    , CURLcode}-#{symbol CURLE_FAILED_INIT             , CURLcode}-#{symbol CURLE_URL_MALFORMAT           , CURLcode}-#{symbol CURLE_NOT_BUILT_IN            , CURLcode} |7215:----|-#{symbol CURLE_COULDNT_RESOLVE_PROXY   , CURLcode}-#{symbol CURLE_COULDNT_RESOLVE_HOST    , CURLcode}-#{symbol CURLE_COULDNT_CONNECT         , CURLcode}-#{symbol CURLE_FTP_WEIRD_SERVER_REPLY  , CURLcode}-#{symbol CURLE_REMOTE_ACCESS_DENIED    , CURLcode}-#{symbol CURLE_FTP_ACCEPT_FAILED       , CURLcode} |7240:----|-#{symbol CURLE_FTP_WEIRD_PASS_REPLY    , CURLcode}-#{symbol CURLE_FTP_ACCEPT_TIMEOUT      , CURLcode} |7240:----|-#{symbol CURLE_FTP_WEIRD_PASV_REPLY    , CURLcode}-#{symbol CURLE_FTP_WEIRD_227_FORMAT    , CURLcode}-#{symbol CURLE_FTP_CANT_GET_HOST       , CURLcode}-#{symbol CURLE_FTP_COULDNT_SET_TYPE    , CURLcode}-#{symbol CURLE_PARTIAL_FILE            , CURLcode}-#{symbol CURLE_FTP_COULDNT_RETR_FILE   , CURLcode}-#{symbol CURLE_QUOTE_ERROR             , CURLcode}-#{symbol CURLE_HTTP_RETURNED_ERROR     , CURLcode}-#{symbol CURLE_WRITE_ERROR             , CURLcode}-#{symbol CURLE_UPLOAD_FAILED           , CURLcode}-#{symbol CURLE_READ_ERROR              , CURLcode}-#{symbol CURLE_OUT_OF_MEMORY           , CURLcode}-#{symbol CURLE_OPERATION_TIMEDOUT      , CURLcode}-#{symbol CURLE_FTP_PORT_FAILED         , CURLcode}-#{symbol CURLE_FTP_COULDNT_USE_REST    , CURLcode}-#{symbol CURLE_RANGE_ERROR             , CURLcode}-#{symbol CURLE_HTTP_POST_ERROR         , CURLcode}-#{symbol CURLE_SSL_CONNECT_ERROR       , CURLcode}-#{symbol CURLE_BAD_DOWNLOAD_RESUME     , CURLcode}-#{symbol CURLE_FILE_COULDNT_READ_FILE  , CURLcode}-#{symbol CURLE_LDAP_CANNOT_BIND        , CURLcode}-#{symbol CURLE_LDAP_SEARCH_FAILED      , CURLcode}-#{symbol CURLE_FUNCTION_NOT_FOUND      , CURLcode}-#{symbol CURLE_ABORTED_BY_CALLBACK     , CURLcode}-#{symbol CURLE_BAD_FUNCTION_ARGUMENT   , CURLcode}-#{symbol CURLE_INTERFACE_FAILED        , CURLcode}-#{symbol CURLE_TOO_MANY_REDIRECTS      , CURLcode}-#{symbol CURLE_UNKNOWN_TELNET_OPTION   , CURLcode} |----:7214|-#{symbol CURLE_UNKNOWN_OPTION          , CURLcode} |7215:----|-#{symbol CURLE_TELNET_OPTION_SYNTAX    , CURLcode}-#{symbol CURLE_PEER_FAILED_VERIFICATION, CURLcode}-#{symbol CURLE_GOT_NOTHING             , CURLcode}-#{symbol CURLE_SSL_ENGINE_NOTFOUND     , CURLcode}-#{symbol CURLE_SSL_ENGINE_SETFAILED    , CURLcode}-#{symbol CURLE_SEND_ERROR              , CURLcode}-#{symbol CURLE_RECV_ERROR              , CURLcode}-#{symbol CURLE_SSL_CERTPROBLEM         , CURLcode}-#{symbol CURLE_SSL_CIPHER              , CURLcode}-#{symbol CURLE_SSL_CACERT              , CURLcode}-#{symbol CURLE_BAD_CONTENT_ENCODING    , CURLcode}-#{symbol CURLE_LDAP_INVALID_URL        , CURLcode}-#{symbol CURLE_FILESIZE_EXCEEDED       , CURLcode}-#{symbol CURLE_USE_SSL_FAILED          , CURLcode}-#{symbol CURLE_SEND_FAIL_REWIND        , CURLcode}-#{symbol CURLE_SSL_ENGINE_INITFAILED   , CURLcode}-#{symbol CURLE_LOGIN_DENIED            , CURLcode}-#{symbol CURLE_TFTP_NOTFOUND           , CURLcode}-#{symbol CURLE_TFTP_PERM               , CURLcode}-#{symbol CURLE_REMOTE_DISK_FULL        , CURLcode}-#{symbol CURLE_TFTP_ILLEGAL            , CURLcode}-#{symbol CURLE_TFTP_UNKNOWNID          , CURLcode}-#{symbol CURLE_REMOTE_FILE_EXISTS      , CURLcode}-#{symbol CURLE_TFTP_NOSUCHUSER         , CURLcode}-#{symbol CURLE_CONV_FAILED             , CURLcode}-#{symbol CURLE_CONV_REQD               , CURLcode}-#{symbol CURLE_SSL_CACERT_BADFILE      , CURLcode}-#{symbol CURLE_REMOTE_FILE_NOT_FOUND   , CURLcode}-#{symbol CURLE_SSH                     , CURLcode}-#{symbol CURLE_SSL_SHUTDOWN_FAILED     , CURLcode}-#{symbol CURLE_AGAIN                   , CURLcode}-#{symbol CURLE_SSL_CRL_BADFILE         , CURLcode}-#{symbol CURLE_SSL_ISSUER_ERROR        , CURLcode}-#{symbol CURLE_FTP_PRET_FAILED         , CURLcode}-#{symbol CURLE_RTSP_CSEQ_ERROR         , CURLcode}-#{symbol CURLE_RTSP_SESSION_ERROR      , CURLcode}-#{symbol CURLE_FTP_BAD_FILE_LIST       , CURLcode} |7210:----|-#{symbol CURLE_CHUNK_FAILED            , CURLcode} |7210:----|------------------------------------------------------------------------------------- ** Callbacks----------------------------------------------------------------------------------- *** CURL_conv_callback---------------------------------------------------------------------------------type CCURL_conv_callback-  = Ptr CChar -> CSize -> IO CCURLcode--foreign import ccall "wrapper"-  wrap_ccurl_conv_callback-    :: CCURL_conv_callback-    -> IO (FunPtr CCURL_conv_callback)------------------------------------------------------------------------------------- *** CURL_ssl_ctx_callback---------------------------------------------------------------------------------type CCURL_ssl_ctx_callback-  = Ptr CCURL -> Ptr () -> Ptr () -> IO CCURLcode--foreign import ccall "wrapper"-  wrap_ccurl_ssl_ctx_callback-    :: CCURL_ssl_ctx_callback-    -> IO (FunPtr CCURL_ssl_ctx_callback)-- ----------------------------------------------------------------------------------- ** Constants----------------------------------------------------------------------------------- *** CURLproxy---------------------------------------------------------------------------------#{cconst CURLPROXY_HTTP           , CLong}-#{cconst CURLPROXY_HTTP_1_0       , CLong}-#{cconst CURLPROXY_SOCKS4         , CLong}-#{cconst CURLPROXY_SOCKS5         , CLong}-#{cconst CURLPROXY_SOCKS4A        , CLong}-#{cconst CURLPROXY_SOCKS5_HOSTNAME, CLong}------------------------------------------------------------------------------------- *** CURLauth---------------------------------------------------------------------------------#{cconst CURLAUTH_NONE        , CLong}-#{cconst CURLAUTH_BASIC       , CLong}-#{cconst CURLAUTH_DIGEST      , CLong}-#{cconst CURLAUTH_GSSNEGOTIATE, CLong}-#{cconst CURLAUTH_NTLM        , CLong}-#{cconst CURLAUTH_DIGEST_IE   , CLong}-#{cconst CURLAUTH_NTLM_WB     , CLong} |7220:----|-#{cconst CURLAUTH_ONLY        , CLong} |7213:----|-#{cconst CURLAUTH_ANY         , CLong}-#{cconst CURLAUTH_ANYSAFE     , CLong}------------------------------------------------------------------------------------- *** CURLsshauth---------------------------------------------------------------------------------#{cconst CURLSSH_AUTH_ANY      , CLong}-#{cconst CURLSSH_AUTH_NONE     , CLong}-#{cconst CURLSSH_AUTH_PUBLICKEY, CLong}-#{cconst CURLSSH_AUTH_PASSWORD , CLong}-#{cconst CURLSSH_AUTH_HOST     , CLong}-#{cconst CURLSSH_AUTH_KEYBOARD , CLong}-#{cconst CURLSSH_AUTH_DEFAULT  , CLong}------------------------------------------------------------------------------------- *** CURLgssapi---------------------------------------------------------------------------------#{cconst CURLGSSAPI_DELEGATION_NONE       , CLong}               |7220:----|-#{cconst CURLGSSAPI_DELEGATION_POLICY_FLAG, CLong}               |7220:----|-#{cconst CURLGSSAPI_DELEGATION_FLAG       , CLong}               |7220:----|------------------------------------------------------------------------------------- *** CURL_error_size---------------------------------------------------------------------------------#{cconst CURL_ERROR_SIZE, CLong}------------------------------------------------------------------------------------- ** Callbacks----------------------------------------------------------------------------------- *** CURL_sshkey_callback---------------------------------------------------------------------------------data CCURL_khkey = CCURL_khkey-  { ccurl_khkey_key     :: Ptr CChar-  , ccurl_khkey_len     :: CSize-  , ccurl_khkey_keytype :: CCURL_khtype-  } deriving (Show)---- instance Storable CCURL_khkey where---   sizeOf _    = #{size    struct curl_khkey}---   alignment _ = #{alignof struct curl_khkey}---   poke _ _    = undefined---   peek _      = undefined--newtype CCURL_khtype = CCURL_khtype CInt deriving (Eq, Show)--#{symbol CURLKHTYPE_UNKNOWN, CURL_khtype}-#{symbol CURLKHTYPE_RSA1   , CURL_khtype}-#{symbol CURLKHTYPE_RSA    , CURL_khtype}-#{symbol CURLKHTYPE_DSS    , CURL_khtype}- -newtype CCURL_khstat = CCURL_khstat CInt deriving (Eq, Show)--#{symbol CURLKHSTAT_FINE_ADD_TO_FILE, CURL_khstat}-#{symbol CURLKHSTAT_FINE            , CURL_khstat}-#{symbol CURLKHSTAT_REJECT          , CURL_khstat}-#{symbol CURLKHSTAT_DEFER           , CURL_khstat}--newtype CCURL_khmatch = CCURL_khmatch CInt deriving (Eq, Show)--#{symbol CURLKHMATCH_OK      , CURL_khmatch}-#{symbol CURLKHMATCH_MISMATCH, CURL_khmatch}-#{symbol CURLKHMATCH_MISSING , CURL_khmatch}- -type CCURL_sshkey_callback-  = Ptr CCURL -> Ptr CCURL_khkey -> Ptr CCURL_khkey-    -> CCURL_khmatch -> Ptr () -> IO CCURL_khstat--foreign import ccall "wrapper"-  wrap_ccurl_sshkey_callback-    :: CCURL_sshkey_callback-    -> IO (FunPtr CCURL_sshkey_callback)-- ----------------------------------------------------------------------------------- ** Constants----------------------------------------------------------------------------------- *** CURLusessl---------------------------------------------------------------------------------#{cconst CURLUSESSL_NONE   , CLong}-#{cconst CURLUSESSL_TRY    , CLong}-#{cconst CURLUSESSL_CONTROL, CLong}-#{cconst CURLUSESSL_ALL    , CLong}------------------------------------------------------------------------------------- *** CURLsslopt---------------------------------------------------------------------------------#{cconst CURLSSLOPT_ALLOW_BEAST, CLong}                          |7250:----|------------------------------------------------------------------------------------- *** CURLftpssl---------------------------------------------------------------------------------#{cconst CURLFTPSSL_CCC_NONE   , CLong}-#{cconst CURLFTPSSL_CCC_PASSIVE, CLong}-#{cconst CURLFTPSSL_CCC_ACTIVE , CLong}- ------------------------------------------------------------------------------------ *** CURLftpauth---------------------------------------------------------------------------------#{cconst CURLFTPAUTH_DEFAULT, CLong}-#{cconst CURLFTPAUTH_SSL    , CLong}-#{cconst CURLFTPAUTH_TLS    , CLong}------------------------------------------------------------------------------------- *** CURLftpcreate---------------------------------------------------------------------------------#{cconst CURLFTP_CREATE_DIR_NONE , CLong}-#{cconst CURLFTP_CREATE_DIR      , CLong}-#{cconst CURLFTP_CREATE_DIR_RETRY, CLong}------------------------------------------------------------------------------------- *** CURLftpmethod---------------------------------------------------------------------------------#{cconst CURLFTPMETHOD_DEFAULT  , CLong}-#{cconst CURLFTPMETHOD_MULTICWD , CLong}-#{cconst CURLFTPMETHOD_NOCWD    , CLong}-#{cconst CURLFTPMETHOD_SINGLECWD, CLong}------------------------------------------------------------------------------------- *** CURLproto---------------------------------------------------------------------------------#{cconst CURLPROTO_HTTP  , CLong}-#{cconst CURLPROTO_HTTPS , CLong}-#{cconst CURLPROTO_FTP   , CLong}-#{cconst CURLPROTO_FTPS  , CLong}-#{cconst CURLPROTO_SCP   , CLong}-#{cconst CURLPROTO_SFTP  , CLong}-#{cconst CURLPROTO_TELNET, CLong}-#{cconst CURLPROTO_LDAP  , CLong}-#{cconst CURLPROTO_LDAPS , CLong}-#{cconst CURLPROTO_DICT  , CLong}-#{cconst CURLPROTO_FILE  , CLong}-#{cconst CURLPROTO_TFTP  , CLong}-#{cconst CURLPROTO_IMAP  , CLong}-#{cconst CURLPROTO_IMAPS , CLong}-#{cconst CURLPROTO_POP3  , CLong}-#{cconst CURLPROTO_POP3S , CLong}-#{cconst CURLPROTO_SMTP  , CLong}-#{cconst CURLPROTO_SMTPS , CLong}-#{cconst CURLPROTO_RTSP  , CLong}-#{cconst CURLPROTO_RTMP  , CLong} |7210:----|-#{cconst CURLPROTO_RTMPT , CLong} |7210:----|-#{cconst CURLPROTO_RTMPE , CLong} |7210:----|-#{cconst CURLPROTO_RTMPTE, CLong} |7210:----|-#{cconst CURLPROTO_RTMPS , CLong} |7210:----|-#{cconst CURLPROTO_RTMPTS, CLong} |7210:----|-#{cconst CURLPROTO_GOPHER, CLong} |7212:----|-#{cconst CURLPROTO_ALL   , CLong}------------------------------------------------------------------------------------- *** CURLoption---------------------------------------------------------------------------------newtype CCURLoption'CLong   = CCURLoption'CLong   CInt deriving (Eq, Show)-newtype CCURLoption'Int64   = CCURLoption'Int64   CInt deriving (Eq, Show)-newtype CCURLoption'CString = CCURLoption'CString CInt deriving (Eq, Show)-newtype CCURLoption'CFile   = CCURLoption'CFile   CInt deriving (Eq, Show)-newtype CCURLoption'SList   = CCURLoption'SList   CInt deriving (Eq, Show)-newtype CCURLoption'HTTPP   = CCURLoption'HTTPP   CInt deriving (Eq, Show)-newtype CCURLoption'CURLSH  = CCURLoption'CURLSH  CInt deriving (Eq, Show)-newtype CCURLoption'UsrPtr  = CCURLoption'UsrPtr  CInt deriving (Eq, Show)-newtype CCURLoption'FunPtr  = CCURLoption'FunPtr  CInt deriving (Eq, Show)--#define hsc_curlopt(name, type) \-  printf("c" #name " :: CCURLoption'" #type "\n"); \-  printf("c" #name " =  CCURLoption'" #type " "); hsc_const(name);--#{curlopt CURLOPT_FILE                       , CFile   }-#{curlopt CURLOPT_URL                        , CString }-#{curlopt CURLOPT_PORT                       , CLong   }-#{curlopt CURLOPT_PROXY                      , CString }-#{curlopt CURLOPT_USERPWD                    , CString }-#{curlopt CURLOPT_PROXYUSERPWD               , CString }-#{curlopt CURLOPT_RANGE                      , CString }-#{curlopt CURLOPT_INFILE                     , CFile   }-#{curlopt CURLOPT_ERRORBUFFER                , CString }-#{curlopt CURLOPT_WRITEFUNCTION              , FunPtr  }-#{curlopt CURLOPT_READFUNCTION               , FunPtr  }-#{curlopt CURLOPT_TIMEOUT                    , CLong   }-#{curlopt CURLOPT_INFILESIZE                 , CLong   }-#{curlopt CURLOPT_POSTFIELDS                 , CString }  -- UsrPtr??-#{curlopt CURLOPT_REFERER                    , CString }-#{curlopt CURLOPT_FTPPORT                    , CString }-#{curlopt CURLOPT_USERAGENT                  , CString }-#{curlopt CURLOPT_LOW_SPEED_LIMIT            , CLong   }-#{curlopt CURLOPT_LOW_SPEED_TIME             , CLong   }-#{curlopt CURLOPT_RESUME_FROM                , CLong   }-#{curlopt CURLOPT_COOKIE                     , CString }-#{curlopt CURLOPT_HTTPHEADER                 , SList   }-#{curlopt CURLOPT_HTTPPOST                   , HTTPP   }-#{curlopt CURLOPT_SSLCERT                    , CString }-#{curlopt CURLOPT_KEYPASSWD                  , CString }-#{curlopt CURLOPT_CRLF                       , CLong   }-#{curlopt CURLOPT_QUOTE                      , SList   }-#{curlopt CURLOPT_WRITEHEADER                , CFile   }  -- UsrPtr??-#{curlopt CURLOPT_COOKIEFILE                 , CString }-#{curlopt CURLOPT_SSLVERSION                 , CLong   }-#{curlopt CURLOPT_TIMECONDITION              , CLong   }-#{curlopt CURLOPT_TIMEVALUE                  , CLong   }-#{curlopt CURLOPT_CUSTOMREQUEST              , CString }-#{curlopt CURLOPT_STDERR                     , CFile   }-#{curlopt CURLOPT_POSTQUOTE                  , SList   }-{-# DEPRECATED cCURLOPT_WRITEINFO                 "" #-} |7220:----|-#{curlopt CURLOPT_WRITEINFO                  , CString }-#{curlopt CURLOPT_VERBOSE                    , CLong   }-#{curlopt CURLOPT_HEADER                     , CLong   }-#{curlopt CURLOPT_NOPROGRESS                 , CLong   }-#{curlopt CURLOPT_NOBODY                     , CLong   }-#{curlopt CURLOPT_FAILONERROR                , CLong   }-#{curlopt CURLOPT_UPLOAD                     , CLong   }-#{curlopt CURLOPT_POST                       , CLong   }-#{curlopt CURLOPT_DIRLISTONLY                , CLong   }-#{curlopt CURLOPT_APPEND                     , CLong   }-#{curlopt CURLOPT_NETRC                      , CLong   }-#{curlopt CURLOPT_FOLLOWLOCATION             , CLong   }-#{curlopt CURLOPT_TRANSFERTEXT               , CLong   }-#{curlopt CURLOPT_PUT                        , CLong   }-#{curlopt CURLOPT_PROGRESSFUNCTION           , FunPtr  }-#{curlopt CURLOPT_PROGRESSDATA               , UsrPtr  }-#{curlopt CURLOPT_AUTOREFERER                , CLong   }-#{curlopt CURLOPT_PROXYPORT                  , CLong   }-#{curlopt CURLOPT_POSTFIELDSIZE              , CLong   }-#{curlopt CURLOPT_HTTPPROXYTUNNEL            , CLong   }-#{curlopt CURLOPT_INTERFACE                  , CString }-#{curlopt CURLOPT_KRBLEVEL                   , CString }-#{curlopt CURLOPT_SSL_VERIFYPEER             , CLong   }-#{curlopt CURLOPT_CAINFO                     , CString }-#{curlopt CURLOPT_MAXREDIRS                  , CLong   }-#{curlopt CURLOPT_FILETIME                   , CLong   }-#{curlopt CURLOPT_TELNETOPTIONS              , SList   }-#{curlopt CURLOPT_MAXCONNECTS                , CLong   }-{-# DEPRECATED cCURLOPT_CLOSEPOLICY               "" #-} |7217:----|-#{curlopt CURLOPT_CLOSEPOLICY                , CLong   }-#{curlopt CURLOPT_FRESH_CONNECT              , CLong   }-#{curlopt CURLOPT_FORBID_REUSE               , CLong   }-#{curlopt CURLOPT_RANDOM_FILE                , CString }-#{curlopt CURLOPT_EGDSOCKET                  , CString }-#{curlopt CURLOPT_CONNECTTIMEOUT             , CLong   }-#{curlopt CURLOPT_HEADERFUNCTION             , FunPtr  }-#{curlopt CURLOPT_HTTPGET                    , CLong   }-#{curlopt CURLOPT_SSL_VERIFYHOST             , CLong   }-#{curlopt CURLOPT_COOKIEJAR                  , CString }-#{curlopt CURLOPT_SSL_CIPHER_LIST            , CString }-#{curlopt CURLOPT_HTTP_VERSION               , CLong   }-#{curlopt CURLOPT_FTP_USE_EPSV               , CLong   }-#{curlopt CURLOPT_SSLCERTTYPE                , CString }-#{curlopt CURLOPT_SSLKEY                     , CString }-#{curlopt CURLOPT_SSLKEYTYPE                 , CString }-#{curlopt CURLOPT_SSLENGINE                  , CString }-#{curlopt CURLOPT_SSLENGINE_DEFAULT          , CLong   }-{-# DEPRECATED cCURLOPT_DNS_USE_GLOBAL_CACHE      "" #-} |7220:----|-#{curlopt CURLOPT_DNS_USE_GLOBAL_CACHE       , CLong   }-#{curlopt CURLOPT_DNS_CACHE_TIMEOUT          , CLong   }-#{curlopt CURLOPT_PREQUOTE                   , SList   }-#{curlopt CURLOPT_DEBUGFUNCTION              , FunPtr  }-#{curlopt CURLOPT_DEBUGDATA                  , UsrPtr  }-#{curlopt CURLOPT_COOKIESESSION              , CLong   }-#{curlopt CURLOPT_CAPATH                     , CString }-#{curlopt CURLOPT_BUFFERSIZE                 , CLong   }-#{curlopt CURLOPT_NOSIGNAL                   , CLong   }-#{curlopt CURLOPT_SHARE                      , CURLSH  }-#{curlopt CURLOPT_PROXYTYPE                  , CLong   }-#{curlopt CURLOPT_ENCODING                   , CString } |----:7215|-#{curlopt CURLOPT_ACCEPT_ENCODING            , CString } |7216:----|-#{curlopt CURLOPT_PRIVATE                    , UsrPtr  }-#{curlopt CURLOPT_HTTP200ALIASES             , SList   }-#{curlopt CURLOPT_UNRESTRICTED_AUTH          , CLong   }-#{curlopt CURLOPT_FTP_USE_EPRT               , CLong   }-#{curlopt CURLOPT_HTTPAUTH                   , CLong   }-#{curlopt CURLOPT_SSL_CTX_FUNCTION           , FunPtr  }-#{curlopt CURLOPT_SSL_CTX_DATA               , UsrPtr  }-#{curlopt CURLOPT_FTP_CREATE_MISSING_DIRS    , CLong   }-#{curlopt CURLOPT_PROXYAUTH                  , CLong   }-#{curlopt CURLOPT_FTP_RESPONSE_TIMEOUT       , CLong   }-#{curlopt CURLOPT_IPRESOLVE                  , CLong   }-#{curlopt CURLOPT_MAXFILESIZE                , CLong   }-#{curlopt CURLOPT_INFILESIZE_LARGE           , Int64   }-#{curlopt CURLOPT_RESUME_FROM_LARGE          , Int64   }-#{curlopt CURLOPT_MAXFILESIZE_LARGE          , Int64   }-#{curlopt CURLOPT_NETRC_FILE                 , CString }-#{curlopt CURLOPT_USE_SSL                    , CLong   }-#{curlopt CURLOPT_POSTFIELDSIZE_LARGE        , Int64   }-#{curlopt CURLOPT_TCP_NODELAY                , CLong   }-#{curlopt CURLOPT_FTPSSLAUTH                 , CLong   }-#{curlopt CURLOPT_IOCTLFUNCTION              , FunPtr  }-#{curlopt CURLOPT_IOCTLDATA                  , UsrPtr  }-#{curlopt CURLOPT_FTP_ACCOUNT                , CString }-#{curlopt CURLOPT_COOKIELIST                 , CString }-#{curlopt CURLOPT_IGNORE_CONTENT_LENGTH      , CLong   }-#{curlopt CURLOPT_FTP_SKIP_PASV_IP           , CLong   }-#{curlopt CURLOPT_FTP_FILEMETHOD             , CLong   }-#{curlopt CURLOPT_LOCALPORT                  , CLong   }-#{curlopt CURLOPT_LOCALPORTRANGE             , CLong   }-#{curlopt CURLOPT_CONNECT_ONLY               , CLong   }-#{curlopt CURLOPT_CONV_FROM_NETWORK_FUNCTION , FunPtr  }-#{curlopt CURLOPT_CONV_TO_NETWORK_FUNCTION   , FunPtr  }-#{curlopt CURLOPT_CONV_FROM_UTF8_FUNCTION    , FunPtr  }-#{curlopt CURLOPT_MAX_SEND_SPEED_LARGE       , Int64   }-#{curlopt CURLOPT_MAX_RECV_SPEED_LARGE       , Int64   }-#{curlopt CURLOPT_FTP_ALTERNATIVE_TO_USER    , CString }-#{curlopt CURLOPT_SOCKOPTFUNCTION            , FunPtr  }-#{curlopt CURLOPT_SOCKOPTDATA                , UsrPtr  }-#{curlopt CURLOPT_SSL_SESSIONID_CACHE        , CLong   }-#{curlopt CURLOPT_SSH_AUTH_TYPES             , CLong   }-#{curlopt CURLOPT_SSH_PUBLIC_KEYFILE         , CString }-#{curlopt CURLOPT_SSH_PRIVATE_KEYFILE        , CString }-#{curlopt CURLOPT_FTP_SSL_CCC                , CLong   }-#{curlopt CURLOPT_TIMEOUT_MS                 , CLong   }-#{curlopt CURLOPT_CONNECTTIMEOUT_MS          , CLong   }-#{curlopt CURLOPT_HTTP_TRANSFER_DECODING     , CLong   }-#{curlopt CURLOPT_HTTP_CONTENT_DECODING      , CLong   }-#{curlopt CURLOPT_NEW_FILE_PERMS             , CLong   }-#{curlopt CURLOPT_NEW_DIRECTORY_PERMS        , CLong   }-#{curlopt CURLOPT_POSTREDIR                  , CLong   }-#{curlopt CURLOPT_SSH_HOST_PUBLIC_KEY_MD5    , CString }-#{curlopt CURLOPT_OPENSOCKETFUNCTION         , FunPtr  }-#{curlopt CURLOPT_OPENSOCKETDATA             , UsrPtr  }-#{curlopt CURLOPT_COPYPOSTFIELDS             , CString }-#{curlopt CURLOPT_PROXY_TRANSFER_MODE        , CLong   }-#{curlopt CURLOPT_SEEKFUNCTION               , FunPtr  }-#{curlopt CURLOPT_SEEKDATA                   , UsrPtr  }-#{curlopt CURLOPT_CRLFILE                    , CString }-#{curlopt CURLOPT_ISSUERCERT                 , CString }-#{curlopt CURLOPT_ADDRESS_SCOPE              , CLong   }-#{curlopt CURLOPT_CERTINFO                   , CLong   }-#{curlopt CURLOPT_USERNAME                   , CString }-#{curlopt CURLOPT_PASSWORD                   , CString }-#{curlopt CURLOPT_PROXYUSERNAME              , CString }-#{curlopt CURLOPT_PROXYPASSWORD              , CString }-#{curlopt CURLOPT_NOPROXY                    , CString }-#{curlopt CURLOPT_TFTP_BLKSIZE               , CLong   }-#{curlopt CURLOPT_SOCKS5_GSSAPI_SERVICE      , CString }-#{curlopt CURLOPT_SOCKS5_GSSAPI_NEC          , CLong   }-#{curlopt CURLOPT_PROTOCOLS                  , CLong   }-#{curlopt CURLOPT_REDIR_PROTOCOLS            , CLong   }-#{curlopt CURLOPT_SSH_KNOWNHOSTS             , CString }-#{curlopt CURLOPT_SSH_KEYFUNCTION            , FunPtr  }-#{curlopt CURLOPT_SSH_KEYDATA                , UsrPtr  }-#{curlopt CURLOPT_MAIL_FROM                  , CString }-#{curlopt CURLOPT_MAIL_RCPT                  , SList   }-#{curlopt CURLOPT_FTP_USE_PRET               , CLong   }-#{curlopt CURLOPT_RTSP_REQUEST               , CLong   }-#{curlopt CURLOPT_RTSP_SESSION_ID            , CString }-#{curlopt CURLOPT_RTSP_STREAM_URI            , CString }-#{curlopt CURLOPT_RTSP_TRANSPORT             , CString }-#{curlopt CURLOPT_RTSP_CLIENT_CSEQ           , CLong   }-#{curlopt CURLOPT_RTSP_SERVER_CSEQ           , CLong   }-#{curlopt CURLOPT_INTERLEAVEDATA             , UsrPtr  }-#{curlopt CURLOPT_INTERLEAVEFUNCTION         , FunPtr  }-#{curlopt CURLOPT_WILDCARDMATCH              , CLong   } |7210:----|-#{curlopt CURLOPT_CHUNK_BGN_FUNCTION         , FunPtr  } |7210:----|-#{curlopt CURLOPT_CHUNK_END_FUNCTION         , FunPtr  } |7210:----|-#{curlopt CURLOPT_FNMATCH_FUNCTION           , FunPtr  } |7210:----|-#{curlopt CURLOPT_CHUNK_DATA                 , UsrPtr  } |7210:----|-#{curlopt CURLOPT_FNMATCH_DATA               , UsrPtr  } |7210:----|-#{curlopt CURLOPT_RESOLVE                    , SList   } |7213:----|-#{curlopt CURLOPT_TLSAUTH_USERNAME           , CString } |7214:----|-#{curlopt CURLOPT_TLSAUTH_PASSWORD           , CString } |7214:----|-#{curlopt CURLOPT_TLSAUTH_TYPE               , CString } |7214:----|-#{curlopt CURLOPT_TRANSFER_ENCODING          , CLong   } |7216:----|-#{curlopt CURLOPT_CLOSESOCKETFUNCTION        , FunPtr  } |7217:----|-#{curlopt CURLOPT_CLOSESOCKETDATA            , UsrPtr  } |7217:----|-#{curlopt CURLOPT_GSSAPI_DELEGATION          , CLong   } |7220:----|-#{curlopt CURLOPT_DNS_SERVERS                , CString } |7240:----|-#{curlopt CURLOPT_ACCEPTTIMEOUT_MS           , CLong   } |7240:----|-#{curlopt CURLOPT_TCP_KEEPALIVE              , CLong   } |7250:----|-#{curlopt CURLOPT_TCP_KEEPIDLE               , CLong   } |7250:----|-#{curlopt CURLOPT_TCP_KEEPINTVL              , CLong   } |7250:----|-#{curlopt CURLOPT_SSL_OPTIONS                , CLong   } |7250:----|-#{curlopt CURLOPT_MAIL_AUTH                  , CString } |7250:----|--#{curlopt CURLOPT_WRITEDATA                  , UsrPtr  }-#{curlopt CURLOPT_READDATA                   , UsrPtr  }-#{curlopt CURLOPT_HEADERDATA                 , UsrPtr  }-#{curlopt CURLOPT_RTSPHEADER                 , SList   }------------------------------------------------------------------------------------- *** CURLipresolve---------------------------------------------------------------------------------#{cconst CURL_IPRESOLVE_WHATEVER, CLong}-#{cconst CURL_IPRESOLVE_V4      , CLong}-#{cconst CURL_IPRESOLVE_V6      , CLong}------------------------------------------------------------------------------------- *** CURLhttpver---------------------------------------------------------------------------------#{cconst CURL_HTTP_VERSION_NONE, CLong}-#{cconst CURL_HTTP_VERSION_1_0 , CLong}-#{cconst CURL_HTTP_VERSION_1_1 , CLong}------------------------------------------------------------------------------------- *** CURLrtspreq---------------------------------------------------------------------------------#{cconst CURL_RTSPREQ_NONE         , CLong}-#{cconst CURL_RTSPREQ_OPTIONS      , CLong}-#{cconst CURL_RTSPREQ_DESCRIBE     , CLong}-#{cconst CURL_RTSPREQ_ANNOUNCE     , CLong}-#{cconst CURL_RTSPREQ_SETUP        , CLong}-#{cconst CURL_RTSPREQ_PLAY         , CLong}-#{cconst CURL_RTSPREQ_PAUSE        , CLong}-#{cconst CURL_RTSPREQ_TEARDOWN     , CLong}-#{cconst CURL_RTSPREQ_GET_PARAMETER, CLong}-#{cconst CURL_RTSPREQ_SET_PARAMETER, CLong}-#{cconst CURL_RTSPREQ_RECORD       , CLong}-#{cconst CURL_RTSPREQ_RECEIVE      , CLong}------------------------------------------------------------------------------------- *** CURLnetrc---------------------------------------------------------------------------------#{cconst CURL_NETRC_IGNORED , CLong}-#{cconst CURL_NETRC_OPTIONAL, CLong}-#{cconst CURL_NETRC_REQUIRED, CLong}------------------------------------------------------------------------------------- *** CURLsslver---------------------------------------------------------------------------------#{cconst CURL_SSLVERSION_DEFAULT, CLong}-#{cconst CURL_SSLVERSION_TLSv1  , CLong}-#{cconst CURL_SSLVERSION_SSLv2  , CLong}-#{cconst CURL_SSLVERSION_SSLv3  , CLong}------------------------------------------------------------------------------------- *** CURLtlsauth---------------------------------------------------------------------------------#{cconst CURL_TLSAUTH_NONE, CLong}                               |7214:----|-#{cconst CURL_TLSAUTH_SRP , CLong}                               |7214:----|------------------------------------------------------------------------------------- *** CURLredir---------------------------------------------------------------------------------#{cconst CURL_REDIR_GET_ALL , CLong}-#{cconst CURL_REDIR_POST_301, CLong}-#{cconst CURL_REDIR_POST_302, CLong}-#{cconst CURL_REDIR_POST_ALL, CLong}------------------------------------------------------------------------------------- *** CURLtimecond---------------------------------------------------------------------------------#{cconst CURL_TIMECOND_NONE        , CLong}-#{cconst CURL_TIMECOND_IFMODSINCE  , CLong}-#{cconst CURL_TIMECOND_IFUNMODSINCE, CLong}-#{cconst CURL_TIMECOND_LASTMOD     , CLong}------------------------------------------------------------------------------------- ** Functions---------------------------------------------------------------------------------{-# DEPRECATED ccurl_strequal "" #-}-foreign import ccall "curl_strequal"-  ccurl_strequal-    :: Ptr CChar-    -> Ptr CChar-    -> IO CInt-----------------------------------------------------------------------------------{-# DEPRECATED ccurl_strnequal "" #-}-foreign import ccall "curl_strnequal"-  ccurl_strnequal-    :: Ptr CChar-    -> Ptr CChar-    -> CSize-    -> IO CInt------------------------------------------------------------------------------------- ** CURL_forms---------------------------------------------------------------------------------newtype CCURLformoption = CCURLformoption CInt deriving (Eq, Show)- --- #{symbol CURLFORM_COPYNAME      , CURLformoption}--- #{symbol CURLFORM_PTRNAME       , CURLformoption}--- #{symbol CURLFORM_NAMELENGTH    , CURLformoption}--- #{symbol CURLFORM_COPYCONTENTS  , CURLformoption}--- #{symbol CURLFORM_PTRCONTENTS   , CURLformoption}--- #{symbol CURLFORM_CONTENTSLENGTH, CURLformoption}--- #{symbol CURLFORM_FILECONTENT   , CURLformoption}--- #{symbol CURLFORM_ARRAY         , CURLformoption}--- #{symbol CURLFORM_FILE          , CURLformoption}--- #{symbol CURLFORM_BUFFER        , CURLformoption}--- #{symbol CURLFORM_BUFFERPTR     , CURLformoption}--- #{symbol CURLFORM_BUFFERLENGTH  , CURLformoption}--- #{symbol CURLFORM_CONTENTTYPE   , CURLformoption}--- #{symbol CURLFORM_CONTENTHEADER , CURLformoption}--- #{symbol CURLFORM_FILENAME      , CURLformoption}--- #{symbol CURLFORM_END           , CURLformoption}--- #{symbol CURLFORM_STREAM        , CURLformoption}-----------------------------------------------------------------------------------data CCURL_forms = CCURL_forms-  { ccurl_forms_option :: CCURLformoption-  , ccurl_forms_value  :: Ptr CChar-  } deriving (Show)---- instance Storable CCURL_forms where---   sizeOf _    = #{size    struct curl_forms}---   alignment _ = #{alignof struct curl_forms}---   poke _ _    = undefined---   peek _      = undefined-----------------------------------------------------------------------------------newtype CCURLformcode = CCURLformcode CInt deriving (Eq, Show)--#{symbol CURL_FORMADD_OK            , CURLformcode}-#{symbol CURL_FORMADD_MEMORY        , CURLformcode}-#{symbol CURL_FORMADD_OPTION_TWICE  , CURLformcode}-#{symbol CURL_FORMADD_NULL          , CURLformcode}-#{symbol CURL_FORMADD_UNKNOWN_OPTION, CURLformcode}-#{symbol CURL_FORMADD_INCOMPLETE    , CURLformcode}-#{symbol CURL_FORMADD_ILLEGAL_ARRAY , CURLformcode}-#{symbol CURL_FORMADD_DISABLED      , CURLformcode}----- ------------------------------------------------------------------------------- CURL_EXTERN CURLFORMcode curl_formadd(struct curl_httppost **httppost,---                                       struct curl_httppost **last_post,---                                       ...);-----------------------------------------------------------------------------------type CCURL_formget_callback-  = Ptr () -> Ptr CChar -> CSize -> IO CSize--foreign import ccall "wrapper"-  wrap_ccurl_formget_callback-    :: CCURL_formget_callback-    -> IO (FunPtr CCURL_formget_callback)-----------------------------------------------------------------------------------foreign import ccall "curl_formget"-  ccurl_formget-    :: Ptr CCURL_httppost-    -> Ptr ()-    -> FunPtr CCURL_formget_callback-    -> IO CInt-----------------------------------------------------------------------------------foreign import ccall "curl_formfree"-  ccurl_formfree-    :: Ptr CCURL_httppost-    -> IO ()------------------------------------------------------------------------------------- ** Functions---------------------------------------------------------------------------------{-# DEPRECATED ccurl_getenv "" #-}-foreign import ccall "curl_getenv"-  ccurl_getenv-    :: Ptr CChar-    -> IO (Ptr CChar)-----------------------------------------------------------------------------------foreign import ccall "curl_version"-  ccurl_version-    :: IO (Ptr CChar)-----------------------------------------------------------------------------------foreign import ccall "curl_easy_escape"-  ccurl_easy_escape-    :: Ptr CCURL-    -> Ptr CChar-    -> CInt-    -> IO (Ptr CChar)-----------------------------------------------------------------------------------foreign import ccall "curl_escape"-  ccurl_escape-    :: Ptr CChar-    -> CInt-    -> IO (Ptr CChar)-----------------------------------------------------------------------------------foreign import ccall "curl_easy_unescape"-  ccurl_easy_unescape-    :: Ptr CCURL-    -> Ptr CChar-    -> CInt-    -> Ptr CInt-    -> IO (Ptr CChar)-----------------------------------------------------------------------------------foreign import ccall "curl_unescape"-  ccurl_unescape-    :: Ptr CChar-    -> CInt-    -> IO (Ptr CChar)-----------------------------------------------------------------------------------foreign import ccall "curl_free"-  ccurl_free-    :: Ptr a-    -> IO ()-----------------------------------------------------------------------------------foreign import ccall "curl_global_init"-  ccurl_global_init-    :: CLong-    -> IO CCURLcode-----------------------------------------------------------------------------------foreign import ccall "curl_global_init_mem"-  ccurl_global_init_mem-    :: CLong-    -> FunPtr CCURL_malloc_callback-    -> FunPtr CCURL_free_callback-    -> FunPtr CCURL_realloc_callback-    -> FunPtr CCURL_strdup_callback-    -> FunPtr CCURL_calloc_callback-    -> IO CCURLcode-----------------------------------------------------------------------------------foreign import ccall "curl_global_cleanup"-  ccurl_global_cleanup-    :: IO ()------------------------------------------------------------------------------------- ** CURL_slist---------------------------------------------------------------------------------data CCURL_slist = CCURL_slist-  { ccurl_slist_data :: Ptr CChar-  , ccurl_slist_next :: Ptr CCURL_slist-  } deriving (Show)--instance Storable CCURL_slist where-  sizeOf _    = #{size    struct curl_slist}-  alignment _ = #{alignof struct curl_slist}-  poke _ _    = undefined-  peek ptr    = CCURL_slist-    <$> #{peek struct curl_slist, data} ptr-    <*> #{peek struct curl_slist, next} ptr-- ----------------------------------------------------------------------------------- ** Functions---------------------------------------------------------------------------------foreign import ccall "curl_slist_append"-  ccurl_slist_append-    :: Ptr CCURL_slist-    -> Ptr CChar-    -> IO (Ptr CCURL_slist)-----------------------------------------------------------------------------------foreign import ccall "curl_slist_free_all"-  ccurl_slist_free_all-    :: Ptr CCURL_slist-    -> IO ()-- ---------------------------------------------------------------------------------foreign import ccall "curl_getdate"-  ccurl_getdate-    :: Ptr CChar-    -> Ptr CTime-    -> IO CTime------------------------------------------------------------------------------------- ** CURL_certinfo---------------------------------------------------------------------------------data CCURL_certinfo = CCURL_certinfo-  { ccurl_certinfo_num_of_certs :: CInt-  , ccurl_certinfo_certinfo     :: Ptr (Ptr CCURL_slist)-  } deriving (Show)--instance Storable CCURL_certinfo where-  sizeOf _    = #{size    struct curl_certinfo}-  alignment _ = #{alignof struct curl_certinfo}-  poke _ _    = undefined-  peek ptr    = CCURL_certinfo-    <$> #{peek struct curl_certinfo, num_of_certs} ptr-    <*> #{peek struct curl_certinfo, certinfo    } ptr------------------------------------------------------------------------------------- ** Constants----------------------------------------------------------------------------------- *** CURLinfo---------------------------------------------------------------------------------newtype CCURLinfo'CString = CCURLinfo'CString CInt deriving (Eq, Show)-newtype CCURLinfo'CDouble = CCURLinfo'CDouble CInt deriving (Eq, Show)-newtype CCURLinfo'CLong   = CCURLinfo'CLong   CInt deriving (Eq, Show)-newtype CCURLinfo'SList   = CCURLinfo'SList   CInt deriving (Eq, Show)-newtype CCURLinfo'CertI   = CCURLinfo'CertI   CInt deriving (Eq, Show)--#define hsc_curlinfo(name, type) \-  printf("c" #name " :: CCURLinfo'" #type "\n"); \-  printf("c" #name " =  CCURLinfo'" #type " "); hsc_const(name);--#{curlinfo CURLINFO_EFFECTIVE_URL          , CString}-#{curlinfo CURLINFO_RESPONSE_CODE          , CLong  }-#{curlinfo CURLINFO_TOTAL_TIME             , CDouble}-#{curlinfo CURLINFO_NAMELOOKUP_TIME        , CDouble}-#{curlinfo CURLINFO_CONNECT_TIME           , CDouble}-#{curlinfo CURLINFO_PRETRANSFER_TIME       , CDouble}-#{curlinfo CURLINFO_SIZE_UPLOAD            , CDouble}-#{curlinfo CURLINFO_SIZE_DOWNLOAD          , CDouble}-#{curlinfo CURLINFO_SPEED_DOWNLOAD         , CDouble}-#{curlinfo CURLINFO_SPEED_UPLOAD           , CDouble}-#{curlinfo CURLINFO_HEADER_SIZE            , CLong  }-#{curlinfo CURLINFO_REQUEST_SIZE           , CLong  }-#{curlinfo CURLINFO_SSL_VERIFYRESULT       , CLong  }-#{curlinfo CURLINFO_FILETIME               , CLong  }-#{curlinfo CURLINFO_CONTENT_LENGTH_DOWNLOAD, CDouble}-#{curlinfo CURLINFO_CONTENT_LENGTH_UPLOAD  , CDouble}-#{curlinfo CURLINFO_STARTTRANSFER_TIME     , CDouble}-#{curlinfo CURLINFO_CONTENT_TYPE           , CString}-#{curlinfo CURLINFO_REDIRECT_TIME          , CDouble}-#{curlinfo CURLINFO_REDIRECT_COUNT         , CLong  }-#{curlinfo CURLINFO_PRIVATE                , CString}-#{curlinfo CURLINFO_HTTP_CONNECTCODE       , CLong  }-#{curlinfo CURLINFO_HTTPAUTH_AVAIL         , CLong  }-#{curlinfo CURLINFO_PROXYAUTH_AVAIL        , CLong  }-#{curlinfo CURLINFO_OS_ERRNO               , CLong  }-#{curlinfo CURLINFO_NUM_CONNECTS           , CLong  }-#{curlinfo CURLINFO_SSL_ENGINES            , SList  }-#{curlinfo CURLINFO_COOKIELIST             , SList  }-#{curlinfo CURLINFO_LASTSOCKET             , CLong  }-#{curlinfo CURLINFO_FTP_ENTRY_PATH         , CString}-#{curlinfo CURLINFO_REDIRECT_URL           , CString}-#{curlinfo CURLINFO_PRIMARY_IP             , CString}-#{curlinfo CURLINFO_APPCONNECT_TIME        , CDouble}-#{curlinfo CURLINFO_CERTINFO               , CertI  }-#{curlinfo CURLINFO_CONDITION_UNMET        , CLong  }-#{curlinfo CURLINFO_RTSP_SESSION_ID        , CString}-#{curlinfo CURLINFO_RTSP_CLIENT_CSEQ       , CLong  }-#{curlinfo CURLINFO_RTSP_SERVER_CSEQ       , CLong  }-#{curlinfo CURLINFO_RTSP_CSEQ_RECV         , CLong  }-#{curlinfo CURLINFO_PRIMARY_PORT           , CLong  } |7210:----|-#{curlinfo CURLINFO_LOCAL_IP               , CString} |7210:----|-#{curlinfo CURLINFO_LOCAL_PORT             , CLong  } |7210:----|------------------------------------------------------------------------------------- *** CURLclosepol---------------------------------------------------------------------------------#{cconst CURLCLOSEPOLICY_NONE               , CLong}-#{cconst CURLCLOSEPOLICY_OLDEST             , CLong}-#{cconst CURLCLOSEPOLICY_LEAST_RECENTLY_USED, CLong}-#{cconst CURLCLOSEPOLICY_LEAST_TRAFFIC      , CLong}-#{cconst CURLCLOSEPOLICY_SLOWEST            , CLong}-#{cconst CURLCLOSEPOLICY_CALLBACK           , CLong}------------------------------------------------------------------------------------- *** CURLglobal---------------------------------------------------------------------------------#{cconst CURL_GLOBAL_SSL    , CLong}-#{cconst CURL_GLOBAL_WIN32  , CLong}-#{cconst CURL_GLOBAL_ALL    , CLong}-#{cconst CURL_GLOBAL_NOTHING, CLong}-#{cconst CURL_GLOBAL_DEFAULT, CLong}------------------------------------------------------------------------------------- ** Share interface---------------------------------------------------------------------------------newtype CCURL_lock_data = CCURL_lock_data CInt deriving (Eq, Show)--#{symbol CURL_LOCK_DATA_COOKIE     , CURL_lock_data}-#{symbol CURL_LOCK_DATA_DNS        , CURL_lock_data}-#{symbol CURL_LOCK_DATA_SSL_SESSION, CURL_lock_data}-#{symbol CURL_LOCK_DATA_CONNECT    , CURL_lock_data}- ----------------------------------------------------------------------------------newtype CCURL_lock_access = CCURL_lock_access CInt deriving (Eq, Show)--#{symbol CURL_LOCK_ACCESS_NONE  , CURL_lock_access}-#{symbol CURL_LOCK_ACCESS_SHARED, CURL_lock_access}-#{symbol CURL_LOCK_ACCESS_SINGLE, CURL_lock_access}-----------------------------------------------------------------------------------type CCURL_lock_function-  = Ptr CCURL -> CCURL_lock_data -> CCURL_lock_access -> Ptr () -> IO ()--foreign import ccall "wrapper"-  wrap_ccurl_lock_function-    :: CCURL_lock_function-    -> IO (FunPtr CCURL_lock_function)-----------------------------------------------------------------------------------type CCURL_unlock_function-  = Ptr CCURL -> CCURL_lock_data -> Ptr () -> IO ()--foreign import ccall "wrapper"-  wrap_ccurl_unlock_function-    :: CCURL_unlock_function-    -> IO (FunPtr CCURL_unlock_function)-----------------------------------------------------------------------------------data CCURLSH-- ---------------------------------------------------------------------------------newtype CCURLSHcode = CCURLSHcode CInt deriving (Eq, Show)--#{symbol CURLSHE_OK          , CURLSHcode}-#{symbol CURLSHE_BAD_OPTION  , CURLSHcode}-#{symbol CURLSHE_IN_USE      , CURLSHcode}-#{symbol CURLSHE_INVALID     , CURLSHcode}-#{symbol CURLSHE_NOMEM       , CURLSHcode}-#{symbol CURLSHE_NOT_BUILT_IN, CURLSHcode} |7230:----|-----------------------------------------------------------------------------------newtype CCURLSHoption'Lock    = CCURLSHoption'Lock    CInt deriving (Eq, Show)-newtype CCURLSHoption'FLOCK   = CCURLSHoption'FLOCK   CInt deriving (Eq, Show)-newtype CCURLSHoption'FUNLOCK = CCURLSHoption'FUNLOCK CInt deriving (Eq, Show)-newtype CCURLSHoption'UsrPtr  = CCURLSHoption'UsrPtr  CInt deriving (Eq, Show)--#define hsc_curlshopt(name, type) \-  printf("c" #name " :: CCURLSHoption'" #type "\n"); \-  printf("c" #name " =  CCURLSHoption'" #type " "); hsc_const(name);--#{curlshopt CURLSHOPT_SHARE     , Lock   }-#{curlshopt CURLSHOPT_UNSHARE   , Lock   }-#{curlshopt CURLSHOPT_LOCKFUNC  , FLOCK  }-#{curlshopt CURLSHOPT_UNLOCKFUNC, FUNLOCK}-#{curlshopt CURLSHOPT_USERDATA  , UsrPtr }-----------------------------------------------------------------------------------foreign import ccall "curl_share_init"-  ccurl_share_init-    :: IO (Ptr CCURLSH)-----------------------------------------------------------------------------------foreign import ccall "curl_share_setopt"-  ccurl_share_setopt'Lock   -    :: Ptr CCURLSH-    -> CCURLSHoption'Lock   -    -> CCURL_lock_data-    -> IO CCURLSHcode--foreign import ccall "curl_share_setopt"-  ccurl_share_setopt'FLOCK-    :: Ptr CCURLSH-    -> CCURLSHoption'FLOCK-    -> FunPtr CCURL_lock_function-    -> IO CCURLSHcode--foreign import ccall "curl_share_setopt"-  ccurl_share_setopt'FUNLOCK-    :: Ptr CCURLSH-    -> CCURLSHoption'FUNLOCK-    -> FunPtr CCURL_unlock_function-    -> IO CCURLSHcode--foreign import ccall "curl_share_setopt"-  ccurl_share_setopt'UsrPtr -    :: Ptr CCURLSH-    -> CCURLSHoption'UsrPtr -    -> Ptr ()-    -> IO CCURLSHcode-----------------------------------------------------------------------------------foreign import ccall "curl_share_cleanup"-  ccurl_share_cleanup-    :: Ptr CCURLSH-    -> IO CCURLSHcode------------------------------------------------------------------------------------- ** CURL_version_info---------------------------------------------------------------------------------newtype CCURLversion = CCURLversion CInt deriving (Eq, Show)--instance Storable CCURLversion where-  sizeOf _    = #{size    CURLversion}-  alignment _ = #{alignof CURLversion}-  poke _ _    = undefined-  peek ptr    = CCURLversion <$> peek (castPtr ptr)--#{symbol CURLVERSION_FIRST , CURLversion}-#{symbol CURLVERSION_SECOND, CURLversion}-#{symbol CURLVERSION_THIRD , CURLversion}-#{symbol CURLVERSION_FOURTH, CURLversion}-#{symbol CURLVERSION_NOW   , CURLversion}-----------------------------------------------------------------------------------data CCURL_version_info_data = CCURL_version_info_data-  { ccurl_version_info_data_age             :: CCURLversion-  , ccurl_version_info_data_version         :: Ptr CChar-  , ccurl_version_info_data_version_num     :: CUInt-  , ccurl_version_info_data_host            :: Ptr CChar-  , ccurl_version_info_data_features        :: CInt-  , ccurl_version_info_data_ssl_version     :: Ptr CChar-  , ccurl_version_info_data_ssl_version_num :: CLong-  , ccurl_version_info_data_libz_version    :: Ptr CChar-  , ccurl_version_info_data_protocols       :: Ptr (Ptr CChar)-  , ccurl_version_info_data_ares            :: Ptr CChar-  , ccurl_version_info_data_ares_num        :: CInt-  , ccurl_version_info_data_libidn          :: Ptr CChar-  , ccurl_version_info_data_iconv_ver_num   :: CInt-  , ccurl_version_info_data_libssh_version  :: Ptr CChar-  } deriving (Show)--instance Storable CCURL_version_info_data where-  sizeOf _    = #{size    curl_version_info_data}-  alignment _ = #{alignof curl_version_info_data}-  poke _ _    = undefined-  peek ptr    = CCURL_version_info_data-    <$> #{peek curl_version_info_data, age            } ptr-    <*> #{peek curl_version_info_data, version        } ptr-    <*> #{peek curl_version_info_data, version_num    } ptr-    <*> #{peek curl_version_info_data, host           } ptr-    <*> #{peek curl_version_info_data, features       } ptr-    <*> #{peek curl_version_info_data, ssl_version    } ptr-    <*> #{peek curl_version_info_data, ssl_version_num} ptr-    <*> #{peek curl_version_info_data, libz_version   } ptr-    <*> #{peek curl_version_info_data, protocols      } ptr-    <*> #{peek curl_version_info_data, ares           } ptr-    <*> #{peek curl_version_info_data, ares_num       } ptr-    <*> #{peek curl_version_info_data, libidn         } ptr-    <*> #{peek curl_version_info_data, iconv_ver_num  } ptr-    <*> #{peek curl_version_info_data, libssh_version } ptr-----------------------------------------------------------------------------------#{cconst CURL_VERSION_IPV6        , CInt}-#{cconst CURL_VERSION_KERBEROS4   , CInt}-#{cconst CURL_VERSION_SSL         , CInt}-#{cconst CURL_VERSION_LIBZ        , CInt}-#{cconst CURL_VERSION_NTLM        , CInt}-#{cconst CURL_VERSION_GSSNEGOTIATE, CInt}-#{cconst CURL_VERSION_DEBUG       , CInt}-#{cconst CURL_VERSION_ASYNCHDNS   , CInt}-#{cconst CURL_VERSION_SPNEGO      , CInt}-#{cconst CURL_VERSION_LARGEFILE   , CInt}-#{cconst CURL_VERSION_IDN         , CInt}-#{cconst CURL_VERSION_SSPI        , CInt}-#{cconst CURL_VERSION_CONV        , CInt}-#{cconst CURL_VERSION_CURLDEBUG   , CInt}-#{cconst CURL_VERSION_TLSAUTH_SRP , CInt} |7214:----|-#{cconst CURL_VERSION_NTLM_WB     , CInt} |7220:----|-- ----------------------------------------------------------------------------------- ** Functions---------------------------------------------------------------------------------foreign import ccall "curl_version_info"-  ccurl_version_info-    :: CCURLversion-    -> IO (Ptr CCURL_version_info_data)-----------------------------------------------------------------------------------foreign import ccall "curl_easy_strerror"-  ccurl_easy_strerror-    :: CCURLcode-    -> IO (Ptr CChar)-----------------------------------------------------------------------------------foreign import ccall "curl_share_strerror"-  ccurl_share_strerror-    :: CCURLSHcode-    -> IO (Ptr CChar)-----------------------------------------------------------------------------------foreign import ccall "curl_easy_pause"-  ccurl_easy_pause-    :: Ptr CCURL-    -> CInt-    -> IO CCURLcode- -#{cconst CURLPAUSE_RECV     , CInt}-#{cconst CURLPAUSE_RECV_CONT, CInt}-#{cconst CURLPAUSE_SEND     , CInt}-#{cconst CURLPAUSE_SEND_CONT, CInt}-#{cconst CURLPAUSE_ALL      , CInt}-#{cconst CURLPAUSE_CONT     , CInt}------------------------------------------------------------------------------------- * Definitions from \"curl/easy.h\"---------------------------------------------------------------------------------foreign import ccall "curl_easy_init"-  ccurl_easy_init-    :: IO (Ptr CCURL)-----------------------------------------------------------------------------------foreign import ccall "curl_easy_setopt"-  ccurl_easy_setopt'CLong-    :: Ptr CCURL-    -> CCURLoption'CLong-    -> CLong-    -> IO CCURLcode--foreign import ccall "curl_easy_setopt"-  ccurl_easy_setopt'Int64-    :: Ptr CCURL-    -> CCURLoption'Int64-    -> CCURL_off_t-    -> IO CCURLcode--foreign import ccall "curl_easy_setopt"-  ccurl_easy_setopt'CString-    :: Ptr CCURL-    -> CCURLoption'CString-    -> Ptr CChar-    -> IO CCURLcode--foreign import ccall "curl_easy_setopt"-  ccurl_easy_setopt'CFile-    :: Ptr CCURL-    -> CCURLoption'CFile-    -> Ptr CFile-    -> IO CCURLcode--foreign import ccall "curl_easy_setopt"-  ccurl_easy_setopt'SList-    :: Ptr CCURL-    -> CCURLoption'SList-    -> Ptr CCURL_slist-    -> IO CCURLcode--foreign import ccall "curl_easy_setopt"-  ccurl_easy_setopt'HTTPP-    :: Ptr CCURL-    -> CCURLoption'HTTPP-    -> Ptr CCURL_httppost-    -> IO CCURLcode--foreign import ccall "curl_easy_setopt"-  ccurl_easy_setopt'CURLSH-    :: Ptr CCURL-    -> CCURLoption'CURLSH-    -> Ptr CCURLSH-    -> IO CCURLcode--foreign import ccall "curl_easy_setopt"-  ccurl_easy_setopt'UsrPtr-    :: Ptr CCURL-    -> CCURLoption'UsrPtr-    -> Ptr ()-    -> IO CCURLcode--foreign import ccall "curl_easy_setopt"-  ccurl_easy_setopt'FunPtr-    :: Ptr CCURL-    -> CCURLoption'FunPtr-    -> FunPtr a-    -> IO CCURLcode--#define hsc_setFunPtrAlias(fn, un, ln) \-  printf("ccurl_easy_setopt'" #fn "\n"); \-  printf("  :: Ptr CCURL -> FunPtr CCURL_" #ln "_callback -> IO CCURLcode\n");\-  printf("ccurl_easy_setopt'" #fn " curl fptr\n"); \-  printf("  = ccurl_easy_setopt'FunPtr curl cCURLOPT_" #un "FUNCTION fptr");--#{setFunPtrAlias FWRITE      , WRITE      , write      }-#{setFunPtrAlias FREAD       , READ       , read       }-#{setFunPtrAlias FPROGRESS   , PROGRESS   , progress   }-#{setFunPtrAlias FHEADER     , HEADER     , write      }-#{setFunPtrAlias FDEBUG      , DEBUG      , debug      }-#{setFunPtrAlias FSSLCTX     , SSL_CTX_   , ssl_ctx    }-#{setFunPtrAlias FIOCTL      , IOCTL      , ioctl      }-#{setFunPtrAlias FCONVFROM   , CONV_FROM_NETWORK_, conv}-#{setFunPtrAlias FCONVTO     , CONV_TO_NETWORK_  , conv}-#{setFunPtrAlias FCONVUTF8   , CONV_FROM_UTF8_   , conv}-#{setFunPtrAlias FSOCKOPT    , SOCKOPT    , sockopt    }-#{setFunPtrAlias FOPENSOCKET , OPENSOCKET , opensocket }-#{setFunPtrAlias FSEEK       , SEEK       , seek       }-#{setFunPtrAlias FSSHKEY     , SSH_KEY    , sshkey     }-#{setFunPtrAlias FINTERLEAVE , INTERLEAVE , write      }-#{setFunPtrAlias FCHUNKBGN   , CHUNK_BGN_ , chunk_bgn  } |7210:----|-#{setFunPtrAlias FCHUNKEND   , CHUNK_END_ , chunk_end  } |7210:----|-#{setFunPtrAlias FFNMATCH    , FNMATCH_   , fnmatch    } |7210:----|-#{setFunPtrAlias FCLOSESOCKET, CLOSESOCKET, closesocket} |7217:----|-----------------------------------------------------------------------------------foreign import ccall "curl_easy_perform"-  ccurl_easy_perform-    :: Ptr CCURL-    -> IO CCURLcode-----------------------------------------------------------------------------------foreign import ccall "curl_easy_cleanup"-  ccurl_easy_cleanup-    :: Ptr CCURL-    -> IO ()-----------------------------------------------------------------------------------foreign import ccall "curl_easy_getinfo"-  ccurl_easy_getinfo'CString-    :: Ptr CCURL-    -> CCURLinfo'CString-    -> Ptr (Ptr CChar)-    -> IO CCURLcode--foreign import ccall "curl_easy_getinfo"-  ccurl_easy_getinfo'CDouble-    :: Ptr CCURL-    -> CCURLinfo'CDouble-    -> Ptr CDouble-    -> IO CCURLcode--foreign import ccall "curl_easy_getinfo"-  ccurl_easy_getinfo'CLong-    :: Ptr CCURL-    -> CCURLinfo'CLong-    -> Ptr CLong-    -> IO CCURLcode--foreign import ccall "curl_easy_getinfo"-  ccurl_easy_getinfo'SList-    :: Ptr CCURL-    -> CCURLinfo'SList-    -> Ptr (Ptr CCURL_slist)-    -> IO CCURLcode--foreign import ccall "curl_easy_getinfo"-  ccurl_easy_getinfo'CertI-    :: Ptr CCURL-    -> CCURLinfo'CertI-    -> Ptr (Ptr CCURL_certinfo)-    -> IO CCURLcode-----------------------------------------------------------------------------------foreign import ccall "curl_easy_duphandle"-  ccurl_easy_duphandle-    :: Ptr CCURL-    -> IO (Ptr CCURL)-----------------------------------------------------------------------------------foreign import ccall "curl_easy_reset"-  ccurl_easy_reset-    :: Ptr CCURL-    -> IO ()-----------------------------------------------------------------------------------foreign import ccall "curl_easy_recv"-  ccurl_easy_recv-    :: Ptr CCURL-    -> Ptr a-    -> CSize-    -> Ptr CSize-    -> IO CCURLcode-----------------------------------------------------------------------------------foreign import ccall "curl_easy_send"-  ccurl_easy_send-    :: Ptr CCURL-    -> Ptr a-    -> CSize-    -> Ptr CSize-    -> IO CCURLcode-- ----------------------------------------------------------------------------------- * Definitions from \"curl/multi.h\"----------------------------------------------------------------------------------- todo-
− src/Network/Curlhs/Core.hs
@@ -1,122 +0,0 @@----------------------------------------------------------------------------------- |--- Module      :  Network.Curlhs.Core--- Copyright   :  Copyright © 2012 Krzysztof Kardzis--- License     :  ISC License (MIT/BSD-style, see LICENSE file for details)--- --- Maintainer  :  Krzysztof Kardzis <kkardzis@gmail.com>--- Stability   :  experimental--- Portability :  non-portable--------- Module "Network.Curlhs.Core" provides a mid-level interface to @libcurl@.--- For a direct low-level bindings go to "Network.Curlhs.Base".------ API of this module follows the API of @libcurl@ as defined in version--- 7.25.0 of the library. But it also depends on the version of @libcurl@--- that is used during compilation of the @curlhs@ package. It is possible--- to use @curlhs@ with older versions of @libcurl@, just keep in mind--- that some features may not be available then.------ There is not much documentation here, maybe the future will change that,--- but for now please use the original @libcurl@ documentation. API provided--- here follows the original API, so this shouldn't be a big problem.--- Documentation about @libcurl@ and/or its particular functions may be--- found in manual pages, which are available among others at the @libcurl@--- project site (please refer to <http://curl.haxx.se/libcurl/>).--- --- Exposed API is still somewhat incomplete, but is usable.--- Work on the rest are in progress.------ Simple example:------ > import qualified Data.ByteString.Char8 as BS--- > import Data.IORef (newIORef, readIORef, atomicModifyIORef)--- > import Control.Exception (bracket)--- > import Network.Curlhs.Core--- > --- > curlGET :: BS.ByteString -> IO BS.ByteString--- > curlGET url = do--- >   buff <- newIORef BS.empty--- >   bracket (curl_easy_init) (curl_easy_cleanup) $ \curl -> do--- >     curl_easy_setopt curl--- >       [ CURLOPT_URL     url--- >       , CURLOPT_VERBOSE True--- >       , CURLOPT_WRITEFUNCTION $ Just (memwrite buff)--- >       ]--- >     curl_easy_perform curl--- >   readIORef buff--- > --- > memwrite buff newbs = atomicModifyIORef buff $ \oldbuff ->--- >   (BS.append oldbuff newbs, CURL_WRITEFUNC_OK)-------------------------------------------------------------------------------------module Network.Curlhs.Core (--  -- * Global interface--  -- ** Version info-    curl_version-  , curl_version_info-  , CURL_version_info_data (..)-  , CURL_version (..)--  -- ** Error codes-  -- |  More about error codes in libcurl on-  --    <http://curl.haxx.se/libcurl/c/libcurl-errors.html>-  , curl_easy_strerror-  , CURLcode (..)--  -- * Easy interface-  -- | See <http://curl.haxx.se/libcurl/c/libcurl-easy.html>-  --   for easy interface overview.--  -- ** Init, reset, cleanup-  , curl_easy_init-  , curl_easy_reset-  , curl_easy_cleanup-  , CURL--  -- ** Transfer-  , curl_easy_perform--  -- ** Get info-  , curl_easy_getinfo-  , CURLinfo (..)--  -- ** Set options-  , curl_easy_setopt-  , CURLoption (..)--  -- *** Callbacks-  , CURL_write_callback, CURL_write_response (..)-  , CURL_read_callback , CURL_read_response  (..)--  -- *** Constants-  , CURLproto     (..)-  , CURLproxy     (..)-  , CURLnetrc     (..)-  , CURLauth      (..)-  , CURLtlsauth   (..) |7214:----|-  , CURLredir     (..)-  , CURLhttpver   (..)-  , CURLftpcreate (..)-  , CURLftpauth   (..)-  , CURLftpssl    (..)-  , CURLftpmethod (..)-  , CURLrtspreq   (..)-  , CURLtimecond  (..)-  , CURLclosepol  (..)-  , CURLipresolve (..)-  , CURLusessl    (..)-  , CURLsslver    (..)-  , CURLsslopt    (..) |7250:----|-  , CURLgssapi    (..) |7220:----|-  , CURLsshauth   (..)--  ) where--import Network.Curlhs.Types-import Network.Curlhs.Easy-
− src/Network/Curlhs/Easy.hs
@@ -1,284 +0,0 @@----------------------------------------------------------------------------------- |--- Module      :  Network.Curlhs.Easy--- Copyright   :  Copyright © 2012 Krzysztof Kardzis--- License     :  ISC License (MIT/BSD-style, see LICENSE file for details)--- --- Maintainer  :  Krzysztof Kardzis <kkardzis@gmail.com>--- Stability   :  experimental--- Portability :  non-portable-------------------------------------------------------------------------------------module Network.Curlhs.Easy-  ( curl_version-  , curl_version_info-  , curl_easy_strerror-  , curl_easy_init-  , curl_easy_reset-  , curl_easy_cleanup-  , curl_easy_perform-  , curl_easy_getinfo-  , curl_easy_setopt-  ) where--import Foreign.Marshal.Alloc (alloca)-import Foreign.Marshal.Utils (toBool)-import Foreign.Storable      (peek, sizeOf)-import Foreign.C.String      (peekCString)-import Foreign.C.Types       (CChar, CInt)-import Foreign.Ptr           (Ptr, nullPtr, plusPtr)--import Data.Time.Clock.POSIX (posixSecondsToUTCTime)-import Data.Time.Clock       (UTCTime)-import Data.Maybe            (mapMaybe)-import Data.Bits             ((.&.))-import Data.IORef            (newIORef)--import Control.Applicative   ((<$>), (<*>))-import Control.Exception     (throwIO)--import Network.Curlhs.Errors-import Network.Curlhs.Setopt-import Network.Curlhs.Types-import Network.Curlhs.Base------------------------------------------------------------------------------------- | Returns the libcurl version string---   (<http://curl.haxx.se/libcurl/c/curl_version.html>).---------------------------------------------------------------------------------curl_version :: IO String-curl_version = ccurl_version >>= peekCString------------------------------------------------------------------------------------- | Returns run-time libcurl version info---   (<http://curl.haxx.se/libcurl/c/curl_version_info.html>).---------------------------------------------------------------------------------curl_version_info :: IO CURL_version_info_data-curl_version_info = ccurl_version_info cCURLVERSION_NOW >>= peek >>=-  \cval -> CURL_version_info_data-    <$> (peekCString      $ ccurl_version_info_data_version         cval)-    <*> (peekCIntegral    $ ccurl_version_info_data_version_num     cval)-    <*> (peekCString      $ ccurl_version_info_data_host            cval)-    <*> (peekCFeatures    $ ccurl_version_info_data_features        cval)-    <*> (peekCStringMaybe $ ccurl_version_info_data_ssl_version     cval)-    <*> (peekCIntegral    $ ccurl_version_info_data_ssl_version_num cval)-    <*> (peekCStringMaybe $ ccurl_version_info_data_libz_version    cval)-    <*> (peekCStringList  $ ccurl_version_info_data_protocols       cval)-    <*> (peekCStringMaybe $ ccurl_version_info_data_ares            cval)-    <*> (peekCIntegral    $ ccurl_version_info_data_ares_num        cval)-    <*> (peekCStringMaybe $ ccurl_version_info_data_libidn          cval)-    <*> (peekCIntegral    $ ccurl_version_info_data_iconv_ver_num   cval)-    <*> (peekCStringMaybe $ ccurl_version_info_data_libssh_version  cval)--peekCStringList :: Ptr (Ptr CChar) -> IO [String]-peekCStringList ptr = peek ptr >>= \cstring ->-  if (cstring == nullPtr) then return [] else do-    let size = sizeOf (undefined :: Ptr CChar)-    strings <- peekCStringList (plusPtr ptr size)-    string  <- peekCString cstring-    return (string : strings)--peekCStringMaybe :: Ptr CChar -> IO (Maybe String)-peekCStringMaybe ptr = if (ptr /= nullPtr)-  then Just <$> peekCString ptr-  else return Nothing--peekCIntegral :: (Num h, Integral c) => c -> IO h-peekCIntegral = return . fromIntegral--peekCFeatures :: CInt -> IO [CURL_version]-peekCFeatures mask =-  return $ mapMaybe (\(v, b) -> if (mask .&. b == 0) then Nothing else Just v)-    [ (CURL_VERSION_IPV6        , cCURL_VERSION_IPV6        )-    , (CURL_VERSION_KERBEROS4   , cCURL_VERSION_KERBEROS4   )-    , (CURL_VERSION_SSL         , cCURL_VERSION_SSL         )-    , (CURL_VERSION_LIBZ        , cCURL_VERSION_LIBZ        )-    , (CURL_VERSION_NTLM        , cCURL_VERSION_NTLM        )-    , (CURL_VERSION_GSSNEGOTIATE, cCURL_VERSION_GSSNEGOTIATE)-    , (CURL_VERSION_DEBUG       , cCURL_VERSION_DEBUG       )-    , (CURL_VERSION_ASYNCHDNS   , cCURL_VERSION_ASYNCHDNS   )-    , (CURL_VERSION_SPNEGO      , cCURL_VERSION_SPNEGO      )-    , (CURL_VERSION_LARGEFILE   , cCURL_VERSION_LARGEFILE   )-    , (CURL_VERSION_IDN         , cCURL_VERSION_IDN         )-    , (CURL_VERSION_SSPI        , cCURL_VERSION_SSPI        )-    , (CURL_VERSION_CONV        , cCURL_VERSION_CONV        )-    , (CURL_VERSION_CURLDEBUG   , cCURL_VERSION_CURLDEBUG   )-    , (CURL_VERSION_TLSAUTH_SRP , cCURL_VERSION_TLSAUTH_SRP ) |7214:----|-    , (CURL_VERSION_NTLM_WB     , cCURL_VERSION_NTLM_WB     ) |7220:----|-    ]------------------------------------------------------------------------------------- | Start a libcurl easy session---   (<http://curl.haxx.se/libcurl/c/curl_easy_init.html>).---------------------------------------------------------------------------------curl_easy_init :: IO CURL-curl_easy_init = ccurl_easy_init >>= \ccurl -> if (ccurl == nullPtr)-  then throwIO CURLE_FAILED_INIT-  else CURL ccurl-    <$> newIORef Nothing-    <*> newIORef Nothing------------------------------------------------------------------------------------- | Reset all options of a libcurl session handle---   (<http://curl.haxx.se/libcurl/c/curl_easy_reset.html>).---------------------------------------------------------------------------------curl_easy_reset :: CURL -> IO ()-curl_easy_reset curl =-  ccurl_easy_reset (ccurlptr curl) >> freeCallbacks curl------------------------------------------------------------------------------------- | End a libcurl easy session---   (<http://curl.haxx.se/libcurl/c/curl_easy_cleanup.html>).---------------------------------------------------------------------------------curl_easy_cleanup :: CURL -> IO ()-curl_easy_cleanup curl =-  ccurl_easy_cleanup (ccurlptr curl) >> freeCallbacks curl------------------------------------------------------------------------------------- | Perform a file transfer---   (<http://curl.haxx.se/libcurl/c/curl_easy_perform.html>).---------------------------------------------------------------------------------curl_easy_perform :: CURL -> IO ()-curl_easy_perform curl = withCODE $ ccurl_easy_perform (ccurlptr curl)------------------------------------------------------------------------------------- | Extract information from a curl handle---   (<http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html>).---------------------------------------------------------------------------------curl_easy_getinfo :: CURL -> IO CURLinfo-curl_easy_getinfo curl = let ccurl = ccurlptr curl in CURLinfo-  <$> getinfo'String   ccurl cCURLINFO_EFFECTIVE_URL-  <*> getinfo'RespCode ccurl cCURLINFO_RESPONSE_CODE-  <*> getinfo'RespCode ccurl cCURLINFO_HTTP_CONNECTCODE-  <*> getinfo'FileTime ccurl cCURLINFO_FILETIME-  <*> getinfo'Double   ccurl cCURLINFO_TOTAL_TIME-  <*> getinfo'Double   ccurl cCURLINFO_NAMELOOKUP_TIME-  <*> getinfo'Double   ccurl cCURLINFO_CONNECT_TIME-  <*> getinfo'Double   ccurl cCURLINFO_APPCONNECT_TIME-  <*> getinfo'Double   ccurl cCURLINFO_PRETRANSFER_TIME-  <*> getinfo'Double   ccurl cCURLINFO_STARTTRANSFER_TIME-  <*> getinfo'Double   ccurl cCURLINFO_REDIRECT_TIME-  <*> getinfo'Int      ccurl cCURLINFO_REDIRECT_COUNT-  <*> getinfo'MString  ccurl cCURLINFO_REDIRECT_URL-  <*> getinfo'Double   ccurl cCURLINFO_SIZE_UPLOAD-  <*> getinfo'Double   ccurl cCURLINFO_SIZE_DOWNLOAD-  <*> getinfo'Double   ccurl cCURLINFO_SPEED_DOWNLOAD-  <*> getinfo'Double   ccurl cCURLINFO_SPEED_UPLOAD-  <*> getinfo'Int      ccurl cCURLINFO_HEADER_SIZE-  <*> getinfo'Int      ccurl cCURLINFO_REQUEST_SIZE-  <*> getinfo'Int      ccurl cCURLINFO_SSL_VERIFYRESULT-  <*> getinfo'SList    ccurl cCURLINFO_SSL_ENGINES-  <*> getinfo'ContentL ccurl cCURLINFO_CONTENT_LENGTH_DOWNLOAD-  <*> getinfo'ContentL ccurl cCURLINFO_CONTENT_LENGTH_UPLOAD-  <*> getinfo'MString  ccurl cCURLINFO_CONTENT_TYPE---  <*> getinfo'String   ccurl cCURLINFO_PRIVATE-  <*> getinfo'CurlAuth ccurl cCURLINFO_HTTPAUTH_AVAIL-  <*> getinfo'CurlAuth ccurl cCURLINFO_PROXYAUTH_AVAIL-  <*> getinfo'Int      ccurl cCURLINFO_OS_ERRNO-  <*> getinfo'Int      ccurl cCURLINFO_NUM_CONNECTS-  <*> getinfo'String   ccurl cCURLINFO_PRIMARY_IP-  <*> getinfo'Int      ccurl cCURLINFO_PRIMARY_PORT-  <*> getinfo'String   ccurl cCURLINFO_LOCAL_IP-  <*> getinfo'Int      ccurl cCURLINFO_LOCAL_PORT-  <*> getinfo'SList    ccurl cCURLINFO_COOKIELIST-  <*> getinfo'Socket   ccurl cCURLINFO_LASTSOCKET-  <*> getinfo'MString  ccurl cCURLINFO_FTP_ENTRY_PATH-  <*> getinfo'CertInfo ccurl cCURLINFO_CERTINFO-  <*> getinfo'TimeCond ccurl cCURLINFO_CONDITION_UNMET-  <*> getinfo'MString  ccurl cCURLINFO_RTSP_SESSION_ID-  <*> getinfo'Int      ccurl cCURLINFO_RTSP_CLIENT_CSEQ-  <*> getinfo'Int      ccurl cCURLINFO_RTSP_SERVER_CSEQ-  <*> getinfo'Int      ccurl cCURLINFO_RTSP_CSEQ_RECV--getinfo'String :: Ptr CCURL -> CCURLinfo'CString -> IO String-getinfo'String ccurl cinfo = alloca $ \ptr -> do-  withCODE $ ccurl_easy_getinfo'CString ccurl cinfo ptr-  peek ptr >>= peekCString--getinfo'MString :: Ptr CCURL -> CCURLinfo'CString -> IO (Maybe String)-getinfo'MString ccurl cinfo = alloca $ \ptr -> do-  withCODE $ ccurl_easy_getinfo'CString ccurl cinfo ptr-  peek ptr >>= \csptr -> if (csptr /= nullPtr)-    then Just <$> peekCString csptr-    else return Nothing--getinfo'Double :: Ptr CCURL -> CCURLinfo'CDouble -> IO Double-getinfo'Double ccurl cinfo = alloca $ \ptr -> do-  withCODE $ ccurl_easy_getinfo'CDouble ccurl cinfo ptr-  realToFrac <$> peek ptr--getinfo'ContentL :: Ptr CCURL -> CCURLinfo'CDouble -> IO (Maybe Double)-getinfo'ContentL ccurl cinfo = getinfo'Double ccurl cinfo >>= \v ->-  return $ if (v == (-1)) then Nothing else Just v--getinfo'SList :: Ptr CCURL -> CCURLinfo'SList -> IO [String]-getinfo'SList ccurl cinfo = alloca $ \ptr -> do-  withCODE $ ccurl_easy_getinfo'SList ccurl cinfo ptr-  peek ptr >>= \slist -> do-    strings <- peek'CCURL_slist slist-    ccurl_slist_free_all slist-    return strings--getinfo'CertInfo :: Ptr CCURL -> CCURLinfo'CertI -> IO [[String]]-getinfo'CertInfo ccurl cinfo = alloca $ \ptr -> do-  withCODE $ ccurl_easy_getinfo'CertI ccurl cinfo ptr-  peek ptr >>= peek'CCURL_certinfo--getinfo'Int :: Ptr CCURL -> CCURLinfo'CLong -> IO Int-getinfo'Int ccurl cinfo = alloca $ \ptr -> do-  withCODE $ ccurl_easy_getinfo'CLong ccurl cinfo ptr-  fromIntegral <$> peek ptr--getinfo'RespCode :: Ptr CCURL -> CCURLinfo'CLong -> IO (Maybe Int)-getinfo'RespCode ccurl cinfo = getinfo'Int ccurl cinfo >>= \v ->-  return $ if (v == 0) then Nothing else Just v--getinfo'FileTime :: Ptr CCURL -> CCURLinfo'CLong -> IO (Maybe UTCTime)-getinfo'FileTime ccurl cinfo = getinfo'Int ccurl cinfo >>= \v ->-  return $ if (v == (-1) || v == 0) then Nothing-    else Just (posixSecondsToUTCTime $ realToFrac v)--getinfo'Socket :: Ptr CCURL -> CCURLinfo'CLong -> IO (Maybe Int)-getinfo'Socket ccurl cinfo = getinfo'Int ccurl cinfo >>= \v ->-  return $ if (v == (-1)) then Nothing else Just v--getinfo'TimeCond :: Ptr CCURL -> CCURLinfo'CLong -> IO Bool-getinfo'TimeCond ccurl cinfo = toBool <$> getinfo'Int ccurl cinfo--getinfo'CurlAuth :: Ptr CCURL -> CCURLinfo'CLong -> IO [CURLauth]-getinfo'CurlAuth ccurl cinfo = do-  mask <- fromIntegral <$> getinfo'Int ccurl cinfo-  return $ mapMaybe (\(v, b) -> if (mask .&. b == 0) then Nothing else Just v)-    [ (CURLAUTH_BASIC       , cCURLAUTH_BASIC       )-    , (CURLAUTH_DIGEST      , cCURLAUTH_DIGEST      )-    , (CURLAUTH_DIGEST_IE   , cCURLAUTH_DIGEST_IE   )-    , (CURLAUTH_GSSNEGOTIATE, cCURLAUTH_GSSNEGOTIATE)-    , (CURLAUTH_NTLM        , cCURLAUTH_NTLM        )-    , (CURLAUTH_NTLM_WB     , cCURLAUTH_NTLM_WB     ) |7220:----|-    ]---peek'CCURL_slist :: Ptr CCURL_slist -> IO [String]-peek'CCURL_slist ptr =-  if (ptr == nullPtr) then return [] else peek ptr >>= \slist -> do-    slist_head <- peekCString      $ ccurl_slist_data slist-    slist_tail <- peek'CCURL_slist $ ccurl_slist_next slist-    return (slist_head : slist_tail)--peek'CCURL_certinfo :: Ptr CCURL_certinfo -> IO [[String]]-peek'CCURL_certinfo ptr =-  if (ptr == nullPtr) then return [] else peek ptr >>= \certinfo -> do-    let numOfCerts = fromIntegral $ ccurl_certinfo_num_of_certs certinfo-    let size = sizeOf (undefined :: Ptr CCURL_slist)-    let ptr0 = ccurl_certinfo_certinfo certinfo-    let ptrs = map (\i -> plusPtr ptr0 (i * size)) [0 .. (numOfCerts - 1)]-    mapM (\sptr -> peek sptr >>= peek'CCURL_slist) ptrs-
− src/Network/Curlhs/Errors.hsc
@@ -1,216 +0,0 @@----------------------------------------------------------------------------------- |--- Module      :  Network.Curlhs.Errors--- Copyright   :  Copyright © 2012 Krzysztof Kardzis--- License     :  ISC License (MIT/BSD-style, see LICENSE file for details)--- --- Maintainer  :  Krzysztof Kardzis <kkardzis@gmail.com>--- Stability   :  experimental--- Portability :  non-portable-------------------------------------------------------------------------------------module Network.Curlhs.Errors-  ( curl_easy_strerror-  , withCODE-  ) where--import Data.ByteString   (ByteString, packCString)--import Control.Exception (throwIO)-import Control.Monad     (when)--import Network.Curlhs.Types-import Network.Curlhs.Base-----------------------------------------------------------------------------------withCODE :: IO CCURLcode -> IO ()-withCODE action =-  action >>= \code -> when (code /= cCURLE_OK) (throwIO (fromCCURLcode code))------------------------------------------------------------------------------------- | Returns a string describing error code---   (<http://curl.haxx.se/libcurl/c/curl_easy_strerror.html>).---------------------------------------------------------------------------------curl_easy_strerror :: CURLcode -> IO ByteString-curl_easy_strerror code =-  ccurl_easy_strerror (fromCURLcode code) >>= packCString-----------------------------------------------------------------------------------#{let curlcode code = #code " -> c" #code}--fromCURLcode :: CURLcode -> CCURLcode-fromCURLcode x = case x of-  #{curlcode CURLE_OK                      }-  #{curlcode CURLE_UNSUPPORTED_PROTOCOL    }-  #{curlcode CURLE_FAILED_INIT             }-  #{curlcode CURLE_URL_MALFORMAT           }-  #{curlcode CURLE_NOT_BUILT_IN            } |7215:----|-  #{curlcode CURLE_COULDNT_RESOLVE_PROXY   }-  #{curlcode CURLE_COULDNT_RESOLVE_HOST    }-  #{curlcode CURLE_COULDNT_CONNECT         }-  #{curlcode CURLE_FTP_WEIRD_SERVER_REPLY  }-  #{curlcode CURLE_REMOTE_ACCESS_DENIED    }-  #{curlcode CURLE_FTP_ACCEPT_FAILED       } |7240:----|-  #{curlcode CURLE_FTP_WEIRD_PASS_REPLY    }-  #{curlcode CURLE_FTP_ACCEPT_TIMEOUT      } |7240:----|-  #{curlcode CURLE_FTP_WEIRD_PASV_REPLY    }-  #{curlcode CURLE_FTP_WEIRD_227_FORMAT    }-  #{curlcode CURLE_FTP_CANT_GET_HOST       }-  #{curlcode CURLE_FTP_COULDNT_SET_TYPE    }-  #{curlcode CURLE_PARTIAL_FILE            }-  #{curlcode CURLE_FTP_COULDNT_RETR_FILE   }-  #{curlcode CURLE_QUOTE_ERROR             }-  #{curlcode CURLE_HTTP_RETURNED_ERROR     }-  #{curlcode CURLE_WRITE_ERROR             }-  #{curlcode CURLE_UPLOAD_FAILED           }-  #{curlcode CURLE_READ_ERROR              }-  #{curlcode CURLE_OUT_OF_MEMORY           }-  #{curlcode CURLE_OPERATION_TIMEDOUT      }-  #{curlcode CURLE_FTP_PORT_FAILED         }-  #{curlcode CURLE_FTP_COULDNT_USE_REST    }-  #{curlcode CURLE_RANGE_ERROR             }-  #{curlcode CURLE_HTTP_POST_ERROR         }-  #{curlcode CURLE_SSL_CONNECT_ERROR       }-  #{curlcode CURLE_BAD_DOWNLOAD_RESUME     }-  #{curlcode CURLE_FILE_COULDNT_READ_FILE  }-  #{curlcode CURLE_LDAP_CANNOT_BIND        }-  #{curlcode CURLE_LDAP_SEARCH_FAILED      }-  #{curlcode CURLE_FUNCTION_NOT_FOUND      }-  #{curlcode CURLE_ABORTED_BY_CALLBACK     }-  #{curlcode CURLE_BAD_FUNCTION_ARGUMENT   }-  #{curlcode CURLE_INTERFACE_FAILED        }-  #{curlcode CURLE_TOO_MANY_REDIRECTS      }-  #{curlcode CURLE_UNKNOWN_TELNET_OPTION   } |----:7214|-  #{curlcode CURLE_UNKNOWN_OPTION          } |7215:----|-  #{curlcode CURLE_TELNET_OPTION_SYNTAX    }-  #{curlcode CURLE_PEER_FAILED_VERIFICATION}-  #{curlcode CURLE_GOT_NOTHING             }-  #{curlcode CURLE_SSL_ENGINE_NOTFOUND     }-  #{curlcode CURLE_SSL_ENGINE_SETFAILED    }-  #{curlcode CURLE_SEND_ERROR              }-  #{curlcode CURLE_RECV_ERROR              }-  #{curlcode CURLE_SSL_CERTPROBLEM         }-  #{curlcode CURLE_SSL_CIPHER              }-  #{curlcode CURLE_SSL_CACERT              }-  #{curlcode CURLE_BAD_CONTENT_ENCODING    }-  #{curlcode CURLE_LDAP_INVALID_URL        }-  #{curlcode CURLE_FILESIZE_EXCEEDED       }-  #{curlcode CURLE_USE_SSL_FAILED          }-  #{curlcode CURLE_SEND_FAIL_REWIND        }-  #{curlcode CURLE_SSL_ENGINE_INITFAILED   }-  #{curlcode CURLE_LOGIN_DENIED            }-  #{curlcode CURLE_TFTP_NOTFOUND           }-  #{curlcode CURLE_TFTP_PERM               }-  #{curlcode CURLE_REMOTE_DISK_FULL        }-  #{curlcode CURLE_TFTP_ILLEGAL            }-  #{curlcode CURLE_TFTP_UNKNOWNID          }-  #{curlcode CURLE_REMOTE_FILE_EXISTS      }-  #{curlcode CURLE_TFTP_NOSUCHUSER         }-  #{curlcode CURLE_CONV_FAILED             }-  #{curlcode CURLE_CONV_REQD               }-  #{curlcode CURLE_SSL_CACERT_BADFILE      }-  #{curlcode CURLE_REMOTE_FILE_NOT_FOUND   }-  #{curlcode CURLE_SSH                     }-  #{curlcode CURLE_SSL_SHUTDOWN_FAILED     }-  #{curlcode CURLE_AGAIN                   }-  #{curlcode CURLE_SSL_CRL_BADFILE         }-  #{curlcode CURLE_SSL_ISSUER_ERROR        }-  #{curlcode CURLE_FTP_PRET_FAILED         }-  #{curlcode CURLE_RTSP_CSEQ_ERROR         }-  #{curlcode CURLE_RTSP_SESSION_ERROR      }-  #{curlcode CURLE_FTP_BAD_FILE_LIST       } |7210:----|-  #{curlcode CURLE_CHUNK_FAILED            } |7210:----|-----------------------------------------------------------------------------------#{let ccurlcode code = "| x == c" #code " = " #code}--fromCCURLcode :: CCURLcode -> CURLcode-fromCCURLcode x-  #{ccurlcode CURLE_OK                      }-  #{ccurlcode CURLE_UNSUPPORTED_PROTOCOL    }-  #{ccurlcode CURLE_FAILED_INIT             }-  #{ccurlcode CURLE_URL_MALFORMAT           }-  #{ccurlcode CURLE_NOT_BUILT_IN            } |7215:----|-  #{ccurlcode CURLE_COULDNT_RESOLVE_PROXY   }-  #{ccurlcode CURLE_COULDNT_RESOLVE_HOST    }-  #{ccurlcode CURLE_COULDNT_CONNECT         }-  #{ccurlcode CURLE_FTP_WEIRD_SERVER_REPLY  }-  #{ccurlcode CURLE_REMOTE_ACCESS_DENIED    }-  #{ccurlcode CURLE_FTP_ACCEPT_FAILED       } |7240:----|-  #{ccurlcode CURLE_FTP_WEIRD_PASS_REPLY    }-  #{ccurlcode CURLE_FTP_ACCEPT_TIMEOUT      } |7240:----|-  #{ccurlcode CURLE_FTP_WEIRD_PASV_REPLY    }-  #{ccurlcode CURLE_FTP_WEIRD_227_FORMAT    }-  #{ccurlcode CURLE_FTP_CANT_GET_HOST       }-  #{ccurlcode CURLE_FTP_COULDNT_SET_TYPE    }-  #{ccurlcode CURLE_PARTIAL_FILE            }-  #{ccurlcode CURLE_FTP_COULDNT_RETR_FILE   }-  #{ccurlcode CURLE_QUOTE_ERROR             }-  #{ccurlcode CURLE_HTTP_RETURNED_ERROR     }-  #{ccurlcode CURLE_WRITE_ERROR             }-  #{ccurlcode CURLE_UPLOAD_FAILED           }-  #{ccurlcode CURLE_READ_ERROR              }-  #{ccurlcode CURLE_OUT_OF_MEMORY           }-  #{ccurlcode CURLE_OPERATION_TIMEDOUT      }-  #{ccurlcode CURLE_FTP_PORT_FAILED         }-  #{ccurlcode CURLE_FTP_COULDNT_USE_REST    }-  #{ccurlcode CURLE_RANGE_ERROR             }-  #{ccurlcode CURLE_HTTP_POST_ERROR         }-  #{ccurlcode CURLE_SSL_CONNECT_ERROR       }-  #{ccurlcode CURLE_BAD_DOWNLOAD_RESUME     }-  #{ccurlcode CURLE_FILE_COULDNT_READ_FILE  }-  #{ccurlcode CURLE_LDAP_CANNOT_BIND        }-  #{ccurlcode CURLE_LDAP_SEARCH_FAILED      }-  #{ccurlcode CURLE_FUNCTION_NOT_FOUND      }-  #{ccurlcode CURLE_ABORTED_BY_CALLBACK     }-  #{ccurlcode CURLE_BAD_FUNCTION_ARGUMENT   }-  #{ccurlcode CURLE_INTERFACE_FAILED        }-  #{ccurlcode CURLE_TOO_MANY_REDIRECTS      }-  #{ccurlcode CURLE_UNKNOWN_TELNET_OPTION   } |----:7214|-  #{ccurlcode CURLE_UNKNOWN_OPTION          } |7215:----|-  #{ccurlcode CURLE_TELNET_OPTION_SYNTAX    }-  #{ccurlcode CURLE_PEER_FAILED_VERIFICATION}-  #{ccurlcode CURLE_GOT_NOTHING             }-  #{ccurlcode CURLE_SSL_ENGINE_NOTFOUND     }-  #{ccurlcode CURLE_SSL_ENGINE_SETFAILED    }-  #{ccurlcode CURLE_SEND_ERROR              }-  #{ccurlcode CURLE_RECV_ERROR              }-  #{ccurlcode CURLE_SSL_CERTPROBLEM         }-  #{ccurlcode CURLE_SSL_CIPHER              }-  #{ccurlcode CURLE_SSL_CACERT              }-  #{ccurlcode CURLE_BAD_CONTENT_ENCODING    }-  #{ccurlcode CURLE_LDAP_INVALID_URL        }-  #{ccurlcode CURLE_FILESIZE_EXCEEDED       }-  #{ccurlcode CURLE_USE_SSL_FAILED          }-  #{ccurlcode CURLE_SEND_FAIL_REWIND        }-  #{ccurlcode CURLE_SSL_ENGINE_INITFAILED   }-  #{ccurlcode CURLE_LOGIN_DENIED            }-  #{ccurlcode CURLE_TFTP_NOTFOUND           }-  #{ccurlcode CURLE_TFTP_PERM               }-  #{ccurlcode CURLE_REMOTE_DISK_FULL        }-  #{ccurlcode CURLE_TFTP_ILLEGAL            }-  #{ccurlcode CURLE_TFTP_UNKNOWNID          }-  #{ccurlcode CURLE_REMOTE_FILE_EXISTS      }-  #{ccurlcode CURLE_TFTP_NOSUCHUSER         }-  #{ccurlcode CURLE_CONV_FAILED             }-  #{ccurlcode CURLE_CONV_REQD               }-  #{ccurlcode CURLE_SSL_CACERT_BADFILE      }-  #{ccurlcode CURLE_REMOTE_FILE_NOT_FOUND   }-  #{ccurlcode CURLE_SSH                     }-  #{ccurlcode CURLE_SSL_SHUTDOWN_FAILED     }-  #{ccurlcode CURLE_AGAIN                   }-  #{ccurlcode CURLE_SSL_CRL_BADFILE         }-  #{ccurlcode CURLE_SSL_ISSUER_ERROR        }-  #{ccurlcode CURLE_FTP_PRET_FAILED         }-  #{ccurlcode CURLE_RTSP_CSEQ_ERROR         }-  #{ccurlcode CURLE_RTSP_SESSION_ERROR      }-  #{ccurlcode CURLE_FTP_BAD_FILE_LIST       } |7210:----|-  #{ccurlcode CURLE_CHUNK_FAILED            } |7210:----|-  | otherwise = error "unknown CURLcode"--
− src/Network/Curlhs/Setopt.hsc
@@ -1,513 +0,0 @@----------------------------------------------------------------------------------- |--- Module      :  Network.Curlhs.Setopt--- Copyright   :  Copyright © 2012 Krzysztof Kardzis--- License     :  ISC License (MIT/BSD-style, see LICENSE file for details)--- --- Maintainer  :  Krzysztof Kardzis <kkardzis@gmail.com>--- Stability   :  experimental--- Portability :  non-portable-------------------------------------------------------------------------------------module Network.Curlhs.Setopt-  ( curl_easy_setopt-  , freeCallbacks-  ) where--import Foreign.Marshal.Utils (copyBytes, fromBool)-import Foreign.C.Types       (CLong)-import Foreign.Ptr           (FunPtr, nullFunPtr, freeHaskellFunPtr)--import Data.Time.Clock.POSIX (utcTimeToPOSIXSeconds)-import Data.Time.Clock       (UTCTime)-import Data.Bits             ((.|.))-import Data.List             (foldl')-import Data.IORef            (IORef, atomicModifyIORef)--import qualified Data.ByteString as BS-import Data.ByteString.Unsafe (unsafeUseAsCStringLen)-import Data.ByteString        (ByteString, useAsCString, packCStringLen)--import Network.Curlhs.Errors-import Network.Curlhs.Types-import Network.Curlhs.Base-----------------------------------------------------------------------------------freeCallbacks :: CURL -> IO ()-freeCallbacks curl = do-  keepCallback (cb_write curl) Nothing-  keepCallback (cb_read  curl) Nothing--keepCallback :: IORef (Maybe (FunPtr a)) -> Maybe (FunPtr a) -> IO ()-keepCallback r mf =-  atomicModifyIORef r (\v -> (mf, v)) >>= maybe (return ()) freeHaskellFunPtr--makeCallback :: Maybe cb -> IORef (Maybe (FunPtr a))-             -> (FunPtr a -> IO CCURLcode) -> (cb -> IO (FunPtr a)) -> IO ()-makeCallback (Just cb) ref setcb wrapcb = withCODE $ do-  fptr <- wrapcb cb-  code <- setcb fptr-  if (code == cCURLE_OK)-    then keepCallback ref (Just fptr)-    else freeHaskellFunPtr fptr-  return code-makeCallback Nothing ref setcb _ = withCODE $ do-  code <- setcb nullFunPtr-  keepCallback ref Nothing-  return code-----------------------------------------------------------------------------------#{let setopt opt, fun = #opt " x -> " #fun " c" #opt " x"}------------------------------------------------------------------------------------ | Set options for a curl easy handle---   (<http://curl.haxx.se/libcurl/c/curl_easy_setopt.html>).---------------------------------------------------------------------------------curl_easy_setopt :: CURL -> [CURLoption] -> IO ()-curl_easy_setopt curl opts = flip mapM_ opts $ \opt -> case opt of--  ---- CALLBACK OPTIONS --------------------------------------------------------  CURLOPT_WRITEFUNCTION f -> so'FWRITE curl f-  CURLOPT_READFUNCTION  f -> so'FREAD  curl f--  ---- BEHAVIOR OPTIONS --------------------------------------------------------  #{setopt CURLOPT_VERBOSE                , bool     }-  #{setopt CURLOPT_HEADER                 , bool     }-  #{setopt CURLOPT_NOPROGRESS             , bool     }-  #{setopt CURLOPT_NOSIGNAL               , bool     }-  #{setopt CURLOPT_WILDCARDMATCH          , bool     } |7210:----|--  ---- ERROR OPTIONS -----------------------------------------------------------  -- CURLOPT_ERRORBUFFER-  -- CURLOPT_STDERR-  #{setopt CURLOPT_FAILONERROR            , bool     }--  ---- NETWORK OPTIONS ---------------------------------------------------------  #{setopt CURLOPT_URL                    , string   }-  #{setopt CURLOPT_PROTOCOLS              , enum     }-  #{setopt CURLOPT_REDIR_PROTOCOLS        , enum     }-  #{setopt CURLOPT_PROXY                  , string   }-  #{setopt CURLOPT_PROXYPORT              , int      }-  #{setopt CURLOPT_PROXYTYPE              , enum     }-  #{setopt CURLOPT_NOPROXY                , string   }-  #{setopt CURLOPT_HTTPPROXYTUNNEL        , bool     }-  #{setopt CURLOPT_SOCKS5_GSSAPI_SERVICE  , string   }-  #{setopt CURLOPT_SOCKS5_GSSAPI_NEC      , bool     }-  #{setopt CURLOPT_INTERFACE              , string   }-  #{setopt CURLOPT_LOCALPORT              , int      }-  #{setopt CURLOPT_LOCALPORTRANGE         , int      }-  #{setopt CURLOPT_DNS_CACHE_TIMEOUT      , int      }-  #{setopt CURLOPT_DNS_USE_GLOBAL_CACHE   , bool     }-  #{setopt CURLOPT_BUFFERSIZE             , int      }-  #{setopt CURLOPT_PORT                   , int      }-  #{setopt CURLOPT_TCP_NODELAY            , bool     }-  #{setopt CURLOPT_ADDRESS_SCOPE          , int      }-  #{setopt CURLOPT_TCP_KEEPALIVE          , bool     } |7250:----|-  #{setopt CURLOPT_TCP_KEEPIDLE           , int      } |7250:----|-  #{setopt CURLOPT_TCP_KEEPINTVL          , int      } |7250:----|--  ---- NAMES and PASSWORDS OPTIONS (Authentication) ----------------------------  #{setopt CURLOPT_NETRC                  , enum     }-  #{setopt CURLOPT_NETRC_FILE             , string   }-  #{setopt CURLOPT_USERPWD                , string   }-  #{setopt CURLOPT_PROXYUSERPWD           , string   }-  #{setopt CURLOPT_USERNAME               , string   }-  #{setopt CURLOPT_PASSWORD               , string   }-  #{setopt CURLOPT_PROXYUSERNAME          , string   }-  #{setopt CURLOPT_PROXYPASSWORD          , string   }-  #{setopt CURLOPT_HTTPAUTH               , enum     }-  #{setopt CURLOPT_TLSAUTH_TYPE           , string   } |7214:----|-  #{setopt CURLOPT_TLSAUTH_USERNAME       , string   } |7214:----|-  #{setopt CURLOPT_TLSAUTH_PASSWORD       , string   } |7214:----|-  #{setopt CURLOPT_PROXYAUTH              , enum     }--  ---- HTTP OPTIONS ------------------------------------------------------------  #{setopt CURLOPT_AUTOREFERER            , bool     }-  #{setopt CURLOPT_ENCODING               , string   } |----:7215|-  #{setopt CURLOPT_ACCEPT_ENCODING        , string   } |7216:----|-  #{setopt CURLOPT_TRANSFER_ENCODING      , bool     } |7216:----|-  #{setopt CURLOPT_FOLLOWLOCATION         , bool     }-  #{setopt CURLOPT_UNRESTRICTED_AUTH      , bool     }-  #{setopt CURLOPT_MAXREDIRS              , int      }-  #{setopt CURLOPT_POSTREDIR              , enum     }-  #{setopt CURLOPT_PUT                    , bool     }-  #{setopt CURLOPT_POST                   , bool     }-  -- #{setopt CURLOPT_POSTFIELDS             , buffer   }-  #{setopt CURLOPT_POSTFIELDSIZE          , int      }-  #{setopt CURLOPT_POSTFIELDSIZE_LARGE    , int64    }-  #{setopt CURLOPT_COPYPOSTFIELDS         , string   }-  -- CURLOPT_HTTPPOST-  #{setopt CURLOPT_REFERER                , string   }-  #{setopt CURLOPT_USERAGENT              , string   }-  -- #{setopt CURLOPT_HTTPHEADER             , slist    }-  -- #{setopt CURLOPT_HTTP200ALIASES         , slist    }-  #{setopt CURLOPT_COOKIE                 , string   }-  #{setopt CURLOPT_COOKIEFILE             , string   }-  #{setopt CURLOPT_COOKIEJAR              , string   }-  #{setopt CURLOPT_COOKIESESSION          , bool     }-  #{setopt CURLOPT_COOKIELIST             , string   }-  #{setopt CURLOPT_HTTPGET                , bool     }-  #{setopt CURLOPT_HTTP_VERSION           , enum     }-  #{setopt CURLOPT_IGNORE_CONTENT_LENGTH  , bool     }-  #{setopt CURLOPT_HTTP_CONTENT_DECODING  , bool     }-  #{setopt CURLOPT_HTTP_TRANSFER_DECODING , bool     }--  ---- SMTP OPTIONS ------------------------------------------------------------  #{setopt CURLOPT_MAIL_FROM              , string   }-  -- #{setopt CURLOPT_MAIL_RCTP              , slist    }-  #{setopt CURLOPT_MAIL_AUTH              , string   } |7250:----|--  ---- TFTP OPTIONS ------------------------------------------------------------  #{setopt CURLOPT_TFTP_BLKSIZE           , int      }--  ---- FTP OPTIONS -------------------------------------------------------------  #{setopt CURLOPT_FTPPORT                , string   }-  -- #{setopt CURLOPT_QUOTE                  , slist    }-  -- #{setopt CURLOPT_POSTQUOTE              , slist    }-  -- #{setopt CURLOPT_PREQUOTE               , slist    }-  #{setopt CURLOPT_DIRLISTONLY            , bool     }-  #{setopt CURLOPT_APPEND                 , bool     }-  #{setopt CURLOPT_FTP_USE_EPRT           , bool     }-  #{setopt CURLOPT_FTP_USE_EPSV           , bool     }-  #{setopt CURLOPT_FTP_USE_PRET           , bool     }-  #{setopt CURLOPT_FTP_CREATE_MISSING_DIRS, enum     }-  #{setopt CURLOPT_FTP_RESPONSE_TIMEOUT   , int      }-  #{setopt CURLOPT_FTP_ALTERNATIVE_TO_USER, string   }-  #{setopt CURLOPT_FTP_SKIP_PASV_IP       , bool     }-  #{setopt CURLOPT_FTPSSLAUTH             , enum     }-  #{setopt CURLOPT_FTP_SSL_CCC            , enum     }-  #{setopt CURLOPT_FTP_ACCOUNT            , string   }-  #{setopt CURLOPT_FTP_FILEMETHOD         , enum     }--  ---- RTSP OPTIONS ------------------------------------------------------------  #{setopt CURLOPT_RTSP_REQUEST           , enum     }-  #{setopt CURLOPT_RTSP_SESSION_ID        , string   }-  #{setopt CURLOPT_RTSP_STREAM_URI        , string   }-  #{setopt CURLOPT_RTSP_TRANSPORT         , string   }-  -- #{setopt CURLOPT_RTSP_HEADER            , slist    }-  #{setopt CURLOPT_RTSP_CLIENT_CSEQ       , int      }-  #{setopt CURLOPT_RTSP_SERVER_CSEQ       , int      }--  ---- PROTOCOL OPTIONS --------------------------------------------------------  #{setopt CURLOPT_TRANSFERTEXT           , bool     }-  #{setopt CURLOPT_PROXY_TRANSFER_MODE    , bool     }-  #{setopt CURLOPT_CRLF                   , bool     }-  #{setopt CURLOPT_RANGE                  , string   }-  #{setopt CURLOPT_RESUME_FROM            , int      }-  #{setopt CURLOPT_RESUME_FROM_LARGE      , int64    }-  #{setopt CURLOPT_CUSTOMREQUEST          , string   }-  #{setopt CURLOPT_FILETIME               , bool     }-  #{setopt CURLOPT_NOBODY                 , bool     }-  #{setopt CURLOPT_INFILESIZE             , int      }-  #{setopt CURLOPT_INFILESIZE_LARGE       , int64    }-  #{setopt CURLOPT_UPLOAD                 , bool     }-  #{setopt CURLOPT_MAXFILESIZE            , int      }-  #{setopt CURLOPT_MAXFILESIZE_LARGE      , int64    }-  #{setopt CURLOPT_TIMECONDITION          , enum     }-  #{setopt CURLOPT_TIMEVALUE              , time     }--  ---- CONNECTION OPTIONS ------------------------------------------------------  #{setopt CURLOPT_TIMEOUT                , int      }-  #{setopt CURLOPT_TIMEOUT_MS             , int      }-  #{setopt CURLOPT_LOW_SPEED_LIMIT        , int      }-  #{setopt CURLOPT_LOW_SPEED_TIME         , int      }-  #{setopt CURLOPT_MAX_SEND_SPEED_LARGE   , int64    }-  #{setopt CURLOPT_MAX_RECV_SPEED_LARGE   , int64    }-  #{setopt CURLOPT_MAXCONNECTS            , int      }-  #{setopt CURLOPT_CLOSEPOLICY            , enum     }-  #{setopt CURLOPT_FRESH_CONNECT          , bool     }-  #{setopt CURLOPT_FORBID_REUSE           , bool     }-  #{setopt CURLOPT_CONNECTTIMEOUT         , int      }-  #{setopt CURLOPT_CONNECTTIMEOUT_MS      , int      }-  #{setopt CURLOPT_IPRESOLVE              , enum     }-  #{setopt CURLOPT_CONNECT_ONLY           , bool     }-  #{setopt CURLOPT_USE_SSL                , enum     }-  -- #{setopt CURLOPT_RESOLVE                , slist    } |7213:----|-  #{setopt CURLOPT_DNS_SERVERS            , string   } |7240:----|-  #{setopt CURLOPT_ACCEPTTIMEOUT_MS       , int      } |7240:----|--  ---- SSL and SECURITY OPTIONS ------------------------------------------------  #{setopt CURLOPT_SSLCERT                , string   }-  #{setopt CURLOPT_SSLCERTTYPE            , string   }-  #{setopt CURLOPT_SSLKEY                 , string   }-  #{setopt CURLOPT_SSLKEYTYPE             , string   }-  #{setopt CURLOPT_KEYPASSWD              , string   }-  #{setopt CURLOPT_SSLENGINE              , string   }-  #{setopt CURLOPT_SSLENGINE_DEFAULT      , bool     }-  #{setopt CURLOPT_SSLVERSION             , enum     }-  #{setopt CURLOPT_SSL_VERIFYPEER         , bool     }-  #{setopt CURLOPT_CAINFO                 , string   }-  #{setopt CURLOPT_ISSUERCERT             , string   }-  #{setopt CURLOPT_CAPATH                 , string   }-  #{setopt CURLOPT_CRLFILE                , string   }-  #{setopt CURLOPT_SSL_VERIFYHOST         , int      }-  #{setopt CURLOPT_CERTINFO               , bool     }-  #{setopt CURLOPT_RANDOM_FILE            , string   }-  #{setopt CURLOPT_EGDSOCKET              , string   }-  #{setopt CURLOPT_SSL_CIPHER_LIST        , string   }-  #{setopt CURLOPT_SSL_SESSIONID_CACHE    , bool     }-  #{setopt CURLOPT_SSL_OPTIONS            , enum     } |7250:----|-  #{setopt CURLOPT_KRBLEVEL               , string   }-  #{setopt CURLOPT_GSSAPI_DELEGATION      , enum     } |7220:----|--  ---- SSH OPTIONS -------------------------------------------------------------  #{setopt CURLOPT_SSH_AUTH_TYPES         , enum     }-  #{setopt CURLOPT_SSH_HOST_PUBLIC_KEY_MD5, string   }-  #{setopt CURLOPT_SSH_PUBLIC_KEYFILE     , string   }-  #{setopt CURLOPT_SSH_PRIVATE_KEYFILE    , string   }-  #{setopt CURLOPT_SSH_KNOWNHOSTS         , string   }-  -- CURLOPT_SSH_KEYFUNCTION-  -- CURLOPT_SSH_KEYDATA--  ---- OTHER OPTIONS -----------------------------------------------------------  -- CURLOPT_PRIVATE-  -- CURLOPT_SHARE-  #{setopt CURLOPT_NEW_FILE_PERMS         , int      }-  #{setopt CURLOPT_NEW_DIRECTORY_PERMS    , int      }--  ---- TELNET OPTIONS ----------------------------------------------------------  -- #{setopt CURLOPT_TELNETOPTIONS          , slist    }--  ------------------------------------------------------------------------------  where-    string copt s = setopt'CString curl copt s-    int64  copt x = setopt'Int64   curl copt (fromIntegral   x)-    int    copt x = setopt'CLong   curl copt (fromIntegral   x)-    bool   copt x = setopt'CLong   curl copt (fromBool       x)-    time   copt x = setopt'CLong   curl copt (fromUTCTime    x)-    enum   copt x = setopt'CLong   curl copt (fromCURLenum   x)------------------------------------------------------------------------------------setopt'CString :: CURL -> CCURLoption'CString -> ByteString -> IO ()-setopt'CString curl copt val = useAsCString val $ \ptr ->-  withCODE $ ccurl_easy_setopt'CString (ccurlptr curl) copt ptr--setopt'Int64 :: CURL -> CCURLoption'Int64 -> CCURL_off_t -> IO ()-setopt'Int64 curl copt cval =-  withCODE $ ccurl_easy_setopt'Int64 (ccurlptr curl) copt cval--setopt'CLong :: CURL -> CCURLoption'CLong -> CLong -> IO ()-setopt'CLong curl copt cval =-  withCODE $ ccurl_easy_setopt'CLong (ccurlptr curl) copt cval-----------------------------------------------------------------------------------so'FWRITE :: CURL -> Maybe CURL_write_callback -> IO ()-so'FWRITE curl mcb = makeCallback mcb (cb_write curl)-  (ccurl_easy_setopt'FWRITE (ccurlptr curl))-  (\cb -> wrap_ccurl_write_callback (write_callback cb))--write_callback :: CURL_write_callback -> CCURL_write_callback-write_callback fwrite ptr size nmemb _ = do-  stat <- packCStringLen (ptr, fromIntegral (size * nmemb)) >>= fwrite-  return $ case stat of-    CURL_WRITEFUNC_OK    -> (size * nmemb)-    CURL_WRITEFUNC_FAIL  -> 0-    CURL_WRITEFUNC_PAUSE -> cCURL_WRITEFUNC_PAUSE-----------------------------------------------------------------------------------so'FREAD :: CURL -> Maybe CURL_read_callback -> IO ()-so'FREAD curl mcb = makeCallback mcb (cb_read curl)-  (ccurl_easy_setopt'FREAD (ccurlptr curl))-  (\cb -> wrap_ccurl_read_callback (read_callback cb))--read_callback :: CURL_read_callback -> CCURL_read_callback-read_callback fread buff size nmemb _ = do-  let buffLen = fromIntegral (size * nmemb)-  stat <- fread buffLen-  case stat of-    CURL_READFUNC_PAUSE -> return cCURL_READFUNC_PAUSE-    CURL_READFUNC_ABORT -> return cCURL_READFUNC_ABORT-    CURL_READFUNC_OK bs -> unsafeUseAsCStringLen (BS.take buffLen bs)-      (\(cs, cl) -> copyBytes buff cs cl >> return (fromIntegral cl))-----------------------------------------------------------------------------------fromUTCTime :: UTCTime -> CLong-fromUTCTime = truncate . utcTimeToPOSIXSeconds-----------------------------------------------------------------------------------#{let option opt = #opt " -> c" #opt}--class CURLenum a where-  fromCURLenum :: a -> CLong--instance CURLenum a => CURLenum [a] where-  fromCURLenum xs = foldl' (.|.) 0 $ map fromCURLenum xs--instance CURLenum CURLproto where-  fromCURLenum x = case x of-    #{option CURLPROTO_ALL   }-    #{option CURLPROTO_HTTP  }-    #{option CURLPROTO_HTTPS }-    #{option CURLPROTO_FTP   }-    #{option CURLPROTO_FTPS  }-    #{option CURLPROTO_SCP   }-    #{option CURLPROTO_SFTP  }-    #{option CURLPROTO_TELNET}-    #{option CURLPROTO_LDAP  }-    #{option CURLPROTO_LDAPS }-    #{option CURLPROTO_DICT  }-    #{option CURLPROTO_FILE  }-    #{option CURLPROTO_TFTP  }-    #{option CURLPROTO_IMAP  }-    #{option CURLPROTO_IMAPS }-    #{option CURLPROTO_POP3  }-    #{option CURLPROTO_POP3S }-    #{option CURLPROTO_SMTP  }-    #{option CURLPROTO_SMTPS }-    #{option CURLPROTO_RTSP  }-    #{option CURLPROTO_RTMP  } |7210:----|-    #{option CURLPROTO_RTMPT } |7210:----|-    #{option CURLPROTO_RTMPE } |7210:----|-    #{option CURLPROTO_RTMPTE} |7210:----|-    #{option CURLPROTO_RTMPS } |7210:----|-    #{option CURLPROTO_RTMPTS} |7210:----|-    #{option CURLPROTO_GOPHER} |7212:----|--instance CURLenum CURLproxy where-  fromCURLenum x = case x of-    #{option CURLPROXY_HTTP           }-    #{option CURLPROXY_HTTP_1_0       }-    #{option CURLPROXY_SOCKS4         }-    #{option CURLPROXY_SOCKS5         }-    #{option CURLPROXY_SOCKS4A        }-    #{option CURLPROXY_SOCKS5_HOSTNAME}--instance CURLenum CURLnetrc where-  fromCURLenum x = case x of-    #{option CURL_NETRC_IGNORED }-    #{option CURL_NETRC_OPTIONAL}-    #{option CURL_NETRC_REQUIRED}--instance CURLenum CURLauth where-  fromCURLenum x = case x of-    #{option CURLAUTH_BASIC       }-    #{option CURLAUTH_DIGEST      }-    #{option CURLAUTH_DIGEST_IE   }-    #{option CURLAUTH_GSSNEGOTIATE}-    #{option CURLAUTH_NTLM        }-    #{option CURLAUTH_NTLM_WB     } |7220:----|-    #{option CURLAUTH_ONLY        } |7213:----|-    #{option CURLAUTH_ANY         }-    #{option CURLAUTH_ANYSAFE     }--instance CURLenum CURLtlsauth where                              |7214:----|-  fromCURLenum x = case x of                                     |7214:----|-    #{option CURL_TLSAUTH_SRP}                                   |7214:----|--instance CURLenum CURLredir where-  fromCURLenum x = case x of-    #{option CURL_REDIR_GET_ALL }-    #{option CURL_REDIR_POST_301}-    #{option CURL_REDIR_POST_302}-    #{option CURL_REDIR_POST_ALL}--instance CURLenum CURLhttpver where-  fromCURLenum x = case x of-    #{option CURL_HTTP_VERSION_NONE}-    #{option CURL_HTTP_VERSION_1_0 }-    #{option CURL_HTTP_VERSION_1_1 }--instance CURLenum CURLftpcreate where-  fromCURLenum x = case x of-    #{option CURLFTP_CREATE_DIR_NONE }-    #{option CURLFTP_CREATE_DIR      }-    #{option CURLFTP_CREATE_DIR_RETRY}--instance CURLenum CURLftpauth where-  fromCURLenum x = case x of-    #{option CURLFTPAUTH_DEFAULT}-    #{option CURLFTPAUTH_SSL    }-    #{option CURLFTPAUTH_TLS    }--instance CURLenum CURLftpssl where-  fromCURLenum x = case x of-    #{option CURLFTPSSL_CCC_NONE   }-    #{option CURLFTPSSL_CCC_PASSIVE}-    #{option CURLFTPSSL_CCC_ACTIVE }--instance CURLenum CURLftpmethod where-  fromCURLenum x = case x of-    #{option CURLFTPMETHOD_DEFAULT  }-    #{option CURLFTPMETHOD_MULTICWD }-    #{option CURLFTPMETHOD_NOCWD    }-    #{option CURLFTPMETHOD_SINGLECWD}--instance CURLenum CURLrtspreq where-  fromCURLenum x = case x of-    #{option CURL_RTSPREQ_OPTIONS      }-    #{option CURL_RTSPREQ_DESCRIBE     }-    #{option CURL_RTSPREQ_ANNOUNCE     }-    #{option CURL_RTSPREQ_SETUP        }-    #{option CURL_RTSPREQ_PLAY         }-    #{option CURL_RTSPREQ_PAUSE        }-    #{option CURL_RTSPREQ_TEARDOWN     }-    #{option CURL_RTSPREQ_GET_PARAMETER}-    #{option CURL_RTSPREQ_SET_PARAMETER}-    #{option CURL_RTSPREQ_RECORD       }-    #{option CURL_RTSPREQ_RECEIVE      }--instance CURLenum CURLtimecond where-  fromCURLenum x = case x of-    #{option CURL_TIMECOND_NONE        }-    #{option CURL_TIMECOND_IFMODSINCE  }-    #{option CURL_TIMECOND_IFUNMODSINCE}-    #{option CURL_TIMECOND_LASTMOD     }--instance CURLenum CURLclosepol where-  fromCURLenum x = case x of-    #{option CURLCLOSEPOLICY_NONE               }-    #{option CURLCLOSEPOLICY_OLDEST             }-    #{option CURLCLOSEPOLICY_LEAST_RECENTLY_USED}-    #{option CURLCLOSEPOLICY_LEAST_TRAFFIC      }-    #{option CURLCLOSEPOLICY_SLOWEST            }-    #{option CURLCLOSEPOLICY_CALLBACK           }--instance CURLenum CURLipresolve where-  fromCURLenum x = case x of-    #{option CURL_IPRESOLVE_WHATEVER}-    #{option CURL_IPRESOLVE_V4      }-    #{option CURL_IPRESOLVE_V6      }--instance CURLenum CURLusessl where-  fromCURLenum x = case x of-    #{option CURLUSESSL_NONE   }-    #{option CURLUSESSL_TRY    }-    #{option CURLUSESSL_CONTROL}-    #{option CURLUSESSL_ALL    }--instance CURLenum CURLsslver where-  fromCURLenum x = case x of-    #{option CURL_SSLVERSION_DEFAULT}-    #{option CURL_SSLVERSION_TLSv1  }-    #{option CURL_SSLVERSION_SSLv2  }-    #{option CURL_SSLVERSION_SSLv3  }--instance CURLenum CURLsslopt where                               |7250:----|-  fromCURLenum x = case x of                                     |7250:----|-    #{option CURLSSLOPT_ALLOW_BEAST}                             |7250:----|--instance CURLenum CURLgssapi where                               |7220:----|-  fromCURLenum x = case x of                                     |7220:----|-    #{option CURLGSSAPI_DELEGATION_NONE       }                  |7220:----|-    #{option CURLGSSAPI_DELEGATION_POLICY_FLAG}                  |7220:----|-    #{option CURLGSSAPI_DELEGATION_FLAG       }                  |7220:----|--instance CURLenum CURLsshauth where-  fromCURLenum x = case x of-    #{option CURLSSH_AUTH_ANY      }-    #{option CURLSSH_AUTH_NONE     }-    #{option CURLSSH_AUTH_PUBLICKEY}-    #{option CURLSSH_AUTH_PASSWORD }-    #{option CURLSSH_AUTH_HOST     }-    #{option CURLSSH_AUTH_KEYBOARD }-    #{option CURLSSH_AUTH_DEFAULT  }-
− src/Network/Curlhs/Types.hs
@@ -1,675 +0,0 @@----------------------------------------------------------------------------------- |--- Module      :  Network.Curlhs.Types--- Copyright   :  Copyright © 2012 Krzysztof Kardzis--- License     :  ISC License (MIT/BSD-style, see LICENSE file for details)--- --- Maintainer  :  Krzysztof Kardzis <kkardzis@gmail.com>--- Stability   :  experimental--- Portability :  non-portable-------------------------------------------------------------------------------------{-# LANGUAGE DeriveDataTypeable #-}--module Network.Curlhs.Types where--import Foreign.Ptr       (Ptr, FunPtr)--import Data.ByteString   (ByteString)-import Data.Typeable     (Typeable)-import Data.IORef        (IORef)-import Data.Time         (UTCTime)-import Data.Int          (Int64)--import Control.Exception (Exception)--import Network.Curlhs.Base-----------------------------------------------------------------------------------data CURL = CURL-  { ccurlptr :: Ptr CCURL-  , cb_write :: IORef (Maybe (FunPtr CCURL_write_callback))-  , cb_read  :: IORef (Maybe (FunPtr CCURL_read_callback ))-  }-----------------------------------------------------------------------------------data CURLcode-  = CURLE_OK-  | CURLE_UNSUPPORTED_PROTOCOL-  | CURLE_FAILED_INIT-  | CURLE_URL_MALFORMAT-  | CURLE_NOT_BUILT_IN             |7215:----|-  | CURLE_COULDNT_RESOLVE_PROXY-  | CURLE_COULDNT_RESOLVE_HOST-  | CURLE_COULDNT_CONNECT-  | CURLE_FTP_WEIRD_SERVER_REPLY-  | CURLE_REMOTE_ACCESS_DENIED-  | CURLE_FTP_ACCEPT_FAILED        |7240:----|-  | CURLE_FTP_WEIRD_PASS_REPLY-  | CURLE_FTP_ACCEPT_TIMEOUT       |7240:----|-  | CURLE_FTP_WEIRD_PASV_REPLY-  | CURLE_FTP_WEIRD_227_FORMAT-  | CURLE_FTP_CANT_GET_HOST-  | CURLE_FTP_COULDNT_SET_TYPE-  | CURLE_PARTIAL_FILE-  | CURLE_FTP_COULDNT_RETR_FILE-  | CURLE_QUOTE_ERROR-  | CURLE_HTTP_RETURNED_ERROR-  | CURLE_WRITE_ERROR-  | CURLE_UPLOAD_FAILED-  | CURLE_READ_ERROR-  | CURLE_OUT_OF_MEMORY-  | CURLE_OPERATION_TIMEDOUT-  | CURLE_FTP_PORT_FAILED-  | CURLE_FTP_COULDNT_USE_REST-  | CURLE_RANGE_ERROR-  | CURLE_HTTP_POST_ERROR-  | CURLE_SSL_CONNECT_ERROR-  | CURLE_BAD_DOWNLOAD_RESUME-  | CURLE_FILE_COULDNT_READ_FILE-  | CURLE_LDAP_CANNOT_BIND-  | CURLE_LDAP_SEARCH_FAILED-  | CURLE_FUNCTION_NOT_FOUND-  | CURLE_ABORTED_BY_CALLBACK-  | CURLE_BAD_FUNCTION_ARGUMENT-  | CURLE_INTERFACE_FAILED-  | CURLE_TOO_MANY_REDIRECTS-  | CURLE_UNKNOWN_TELNET_OPTION    |----:7214|-  | CURLE_UNKNOWN_OPTION           |7215:----|-  | CURLE_TELNET_OPTION_SYNTAX-  | CURLE_PEER_FAILED_VERIFICATION-  | CURLE_GOT_NOTHING-  | CURLE_SSL_ENGINE_NOTFOUND-  | CURLE_SSL_ENGINE_SETFAILED-  | CURLE_SEND_ERROR-  | CURLE_RECV_ERROR-  | 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        |7210:----|-  | CURLE_CHUNK_FAILED             |7210:----|-  deriving (Eq, Show, Typeable)--instance Exception CURLcode-----------------------------------------------------------------------------------data CURL_version_info_data = CURL_version_info_data-  { curl_version_info_data_version         :: String-  , curl_version_info_data_version_num     :: Int-  , curl_version_info_data_host            :: String-  , curl_version_info_data_features        :: [CURL_version]-  , curl_version_info_data_ssl_version     :: Maybe String-  , curl_version_info_data_ssl_version_num :: Int-  , curl_version_info_data_libz_version    :: Maybe String-  , curl_version_info_data_protocols       :: [String]-  , curl_version_info_data_ares            :: Maybe String-  , curl_version_info_data_ares_num        :: Int-  , curl_version_info_data_libidn          :: Maybe String-  , curl_version_info_data_iconv_ver_num   :: Int-  , curl_version_info_data_libssh_version  :: Maybe String-  } deriving (Show)-----------------------------------------------------------------------------------data CURL_version-  = CURL_VERSION_IPV6-  | CURL_VERSION_KERBEROS4-  | CURL_VERSION_SSL-  | CURL_VERSION_LIBZ-  | CURL_VERSION_NTLM-  | CURL_VERSION_GSSNEGOTIATE-  | CURL_VERSION_DEBUG-  | CURL_VERSION_ASYNCHDNS-  | CURL_VERSION_SPNEGO-  | CURL_VERSION_LARGEFILE-  | CURL_VERSION_IDN-  | CURL_VERSION_SSPI-  | CURL_VERSION_CONV-  | CURL_VERSION_CURLDEBUG-  | CURL_VERSION_TLSAUTH_SRP-  | CURL_VERSION_NTLM_WB-  deriving (Eq, Show)-----------------------------------------------------------------------------------data CURLinfo = CURLinfo-  { curlinfo_effective_url           :: String-  , curlinfo_response_code           :: Maybe Int-  , curlinfo_http_connectcode        :: Maybe Int-  , curlinfo_filetime                :: Maybe UTCTime-  , curlinfo_total_time              :: Double-  , curlinfo_namelookup_time         :: Double-  , curlinfo_connect_time            :: Double-  , curlinfo_appconnect_time         :: Double-  , curlinfo_pretransfer_time        :: Double-  , curlinfo_starttransfer_time      :: Double-  , curlinfo_redirect_time           :: Double-  , curlinfo_redirect_count          :: Int-  , curlinfo_redirect_url            :: Maybe String-  , curlinfo_size_upload             :: Double-  , curlinfo_size_download           :: Double-  , curlinfo_speed_download          :: Double-  , curlinfo_speed_upload            :: Double-  , curlinfo_header_size             :: Int-  , curlinfo_request_size            :: Int-  , curlinfo_ssl_verifyresult        :: Int  -- Bool??-  , curlinfo_ssl_engines             :: [String]-  , curlinfo_content_length_download :: Maybe Double-  , curlinfo_content_length_upload   :: Maybe Double-  , curlinfo_content_type            :: Maybe String---  , curlinfo_private                 :: String   -- void??-  , curlinfo_httpauth_avail          :: [CURLauth]-  , curlinfo_proxyauth_avail         :: [CURLauth]-  , curlinfo_os_errno                :: Int-  , curlinfo_num_connects            :: Int-  , curlinfo_primary_ip              :: String-  , curlinfo_primary_port            :: Int-  , curlinfo_local_ip                :: String-  , curlinfo_local_port              :: Int-  , curlinfo_cookielist              :: [String]-  , curlinfo_lastsocket              :: Maybe Int-  , curlinfo_ftp_entry_path          :: Maybe String-  , curlinfo_certinfo                :: [[String]]-  , curlinfo_condition_unmet         :: Bool-  , curlinfo_rtsp_session_id         :: Maybe String-  , curlinfo_rtsp_client_cseq        :: Int-  , curlinfo_rtsp_server_cseq        :: Int-  , curlinfo_rtsp_cseq_recv          :: Int-  } deriving (Show)------------------------------------------------------------------------------------data CURLoption-  ---- BEHAVIOR OPTIONS --------------------------------------------------------  = CURLOPT_VERBOSE                 Bool-  | CURLOPT_HEADER                  Bool-  | CURLOPT_NOPROGRESS              Bool-  | CURLOPT_NOSIGNAL                Bool-  | CURLOPT_WILDCARDMATCH           Bool |7210:----|--  ---- CALLBACK OPTIONS --------------------------------------------------------  | CURLOPT_WRITEFUNCTION           (Maybe CURL_write_callback)- -- CURLOPT_WRITEDATA-  | CURLOPT_READFUNCTION            (Maybe CURL_read_callback)- -- CURLOPT_READDATA- -- CURLOPT_IOCTLFUNCTION- -- CURLOPT_IOCTLDATA- -- CURLOPT_SEEKFUNCTION- -- CURLOPT_SEEKDATA- -- CURLOPT_SOCKOPTFUNCTION- -- CURLOPT_SOCKOPTDATA- -- CURLOPT_OPENSOCKETFUNCTION- -- CURLOPT_OPENSOCKETDATA- -- CURLOPT_CLOSESOCKETFUNCTION |7217:----|- -- CURLOPT_CLOSESOCKETDATA     |7217:----|- -- CURLOPT_PROGRESSFUNCTION- -- CURLOPT_PROGRESSDATA- -- CURLOPT_HEADERFUNCTION- -- CURLOPT_HEADERDATA- -- CURLOPT_DEBUGFUNCTION- -- CURLOPT_DEBUGDATA- -- CURLOPT_SSL_CTX_FUNCTION- -- CURLOPT_SSL_CTX_DATA- -- CURLOPT_CONV_TO_NETWORK_FUNCTION- -- CURLOPT_CONV_FROM_NETWORK_FUNCTION- -- CURLOPT_CONV_FROM_UTF8_FUNCTION- -- CURLOPT_INTERLEAVEFUNCTION- -- CURLOPT_INTERLEAVEDATA- -- CURLOPT_CHUNK_BGN_FUNCTION |7210:----|- -- CURLOPT_CHUNK_END_FUNCTION |7210:----|- -- CURLOPT_CHUNK_DATA         |7210:----|- -- CURLOPT_FNMATCH_FUNCTION   |7210:----|- -- CURLOPT_FNMATCH_DATA       |7210:----|--  ---- ERROR OPTIONS ----------------------------------------------------------- -- CURLOPT_ERRORBUFFER             (IORef (Maybe ByteString))- -- CURLOPT_STDERR                  Handle-  | CURLOPT_FAILONERROR             Bool--  ---- NETWORK OPTIONS ---------------------------------------------------------  | CURLOPT_URL                     ByteString-  | CURLOPT_PROTOCOLS               [CURLproto]-  | CURLOPT_REDIR_PROTOCOLS         [CURLproto]-  | CURLOPT_PROXY                   ByteString-  | CURLOPT_PROXYPORT               Int-  | CURLOPT_PROXYTYPE               CURLproxy-  | CURLOPT_NOPROXY                 ByteString-  | CURLOPT_HTTPPROXYTUNNEL         Bool-  | CURLOPT_SOCKS5_GSSAPI_SERVICE   ByteString-  | CURLOPT_SOCKS5_GSSAPI_NEC       Bool-  | CURLOPT_INTERFACE               ByteString-  | CURLOPT_LOCALPORT               Int-  | CURLOPT_LOCALPORTRANGE          Int-  | CURLOPT_DNS_CACHE_TIMEOUT       Int-  | CURLOPT_DNS_USE_GLOBAL_CACHE    Bool-  | CURLOPT_BUFFERSIZE              Int-  | CURLOPT_PORT                    Int-  | CURLOPT_TCP_NODELAY             Bool-  | CURLOPT_ADDRESS_SCOPE           Int-  | CURLOPT_TCP_KEEPALIVE           Bool          |7250:----|-  | CURLOPT_TCP_KEEPIDLE            Int           |7250:----|-  | CURLOPT_TCP_KEEPINTVL           Int           |7250:----|--  ---- NAMES and PASSWORDS OPTIONS (Authentication) ----------------------------  | CURLOPT_NETRC                   CURLnetrc-  | CURLOPT_NETRC_FILE              ByteString-  | CURLOPT_USERPWD                 ByteString-  | CURLOPT_PROXYUSERPWD            ByteString-  | CURLOPT_USERNAME                ByteString-  | CURLOPT_PASSWORD                ByteString-  | CURLOPT_PROXYUSERNAME           ByteString-  | CURLOPT_PROXYPASSWORD           ByteString-  | CURLOPT_HTTPAUTH                [CURLauth]- -- CURLOPT_TLSAUTH_TYPE            [CURLtlsauth] |7214:----|-  | CURLOPT_TLSAUTH_TYPE            ByteString    |7214:----|-  | CURLOPT_TLSAUTH_USERNAME        ByteString    |7214:----|-  | CURLOPT_TLSAUTH_PASSWORD        ByteString    |7214:----|-  | CURLOPT_PROXYAUTH               [CURLauth]--  ---- HTTP OPTIONS ------------------------------------------------------------  | CURLOPT_AUTOREFERER             Bool-  | CURLOPT_ENCODING                ByteString    |----:7215|-  | CURLOPT_ACCEPT_ENCODING         ByteString    |7216:----|-  | CURLOPT_TRANSFER_ENCODING       Bool          |7216:----|-  | CURLOPT_FOLLOWLOCATION          Bool-  | CURLOPT_UNRESTRICTED_AUTH       Bool-  | CURLOPT_MAXREDIRS               Int-  | CURLOPT_POSTREDIR               [CURLredir]-  | CURLOPT_PUT                     Bool-  | CURLOPT_POST                    Bool- -- CURLOPT_POSTFIELDS              ByteString -- not copied-  | CURLOPT_POSTFIELDSIZE           Int-  | CURLOPT_POSTFIELDSIZE_LARGE     Int64-  | CURLOPT_COPYPOSTFIELDS          ByteString- -- CURLOPT_HTTPPOST                [CURL_httppost]-  | CURLOPT_REFERER                 ByteString-  | CURLOPT_USERAGENT               ByteString- -- CURLOPT_HTTPHEADER              [ByteString]- -- CURLOPT_HTTP200ALIASES          [ByteString]-  | CURLOPT_COOKIE                  ByteString-  | CURLOPT_COOKIEFILE              ByteString-  | CURLOPT_COOKIEJAR               ByteString-  | CURLOPT_COOKIESESSION           Bool-  | CURLOPT_COOKIELIST              ByteString-  | CURLOPT_HTTPGET                 Bool-  | CURLOPT_HTTP_VERSION            CURLhttpver-  | CURLOPT_IGNORE_CONTENT_LENGTH   Bool-  | CURLOPT_HTTP_CONTENT_DECODING   Bool-  | CURLOPT_HTTP_TRANSFER_DECODING  Bool--  ---- SMTP OPTIONS ------------------------------------------------------------  | CURLOPT_MAIL_FROM               ByteString- -- CURLOPT_MAIL_RCTP               [ByteString]-  | CURLOPT_MAIL_AUTH               ByteString    |7250:----|--  ---- TFTP OPTIONS ------------------------------------------------------------  | CURLOPT_TFTP_BLKSIZE            Int--  ---- FTP OPTIONS -------------------------------------------------------------  | CURLOPT_FTPPORT                 ByteString- -- CURLOPT_QUOTE                   [ByteString]- -- CURLOPT_POSTQUOTE               [ByteString]- -- CURLOPT_PREQUOTE                [ByteString]-  | CURLOPT_DIRLISTONLY             Bool-  | CURLOPT_APPEND                  Bool-  | CURLOPT_FTP_USE_EPRT            Bool-  | CURLOPT_FTP_USE_EPSV            Bool-  | CURLOPT_FTP_USE_PRET            Bool-  | CURLOPT_FTP_CREATE_MISSING_DIRS CURLftpcreate-  | CURLOPT_FTP_RESPONSE_TIMEOUT    Int-  | CURLOPT_FTP_ALTERNATIVE_TO_USER ByteString-  | CURLOPT_FTP_SKIP_PASV_IP        Bool-  | CURLOPT_FTPSSLAUTH              CURLftpauth-  | CURLOPT_FTP_SSL_CCC             CURLftpssl-  | CURLOPT_FTP_ACCOUNT             ByteString-  | CURLOPT_FTP_FILEMETHOD          CURLftpmethod--  ---- RTSP OPTIONS ------------------------------------------------------------  | CURLOPT_RTSP_REQUEST            CURLrtspreq-  | CURLOPT_RTSP_SESSION_ID         ByteString-  | CURLOPT_RTSP_STREAM_URI         ByteString-  | CURLOPT_RTSP_TRANSPORT          ByteString- -- CURLOPT_RTSP_HEADER             [ByteString]-  | CURLOPT_RTSP_CLIENT_CSEQ        Int-  | CURLOPT_RTSP_SERVER_CSEQ        Int--  ---- PROTOCOL OPTIONS --------------------------------------------------------  | CURLOPT_TRANSFERTEXT            Bool-  | CURLOPT_PROXY_TRANSFER_MODE     Bool-  | CURLOPT_CRLF                    Bool-  | CURLOPT_RANGE                   ByteString-  | CURLOPT_RESUME_FROM             Int-  | CURLOPT_RESUME_FROM_LARGE       Int64-  | CURLOPT_CUSTOMREQUEST           ByteString-  | CURLOPT_FILETIME                Bool-  | CURLOPT_NOBODY                  Bool-  | CURLOPT_INFILESIZE              Int-  | CURLOPT_INFILESIZE_LARGE        Int64-  | CURLOPT_UPLOAD                  Bool-  | CURLOPT_MAXFILESIZE             Int-  | CURLOPT_MAXFILESIZE_LARGE       Int64-  | CURLOPT_TIMECONDITION           CURLtimecond-  | CURLOPT_TIMEVALUE               UTCTime--  ---- CONNECTION OPTIONS ------------------------------------------------------  | CURLOPT_TIMEOUT                 Int-  | CURLOPT_TIMEOUT_MS              Int-  | CURLOPT_LOW_SPEED_LIMIT         Int-  | CURLOPT_LOW_SPEED_TIME          Int-  | CURLOPT_MAX_SEND_SPEED_LARGE    Int64-  | CURLOPT_MAX_RECV_SPEED_LARGE    Int64-  | CURLOPT_MAXCONNECTS             Int-  | CURLOPT_CLOSEPOLICY             CURLclosepol-  | CURLOPT_FRESH_CONNECT           Bool-  | CURLOPT_FORBID_REUSE            Bool-  | CURLOPT_CONNECTTIMEOUT          Int-  | CURLOPT_CONNECTTIMEOUT_MS       Int-  | CURLOPT_IPRESOLVE               CURLipresolve-  | CURLOPT_CONNECT_ONLY            Bool-  | CURLOPT_USE_SSL                 CURLusessl- -- CURLOPT_RESOLVE                 [ByteString]  |7213:----|-  | CURLOPT_DNS_SERVERS             ByteString    |7240:----|-  | CURLOPT_ACCEPTTIMEOUT_MS        Int           |7240:----|--  ---- SSL and SECURITY OPTIONS ------------------------------------------------  | CURLOPT_SSLCERT                 ByteString-  | CURLOPT_SSLCERTTYPE             ByteString-  | CURLOPT_SSLKEY                  ByteString-  | CURLOPT_SSLKEYTYPE              ByteString-  | CURLOPT_KEYPASSWD               ByteString-  | CURLOPT_SSLENGINE               ByteString-  | CURLOPT_SSLENGINE_DEFAULT       Bool-  | CURLOPT_SSLVERSION              CURLsslver-  | CURLOPT_SSL_VERIFYPEER          Bool-  | CURLOPT_CAINFO                  ByteString-  | CURLOPT_ISSUERCERT              ByteString-  | CURLOPT_CAPATH                  ByteString-  | CURLOPT_CRLFILE                 ByteString-  | CURLOPT_SSL_VERIFYHOST          Int-  | CURLOPT_CERTINFO                Bool-  | CURLOPT_RANDOM_FILE             ByteString-  | CURLOPT_EGDSOCKET               ByteString-  | CURLOPT_SSL_CIPHER_LIST         ByteString-  | CURLOPT_SSL_SESSIONID_CACHE     Bool-  | CURLOPT_SSL_OPTIONS             CURLsslopt    |7250:----|-  | CURLOPT_KRBLEVEL                ByteString-  | CURLOPT_GSSAPI_DELEGATION       CURLgssapi    |7220:----|--  ---- SSH OPTIONS -------------------------------------------------------------  | CURLOPT_SSH_AUTH_TYPES          [CURLsshauth]-  | CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 ByteString-  | CURLOPT_SSH_PUBLIC_KEYFILE      ByteString-  | CURLOPT_SSH_PRIVATE_KEYFILE     ByteString-  | CURLOPT_SSH_KNOWNHOSTS          ByteString- -- CURLOPT_SSH_KEYFUNCTION         (Maybe CURL_sshkey_callback)- -- CURLOPT_SSH_KEYDATA             -- ?--  ---- OTHER OPTIONS ----------------------------------------------------------- -- CURLOPT_PRIVATE                 -- ?- -- CURLOPT_SHARE                   CURLSH-  | CURLOPT_NEW_FILE_PERMS          Int-  | CURLOPT_NEW_DIRECTORY_PERMS     Int--  ---- TELNET OPTIONS ---------------------------------------------------------- -- CURLOPT_TELNETOPTIONS           [ByteString]-----------------------------------------------------------------------------------data CURLproto-  = CURLPROTO_ALL-  | 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   |7210:----|-  | CURLPROTO_RTMPT  |7210:----|-  | CURLPROTO_RTMPE  |7210:----|-  | CURLPROTO_RTMPTE |7210:----|-  | CURLPROTO_RTMPS  |7210:----|-  | CURLPROTO_RTMPTS |7210:----|-  | CURLPROTO_GOPHER |7212:----|-  deriving (Eq, Show)-----------------------------------------------------------------------------------data CURLproxy-  = CURLPROXY_HTTP-  | CURLPROXY_HTTP_1_0-  | CURLPROXY_SOCKS4-  | CURLPROXY_SOCKS5-  | CURLPROXY_SOCKS4A-  | CURLPROXY_SOCKS5_HOSTNAME-  deriving (Eq, Show)-----------------------------------------------------------------------------------data CURLnetrc-  = CURL_NETRC_IGNORED-  | CURL_NETRC_OPTIONAL-  | CURL_NETRC_REQUIRED-  deriving (Eq, Show)-----------------------------------------------------------------------------------data CURLauth-  = CURLAUTH_BASIC-  | CURLAUTH_DIGEST-  | CURLAUTH_DIGEST_IE-  | CURLAUTH_GSSNEGOTIATE-  | CURLAUTH_NTLM-  | CURLAUTH_NTLM_WB      |7220:----|-  | CURLAUTH_ONLY         |7213:----|-  | CURLAUTH_ANY-  | CURLAUTH_ANYSAFE-  deriving (Eq, Show)-----------------------------------------------------------------------------------data CURLtlsauth                                                 |7214:----|-  = CURL_TLSAUTH_SRP                                             |7214:----|-  deriving (Eq, Show)                                            |7214:----|-----------------------------------------------------------------------------------data CURLredir-  = CURL_REDIR_GET_ALL-  | CURL_REDIR_POST_301-  | CURL_REDIR_POST_302-  | CURL_REDIR_POST_ALL-  deriving (Eq, Show)-----------------------------------------------------------------------------------data CURLhttpver-  = CURL_HTTP_VERSION_NONE-  | CURL_HTTP_VERSION_1_0-  | CURL_HTTP_VERSION_1_1-  deriving (Eq, Show)-----------------------------------------------------------------------------------data CURLftpcreate-  = CURLFTP_CREATE_DIR_NONE-  | CURLFTP_CREATE_DIR-  | CURLFTP_CREATE_DIR_RETRY-  deriving (Eq, Show)-----------------------------------------------------------------------------------data CURLftpauth-  = CURLFTPAUTH_DEFAULT-  | CURLFTPAUTH_SSL-  | CURLFTPAUTH_TLS-  deriving (Eq, Show)-----------------------------------------------------------------------------------data CURLftpssl-  = CURLFTPSSL_CCC_NONE-  | CURLFTPSSL_CCC_PASSIVE-  | CURLFTPSSL_CCC_ACTIVE-  deriving (Eq, Show)- ----------------------------------------------------------------------------------data CURLftpmethod-  = CURLFTPMETHOD_DEFAULT-  | CURLFTPMETHOD_MULTICWD-  | CURLFTPMETHOD_NOCWD-  | CURLFTPMETHOD_SINGLECWD-  deriving (Eq, Show)-----------------------------------------------------------------------------------data CURLrtspreq-  = CURL_RTSPREQ_OPTIONS-  | CURL_RTSPREQ_DESCRIBE-  | CURL_RTSPREQ_ANNOUNCE-  | CURL_RTSPREQ_SETUP-  | CURL_RTSPREQ_PLAY-  | CURL_RTSPREQ_PAUSE-  | CURL_RTSPREQ_TEARDOWN-  | CURL_RTSPREQ_GET_PARAMETER-  | CURL_RTSPREQ_SET_PARAMETER-  | CURL_RTSPREQ_RECORD-  | CURL_RTSPREQ_RECEIVE-  deriving (Eq, Show)-----------------------------------------------------------------------------------data CURLtimecond-  = CURL_TIMECOND_NONE-  | CURL_TIMECOND_IFMODSINCE-  | CURL_TIMECOND_IFUNMODSINCE-  | CURL_TIMECOND_LASTMOD-  deriving (Eq, Show)-----------------------------------------------------------------------------------data CURLclosepol-  = CURLCLOSEPOLICY_NONE-  | CURLCLOSEPOLICY_OLDEST-  | CURLCLOSEPOLICY_LEAST_RECENTLY_USED-  | CURLCLOSEPOLICY_LEAST_TRAFFIC-  | CURLCLOSEPOLICY_SLOWEST-  | CURLCLOSEPOLICY_CALLBACK-  deriving (Eq, Show)-----------------------------------------------------------------------------------data CURLipresolve-  = CURL_IPRESOLVE_WHATEVER-  | CURL_IPRESOLVE_V4-  | CURL_IPRESOLVE_V6-  deriving (Eq, Show)-----------------------------------------------------------------------------------data CURLusessl-  = CURLUSESSL_NONE-  | CURLUSESSL_TRY-  | CURLUSESSL_CONTROL-  | CURLUSESSL_ALL-  deriving (Eq, Show)-----------------------------------------------------------------------------------data CURLsslver-  = CURL_SSLVERSION_DEFAULT-  | CURL_SSLVERSION_TLSv1-  | CURL_SSLVERSION_SSLv2-  | CURL_SSLVERSION_SSLv3-  deriving (Eq, Show)-----------------------------------------------------------------------------------data CURLsslopt                                                  |7250:----|-  = CURLSSLOPT_ALLOW_BEAST                                       |7250:----|-  deriving (Eq, Show)                                            |7250:----|-----------------------------------------------------------------------------------data CURLgssapi                                                  |7220:----|-  = CURLGSSAPI_DELEGATION_NONE                                   |7220:----|-  | CURLGSSAPI_DELEGATION_POLICY_FLAG                            |7220:----|-  | CURLGSSAPI_DELEGATION_FLAG                                   |7220:----|-  deriving (Eq, Show)                                            |7220:----|-----------------------------------------------------------------------------------data CURLsshauth-  = CURLSSH_AUTH_ANY-  | CURLSSH_AUTH_NONE-  | CURLSSH_AUTH_PUBLICKEY-  | CURLSSH_AUTH_PASSWORD-  | CURLSSH_AUTH_HOST-  | CURLSSH_AUTH_KEYBOARD-  | CURLSSH_AUTH_DEFAULT-  deriving (Eq, Show)-----------------------------------------------------------------------------------type CURL_write_callback = ByteString -> IO CURL_write_response--data CURL_write_response-  = CURL_WRITEFUNC_OK-  | CURL_WRITEFUNC_FAIL-  | CURL_WRITEFUNC_PAUSE-  deriving (Eq)---type CURL_read_callback = Int -> IO CURL_read_response--data CURL_read_response-  = CURL_READFUNC_OK ByteString-  | CURL_READFUNC_ABORT-  | CURL_READFUNC_PAUSE-  deriving (Eq)--
src/VKNews.hs view
@@ -23,6 +23,7 @@ import Text.RegexPR import Web.VKHS as VK hiding (api,api') import Web.VKHS.API.Monad as VK+import Network.CURL730  data Options = Options   { verb :: Verbosity@@ -125,7 +126,7 @@   main :: IO ()-main = do+main = withlib CURL730 $ do   hSetBuffering stdout NoBuffering   hSetBuffering stderr NoBuffering   at <- fromMaybe [] <$> lookupEnv env_var_name
src/VKQ.hs view
@@ -26,6 +26,7 @@ import Web.VKHS.Curl import Web.VKHS.API.Aeson as A import Web.VKHS.API.Base as STR+import Network.CURL730  data Options = Options   { verb :: Verbosity@@ -161,7 +162,7 @@ checkRight (Right a) = return a  main :: IO ()-main = do+main = withlib CURL730 $ do   m <- maybe (idm) (value) <$> lookupEnv "VKQ_ACCESS_TOKEN"   execParser (info (helper <*> opts m) (fullDesc <> header "Vkontakte social network tool")) >>= cmd 
src/Web/VKHS/API/Base.hs view
@@ -12,7 +12,7 @@ import qualified Data.ByteString.UTF8 as U import qualified Data.ByteString as BS -import Network.Curlhs.Core+import Network.CURL730  import Network.Protocol.Http () import Network.Protocol.Uri@@ -40,6 +40,6 @@ api e mn mp =   let uri = showUri $ (\f -> f $ toUri $ printf "https://api.vk.com/method/%s" mn) $               set query $ bw params (("access_token",(access_token . sub) e):mp)-  in vk_curl_payload e (tell [CURLOPT_URL $ U.fromString uri])+  in vk_curl_payload e (tell [CURLOPT_URL uri])  
src/Web/VKHS/Curl.hs view
@@ -17,7 +17,7 @@ import Control.Concurrent (threadDelay) import Control.Monad.Writer -import Network.Curlhs.Core+import Network.CURL730  import Prelude hiding (catch) @@ -38,24 +38,25 @@     d <- askE delay_ms     do         buff <- newIORef BS.empty-        bracket (curl_easy_init) (curl_easy_cleanup) $ \curl -> do {-            let -                memwrite n = atomicModifyIORef buff-                    (\o -> (BS.append o n, CURL_WRITEFUNC_OK))-            in-            curl_easy_setopt curl $-                [ CURLOPT_HEADER         True-                , CURLOPT_WRITEFUNCTION (Just $ memwrite)-                , CURLOPT_SSL_VERIFYPEER False-                , CURLOPT_USERAGENT $ BS.pack $ map BS.c2w a-                , CURLOPT_VERBOSE (v == Debug )-                ] ++ (execWriter w);-            curl_easy_perform curl;-            threadDelay (1000 * d); -- convert ms to us-            b <- readIORef buff ;-            return (Right b) ;+        do {+          bracket (curl_easy_init) (curl_easy_cleanup) $ \curl ->+              let +                  memwrite n = atomicModifyIORef buff+                      (\o -> (BS.append o n, CURL_WRITEFUNC_OK))+              in do+              curl_easy_setopt curl $+                  [ CURLOPT_HEADER         True+                  , CURLOPT_WRITEFUNCTION (Just $ memwrite)+                  , CURLOPT_SSL_VERIFYPEER False+                  , CURLOPT_USERAGENT a+                  , CURLOPT_VERBOSE (v == Debug )+                  ] ++ (execWriter w);+              curl_easy_perform curl;+              threadDelay (1000 * d); -- convert ms to us+              b <- readIORef buff ;+              return (Right b) ;         } `catch`-            (\(e::CURLcode) -> return $ Left ("CURL error: " ++ (show e)))+            (\(e::CURLE) -> return $ Left ("CURL error: " ++ (show e)))  scanPattern pat s =   let (_,o,x,n) = BS.foldl' check (False, BS.empty, BS.empty, BS.empty) s@@ -122,9 +123,9 @@                 [ CURLOPT_HEADER         True                 , CURLOPT_WRITEFUNCTION (Just $ filewrite)                 , CURLOPT_SSL_VERIFYPEER False-                , CURLOPT_USERAGENT $ BS.pack $ map BS.c2w a+                , CURLOPT_USERAGENT a                 , CURLOPT_VERBOSE (v == Debug)-                , CURLOPT_URL (BS.pack $ map BS.c2w url)+                , CURLOPT_URL url                 ];               curl_easy_perform curl;@@ -134,7 +135,7 @@               Working _ -> return $ Right ()               _         -> return $ Left "HTTP header detection failure"         } `catch`-            (\(e::CURLcode) -> return $ Left ("CURL error: " ++ (show e)))+            (\(e::CURLE) -> return $ Left ("CURL error: " ++ (show e)))   -- | Return HTTP payload, ignore headers@@ -162,7 +163,7 @@                 [ CURLOPT_HEADER         True                 , CURLOPT_WRITEFUNCTION (Just $ writer)                 , CURLOPT_SSL_VERIFYPEER False-                , CURLOPT_USERAGENT $ BS.pack $ map BS.c2w a+                , CURLOPT_USERAGENT a                 , CURLOPT_VERBOSE (v == Debug)                 ] ++ (execWriter w);              curl_easy_perform curl;@@ -172,5 +173,5 @@               Working _ -> return $ Right buff               _         -> return $ Left "HTTP header detection failure"         } `catch`-            (\(e::CURLcode) -> return $ Left ("CURL error: " ++ (show e)))+            (\(e::CURLE) -> return $ Left ("CURL error: " ++ (show e))) 
src/Web/VKHS/Login.hs view
@@ -28,7 +28,7 @@ import Data.Maybe import Data.Typeable -import Network.Curlhs.Core+import Network.CURL730 import Network.Protocol.Http import Network.Protocol.Uri import Network.Protocol.Uri.Query@@ -129,29 +129,29 @@ -- | Send a get-request to the server vk_get :: Uri -> Cookies -> VK Page vk_get u c = let-    c' = (VKHS.pack $ bw cookie $ map toShort $ bw gather c )-    u' = (VKHS.pack $ showUri u)+    c' = (bw cookie $ map toShort $ bw gather c )+    u' = (showUri u)     in do         e <- ask         s <- liftEIO $ vk_curl e $ do-            when ((not . BS.null) c') $ do+            when ((not . null) c') $ do                 tell [CURLOPT_COOKIE c']-            when ((not . BS.null) u') $ do+            when ((not . null) u') $ do                 tell [CURLOPT_URL u']         liftVK (return $ parseResponse $ VKHS.unpack s)  -- | Send a form to the server. vk_post :: FilledForm -> Cookies -> VK Page vk_post f c = let-    c' = (VKHS.pack $ bw cookie $ map toShort $ bw gather c )-    p' = (VKHS.pack $ bw params $ M.toList $ inputs f)-    u' = (VKHS.pack $ action f)+    c' = (bw cookie $ map toShort $ bw gather c )+    p' = (bw params $ M.toList $ inputs f)+    u' = (action f)     in do         e <- ask         s <- liftEIO $ vk_curl e $ do-            when ((not . BS.null) c') $ do+            when ((not . null) c') $ do                 tell [CURLOPT_COOKIE c']-            when ((not . BS.null) u') $ do+            when ((not . null) u') $ do                 tell [CURLOPT_URL u']             tell [CURLOPT_POST True]             tell [CURLOPT_COPYPOSTFIELDS p']