Panda3D

error_utils.cxx

00001 // Filename: error_utils.cxx
00002 // Created by:  mike (07Nov00)
00003 //
00004 ////////////////////////////////////////////////////////////////////
00005 //
00006 // PANDA 3D SOFTWARE
00007 // Copyright (c) Carnegie Mellon University.  All rights reserved.
00008 //
00009 // All use of this software is subject to the terms of the revised BSD
00010 // license.  You should have received a copy of this license along
00011 // with this source code in a file named "LICENSE."
00012 //
00013 ////////////////////////////////////////////////////////////////////
00014 
00015 
00016 #include "error_utils.h"
00017 #include "config_express.h"
00018 
00019 #include <errno.h>
00020 #include <stdio.h>
00021 
00022 #if defined(WIN32_VC) || defined(WIN64_VC)
00023   #include <winsock2.h>
00024 #endif
00025 
00026 ////////////////////////////////////////////////////////////////////
00027 //     Function: error_to_text
00028 //  Description:
00029 ////////////////////////////////////////////////////////////////////
00030 string error_to_text(ErrorUtilCode err) {
00031   const char *errmsg = "Unknown error";
00032 
00033   switch (err) {
00034   case EU_http_redirect:
00035     errmsg = "EU_http_redirect";
00036     break;
00037   case EU_eof:
00038     errmsg = "EU_eof";
00039     break;
00040   case EU_network_no_data:
00041     errmsg = "EU_network_no_data";
00042     break;
00043   case EU_ok:
00044     errmsg = "EU_ok";
00045     break;
00046   case EU_write:
00047     errmsg = "EU_write";
00048     break;
00049   case EU_success:
00050     errmsg = "EU_success";
00051     break;
00052   case EU_error_abort:
00053     errmsg = "EU_error_abort";
00054     break;
00055   case EU_error_file_empty:
00056     errmsg = "EU_error_file_empty";
00057     break;
00058   case EU_error_file_invalid:
00059     errmsg = "EU_error_file_invalid";
00060     break;
00061   case EU_error_invalid_checksum:
00062     errmsg = "EU_error_invalid_checksum";
00063     break;
00064   case EU_error_network_dead:
00065     errmsg = "EU_error_network_dead";
00066     break;
00067   case EU_error_network_unreachable:
00068     errmsg = "EU_error_network_unreachable";
00069     break;
00070   case EU_error_network_disconnected:
00071     errmsg = "EU_error_network_disconnected";
00072     break;
00073   case EU_error_network_timeout:
00074     errmsg = "EU_error_network_timeout";
00075     break;
00076   case EU_error_network_no_data:
00077     errmsg = "EU_error_network_no_data";
00078     break;
00079   case EU_error_network_disconnected_locally:
00080     errmsg = "EU_error_network_disconnected_locally";
00081     break;
00082   case EU_error_network_buffer_overflow:
00083     errmsg = "EU_error_network_buffer_overflow";
00084     break;
00085   case EU_error_network_disk_quota_exceeded:
00086     errmsg = "EU_error_network_disk_quota_exceeded";
00087     break;
00088   case EU_error_network_remote_host_disconnected:
00089     errmsg = "EU_error_network_remote_host_disconnected";
00090     break;
00091   case EU_error_network_remote_host_down:
00092     errmsg = "EU_error_network_remote_host_down";
00093     break;
00094   case EU_error_network_remote_host_unreachable:
00095     errmsg = "EU_error_network_remote_host_unreachable";
00096     break;
00097   case EU_error_network_remote_host_not_found:
00098     errmsg = "EU_error_network_remote_host_not_found";
00099     break;
00100   case EU_error_network_remote_host_no_response:
00101     errmsg = "EU_error_network_remote_host_no_response";
00102     break;
00103   case EU_error_write_out_of_files:
00104     errmsg = "EU_error_write_out_of_files";
00105     break;
00106   case EU_error_write_out_of_memory:
00107     errmsg = "EU_error_write_out_of_memory";
00108     break;
00109   case EU_error_write_sharing_violation:
00110     errmsg = "EU_error_write_sharing_violation";
00111     break;
00112   case EU_error_write_disk_full:
00113     errmsg = "EU_error_write_disk_full";
00114     break;
00115   case EU_error_write_disk_not_found:
00116     errmsg = "EU_error_write_disk_not_found";
00117     break;
00118   case EU_error_write_disk_sector_not_found:
00119     errmsg = "EU_error_write_disk_sector_not_found";
00120     break;
00121   case EU_error_write_disk_fault:
00122     errmsg = "EU_error_write_disk_fault";
00123     break;
00124   case EU_error_write_file_rename:
00125     errmsg = "EU_error_write_file_rename";
00126     break;
00127   case EU_error_http_server_timeout:
00128     errmsg = "EU_error_http_server_timeout";
00129     break;
00130   case EU_error_http_gateway_timeout:
00131     errmsg = "EU_error_http_gateway_timeout";
00132     break;
00133   case EU_error_http_service_unavailable:
00134     errmsg = "EU_error_http_service_unavailable";
00135     break;
00136   case EU_error_http_proxy_authentication:
00137     errmsg = "EU_error_http_proxy_authentication";
00138     break;
00139   case EU_error_zlib:
00140     errmsg = "EU_error_zlib";
00141     break;
00142   case EU_write_ram:
00143     errmsg = "EU_write_ram";
00144     break;
00145   }
00146 
00147   char msgbuf[1024];
00148   sprintf(msgbuf,"%d: %s",err,errmsg);
00149   return string(msgbuf);
00150 }
00151 
00152 ////////////////////////////////////////////////////////////////////
00153 //     Function: get_write_error
00154 //  Description:
00155 ////////////////////////////////////////////////////////////////////
00156 int
00157 get_write_error() {
00158 #if !defined(WIN32) && !defined(WIN64)
00159   return EU_error_abort;
00160 #else
00161   switch (errno) {
00162     case 4:
00163     case 18:
00164       return EU_error_write_out_of_files;
00165     case 8:
00166     case 14:
00167       return EU_error_write_out_of_memory;
00168     case 20:
00169       return EU_error_write_disk_not_found;
00170     case 25:
00171     case 27:
00172       return EU_error_write_disk_sector_not_found;
00173     case 29:
00174     case 30:
00175     case 31:
00176       return EU_error_write_disk_fault;
00177     case 32:
00178     case 33:
00179     case 36:
00180       return EU_error_write_sharing_violation;
00181     case 39:
00182       return EU_error_write_disk_full;
00183     default:
00184       return EU_error_abort;
00185   }
00186 #endif
00187 }
00188 
00189 #ifdef HAVE_NET
00190 ////////////////////////////////////////////////////////////////////
00191 //     Function: handle_socket_error
00192 //  Description:
00193 ////////////////////////////////////////////////////////////////////
00194 string handle_socket_error() {
00195 #if !defined(WIN32) && !defined(WIN64)
00196   return string(strerror(errno));
00197 #else
00198   int err = WSAGetLastError();
00199   char *errmsg;
00200   switch (err) {
00201     case 10022:
00202       errmsg =  "An invalid argument was supplied";
00203     case 10036:
00204       errmsg =  "A blocking operation is currently executing";
00205     case 10040:
00206       errmsg =  "Message was larger than internal buffer or network limit";
00207     case 10050:
00208       errmsg =  "Network dead";
00209     case 10051:
00210       errmsg =  "Network unreachable";
00211     case 10052:
00212       errmsg =  "Connection broken because keep-alive detected a failure";
00213     case 10053:
00214       errmsg =  "Connection aborted by local host software";
00215     case 10054:
00216       errmsg =  "Connection closed by remote host";
00217     case 10055:
00218       errmsg =  "Out of buffer space or queue overflowed";
00219     case 10057:
00220       errmsg =  "Socket was not connected";
00221     case 10058:
00222       errmsg =  "Socket was previously shut down";
00223     case 10060:
00224       errmsg =  "Connection timed out";
00225     case 10061:
00226       errmsg =  "Connection refused by remote host";
00227     case 10064:
00228       errmsg =  "Remote host is down";
00229     case 10065:
00230       errmsg =  "Remote host is unreachable";
00231     case 10093:
00232       errmsg =  "WSAStartup() was not called";
00233     case 0:
00234       errmsg = strerror(errno);
00235     default:
00236       if (express_cat.is_debug())
00237         express_cat.debug() << "handle_socket_error - unknown error: " << err << endl;
00238       errmsg = "Unknown WSA error";
00239   }
00240 
00241   char msgbuf[1024];
00242   sprintf(msgbuf,"WSA errno %d, errno %d: %s",err,errno,errmsg);
00243   return string(msgbuf);
00244 #endif
00245 }
00246 #endif
00247 
00248 #ifdef HAVE_NET
00249 ////////////////////////////////////////////////////////////////////
00250 //     Function: get_network_error
00251 //  Description:
00252 ////////////////////////////////////////////////////////////////////
00253 int
00254 get_network_error() {
00255 #if !defined(WIN32) && !defined(WIN64)
00256   return EU_error_abort;
00257 #else
00258   int err = WSAGetLastError();
00259   switch (err) {
00260     case 10050:
00261       return EU_error_network_dead;
00262     case 10051:
00263       return EU_error_network_unreachable;
00264     case 10052:
00265     case 10057:
00266     case 10058:
00267       return EU_error_network_disconnected;
00268     case 10053:
00269       return EU_error_network_disconnected_locally;
00270     case 10054:
00271     case 10061:
00272       return EU_error_network_remote_host_disconnected;
00273     case 10055:
00274       return EU_error_network_buffer_overflow;
00275     case 10060:
00276       return EU_error_network_timeout;
00277     case 10064:
00278       return EU_error_network_remote_host_down;
00279     case 10065:
00280       return EU_error_network_remote_host_unreachable;
00281     case 10069:
00282       return EU_error_network_disk_quota_exceeded;
00283     case 11001:
00284       return EU_error_network_remote_host_not_found;
00285     case 11002:
00286       return EU_error_network_remote_host_no_response;
00287     case 0:
00288       if (express_cat.is_debug())
00289         express_cat.debug()
00290           << "get_network_error() - WSA error = 0 - error : "
00291           << strerror(errno) << endl;
00292       return EU_error_abort;
00293     default:
00294       if (express_cat.is_debug())
00295         express_cat.debug()
00296           << "get_network_error() - unknown error: " << err << endl;
00297       return EU_error_abort;
00298   }
00299 #endif
00300 }
00301 #endif
 All Classes Functions Variables Enumerations