You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kvirc/src/kvilib/core/kvi_error.cpp

238 lines
13 KiB

//=============================================================================
//
// File : kvi_error.cpp
// Creation date : Sun Jul 02 2000 18:37:02 by Szymon Stefanek
//
// This file is part of the KVirc irc client distribution
// Copyright (C) 1999-2006 Szymon Stefanek (pragma at kvirc dot net)
//
// This program is FREE software. You can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your opinion) any later version.
//
// This program is distributed in the HOPE that it will be USEFUL,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, write to the Free Software Foundation,
// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
//=============================================================================
#define __KVILIB__
#define _KVI_ERROR_CPP_
#include "kvi_locale.h"
#include "kvi_error.h"
#include "kvi_settings.h"
#ifdef COMPILE_ON_WINDOWS
#include <winsock2.h> // for the WSAE* error codes
#endif
#include <errno.h>
#ifdef HAVE_STRERROR
#include <string.h> // for strerror()
#endif
// FIXME: This stuff should basically die and be eventually replaced with some
// helper functions for handling ONLY system errors.
//
// WARNING: getDescription() is not even thread safe... it will die in the near future
const char * g_errorTable[KVI_NUM_ERRORS]=
{
__tr_no_lookup("Success"), // 000: success
__tr_no_lookup("Unknown error"), // 001: unkonwnError
__tr_no_lookup("Internal error"), // 002: internalError
__tr_no_lookup("Unknown command"), // 003: unknownCommand
__tr_no_lookup("Missing closing brace"), // 004: missingClosingBrace
__tr_no_lookup("Unexpected end of command in string"), // 005: unexpectedEndInString
__tr_no_lookup("Unexpected end of command in dictionary key"), // 006: unexpectedEndInDictionaryKey
__tr_no_lookup("Switch dash without switch letter"), // 007: switchDashWithoutSwitchLetter
__tr_no_lookup("Unknown function"), // 008: unknownFunction
__tr_no_lookup("Unexpected end of command in tqparenthesis"), // 009: unexpectedEndInParenthesis
__tr_no_lookup("Unexpected end of command in function parameters"), // 010: unexpectedEndInFunctionParams
__tr_no_lookup("Missing variable name"), // 011: missingVariableName
__tr_no_lookup("Variable or identifier expected"), // 012: variableOrIdentifierExpected
__tr_no_lookup("Left operand is not a number"), // 013: leftOperandIsNotANumber
__tr_no_lookup("Multiple operations not supported for numeric operators"), // 014: multipleOpsNotSupportedForOperator
__tr_no_lookup("Division by zero"), // 015: divisionByZero
__tr_no_lookup("Modulo by zero"), // 016: moduloByZero
__tr_no_lookup("Right operand is not a number"), // 017: rightOperandIsNotANumber
__tr_no_lookup("Unterminated expression (missing ')' ?)"), // 018: unterminatedExpression
__tr_no_lookup("Unterminated subexpression (Parenthesis mismatch)"), // 019: unterminatedSubexpression
__tr_no_lookup("Unexpected character"), // 020: unexpectedCharacter
__tr_no_lookup("Unknown operator"), // 021: unknownOperator
__tr_no_lookup("No host to resolve"), // 022
__tr_no_lookup("(DNS Internal) Unsupported address family"), // 023
__tr_no_lookup("Valid name but the host has no IP address"), // 024
__tr_no_lookup("Unrecoverable nameserver error (crashed ?)"), // 025
__tr_no_lookup("Dns temporaneous fault (try again)"), // 026
__tr_no_lookup("(DNS Internal) Bad flags"), // 027
__tr_no_lookup("(DNS Internal) Out of memory"), // 028
__tr_no_lookup("(DNS Internal) Service not supported"), // 029
__tr_no_lookup("Unknown node (host not found)"), // 030
__tr_no_lookup("(DNS Internal) Unsupported socket type"), // 031
__tr_no_lookup("Dns query failed"), // 032
__tr_no_lookup("This KVIrc executable has no IPV6 support"), // 033
__tr_no_lookup("Host not found"), // 034
__tr_no_lookup("(DNS Internal) IPC failure (slave data corrupted)"), // 035
__tr_no_lookup("Another connection in progress"), // 036
__tr_no_lookup("Invalid IP address"), // 037
__tr_no_lookup("Socket creation failed"), // 038
__tr_no_lookup("Failed to put the socket in non blocking mode"), // 039
__tr_no_lookup("Bad file descriptor"), // 040
__tr_no_lookup("Out of address space"), // 041
__tr_no_lookup("Connection refused"), // 042
__tr_no_lookup("Kernel networking panic"), // 043
__tr_no_lookup("Connection timed out"), // 044
__tr_no_lookup("Network is unreachable"), // 045
__tr_no_lookup("Broken pipe"), // 046
__tr_no_lookup("Invalid proxy address"), // 047
__tr_no_lookup("Remote end has closed the connection"), // 048
__tr_no_lookup("Invalid irc context id"), // 049
__tr_no_lookup("Error in loading module"), // 050
__tr_no_lookup("No such module command"), // 051
__tr_no_lookup("No such module function"), // 052
__tr_no_lookup("Left operand is not a dictionary reference"), // 053
__tr_no_lookup("Right operand is not a dictionary reference"), // 054
__tr_no_lookup("Missing object class name"), // 055
__tr_no_lookup("No such object class"), // 056
__tr_no_lookup("No such object"), // 057
__tr_no_lookup("No such object function"), // 058
__tr_no_lookup("Invalid left operand"), // 059
__tr_no_lookup("Not enough parameters"), // 060
__tr_no_lookup("Integer parameter expected"), // 061
__tr_no_lookup("Invalid parameter"), // 062
__tr_no_lookup("No such file"), // 063
__tr_no_lookup("Open tqparenthesis expected"), // 064
__tr_no_lookup("Open brace expected"), // 065
__tr_no_lookup("Can't kill a builtin class"), // 066
__tr_no_lookup("The SOCKSV4 protocol lacks IpV6 support"), // 067
__tr_no_lookup("Unrecognized proxy reply"), // 068
__tr_no_lookup("Proxy response: auth failed: access denied"),
__tr_no_lookup("Proxy response: No acceptable auth method: request rejected"),
__tr_no_lookup("Proxy response: request failed"),
__tr_no_lookup("Proxy response: ident failed"),
__tr_no_lookup("Proxy response: ident not matching"),
__tr_no_lookup("Proxy response: general SOCKS failure"),
__tr_no_lookup("Proxy response: connection not allowed"),
__tr_no_lookup("Proxy response: network unreachable"),
__tr_no_lookup("Proxy response: host unreachable"),
__tr_no_lookup("Proxy response: connection refused"),
__tr_no_lookup("Proxy response: TTL expired"),
__tr_no_lookup("Proxy response: command not supported"),
__tr_no_lookup("Proxy response: address type not supported"),
__tr_no_lookup("Proxy response: invalid address"),
__tr_no_lookup("Invalid port number"),
__tr_no_lookup("Socket not connected"),
__tr_no_lookup("Insufficient resources to complete the operation"),
__tr_no_lookup("Can't setup a listening socket : bind failed"),
__tr_no_lookup("Can't resolve the localhost name"),
__tr_no_lookup("Unsupported image format"),
__tr_no_lookup("Can't open file for appending"),
__tr_no_lookup("Can't open file for writing"),
__tr_no_lookup("File I/O error"),
__tr_no_lookup("Acknowledge error"),
__tr_no_lookup("Can't open file for reading"),
__tr_no_lookup("Can't send a zero-size file"),
__tr_no_lookup("Missing popup name"),
__tr_no_lookup("'item', 'popup', 'label' or 'separator' keyword expected"),
__tr_no_lookup("Self modification not allowed"),
__tr_no_lookup("UNUSED"),
__tr_no_lookup("Feature not available"),
__tr_no_lookup("Unexpected characters in array index"),
__tr_no_lookup("Unexpected end in expression"),
__tr_no_lookup("Unexpected end in array index"),
__tr_no_lookup("Connection thru HTTP proxy failed"),
__tr_no_lookup("Case , match , regexp , default or break keyword expected"),
__tr_no_lookup("Access denied"),
__tr_no_lookup("Address already in use"),
__tr_no_lookup("Can't assign the requested address"),
__tr_no_lookup("Connection reset by peer"),
__tr_no_lookup("Host unreachable (no route to host)"),
__tr_no_lookup("Variable expected"),
__tr_no_lookup("Invalid array index: positive integer expected"),
__tr_no_lookup("listen() call failed"),
__tr_no_lookup("This executable has been compiled without SSL support"),
__tr_no_lookup("Secure Socket Layer error"),
__tr_no_lookup("Slash (/) character expected"),
__tr_no_lookup("Unknown string manipulation operation"),
__tr_no_lookup("Operation aborted"),
__tr_no_lookup("Unexpected token"),
__tr_no_lookup("Scope object already defined (unexpected @)"),
__tr_no_lookup("There is no $this pointer in this scope (unexpected @)")
};
namespace KviError
{
const char * getUntranslatedDescription(int iErrorCode)
{
if((iErrorCode < KVI_NUM_ERRORS) && (iErrorCode >= 0))
return g_errorTable[iErrorCode];
#ifdef HAVE_STRERROR
if(iErrorCode < 0)return strerror(-iErrorCode);
#endif
return g_errorTable[KviError_unknownError];
}
TQString getDescription(int iErrorCode)
{
return __tr2qs_no_xgettext(getUntranslatedDescription(iErrorCode));
}
int translateSystemError(int iErrNo)
{
#ifdef COMPILE_ON_WINDOWS
switch(iErrNo)
{
case EBADF: return KviError_badFileDescriptor; break;
case WSAEINVAL:
case WSAEFAULT:
case EFAULT: return KviError_outOfAddressSpace; break;
case WSAECONNREFUSED: return KviError_connectionRefused; break;
case WSAENOTSOCK: return KviError_kernelNetworkingPanic; break;
case WSAETIMEDOUT: return KviError_connectionTimedOut; break;
case WSAENETUNREACH: return KviError_networkUnreachable; break;
case EPIPE: return KviError_brokenPipe; break;
case WSAENOTCONN: return KviError_socketNotConnected; break;
case WSAEACCES: return KviError_accessDenied; break;
case WSAEADDRINUSE: return KviError_addressAlreadyInUse; break;
case WSAEADDRNOTAVAIL: return KviError_cantAssignRequestedAddress; break;
case WSAEAFNOSUPPORT: return KviError_unsupportedAddressFamily; break;
case WSAECONNRESET: return KviError_connectionResetByPeer; break;
case WSAEHOSTUNREACH: return KviError_hostUnreachable; break;
//case ENOBUFS: return KviError_insufficientResources; break;
// Unhandled error...pass errno to the strerror function
default: return -iErrNo; break;
}
#else
switch(iErrNo)
{
case EBADF: return KviError_badFileDescriptor; break;
case EFAULT: return KviError_outOfAddressSpace; break;
case ECONNREFUSED: return KviError_connectionRefused; break;
case ENOTSOCK: return KviError_kernelNetworkingPanic; break;
case ETIMEDOUT: return KviError_connectionTimedOut; break;
case ENETUNREACH: return KviError_networkUnreachable; break;
case EPIPE: return KviError_brokenPipe; break;
case ENOTCONN: return KviError_socketNotConnected; break;
case ENOBUFS: return KviError_insufficientResources; break;
case EHOSTUNREACH: return KviError_hostUnreachable; break;
// Unhandled error...pass errno to the strerror function
default: return -iErrNo; break;
}
#endif
}
};