source: trunk/synergy/lib/arch/XArchWindows.cpp

Last change on this file was 2749, checked in by bird, 19 years ago

synergy v1.3.1 sources (zip).

File size: 5.8 KB
Line 
1/*
2 * synergy -- mouse and keyboard sharing utility
3 * Copyright (C) 2002 Chris Schoeneman
4 *
5 * This package is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * found in the file COPYING that should have accompanied this file.
8 *
9 * This package is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 */
14
15#include "XArchWindows.h"
16#include "CArchNetworkWinsock.h"
17
18//
19// XArchEvalWindows
20//
21
22XArchEval*
23XArchEvalWindows::clone() const throw()
24{
25 return new XArchEvalWindows(m_errno);
26}
27
28std::string
29XArchEvalWindows::eval() const throw()
30{
31 char* cmsg;
32 if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
33 FORMAT_MESSAGE_IGNORE_INSERTS |
34 FORMAT_MESSAGE_FROM_SYSTEM,
35 0,
36 m_errno,
37 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
38 (LPTSTR)&cmsg,
39 0,
40 NULL) == 0) {
41 cmsg = NULL;
42 return "Unknown error";
43 }
44 std::string smsg(cmsg);
45 LocalFree(cmsg);
46 return smsg;
47}
48
49
50//
51// XArchEvalWinsock
52//
53
54XArchEval*
55XArchEvalWinsock::clone() const throw()
56{
57 return new XArchEvalWinsock(m_errno);
58}
59
60std::string
61XArchEvalWinsock::eval() const throw()
62{
63 // built-in windows function for looking up error message strings
64 // may not look up network error messages correctly. we'll have
65 // to do it ourself.
66 static const struct { int m_code; const char* m_msg; } s_netErrorCodes[] = {
67 /* 10004 */{WSAEINTR, "The (blocking) call was canceled via WSACancelBlockingCall"},
68 /* 10009 */{WSAEBADF, "Bad file handle"},
69 /* 10013 */{WSAEACCES, "The requested address is a broadcast address, but the appropriate flag was not set"},
70 /* 10014 */{WSAEFAULT, "WSAEFAULT"},
71 /* 10022 */{WSAEINVAL, "WSAEINVAL"},
72 /* 10024 */{WSAEMFILE, "No more file descriptors available"},
73 /* 10035 */{WSAEWOULDBLOCK, "Socket is marked as non-blocking and no connections are present or the receive operation would block"},
74 /* 10036 */{WSAEINPROGRESS, "A blocking Windows Sockets operation is in progress"},
75 /* 10037 */{WSAEALREADY, "The asynchronous routine being canceled has already completed"},
76 /* 10038 */{WSAENOTSOCK, "At least on descriptor is not a socket"},
77 /* 10039 */{WSAEDESTADDRREQ, "A destination address is required"},
78 /* 10040 */{WSAEMSGSIZE, "The datagram was too large to fit into the specified buffer and was truncated"},
79 /* 10041 */{WSAEPROTOTYPE, "The specified protocol is the wrong type for this socket"},
80 /* 10042 */{WSAENOPROTOOPT, "The option is unknown or unsupported"},
81 /* 10043 */{WSAEPROTONOSUPPORT,"The specified protocol is not supported"},
82 /* 10044 */{WSAESOCKTNOSUPPORT,"The specified socket type is not supported by this address family"},
83 /* 10045 */{WSAEOPNOTSUPP, "The referenced socket is not a type that supports that operation"},
84 /* 10046 */{WSAEPFNOSUPPORT, "BSD: Protocol family not supported"},
85 /* 10047 */{WSAEAFNOSUPPORT, "The specified address family is not supported"},
86 /* 10048 */{WSAEADDRINUSE, "The specified address is already in use"},
87 /* 10049 */{WSAEADDRNOTAVAIL, "The specified address is not available from the local machine"},
88 /* 10050 */{WSAENETDOWN, "The Windows Sockets implementation has detected that the network subsystem has failed"},
89 /* 10051 */{WSAENETUNREACH, "The network can't be reached from this hos at this time"},
90 /* 10052 */{WSAENETRESET, "The connection must be reset because the Windows Sockets implementation dropped it"},
91 /* 10053 */{WSAECONNABORTED, "The virtual circuit was aborted due to timeout or other failure"},
92 /* 10054 */{WSAECONNRESET, "The virtual circuit was reset by the remote side"},
93 /* 10055 */{WSAENOBUFS, "No buffer space is available or a buffer deadlock has occured. The socket cannot be created"},
94 /* 10056 */{WSAEISCONN, "The socket is already connected"},
95 /* 10057 */{WSAENOTCONN, "The socket is not connected"},
96 /* 10058 */{WSAESHUTDOWN, "The socket has been shutdown"},
97 /* 10059 */{WSAETOOMANYREFS, "BSD: Too many references"},
98 /* 10060 */{WSAETIMEDOUT, "Attempt to connect timed out without establishing a connection"},
99 /* 10061 */{WSAECONNREFUSED, "The attempt to connect was forcefully rejected"},
100 /* 10062 */{WSAELOOP, "Undocumented WinSock error code used in BSD"},
101 /* 10063 */{WSAENAMETOOLONG, "Undocumented WinSock error code used in BSD"},
102 /* 10064 */{WSAEHOSTDOWN, "Undocumented WinSock error code used in BSD"},
103 /* 10065 */{WSAEHOSTUNREACH, "No route to host"},
104 /* 10066 */{WSAENOTEMPTY, "Undocumented WinSock error code"},
105 /* 10067 */{WSAEPROCLIM, "Undocumented WinSock error code"},
106 /* 10068 */{WSAEUSERS, "Undocumented WinSock error code"},
107 /* 10069 */{WSAEDQUOT, "Undocumented WinSock error code"},
108 /* 10070 */{WSAESTALE, "Undocumented WinSock error code"},
109 /* 10071 */{WSAEREMOTE, "Undocumented WinSock error code"},
110 /* 10091 */{WSASYSNOTREADY, "Underlying network subsytem is not ready for network communication"},
111 /* 10092 */{WSAVERNOTSUPPORTED, "The version of WinSock API support requested is not provided in this implementation"},
112 /* 10093 */{WSANOTINITIALISED, "WinSock subsystem not properly initialized"},
113 /* 10101 */{WSAEDISCON, "Virtual circuit has gracefully terminated connection"},
114 /* 11001 */{WSAHOST_NOT_FOUND, "The specified host is unknown"},
115 /* 11002 */{WSATRY_AGAIN, "A temporary error occurred on an authoritative name server"},
116 /* 11003 */{WSANO_RECOVERY, "A non-recoverable name server error occurred"},
117 /* 11004 */{WSANO_DATA, "The requested name is valid but does not have an IP address"},
118 /* end */{0, NULL}
119 };
120
121 for (unsigned int i = 0; s_netErrorCodes[i].m_code != 0; ++i) {
122 if (s_netErrorCodes[i].m_code == m_errno) {
123 return s_netErrorCodes[i].m_msg;
124 }
125 }
126 return "Unknown error";
127}
Note: See TracBrowser for help on using the repository browser.