aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanielle Madeley <danielle.madeley@collabora.co.uk>2011-04-20 14:51:41 +0800
committerDanielle Madeley <danielle.madeley@collabora.co.uk>2011-04-20 14:51:41 +0800
commit4c78cb34c23e512f09122550c8f95fa0dd917a45 (patch)
tree27cdb4b9c9d15baf6fe12e42697cf261cdcbfcc9
parent26f6794195d98dd5cd199d3a3f92c2b0bda573e1 (diff)
downloadgsoc2013-empathy-4c78cb34c23e512f09122550c8f95fa0dd917a45.tar
gsoc2013-empathy-4c78cb34c23e512f09122550c8f95fa0dd917a45.tar.gz
gsoc2013-empathy-4c78cb34c23e512f09122550c8f95fa0dd917a45.tar.bz2
gsoc2013-empathy-4c78cb34c23e512f09122550c8f95fa0dd917a45.tar.lz
gsoc2013-empathy-4c78cb34c23e512f09122550c8f95fa0dd917a45.tar.xz
gsoc2013-empathy-4c78cb34c23e512f09122550c8f95fa0dd917a45.tar.zst
gsoc2013-empathy-4c78cb34c23e512f09122550c8f95fa0dd917a45.zip
Use skype-reason detail to return a Skype-specific error message
Required for Skype certification.
-rw-r--r--libempathy/empathy-utils.c92
-rw-r--r--libempathy/empathy-utils.h31
2 files changed, 115 insertions, 8 deletions
diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c
index 24d7b544b..46c64e59a 100644
--- a/libempathy/empathy-utils.c
+++ b/libempathy/empathy-utils.c
@@ -408,18 +408,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)
@@ -796,3 +811,64 @@ empathy_get_x509_certificate_hostname (gnutls_x509_crt_t cert)
return NULL;
}
+
+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 2ddfb4c53..41b78c1cf 100644
--- a/libempathy/empathy-utils.h
+++ b/libempathy/empathy-utils.h
@@ -102,6 +102,37 @@ gboolean empathy_folks_persona_is_interesting (FolksPersona *persona);
gchar * empathy_get_x509_certificate_hostname (gnutls_x509_crt_t cert);
+/* 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__ */