aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libempathy/empathy-utils.c91
-rw-r--r--libempathy/empathy-utils.h31
2 files changed, 114 insertions, 8 deletions
diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c
index 8d4cd8d68..dfc2595c3 100644
--- a/libempathy/empathy-utils.c
+++ b/libempathy/empathy-utils.c
@@ -409,18 +409,33 @@ empathy_account_get_error_message (TpAccount *account,
{
const gchar *dbus_error;
const gchar *message;
- const GHashTable *details = NULL;
+ const GHashTable *details = NULL;
TpConnectionStatusReason reason;
+ guint skype_reason;
+ gboolean skype_reason_valid;
dbus_error = tp_account_get_detailed_error (account, &details);
- if (user_requested != NULL)
- {
- if (tp_asv_get_boolean (details, "user-requested", NULL))
- *user_requested = TRUE;
- else
- *user_requested = FALSE;
- }
+ if (user_requested != NULL)
+ {
+ if (tp_asv_get_boolean (details, "user-requested", NULL))
+ *user_requested = TRUE;
+ else
+ *user_requested = FALSE;
+ }
+
+ /* Skype certification requires us to return the precise error message.
+ * Check to see if skype-reason is defined, if it is, try to use that
+ * over the dbus error message */
+ skype_reason = tp_asv_get_uint32 (details, "skype-reason",
+ &skype_reason_valid);
+
+ if (skype_reason_valid)
+ {
+ message = empathy_skype_reason_to_string (skype_reason);
+ if (message != NULL)
+ return message;
+ }
message = empathy_dbus_error_name_get_default_message (dbus_error);
if (message != NULL)
@@ -871,3 +886,63 @@ empathy_format_currency (gint amount,
return money;
}
+const gchar *
+empathy_skype_reason_to_string (guint skype_reason)
+{
+ switch (skype_reason)
+ {
+ case EMP_SKYPE_LOGOUTREASON_NONE:
+ return _("No Reason");
+ case EMP_SKYPE_LOGOUTREASON_LOGOUT_CALLED:
+ return _("Requested");
+ case EMP_SKYPE_LOGOUTREASON_HTTPS_PROXY_AUTH_FAILED:
+ return _("HTTPS proxy authentication failed");
+ case EMP_SKYPE_LOGOUTREASON_SOCKS_PROXY_AUTH_FAILED:
+ return _("SOCKS proxy authentication failed");
+ case EMP_SKYPE_LOGOUTREASON_P2P_CONNECT_FAILED:
+ return _("Peer-to-peer connection failed");
+ case EMP_SKYPE_LOGOUTREASON_SERVER_CONNECT_FAILED:
+ return _("Server connection failed");
+ case EMP_SKYPE_LOGOUTREASON_SERVER_OVERLOADED:
+ return _("Server overloaded");
+ case EMP_SKYPE_LOGOUTREASON_DB_IN_USE:
+ return _("Local database in use");
+ case EMP_SKYPE_LOGOUTREASON_INVALID_SKYPENAME:
+ return _("Invalid username");
+ case EMP_SKYPE_LOGOUTREASON_INVALID_EMAIL:
+ return _("Invalid email address");
+ case EMP_SKYPE_LOGOUTREASON_UNACCEPTABLE_PASSWORD:
+ return _("Unacceptable password");
+ case EMP_SKYPE_LOGOUTREASON_SKYPENAME_TAKEN:
+ return _("Username already taken");
+ case EMP_SKYPE_LOGOUTREASON_REJECTED_AS_UNDERAGE:
+ return _("Rejected as underage");
+ case EMP_SKYPE_LOGOUTREASON_NO_SUCH_IDENTITY:
+ return _("No such identity");
+ case EMP_SKYPE_LOGOUTREASON_INCORRECT_PASSWORD:
+ return _("Incorrect password");
+ case EMP_SKYPE_LOGOUTREASON_TOO_MANY_LOGIN_ATTEMPTS:
+ return _("Too many login attempts");
+ case EMP_SKYPE_LOGOUTREASON_PASSWORD_HAS_CHANGED:
+ return _("Password has changed");
+ case EMP_SKYPE_LOGOUTREASON_PERIODIC_UIC_UPDATE_FAILED:
+ /* FIXME: what now? */
+ return _("Periodic UIC update failed");
+ case EMP_SKYPE_LOGOUTREASON_DB_DISK_FULL:
+ return _("Cannot write to local database: disk full");
+ case EMP_SKYPE_LOGOUTREASON_DB_IO_ERROR:
+ return _("Cannot write to local database: input/output error");
+ case EMP_SKYPE_LOGOUTREASON_DB_CORRUPT:
+ return _("Local database corrupt");
+ case EMP_SKYPE_LOGOUTREASON_DB_FAILURE:
+ return _("Local database failure");
+ case EMP_SKYPE_LOGOUTREASON_INVALID_APP_ID:
+ return _("Invalid application ID");
+ case EMP_SKYPE_LOGOUTREASON_APP_ID_BLACKLISTED:
+ return _("Application ID blacklisted");
+ case EMP_SKYPE_LOGOUTREASON_UNSUPPORTED_VERSION:
+ return _("Unsupported Skype version (software upgrade required)");
+ }
+
+ g_return_val_if_reached (NULL);
+}
diff --git a/libempathy/empathy-utils.h b/libempathy/empathy-utils.h
index 7ec96be13..f78007aeb 100644
--- a/libempathy/empathy-utils.h
+++ b/libempathy/empathy-utils.h
@@ -104,6 +104,37 @@ gchar * empathy_get_x509_certificate_hostname (gnutls_x509_crt_t cert);
gchar *empathy_format_currency (gint amount, guint scale, const gchar *currency);
+/* this enum is taken from SkypeKit */
+enum {
+ EMP_SKYPE_LOGOUTREASON_NONE = 0, /* No reason given */
+ EMP_SKYPE_LOGOUTREASON_LOGOUT_CALLED = 1, /* manual logout (or unknown reason from previous session) */
+ EMP_SKYPE_LOGOUTREASON_HTTPS_PROXY_AUTH_FAILED = 2, /* sync errors at login/registration */
+ EMP_SKYPE_LOGOUTREASON_SOCKS_PROXY_AUTH_FAILED = 3, /* sync errors at login/registration */
+ EMP_SKYPE_LOGOUTREASON_P2P_CONNECT_FAILED = 4, /* sync errors at login/registration */
+ EMP_SKYPE_LOGOUTREASON_SERVER_CONNECT_FAILED = 5, /* sync errors at login/registration */
+ EMP_SKYPE_LOGOUTREASON_SERVER_OVERLOADED = 6, /* sync errors at login/registration */
+ EMP_SKYPE_LOGOUTREASON_DB_IN_USE = 7, /* sync errors at login/registration */
+ EMP_SKYPE_LOGOUTREASON_INVALID_SKYPENAME = 8, /* sync errors at registration */
+ EMP_SKYPE_LOGOUTREASON_INVALID_EMAIL = 9, /* sync errors at registration */
+ EMP_SKYPE_LOGOUTREASON_UNACCEPTABLE_PASSWORD = 10, /* sync errors at registration */
+ EMP_SKYPE_LOGOUTREASON_SKYPENAME_TAKEN = 11, /* sync errors at registration */
+ EMP_SKYPE_LOGOUTREASON_REJECTED_AS_UNDERAGE = 12, /* sync errors at registration */
+ EMP_SKYPE_LOGOUTREASON_NO_SUCH_IDENTITY = 13, /* sync errors at login */
+ EMP_SKYPE_LOGOUTREASON_INCORRECT_PASSWORD = 14, /* sync errors at login */
+ EMP_SKYPE_LOGOUTREASON_TOO_MANY_LOGIN_ATTEMPTS = 15, /* sync errors at login */
+ EMP_SKYPE_LOGOUTREASON_PASSWORD_HAS_CHANGED = 16, /* async errors (can happen anytime while logged in) */
+ EMP_SKYPE_LOGOUTREASON_PERIODIC_UIC_UPDATE_FAILED = 17, /* async errors (can happen anytime while logged in) */
+ EMP_SKYPE_LOGOUTREASON_DB_DISK_FULL = 18, /* async errors (can happen anytime while logged in) */
+ EMP_SKYPE_LOGOUTREASON_DB_IO_ERROR = 19, /* async errors (can happen anytime while logged in) */
+ EMP_SKYPE_LOGOUTREASON_DB_CORRUPT = 20, /* async errors (can happen anytime while logged in) */
+ EMP_SKYPE_LOGOUTREASON_DB_FAILURE = 21, /* deprecated (superceded by more detailed DB_* errors) */
+ EMP_SKYPE_LOGOUTREASON_INVALID_APP_ID = 22, /* platform sdk */
+ EMP_SKYPE_LOGOUTREASON_APP_ID_BLACKLISTED = 23, /* platform sdk */
+ EMP_SKYPE_LOGOUTREASON_UNSUPPORTED_VERSION = 24, /* forced upgrade/discontinuation */
+};
+
+const gchar *empathy_skype_reason_to_string (guint skype_reason);
+
G_END_DECLS
#endif /* __EMPATHY_UTILS_H__ */