Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

panda/src/express/error_utils.cxx

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

Generated on Fri May 2 00:38:23 2003 for Panda by doxygen1.3