From 6f043cbdfb499215a500fdd6a2aeca0c590e283a Mon Sep 17 00:00:00 2001 From: Till Wimmer Date: Fri, 25 Jul 2025 12:31:23 +0200 Subject: [PATCH] session: add err messages for most common WSA error codes (+ applied clang-format to file) Signed-off-by: Till Wimmer --- src/session.c | 45 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/src/session.c b/src/session.c index 45db40bd6..d3f7f0881 100644 --- a/src/session.c +++ b/src/session.c @@ -26,6 +26,10 @@ #include #include +#ifdef _WIN32 +#include +#endif + #include "libssh/priv.h" #include "libssh/libssh.h" #include "libssh/crypto.h" @@ -409,10 +413,10 @@ const char* ssh_get_clientbanner(ssh_session session) { * @return Returns the server banner string or NULL. */ const char* ssh_get_serverbanner(ssh_session session) { - if(!session) { - return NULL; - } - return session->serverbanner; + if (!session) { + return NULL; + } + return session->serverbanner; } /** @@ -942,16 +946,41 @@ int ssh_get_version(ssh_session session) { * @param user is a pointer to session */ void ssh_socket_exception_callback(int code, int errno_code, void *user){ - ssh_session session=(ssh_session)user; + ssh_session session = (ssh_session)user; - SSH_LOG(SSH_LOG_RARE,"Socket exception callback: %d (%d)",code, errno_code); + SSH_LOG(SSH_LOG_RARE, + "Socket exception callback: %d (%d)", + code, + errno_code); session->session_state = SSH_SESSION_STATE_ERROR; if (errno_code == 0 && code == SSH_SOCKET_EXCEPTION_EOF) { ssh_set_error(session, SSH_FATAL, "Socket error: disconnected"); +#ifdef _WIN32 + } else if (errno_code == WSAENETDOWN) { + ssh_set_error(session, SSH_FATAL, "Socket error: network down"); + } else if (errno_code == WSAENETUNREACH) { + ssh_set_error(session, SSH_FATAL, "Socket error: network unreachable"); + } else if (errno_code == WSAENETRESET) { + ssh_set_error(session, SSH_FATAL, "Socket error: network reset"); + } else if (errno_code == WSAECONNABORTED) { + ssh_set_error(session, SSH_FATAL, "Socket error: connection aborted"); + } else if (errno_code == WSAECONNRESET) { + ssh_set_error(session, + SSH_FATAL, + "Socket error: connection reset by peer"); + } else if (errno_code == WSAETIMEDOUT) { + ssh_set_error(session, SSH_FATAL, "Socket error: connection timed out"); + } else if (errno_code == WSAECONNREFUSED) { + ssh_set_error(session, SSH_FATAL, "Socket error: connection refused"); + } else if (errno_code == WSAEHOSTUNREACH) { + ssh_set_error(session, SSH_FATAL, "Socket error: host unreachable"); +#endif } else { char err_msg[SSH_ERRNO_MSG_MAX] = {0}; - ssh_set_error(session, SSH_FATAL, "Socket error: %s", - ssh_strerror(errno_code, err_msg, SSH_ERRNO_MSG_MAX)); + ssh_set_error(session, + SSH_FATAL, + "Socket error: %s", + ssh_strerror(errno_code, err_msg, SSH_ERRNO_MSG_MAX)); } session->ssh_connection_callback(session); -- GitLab