diff options
author | Alex Crichton <alex@alexcrichton.com> | 2014-09-19 10:22:59 -0700 |
---|---|---|
committer | Alex Crichton <alex@alexcrichton.com> | 2014-09-19 10:22:59 -0700 |
commit | fb3186e7285977d88babc4ce13bf93a6bc76ccb5 (patch) | |
tree | 5ebac5e6612e0c20a0e67c57246e48c4033f8c0c /src/error.rs | |
parent | 2c33e0bd60b96846298da06c5c70fdc7c029dae5 (diff) | |
download | ssh2-rs-fb3186e7285977d88babc4ce13bf93a6bc76ccb5.zip |
Start SFTP bindings
Diffstat (limited to 'src/error.rs')
-rw-r--r-- | src/error.rs | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/error.rs b/src/error.rs index 6d71362..e7d9542 100644 --- a/src/error.rs +++ b/src/error.rs @@ -40,6 +40,59 @@ impl Error { Error::new(raw::LIBSSH2_ERROR_CHANNEL_EOF_SENT, "end of file") } + /// Construct an error from an error code from libssh2 + pub fn from_errno(code: libc::c_int) -> Error { + let msg = match code { + raw::LIBSSH2_ERROR_BANNER_RECV => "banner recv failure", + raw::LIBSSH2_ERROR_BANNER_SEND => "banner send failure", + raw::LIBSSH2_ERROR_INVALID_MAC => "invalid mac", + raw::LIBSSH2_ERROR_KEX_FAILURE => "kex failure", + raw::LIBSSH2_ERROR_ALLOC => "alloc failure", + raw::LIBSSH2_ERROR_SOCKET_SEND => "socket send faiulre", + raw::LIBSSH2_ERROR_KEY_EXCHANGE_FAILURE => "key exchange failure", + raw::LIBSSH2_ERROR_TIMEOUT => "timed out", + raw::LIBSSH2_ERROR_HOSTKEY_INIT => "hostkey init error", + raw::LIBSSH2_ERROR_HOSTKEY_SIGN => "hostkey sign error", + raw::LIBSSH2_ERROR_DECRYPT => "decrypt error", + raw::LIBSSH2_ERROR_SOCKET_DISCONNECT => "socket disconnected", + raw::LIBSSH2_ERROR_PROTO => "protocol error", + raw::LIBSSH2_ERROR_PASSWORD_EXPIRED => "password expired", + raw::LIBSSH2_ERROR_FILE => "file error", + raw::LIBSSH2_ERROR_METHOD_NONE => "bad method name", + raw::LIBSSH2_ERROR_AUTHENTICATION_FAILED => "authentication failed", + raw::LIBSSH2_ERROR_PUBLICKEY_UNVERIFIED => "public key unverified", + raw::LIBSSH2_ERROR_CHANNEL_OUTOFORDER => "channel out of order", + raw::LIBSSH2_ERROR_CHANNEL_FAILURE => "channel failure", + raw::LIBSSH2_ERROR_CHANNEL_REQUEST_DENIED => "request denied", + raw::LIBSSH2_ERROR_CHANNEL_UNKNOWN => "unknown channel error", + raw::LIBSSH2_ERROR_CHANNEL_WINDOW_EXCEEDED => "window exceeded", + raw::LIBSSH2_ERROR_CHANNEL_PACKET_EXCEEDED => "packet exceeded", + raw::LIBSSH2_ERROR_CHANNEL_CLOSED => "closed channel", + raw::LIBSSH2_ERROR_CHANNEL_EOF_SENT => "eof sent", + raw::LIBSSH2_ERROR_SCP_PROTOCOL => "scp protocol error", + raw::LIBSSH2_ERROR_ZLIB => "zlib error", + raw::LIBSSH2_ERROR_SOCKET_TIMEOUT => "socket timeout", + raw::LIBSSH2_ERROR_SFTP_PROTOCOL => "sftp protocol error", + raw::LIBSSH2_ERROR_REQUEST_DENIED => "request denied", + raw::LIBSSH2_ERROR_METHOD_NOT_SUPPORTED => "method not supported", + raw::LIBSSH2_ERROR_INVAL => "invalid", + raw::LIBSSH2_ERROR_INVALID_POLL_TYPE => "invalid poll type", + raw::LIBSSH2_ERROR_PUBLICKEY_PROTOCOL => "public key protocol error", + raw::LIBSSH2_ERROR_EAGAIN => "operation would block", + raw::LIBSSH2_ERROR_BUFFER_TOO_SMALL => "buffer too small", + raw::LIBSSH2_ERROR_BAD_USE => "bad use error", + raw::LIBSSH2_ERROR_COMPRESS => "compression error", + raw::LIBSSH2_ERROR_OUT_OF_BOUNDARY => "out of bounds", + raw::LIBSSH2_ERROR_AGENT_PROTOCOL => "invalid agent protocol", + raw::LIBSSH2_ERROR_SOCKET_RECV => "error receiving on socket", + raw::LIBSSH2_ERROR_ENCRYPT => "bad encrypt", + raw::LIBSSH2_ERROR_BAD_SOCKET => "bad socket", + raw::LIBSSH2_ERROR_KNOWN_HOSTS => "known hosts error", + _ => "unknown error" + }; + Error::new(code, msg) + } + /// Get the message corresponding to this error pub fn message(&self) -> &str { self.msg } } |