summaryrefslogtreecommitdiff
path: root/src/error.rs
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2014-09-19 10:22:59 -0700
committerAlex Crichton <alex@alexcrichton.com>2014-09-19 10:22:59 -0700
commitfb3186e7285977d88babc4ce13bf93a6bc76ccb5 (patch)
tree5ebac5e6612e0c20a0e67c57246e48c4033f8c0c /src/error.rs
parent2c33e0bd60b96846298da06c5c70fdc7c029dae5 (diff)
downloadssh2-rs-fb3186e7285977d88babc4ce13bf93a6bc76ccb5.zip
Start SFTP bindings
Diffstat (limited to 'src/error.rs')
-rw-r--r--src/error.rs53
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 }
}