summaryrefslogtreecommitdiff
path: root/src/error.rs
AgeCommit message (Collapse)Author
2020-11-22Handle more precise SFTP error codes (#203)Matteo Bigoi
* Handle more precise SFTP error codes * Allow set-env in macos github action * Bump to 0.9 since the Error interface has changed, hence this is a breaking change
2020-01-29copy the error message obtained in last_errorYusuke Sasaki
The pointer obtained by `libssh2_session_last_error` points to the buffer that `LIBSSH2_SESSION` holds internally, so its contents may be overwritten by the next API call. This patch changes the data type for storing error messages inside `Error` from `&'static str` to `Cow<'static, str>`.
2020-01-18Make properly Send safeWez Furlong
In earlier iterations I accidentally removed Send from Session and then later restored it in an unsafe way. This commit restructures the bindings so that each of the objects holds a reference to the appropriate thing to keep everything alive safely, without awkward lifetimes to deal with. The key to this is that the underlying Session is tracked by an Arc<Mutex<>>, with the related objects ensuring that they lock this before they call into the underlying API. In order to make this work, I've had to adjust the API around iterating both known hosts and agent identities: previously these would iterate over internal references but with this shift there isn't a reasonable way to make that safe. The strategy is instead to return a copy of the host/identity data and then later look up the associated raw pointer when needed. The purist in me feels that the copy feels slightly wasteful, but the realist justifies this with the observation that the cardinality of both known hosts and identities is typically small enough that the cost of this is in the noise compared to actually doing the crypto+network ops. I've removed a couple of error code related helpers from some of the objects: those were really internal APIs and were redundant with methods exported by the Error type anyway. Fixes: https://github.com/alexcrichton/ssh2-rs/issues/154 Refs: https://github.com/alexcrichton/ssh2-rs/issues/137
2019-12-08map TIMEOUT -> std::io::ErrorKind::TimedOutWez Furlong
Closes: https://github.com/alexcrichton/ssh2-rs/issues/141
2019-08-02tighten up `Session::rc`Wez Furlong
Previously, this function could return None even if passed an error result. This could happen in situations where no error had been recorded against the session object, but where libssh2 had returned an error condition anyway. It was also possible for the prior implementation to return the wrong information in a similar situation: if an error had been recorded against the session, that error would be returned rather than the current error code. This commit tidies up the implementation of this function by always returning an `Error` object that corresponds to the provided `rc` parameter. If the last error message recorded against the `Session` has a matching error value then that error message will be used, otherwise we'll synthesize one just from the error code.
2019-07-29adjust std usage for rust 1.26 compatWez Furlong
2019-07-29Map EAGAIN errors appropriatelyWez Furlong
When the channel is set to non-blocking mode, take care to map the underlying ssh2 error code to the WouldBlock error kind so that embedding applications can correctly handle that situation.
2019-07-29Channel, Sftp no longer borrow SessionWez Furlong
Instead the internal session is kept alive via Rc Refs: https://github.com/alexcrichton/ssh2-rs/issues/53
2019-07-29Session::handshake now takes ownership of TcpStreamWez Furlong
Refs: https://github.com/alexcrichton/ssh2-rs/issues/17
2019-07-29cargo fmtWez Furlong
No functional changes, just formatting
2018-04-14Add libssh2 SFTP error codesBen Reedy
2017-04-13Return unknown error when none is returned by last_errorAlexandre Bury
Fixes #60
2015-04-02Update to rust masterAlex Crichton
2015-03-27Fix lint errorsAlex Crichton
2015-02-20Bump versions and update to masterAlex Crichton
2015-01-23Update to rust masterAlex Crichton
2015-01-18Tweak impls/apisAlex Crichton
Lots of changes, but largely cosmetic, reorganization, or internal refactorings.
2015-01-09Update to rust masterAlex Crichton
2015-01-07Update to rust masterAlex Crichton
2014-11-24Update to rust masterAlex Crichton
2014-09-19Bind SFTP functionality.Alex Crichton
2014-09-19Start SFTP bindingsAlex Crichton
2014-09-18Bind and tests many channel-based functionsAlex Crichton
2014-09-17Bind the SSH2 AgentAlex Crichton
2014-09-17Initial commitAlex Crichton
Bind a Session type (no I/O yet)