Panda3D
Loading...
Searching...
No Matches
error_utils.cxx
Go to the documentation of this file.
1/**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file error_utils.cxx
10 * @author mike
11 * @date 2000-11-07
12 */
13
14#include "error_utils.h"
15#include "config_express.h"
16
17#include <errno.h>
18#include <stdio.h>
19
20#if defined(WIN32_VC) || defined(WIN64_VC)
21 #include <winsock2.h>
22#endif
23
24using std::string;
25
26/**
27 *
28 */
29string error_to_text(ErrorUtilCode err) {
30 const char *errmsg = "Unknown error";
31
32 switch (err) {
33 case EU_http_redirect:
34 errmsg = "EU_http_redirect";
35 break;
36 case EU_eof:
37 errmsg = "EU_eof";
38 break;
39 case EU_network_no_data:
40 errmsg = "EU_network_no_data";
41 break;
42 case EU_ok:
43 errmsg = "EU_ok";
44 break;
45 case EU_write:
46 errmsg = "EU_write";
47 break;
48 case EU_success:
49 errmsg = "EU_success";
50 break;
51 case EU_error_abort:
52 errmsg = "EU_error_abort";
53 break;
54 case EU_error_file_empty:
55 errmsg = "EU_error_file_empty";
56 break;
57 case EU_error_file_invalid:
58 errmsg = "EU_error_file_invalid";
59 break;
60 case EU_error_invalid_checksum:
61 errmsg = "EU_error_invalid_checksum";
62 break;
63 case EU_error_network_dead:
64 errmsg = "EU_error_network_dead";
65 break;
66 case EU_error_network_unreachable:
67 errmsg = "EU_error_network_unreachable";
68 break;
69 case EU_error_network_disconnected:
70 errmsg = "EU_error_network_disconnected";
71 break;
72 case EU_error_network_timeout:
73 errmsg = "EU_error_network_timeout";
74 break;
75 case EU_error_network_no_data:
76 errmsg = "EU_error_network_no_data";
77 break;
78 case EU_error_network_disconnected_locally:
79 errmsg = "EU_error_network_disconnected_locally";
80 break;
81 case EU_error_network_buffer_overflow:
82 errmsg = "EU_error_network_buffer_overflow";
83 break;
84 case EU_error_network_disk_quota_exceeded:
85 errmsg = "EU_error_network_disk_quota_exceeded";
86 break;
87 case EU_error_network_remote_host_disconnected:
88 errmsg = "EU_error_network_remote_host_disconnected";
89 break;
90 case EU_error_network_remote_host_down:
91 errmsg = "EU_error_network_remote_host_down";
92 break;
93 case EU_error_network_remote_host_unreachable:
94 errmsg = "EU_error_network_remote_host_unreachable";
95 break;
96 case EU_error_network_remote_host_not_found:
97 errmsg = "EU_error_network_remote_host_not_found";
98 break;
99 case EU_error_network_remote_host_no_response:
100 errmsg = "EU_error_network_remote_host_no_response";
101 break;
102 case EU_error_write_out_of_files:
103 errmsg = "EU_error_write_out_of_files";
104 break;
105 case EU_error_write_out_of_memory:
106 errmsg = "EU_error_write_out_of_memory";
107 break;
108 case EU_error_write_sharing_violation:
109 errmsg = "EU_error_write_sharing_violation";
110 break;
111 case EU_error_write_disk_full:
112 errmsg = "EU_error_write_disk_full";
113 break;
114 case EU_error_write_disk_not_found:
115 errmsg = "EU_error_write_disk_not_found";
116 break;
117 case EU_error_write_disk_sector_not_found:
118 errmsg = "EU_error_write_disk_sector_not_found";
119 break;
120 case EU_error_write_disk_fault:
121 errmsg = "EU_error_write_disk_fault";
122 break;
123 case EU_error_write_file_rename:
124 errmsg = "EU_error_write_file_rename";
125 break;
126 case EU_error_http_server_timeout:
127 errmsg = "EU_error_http_server_timeout";
128 break;
129 case EU_error_http_gateway_timeout:
130 errmsg = "EU_error_http_gateway_timeout";
131 break;
132 case EU_error_http_service_unavailable:
133 errmsg = "EU_error_http_service_unavailable";
134 break;
135 case EU_error_http_proxy_authentication:
136 errmsg = "EU_error_http_proxy_authentication";
137 break;
138 case EU_error_zlib:
139 errmsg = "EU_error_zlib";
140 break;
141 case EU_write_ram:
142 errmsg = "EU_write_ram";
143 break;
144 }
145
146 char msgbuf[1024];
147 sprintf(msgbuf,"%d: %s",err,errmsg);
148 return string(msgbuf);
149}
150
151/**
152 *
153 */
154int
155get_write_error() {
156#if !defined(WIN32) && !defined(WIN64)
157 return EU_error_abort;
158#else
159 switch (errno) {
160 case 4:
161 case 18:
162 return EU_error_write_out_of_files;
163 case 8:
164 case 14:
165 return EU_error_write_out_of_memory;
166 case 20:
167 return EU_error_write_disk_not_found;
168 case 25:
169 case 27:
170 return EU_error_write_disk_sector_not_found;
171 case 29:
172 case 30:
173 case 31:
174 return EU_error_write_disk_fault;
175 case 32:
176 case 33:
177 case 36:
178 return EU_error_write_sharing_violation;
179 case 39:
180 return EU_error_write_disk_full;
181 default:
182 return EU_error_abort;
183 }
184#endif
185}
186
187#ifdef HAVE_NET
188/**
189 *
190 */
191string handle_socket_error() {
192#if !defined(WIN32) && !defined(WIN64)
193 return string(strerror(errno));
194#else
195 int err = WSAGetLastError();
196 const char *errmsg;
197 switch (err) {
198 case 10022:
199 errmsg = "An invalid argument was supplied";
200 case 10036:
201 errmsg = "A blocking operation is currently executing";
202 case 10040:
203 errmsg = "Message was larger than internal buffer or network limit";
204 case 10050:
205 errmsg = "Network dead";
206 case 10051:
207 errmsg = "Network unreachable";
208 case 10052:
209 errmsg = "Connection broken because keep-alive detected a failure";
210 case 10053:
211 errmsg = "Connection aborted by local host software";
212 case 10054:
213 errmsg = "Connection closed by remote host";
214 case 10055:
215 errmsg = "Out of buffer space or queue overflowed";
216 case 10057:
217 errmsg = "Socket was not connected";
218 case 10058:
219 errmsg = "Socket was previously shut down";
220 case 10060:
221 errmsg = "Connection timed out";
222 case 10061:
223 errmsg = "Connection refused by remote host";
224 case 10064:
225 errmsg = "Remote host is down";
226 case 10065:
227 errmsg = "Remote host is unreachable";
228 case 10093:
229 errmsg = "WSAStartup() was not called";
230 case 0:
231 errmsg = strerror(errno);
232 default:
233 if (express_cat.is_debug())
234 express_cat.debug() << "handle_socket_error - unknown error: " << err << std::endl;
235 errmsg = "Unknown WSA error";
236 }
237
238 char msgbuf[1024];
239 sprintf(msgbuf,"WSA errno %d, errno %d: %s",err,errno,errmsg);
240 return string(msgbuf);
241#endif
242}
243#endif
244
245#ifdef HAVE_NET
246/**
247 *
248 */
249int
250get_network_error() {
251#if !defined(WIN32) && !defined(WIN64)
252 return EU_error_abort;
253#else
254 int err = WSAGetLastError();
255 switch (err) {
256 case 10050:
257 return EU_error_network_dead;
258 case 10051:
259 return EU_error_network_unreachable;
260 case 10052:
261 case 10057:
262 case 10058:
263 return EU_error_network_disconnected;
264 case 10053:
265 return EU_error_network_disconnected_locally;
266 case 10054:
267 case 10061:
268 return EU_error_network_remote_host_disconnected;
269 case 10055:
270 return EU_error_network_buffer_overflow;
271 case 10060:
272 return EU_error_network_timeout;
273 case 10064:
274 return EU_error_network_remote_host_down;
275 case 10065:
276 return EU_error_network_remote_host_unreachable;
277 case 10069:
278 return EU_error_network_disk_quota_exceeded;
279 case 11001:
280 return EU_error_network_remote_host_not_found;
281 case 11002:
282 return EU_error_network_remote_host_no_response;
283 case 0:
284 if (express_cat.is_debug())
285 express_cat.debug()
286 << "get_network_error() - WSA error = 0 - error : "
287 << strerror(errno) << std::endl;
288 return EU_error_abort;
289 default:
290 if (express_cat.is_debug())
291 express_cat.debug()
292 << "get_network_error() - unknown error: " << err << std::endl;
293 return EU_error_abort;
294 }
295#endif
296}
297#endif
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.