Panda3D
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 
24 using std::string;
25 
26 /**
27  *
28  */
29 string 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  */
154 int
155 get_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  */
191 string 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  */
249 int
250 get_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.