Files
deskflow/src/lib/arch/win32/XArchWindows.cpp
2025-06-02 21:55:36 +01:00

205 lines
5.8 KiB
C++

/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
* SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd.
* SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
*/
#include "arch/win32/XArchWindows.h"
#include "base/String.h"
std::string windowsErrorToString(DWORD error)
{
char *cmsg;
if (FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, 0, error,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&cmsg, 0, nullptr
) == 0) {
cmsg = nullptr;
return deskflow::string::sprintf("Unknown error, code %d", error);
}
std::string smsg(cmsg);
LocalFree(cmsg);
return smsg;
}
std::string winsockErrorToString(int error)
{
// built-in windows function for looking up error message strings
// may not look up network error messages correctly. we'll have
// to do it ourself.
static const struct
{
int m_code;
const char *m_msg;
}
s_netErrorCodes[] = {
// 10004
{WSAEINTR, "The (blocking) call was canceled via WSACancelBlockingCall"},
// 10009
{WSAEBADF, "Bad file handle"},
// 10013
{WSAEACCES, "The requested address is a broadcast address, but the appropriate flag was not set"},
// 10014
{WSAEFAULT, "WSAEFAULT"},
// 10022
{WSAEINVAL, "WSAEINVAL"},
// 10024
{WSAEMFILE, "No more file descriptors available"},
// 10035
{WSAEWOULDBLOCK,
"Socket is marked as non-blocking and no connections are present or the receive operation would block"},
// 10036
{WSAEINPROGRESS, "A blocking Windows Sockets operation is in progress"},
// 10037
{WSAEALREADY, "The asynchronous routine being canceled has already completed"},
// 10038
{WSAENOTSOCK, "At least on descriptor is not a socket"},
// 10039
{WSAEDESTADDRREQ, "A destination address is required"},
// 10040
{WSAEMSGSIZE, "The datagram was too large to fit into the specified buffer and was truncated"},
// 10041
{WSAEPROTOTYPE, "The specified protocol is the wrong type for this socket"},
// 10042
{WSAENOPROTOOPT, "The option is unknown or unsupported"},
// 10043
{WSAEPROTONOSUPPORT, "The specified protocol is not supported"},
// 10044
{WSAESOCKTNOSUPPORT, "The specified socket type is not supported by this address family"},
// 10045
{WSAEOPNOTSUPP, "The referenced socket is not a type that supports that operation"},
// 10046
{WSAEPFNOSUPPORT, "BSD: Protocol family not supported"},
// 10047
{WSAEAFNOSUPPORT, "The specified address family is not supported"},
// 10048
{WSAEADDRINUSE, "The specified address is already in use"},
// 10049
{WSAEADDRNOTAVAIL, "The specified address is not available from the local machine"},
// 10050
{WSAENETDOWN, "The Windows Sockets implementation has detected that the network subsystem has failed"},
// 10051
{WSAENETUNREACH, "The network can't be reached from this host at this time"},
// 10052
{WSAENETRESET, "The connection must be reset because the Windows Sockets implementation dropped it"},
// 10053
{WSAECONNABORTED, "The virtual circuit was aborted due to timeout or other failure"},
// 10054
{WSAECONNRESET, "The virtual circuit was reset by the remote side"},
// 10055
{WSAENOBUFS, "No buffer space is available or a buffer deadlock has occurred. The socket cannot be created"},
// 10056
{WSAEISCONN, "The socket is already connected"},
// 10057
{WSAENOTCONN, "The socket is not connected"},
// 10058
{WSAESHUTDOWN, "The socket has been shutdown"},
// 10059
{WSAETOOMANYREFS, "BSD: Too many references"},
// 10060
{WSAETIMEDOUT, "Attempt to connect timed out without establishing a connection"},
// 10061
{WSAECONNREFUSED, "Connection was refused"},
// 10062
{WSAELOOP, "Undocumented WinSock error code used in BSD"},
// 10063
{WSAENAMETOOLONG, "Undocumented WinSock error code used in BSD"},
// 10064
{WSAEHOSTDOWN, "Undocumented WinSock error code used in BSD"},
// 10065
{WSAEHOSTUNREACH, "No route to host"},
// 10066
{WSAENOTEMPTY, "Undocumented WinSock error code"},
// 10067
{WSAEPROCLIM, "Undocumented WinSock error code"},
// 10068
{WSAEUSERS, "Undocumented WinSock error code"},
// 10069
{WSAEDQUOT, "Undocumented WinSock error code"},
// 10070
{WSAESTALE, "Undocumented WinSock error code"},
// 10071
{WSAEREMOTE, "Undocumented WinSock error code"},
// 10091
{WSASYSNOTREADY, "Underlying network subsytem is not ready for network communication"},
// 10092
{WSAVERNOTSUPPORTED, "The version of WinSock API support requested is not provided in this implementation"},
// 10093
{WSANOTINITIALISED, "WinSock subsystem not properly initialized"},
// 10101
{WSAEDISCON, "Virtual circuit has gracefully terminated connection"},
// 11001
{WSAHOST_NOT_FOUND, "The specified host is unknown"},
// 11002
{WSATRY_AGAIN, "A temporary error occurred on an authoritative name server"},
// 11003
{WSANO_RECOVERY, "A non-recoverable name server error occurred"},
// 11004
{WSANO_DATA, "The requested name is valid but does not have an IP address"},
// end
{0, nullptr}
};
for (unsigned int i = 0; s_netErrorCodes[i].m_code != 0; ++i) {
if (s_netErrorCodes[i].m_code == error) {
return s_netErrorCodes[i].m_msg;
}
}
return "Unknown error";
}