error_utils.cxx 8.4 KB

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