00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
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
00028
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
00154
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
00192
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
00251
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