packages feed

curlhs-0.0.2: Network/Curlhs/Errors.hsc

-------------------------------------------------------------------------------
-- |
-- 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"