00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "tqdbuserror.h"
00026
00027 #include <dbus/dbus.h>
00028
00029 #include <tqmap.h>
00030
00031 typedef TQMap<TQString, TQT_DBusError::ErrorType> ErrorNameMap;
00032 static ErrorNameMap errorTypesByName;
00033
00034 static TQString qDBusErrorNameForType(TQT_DBusError::ErrorType type)
00035 {
00036 switch (type)
00037 {
00038 case TQT_DBusError::InvalidError:
00039 Q_ASSERT(false);
00040 return TQString();
00041
00042 case TQT_DBusError::Failed:
00043 return TQString::fromUtf8(DBUS_ERROR_FAILED);
00044 case TQT_DBusError:: NoMemory:
00045 return TQString::fromUtf8(DBUS_ERROR_NO_MEMORY);
00046 case TQT_DBusError:: ServiceUnknown:
00047 return TQString::fromUtf8(DBUS_ERROR_SERVICE_UNKNOWN);
00048 case TQT_DBusError:: NameHasNoOwner:
00049 return TQString::fromUtf8(DBUS_ERROR_NAME_HAS_NO_OWNER);
00050 case TQT_DBusError:: NoReply:
00051 return TQString::fromUtf8(DBUS_ERROR_NO_REPLY);
00052 case TQT_DBusError:: IOError:
00053 return TQString::fromUtf8(DBUS_ERROR_IO_ERROR);
00054 case TQT_DBusError:: BadAddress:
00055 return TQString::fromUtf8(DBUS_ERROR_BAD_ADDRESS);
00056 case TQT_DBusError:: NotSupported:
00057 return TQString::fromUtf8(DBUS_ERROR_NOT_SUPPORTED);
00058 case TQT_DBusError:: LimitsExceeded:
00059 return TQString::fromUtf8(DBUS_ERROR_LIMITS_EXCEEDED);
00060 case TQT_DBusError:: AccessDenied:
00061 return TQString::fromUtf8(DBUS_ERROR_ACCESS_DENIED);
00062 case TQT_DBusError:: AuthFailed:
00063 return TQString::fromUtf8(DBUS_ERROR_AUTH_FAILED);
00064 case TQT_DBusError:: NoServer:
00065 return TQString::fromUtf8(DBUS_ERROR_NO_SERVER);
00066 case TQT_DBusError:: Timeout:
00067 return TQString::fromUtf8(DBUS_ERROR_TIMEOUT);
00068 case TQT_DBusError:: NoNetwork:
00069 return TQString::fromUtf8(DBUS_ERROR_NO_NETWORK);
00070 case TQT_DBusError:: Disconnected:
00071 return TQString::fromUtf8(DBUS_ERROR_DISCONNECTED);
00072 case TQT_DBusError:: InvalidArgs:
00073 return TQString::fromUtf8(DBUS_ERROR_INVALID_ARGS);
00074 case TQT_DBusError:: FileNotFound:
00075 return TQString::fromUtf8(DBUS_ERROR_FILE_NOT_FOUND);
00076 case TQT_DBusError:: FileExists:
00077 return TQString::fromUtf8(DBUS_ERROR_FILE_EXISTS);
00078 case TQT_DBusError:: UnknownMethod:
00079 return TQString::fromUtf8(DBUS_ERROR_UNKNOWN_METHOD);
00080 case TQT_DBusError:: TimedOut:
00081 return TQString::fromUtf8(DBUS_ERROR_TIMED_OUT);
00082 case TQT_DBusError:: InvalidSignature:
00083 return TQString::fromUtf8(DBUS_ERROR_INVALID_SIGNATURE);
00084
00085 case TQT_DBusError::UserDefined:
00086 Q_ASSERT(false);
00087 return TQString();
00088 }
00089
00090 Q_ASSERT(false);
00091 return TQString();
00092 }
00093
00094 static void qDBusErrorSetupNameMapping()
00095 {
00096 for (int i = TQT_DBusError::InvalidError + 1; i < TQT_DBusError::UserDefined; ++i)
00097 {
00098 TQT_DBusError::ErrorType type = static_cast<TQT_DBusError::ErrorType>(i);
00099 errorTypesByName[qDBusErrorNameForType(type)] = type;
00100 }
00101 }
00102
00103 static TQT_DBusError::ErrorType qDBusErrorTypeForName(const TQString& name)
00104 {
00105 if (name.isEmpty()) return TQT_DBusError::InvalidError;
00106
00107 if (errorTypesByName.isEmpty())
00108 qDBusErrorSetupNameMapping();
00109
00110 ErrorNameMap::const_iterator it = errorTypesByName.find(name);
00111 if (it != errorTypesByName.end()) return it.data();
00112
00113 return TQT_DBusError::UserDefined;
00114 }
00115
00116 TQT_DBusError::TQT_DBusError() : errorType(InvalidError), m_dbusErrorSet(false)
00117 {
00118 }
00119
00120 TQT_DBusError::TQT_DBusError(const DBusError *error) : errorType(InvalidError), m_dbusErrorSet(false)
00121 {
00122 if (!error || !dbus_error_is_set(error))
00123 return;
00124
00125 nm = TQString::fromUtf8(error->name);
00126 msg = TQString::fromUtf8(error->message);
00127
00128 errorType = qDBusErrorTypeForName(nm);
00129 }
00130
00131 TQT_DBusError::TQT_DBusError(const TQString& error, const TQString& message)
00132 : errorType(UserDefined), m_dbusErrorSet(false), nm(error), msg(message)
00133 {
00134 errorType = qDBusErrorTypeForName(nm);
00135 }
00136
00137 bool TQT_DBusError::isValid() const
00138 {
00139 return errorType != InvalidError && !nm.isEmpty() && !msg.isEmpty();
00140 }
00141
00142 TQT_DBusError::TQT_DBusError(ErrorType type, const TQString& message)
00143 : errorType(type), m_dbusErrorSet(false), msg(message)
00144 {
00145 nm = qDBusErrorNameForType(type);
00146 }
00147
00148 TQT_DBusError TQT_DBusError::stdFailed(const TQString& message)
00149 {
00150 return TQT_DBusError(TQT_DBusError::Failed, message);
00151 }
00152
00153 TQT_DBusError TQT_DBusError::stdNoMemory(const TQString& message)
00154 {
00155 return TQT_DBusError(TQT_DBusError::NoMemory, message);
00156 }
00157
00158 TQT_DBusError TQT_DBusError::stdNoReply(const TQString& message)
00159 {
00160 return TQT_DBusError(TQT_DBusError::NoReply, message);
00161 }
00162
00163 TQT_DBusError TQT_DBusError::stdIOError(const TQString& message)
00164 {
00165 return TQT_DBusError(TQT_DBusError::IOError, message);
00166 }
00167
00168 TQT_DBusError TQT_DBusError::stdNotSupported(const TQString& message)
00169 {
00170 return TQT_DBusError(TQT_DBusError::NotSupported, message);
00171 }
00172
00173 TQT_DBusError TQT_DBusError::stdLimitsExceeded(const TQString& message)
00174 {
00175 return TQT_DBusError(TQT_DBusError::LimitsExceeded, message);
00176 }
00177
00178 TQT_DBusError TQT_DBusError::stdAccessDenied(const TQString& message)
00179 {
00180 return TQT_DBusError(TQT_DBusError::AccessDenied, message);
00181 }
00182
00183 TQT_DBusError TQT_DBusError::stdAuthFailed(const TQString& message)
00184 {
00185 return TQT_DBusError(TQT_DBusError::AuthFailed, message);
00186 }
00187
00188 TQT_DBusError TQT_DBusError::stdTimeout(const TQString& message)
00189 {
00190 return TQT_DBusError(TQT_DBusError::Timeout, message);
00191 }
00192
00193 TQT_DBusError TQT_DBusError::stdInvalidArgs(const TQString& message)
00194 {
00195 return TQT_DBusError(TQT_DBusError::InvalidArgs, message);
00196 }
00197
00198 TQT_DBusError TQT_DBusError::stdFileNotFound(const TQString& message)
00199 {
00200 return TQT_DBusError(TQT_DBusError::FileNotFound, message);
00201 }
00202
00203 TQT_DBusError TQT_DBusError::stdFileExists(const TQString& message)
00204 {
00205 return TQT_DBusError(TQT_DBusError::FileExists, message);
00206 }
00207
00208 TQT_DBusError TQT_DBusError::stdUnknownMethod(const TQString& message)
00209 {
00210 return TQT_DBusError(TQT_DBusError::UnknownMethod, message);
00211 }
00212
00213 TQT_DBusError TQT_DBusError::stdInvalidSignature(const TQString& message)
00214 {
00215 return TQT_DBusError(TQT_DBusError::InvalidSignature, message);
00216 }