| 238 | } |
| 239 | |
| 240 | sf::Sftp::Result makeError(LIBSSH2_SESSION* session, LIBSSH2_SFTP* sftp = nullptr) |
| 241 | { |
| 242 | using Value = sf::Sftp::Result::Value; |
| 243 | |
| 244 | char* ptr{}; |
| 245 | auto length = 0; |
| 246 | const auto error = libssh2_session_last_error(session, &ptr, &length, 0); |
| 247 | const auto size = static_cast<std::size_t>(length); |
| 248 | |
| 249 | switch (error) |
| 250 | { |
| 251 | case LIBSSH2_ERROR_BANNER_RECV: |
| 252 | return sf::Sftp::Result(Value::BannerReceive, {ptr, size}); |
| 253 | case LIBSSH2_ERROR_BANNER_SEND: |
| 254 | return sf::Sftp::Result(Value::BannerSend, {ptr, size}); |
| 255 | case LIBSSH2_ERROR_INVALID_MAC: |
| 256 | return sf::Sftp::Result(Value::InvalidMac, {ptr, size}); |
| 257 | case LIBSSH2_ERROR_KEX_FAILURE: |
| 258 | return sf::Sftp::Result(Value::KeyExchangeFailure, {ptr, size}); |
| 259 | case LIBSSH2_ERROR_ALLOC: |
| 260 | return sf::Sftp::Result(Value::AllocationFailure, {ptr, size}); |
| 261 | case LIBSSH2_ERROR_SOCKET_SEND: |
| 262 | return sf::Sftp::Result(Value::SocketSend, {ptr, size}); |
| 263 | case LIBSSH2_ERROR_KEY_EXCHANGE_FAILURE: |
| 264 | return sf::Sftp::Result(Value::KeyExchangeFailure, {ptr, size}); |
| 265 | case LIBSSH2_ERROR_TIMEOUT: |
| 266 | return sf::Sftp::Result(Value::Timeout, {ptr, size}); |
| 267 | case LIBSSH2_ERROR_HOSTKEY_INIT: |
| 268 | return sf::Sftp::Result(Value::HostKeyInitialization, {ptr, size}); |
| 269 | case LIBSSH2_ERROR_HOSTKEY_SIGN: |
| 270 | return sf::Sftp::Result(Value::HostKeySign, {ptr, size}); |
| 271 | case LIBSSH2_ERROR_DECRYPT: |
| 272 | return sf::Sftp::Result(Value::DecryptError, {ptr, size}); |
| 273 | case LIBSSH2_ERROR_SOCKET_DISCONNECT: |
| 274 | return sf::Sftp::Result(Value::Disconnected, {ptr, size}); |
| 275 | case LIBSSH2_ERROR_PROTO: |
| 276 | return sf::Sftp::Result(Value::ProtocolError, {ptr, size}); |
| 277 | case LIBSSH2_ERROR_PASSWORD_EXPIRED: |
| 278 | return sf::Sftp::Result(Value::PasswordExpired, {ptr, size}); |
| 279 | case LIBSSH2_ERROR_FILE: |
| 280 | return sf::Sftp::Result(Value::FileError, {ptr, size}); |
| 281 | case LIBSSH2_ERROR_METHOD_NONE: |
| 282 | return sf::Sftp::Result(Value::MethodNone, {ptr, size}); |
| 283 | case LIBSSH2_ERROR_AUTHENTICATION_FAILED: |
| 284 | return sf::Sftp::Result(Value::AuthenticationFailed, {ptr, size}); |
| 285 | case LIBSSH2_ERROR_PUBLICKEY_UNVERIFIED: |
| 286 | return sf::Sftp::Result(Value::PublicKeyUnverified, {ptr, size}); |
| 287 | case LIBSSH2_ERROR_CHANNEL_OUTOFORDER: |
| 288 | return sf::Sftp::Result(Value::ChannelOutOfOrder, {ptr, size}); |
| 289 | case LIBSSH2_ERROR_CHANNEL_FAILURE: |
| 290 | return sf::Sftp::Result(Value::ChannelFailure, {ptr, size}); |
| 291 | case LIBSSH2_ERROR_CHANNEL_REQUEST_DENIED: |
| 292 | return sf::Sftp::Result(Value::ChannelRequestDenied, {ptr, size}); |
| 293 | case LIBSSH2_ERROR_CHANNEL_UNKNOWN: |
| 294 | return sf::Sftp::Result(Value::ChannelUnknown, {ptr, size}); |
| 295 | case LIBSSH2_ERROR_CHANNEL_WINDOW_EXCEEDED: |
| 296 | return sf::Sftp::Result(Value::ChannelWindowExceeded, {ptr, size}); |
| 297 | case LIBSSH2_ERROR_CHANNEL_PACKET_EXCEEDED: |
no test coverage detected