#!/bin/bash

## See the file COPYING for copying conditions.

curl_exit_codes() {
   local codes
   codes="
[0] - [Success.]
[1] - [Unsupported protocol. This build of curl has no support for this protocol.]
[2] - [Failed to initialize.]
[3] - [URL malformed. The syntax was not correct.]
[4] - [A feature or option that was needed to perform the desired request was not enabled or was explicitly disabled at build-time. To make curl able to do this, you probably need another build of libcurl!]
[5] - [Couldn't resolve proxy. The given proxy host could not be resolved.]
[6] - [Couldn't resolve host. The given remote host was not resolved.]
[7] - [Failed to connect to host.]
[8] - [FTP weird server reply. The server sent data curl couldn't parse.]
[9] - [FTP access denied. The server denied login or denied access to the particular resource or directory you wanted to reach. Most often you tried to change to a directory that doesn't exist on the server.]
[11] - [FTP weird PASS reply. Curl couldn't parse the reply sent to the PASS request.]
[13] - [FTP weird PASV reply, Curl couldn't parse the reply sent to the PASV request.]
[14] - [FTP weird 227 format. Curl couldn't parse the 227-line the server sent.]
[15] - [FTP can't get host. Couldn't resolve the host IP we got in the 227-line.]
[17] - [FTP couldn't set binary. Couldn't change transfer method to binary.]
[18] - [Partial file. Only a part of the file was transferred.]
[19] - [FTP couldn't download/access the given file, the RETR (or similar) command failed.]
[21] - [FTP quote error. A quote command returned error from the server.]
[22] - [HTTP page not retrieved. The requested url was not found or returned another error with the HTTP error code being 400 or above. This return code only appears if -f, --fail is used.]
[23] - [Write error. Curl couldn't write data to a local filesystem or similar.]
[25] - [FTP couldn't STOR file. The server denied the STOR operation, used for FTP uploading.]
[26] - [Read error. Various reading problems.]
[27] - [Out of memory. A memory allocation request failed.]
[28] - [Operation timeout. The specified time-out period was reached according to the conditions.]
[30] - [FTP PORT failed. The PORT command failed. Not all FTP servers support the PORT command, try doing a transfer using PASV instead!]
[31] - [FTP couldn't use REST. The REST command failed. This command is used for resumed FTP transfers.]
[33] - [HTTP range error. The range \"command\" didn't work.]
[34] - [HTTP post error. Internal post-request generation error.]
[35] - [SSL connect error. The SSL handshaking failed.]
[36] - [FTP bad download resume. Couldn't continue an earlier aborted download.]
[37] - [FILE couldn't read file. Failed to open the file. Permissions?]
[38] - [LDAP cannot bind. LDAP bind operation failed.]
[39] - [LDAP search failed.]
[41] - [Function not found. A required LDAP function was not found.]
[42] - [Aborted by callback. An application told curl to abort the operation.]
[43] - [Internal error. A function was called with a bad parameter.]
[45] - [Interface error. A specified outgoing interface could not be used.]
[47] - [Too many redirects. When following redirects, curl hit the maximum amount.]
[48] - [Unknown option specified to libcurl. This indicates that you passed a weird option to curl that was passed on to libcurl and rejected. Read up in the manual!]
[49] - [Malformed telnet option.]
[51] - [The peer's SSL certificate or SSH MD5 fingerprint was not OK.]
[52] - [The server didn't reply anything, which here is considered an error.]
[53] - [SSL crypto engine not found.]
[54] - [Cannot set SSL crypto engine as default.]
[55] - [Failed sending network data.]
[56] - [Failure in receiving network data.]
[57] - [helper-scripts curl-prgs (not curl!) reports: Variable CURL_OUT_FILE is empty.]
[58] - [Problem with the local certificate.]
[59] - [Couldn't use specified SSL cipher.]
[60] - [Peer certificate cannot be authenticated with known CA certificates.] - Is your clock much too slow or fast by chance?
[61] - [Unrecognized transfer encoding.]
[62] - [Invalid LDAP URL.]
[63] - [Maximum file size exceeded.]
[64] - [Requested FTP SSL level failed.]
[65] - [Sending the data requires a rewind that failed.]
[66] - [Failed to initialise SSL Engine.]
[67] - [The user name, password, or similar was not accepted and curl failed to log in.]
[68] - [File not found on TFTP server.]
[69] - [Permission problem on TFTP server.]
[70] - [Out of disk space on TFTP server.]
[71] - [Illegal TFTP operation.]
[72] - [Unknown TFTP transfer ID.]
[73] - [File already exists (TFTP).]
[74] - [No such user (TFTP).]
[75] - [Character conversion failed.]
[76] - [Character conversion functions required.]
[77] - [Problem with reading the SSL CA cert (path? access rights?).]
[78] - [The resource referenced in the URL does not exist.]
[79] - [An unspecified error occurred during the SSH session.]
[80] - [Failed to shut down the SSL connection.]
[81] - [helper-scripts curl-prgs (not curl!) reports: Endless data attack triggered.]
[82] - [Could not load CRL file, missing or wrong format (added in 7.19.0).]
[83] - [Issuer check failed (added in 7.19.0).]
[84] - [The FTP PRET command failed]
[85] - [RTSP: mismatch of CSeq numbers]
[86] - [RTSP: mismatch of Session Identifiers]
[87] - [unable to parse FTP file list]
[88] - [FTP chunk callback reported error]
[89] - [No connection available, the session will be queued]
[90] - [SSL public key does not matched pinned public key]
[91] - [Invalid SSL certificate status.]
[92] - [Stream error in HTTP/2 framing layer.]
[93] - [An API function was called from inside a callback.]
[94] - [An authentication function returned an error.]
[95] - [A problem was detected in the HTTP/3 layer. This is somewhat generic and can be one out of several problems, see the error message for details.]
[96] - [QUIC connection error. This error may be caused by an SSL library error. QUIC is the protocol used for HTTP/3 transfers.]
[110] - [helper-scripts curl-prgs (not curl!) reports: error_handler triggered.]
[111] - [helper-scripts curl-prgs (not curl!) reports: statusfile did not contain a number.]
[112] - [helper-scripts curl-prgs (not curl!) reports: statusfile does not exist.]
[113] - [helper-scripts curl-prgs (not curl!) reports: stat did not output a number.]
[114] - [helper-scripts curl-prgs (not curl!) reports: actual file size bigger than server reported file size.]
[115] - [helper-scripts curl-prgs (not curl!) reports: actual file size smaller than server reported file size.]
[116] - [helper-scripts curl-prgs (not curl!) reports: Content-Length header could not be determined.]
[143] - [helper-scripts curl-prgs (not curl!) reports: signal sigterm received.]
"

   if [ "$1" = "" ]; then
      exit 1
   fi

   local line

   OIFS="$IFS"
   IFS='
'

   for line in $codes; do
      local number
      IFS="$OIFS"
      number="${line:0:4}"
      number="${number//\[/""}"
      number="${number//\]/""}"
      number="${number// /""}"
      true "number: $number | line: $line"
      if [ "$number" = "$1" ]; then
         ## exit code found.
         printf '%s\n' "$line"
         exit 0
      fi
   done

   IFS="$OIFS"

   ## exit code not found.
   printf '%s\n' "[$1] - [Unknown curl exit code, please report this!]"
   exit 0
}

curl_exit_codes "$@"
