Re: Slightly better error codes



On Fri, 2007-07-06 at 15:47 +0200, Philip Van Hoof wrote:
> *. Please update tny-enums.h too, else gtk-doc wont show the new enums
> 
> *. There are GType's for the enums that also need to be updated, else
> (future) bindings wont recognise those enums: tny_error_get_type in
> tny-error.c
> 
> 
> On Fri, 2007-07-06 at 15:29 +0200, Murray Cumming wrote:
> > This patch allows TnyAccountStore::alert_func to get some more exact
> > error codes so that the application doesn't have to just show the
> > internal error text to the user. It doesn't handle everything, but it's
> > a start.

Here is another one. It still doesn't provider meaningful error codes
for everything, but this makes it much easier to add them when we find
we really need them later.

-- 
Murray Cumming
murrayc murrayc com
www.murrayc.com
www.openismus.com
Index: libtinymail-camel/camel-lite/camel/providers/smtp/camel-smtp-transport.c
===================================================================
--- libtinymail-camel/camel-lite/camel/providers/smtp/camel-smtp-transport.c	(revision 2419)
+++ libtinymail-camel/camel-lite/camel/providers/smtp/camel-smtp-transport.c	(working copy)
@@ -506,7 +506,7 @@
 					      service->url->host, service->url->authmech);
 
 			camel_session_alert_user (session, CAMEL_SESSION_ALERT_ERROR, 
-				camel_exception_get_description (ex), FALSE);
+				ex, FALSE);
 
 			camel_service_disconnect (service, TRUE, NULL);
 			return FALSE;
Index: libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-command.c
===================================================================
--- libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-command.c	(revision 2419)
+++ libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-command.c	(working copy)
@@ -444,7 +444,7 @@
 			/* we might get a ']' from a BAD response since we +12, but who cares? */
 			msg = g_strdup_printf(_("Alert from IMAP server %s %s:\n%s"),
 					      ((CamelService *)store)->url->user, ((CamelService *)store)->url->host, respbuf+12);
-			camel_session_alert_user(((CamelService *)store)->session, CAMEL_SESSION_ALERT_WARNING, msg, FALSE);
+			camel_session_alert_user_generic(((CamelService *)store)->session, CAMEL_SESSION_ALERT_WARNING, msg, FALSE);
 			g_free(msg);
 		}
 		
@@ -505,7 +505,7 @@
 			/* we might get a ']' from a BAD response since we +12, but who cares? */
 			msg = g_strdup_printf(_("Alert from IMAP server %s %s:\n%s"),
 					      ((CamelService *)store)->url->user, ((CamelService *)store)->url->host, respbuf+12);
-			camel_session_alert_user(((CamelService *)store)->session, CAMEL_SESSION_ALERT_WARNING, msg, FALSE);
+			camel_session_alert_user_generic(((CamelService *)store)->session, CAMEL_SESSION_ALERT_WARNING, msg, FALSE);
 			g_free(msg);
 		} else if (!g_ascii_strncasecmp (respbuf, "* BAD Invalid tag",17))
 			type = CAMEL_IMAP_RESPONSE_ERROR;
Index: libtinymail-camel/camel-lite/camel/providers/imap4/camel-imap4-summary.c
===================================================================
--- libtinymail-camel/camel-lite/camel/providers/imap4/camel-imap4-summary.c	(revision 2419)
+++ libtinymail-camel/camel-lite/camel/providers/imap4/camel-imap4-summary.c	(working copy)
@@ -751,7 +751,7 @@
 				   "message is simply unreadable by the IMAP server and will need "
 				   "to be given read permissions.", msg);
 	
-	camel_session_alert_user (session, CAMEL_SESSION_ALERT_WARNING, warning, FALSE);
+	camel_session_alert_user_generic (session, CAMEL_SESSION_ALERT_WARNING, warning, FALSE);
 	g_free (warning);
 }
 
Index: libtinymail-camel/camel-lite/camel/providers/imap4/camel-imap4-engine.c
===================================================================
--- libtinymail-camel/camel-lite/camel/providers/imap4/camel-imap4-engine.c	(revision 2419)
+++ libtinymail-camel/camel-lite/camel/providers/imap4/camel-imap4-engine.c	(working copy)
@@ -1030,7 +1030,7 @@
 		if (camel_imap4_engine_line (engine, &linebuf, &len, ex) == -1)
 			goto exception;
 		
-		camel_session_alert_user (engine->session, CAMEL_SESSION_ALERT_INFO, linebuf, FALSE);
+		camel_session_alert_user_generic (engine->session, CAMEL_SESSION_ALERT_INFO, linebuf, FALSE);
 		g_free (linebuf);
 	} else if (resp != NULL && code == CAMEL_IMAP4_RESP_CODE_PARSE) {
 		if (camel_imap4_engine_line (engine, &linebuf, &len, ex) == -1)
Index: libtinymail-camel/camel-lite/camel/camel-tcp-stream-openssl.c
===================================================================
--- libtinymail-camel/camel-lite/camel/camel-tcp-stream-openssl.c	(revision 2419)
+++ libtinymail-camel/camel-lite/camel/camel-tcp-stream-openssl.c	(working copy)
@@ -860,7 +860,7 @@
 				    "Do you wish to accept anyway?"), 
 				    cert_str, x509_strerror (err));
 	
-	ok = camel_session_alert_user (session, CAMEL_SESSION_ALERT_WARNING, prompt, TRUE);
+	ok = camel_session_alert_user_with_id (session, CAMEL_SESSION_ALERT_WARNING, CAMEL_EXCEPTION_SERVICE_CERTIFICATE, prompt, TRUE);
 	g_free (prompt);
 	
 	if (ok && ccert) {
Index: libtinymail-camel/camel-lite/camel/camel-disco-diary.c
===================================================================
--- libtinymail-camel/camel-lite/camel/camel-disco-diary.c	(revision 2419)
+++ libtinymail-camel/camel-lite/camel/camel-disco-diary.c	(working copy)
@@ -200,7 +200,7 @@
 					 "will not be replayed when you\n"
 					 "reconnect to the network."),
 				       g_strerror (errno));
-		camel_session_alert_user (camel_service_get_session (CAMEL_SERVICE (diary->store)),
+		camel_session_alert_user_generic (camel_service_get_session (CAMEL_SERVICE (diary->store)),
 					  CAMEL_SESSION_ALERT_ERROR,
 					  msg, FALSE);
 		g_free (msg);
@@ -261,7 +261,7 @@
 			msg = g_strdup_printf (_("Could not open `%s':\n%s\nChanges made to this folder will not be resynchronized."),
 					       name, camel_exception_get_description (&ex));
 			camel_exception_clear (&ex);
-			camel_session_alert_user (camel_service_get_session (CAMEL_SERVICE (diary->store)),
+			camel_session_alert_user_generic (camel_service_get_session (CAMEL_SERVICE (diary->store)),
 						  CAMEL_SESSION_ALERT_WARNING,
 						  msg, FALSE);
 			g_free (msg);
Index: libtinymail-camel/camel-lite/camel/camel-session.c
===================================================================
--- libtinymail-camel/camel-lite/camel/camel-session.c	(revision 2419)
+++ libtinymail-camel/camel-lite/camel/camel-session.c	(working copy)
@@ -23,7 +23,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  * USA
  */
-
+ 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
@@ -411,11 +411,11 @@
  * camel_session_alert_user:
  * @session: a #CamelSession object
  * @type: the type of alert (info, warning, or error)
- * @prompt: the message for the user
+ * @ex: A CamelException, indicating a message for the user
  * @cancel: whether or not to provide a "Cancel" option in addition to
  * an "OK" option.
  *
- * Presents the given @prompt to the user, in the style indicated by
+ * Presents an appropriate prompt to the user, in the style indicated by
  * @type. If @cancel is %TRUE, the user will be able to accept or
  * cancel. Otherwise, the message is purely informational.
  *
@@ -423,16 +423,52 @@
  */
 gboolean
 camel_session_alert_user (CamelSession *session, CamelSessionAlertType type,
-			  const char *prompt, gboolean cancel)
+			  CamelException *ex, gboolean cancel)
 {
 	g_return_val_if_fail (CAMEL_IS_SESSION (session), FALSE);
-	g_return_val_if_fail (prompt != NULL, FALSE);
+	g_return_val_if_fail (ex, FALSE);
 
-	return CS_CLASS (session)->alert_user (session, type, prompt, cancel);
+	return CS_CLASS (session)->alert_user (session, type, ex, cancel);
 }
 
+/**
+ * camel_session_alert_user_with_id:
+ *
+ * Like camel_session_alert_user() but constructs and uses a CamelException 
+ * with the error ID and the specified message.
 
+ */
+gboolean
+camel_session_alert_user_with_id (CamelSession *session, CamelSessionAlertType type,
+			  ExceptionId id, const gchar* message, gboolean cancel)
+{
+	g_return_val_if_fail (message, FALSE);
+
+	CamelException ex = CAMEL_EXCEPTION_INITIALISER;
+	camel_exception_set (&ex, id, message);
+	gboolean result = camel_session_alert_user (session, type, &ex, cancel);
+	camel_exception_clear (&ex);
+	return result;
+}
+
 /**
+ * camel_session_alert_user_generic:
+ *
+ * Like camel_session_alert_user_with_id() but uses a
+ * generic error ID.
+ * camel_session_alert_user()or camel_session_alert_user_with_id() should be 
+ * used where possible, to provide a precise error ID.
+ */
+gboolean
+camel_session_alert_user_generic (CamelSession *session, CamelSessionAlertType type,
+			  const gchar* message, gboolean cancel)
+{
+	return camel_session_alert_user_with_id (session, type, 
+		CAMEL_EXCEPTION_SYSTEM, message, cancel);
+}
+
+
+/**
  * camel_session_is_online:
  * @session: a #CamelSession object
  *
Index: libtinymail-camel/camel-lite/camel/camel-session.h
===================================================================
--- libtinymail-camel/camel-lite/camel/camel-session.h	(revision 2419)
+++ libtinymail-camel/camel-lite/camel/camel-session.h	(working copy)
@@ -95,7 +95,7 @@
 					      CamelException *ex);
 	gboolean        (*alert_user)        (CamelSession *session,
 					      CamelSessionAlertType type,
-					      const char *prompt,
+					      CamelException *ex,
 					      gboolean cancel);
 
 	CamelFilterDriver * (*get_filter_driver) (CamelSession *session,
@@ -152,8 +152,17 @@
 						     CamelException *ex);
 gboolean           camel_session_alert_user         (CamelSession *session,
 						     CamelSessionAlertType type,
-						     const char *prompt,
+						     CamelException *ex,
 						     gboolean cancel);
+gboolean           camel_session_alert_user_generic (CamelSession *session,
+						     CamelSessionAlertType type,
+						     const gchar* message,
+						     gboolean cancel);
+gboolean           camel_session_alert_user_with_id (CamelSession *session,
+						     CamelSessionAlertType type,
+						     ExceptionId id,
+						     const gchar* message,
+						     gboolean cancel);
 
 gboolean           camel_session_is_online          (CamelSession *session);
 void               camel_session_set_online         (CamelSession *session,
Index: libtinymail-camel/camel-lite/camel/camel-exception-list.def
===================================================================
--- libtinymail-camel/camel-lite/camel/camel-exception-list.def	(revision 2419)
+++ libtinymail-camel/camel-lite/camel/camel-exception-list.def	(working copy)
@@ -10,7 +10,7 @@
 /* Generic exceptions */
 CAMEL_EXCEPTION_INVALID_PARAM,
 CAMEL_EXCEPTION_SYSTEM,
-CAMEL_EXCEPTION_SYSTEM_HOST_LOOKUP_FAILED,
+CAMEL_EXCEPTION_SYSTEM_HOST_LOOKUP_FAILED, /* Couldn't lookup host name in DNS. */
 CAMEL_EXCEPTION_USER_CANCEL,
 
 /* CamelFolderException */
@@ -34,5 +34,6 @@
 CAMEL_EXCEPTION_SERVICE_INVALID,
 CAMEL_EXCEPTION_SERVICE_URL_INVALID,
 CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-CAMEL_EXCEPTION_SERVICE_NOT_CONNECTED
+CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE, /* Authentication method not supported. */
+CAMEL_EXCEPTION_SERVICE_NOT_CONNECTED,
+CAMEL_EXCEPTION_SERVICE_CERTIFICATE, /* Certificate problems. */
Index: libtinymail-camel/camel-lite/camel/camel-tcp-stream-ssl.c
===================================================================
--- libtinymail-camel/camel-lite/camel/camel-tcp-stream-ssl.c	(revision 2419)
+++ libtinymail-camel/camel-lite/camel/camel-tcp-stream-ssl.c	(working copy)
@@ -1199,7 +1199,7 @@
 		g_free (cert_str);
 	
 		/* query the user to find out if we want to accept this certificate */
-		accept = camel_session_alert_user (ssl->priv->session, CAMEL_SESSION_ALERT_WARNING, prompt, TRUE);
+		accept = camel_session_alert_user_with_id (ssl->priv->session, CAMEL_SESSION_ALERT_WARNING, CAMEL_EXCEPTION_SERVICE_CERTIFICATE, prompt, TRUE);
 		g_free(prompt);
 		if (accept) {
 			camel_certdb_nss_cert_set(certdb, ccert, cert);
@@ -1242,7 +1242,7 @@
 			printf("unknown issuer, adding ... \n");
 			prompt = g_strdup_printf(_("Certificate problem: %s\nIssuer: %s"), cert->subjectName, cert->issuerName);
 
-			if (camel_session_alert_user(ssl->priv->session, CAMEL_SESSION_ALERT_WARNING, prompt, TRUE)) {
+			if (camel_session_alert_user_with_id(ssl->priv->session, CAMEL_SESSION_ALERT_WARNING, CAMEL_EXCEPTION_SERVICE_CERTIFICATE, prompt, TRUE)) {
 
 				nick = get_nickname(cert);
 				if (NULL == nick) {
@@ -1294,7 +1294,7 @@
 
 			prompt = g_strdup_printf(_("Bad certificate domain: %s\nIssuer: %s"), cert->subjectName, cert->issuerName);
 
-			if (camel_session_alert_user (ssl->priv->session, CAMEL_SESSION_ALERT_WARNING, prompt, TRUE)) {
+			if (camel_session_alert_user_with_id (ssl->priv->session, CAMEL_SESSION_ALERT_WARNING, CAMEL_EXCEPTION_SERVICE_CERTIFICATE, prompt, TRUE)) {
 				host = SSL_RevealURL(sockfd);
 				status = CERT_AddOKDomainName(cert, host);
 				printf("add ok domain name : %s\n", status == SECFailure?"fail":"ok");
@@ -1312,7 +1312,7 @@
 
 			prompt = g_strdup_printf(_("Certificate expired: %s\nIssuer: %s"), cert->subjectName, cert->issuerName);
 
-			if (camel_session_alert_user(ssl->priv->session, CAMEL_SESSION_ALERT_WARNING, prompt, TRUE)) {
+			if (camel_session_alert_user_with_id(ssl->priv->session, CAMEL_SESSION_ALERT_WARNING, CAMEL_EXCEPTION_SERVICE_CERTIFICATE, prompt, TRUE)) {
 				cert->timeOK = PR_TRUE;
 				status = CERT_VerifyCertNow(cert->dbhandle, cert, TRUE, certUsageSSLClient, NULL);
 				error = PR_GetError();
@@ -1329,7 +1329,7 @@
 
 			prompt = g_strdup_printf(_("Certificate revocation list expired: %s\nIssuer: %s"), cert->subjectName, cert->issuerName);
 
-			if (camel_session_alert_user(ssl->priv->session, CAMEL_SESSION_ALERT_WARNING, prompt, TRUE)) {
+			if (camel_session_alert_user_with_id(ssl->priv->session, CAMEL_SESSION_ALERT_WARNING, CAMEL_EXCEPTION_SERVICE_CERTIFICATE, prompt, TRUE)) {
 				host = SSL_RevealURL(sockfd);
 				status = CERT_AddOKDomainName(cert, host);
 			}
Index: libtinymail-camel/camel-lite/ChangeLog
===================================================================
--- libtinymail-camel/camel-lite/ChangeLog	(revision 2419)
+++ libtinymail-camel/camel-lite/ChangeLog	(working copy)
@@ -1,3 +1,6 @@
+
+
+
 Note: Please use this ChangeLog file only for merge changes (from upstream to
 this version, and the other way around). Changes to camel-lite that are
 related to Tinymail go into ../../ChangeLog
Index: libtinymail-camel/tny-session-camel.c
===================================================================
--- libtinymail-camel/tny-session-camel.c	(revision 2419)
+++ libtinymail-camel/tny-session-camel.c	(working copy)
@@ -175,14 +175,14 @@
 		tnytype, question, (const GError *) err);
 }
 
-/* tny_session_camel_alert_user will for example be called when SSL is on and 
+/* tny_session_camel_alert_user will for example be called by camel when SSL is on and 
    camel_session_get_service is issued (for example TnyCamelTransportAccount and
    TnyCamelStore account issue this function). Its implementation is often done
    with GUI components (it should therefore not be called from a thread). This
    is a known issue (and if someone fixes this, please remove this warning) */
 
 static gboolean
-tny_session_camel_alert_user (CamelSession *session, CamelSessionAlertType type, const char *msg, gboolean cancel)
+tny_session_camel_alert_user (CamelSession *session, CamelSessionAlertType type, CamelException *ex, gboolean cancel)
 {
 	TnySessionCamel *self = (TnySessionCamel *)session;
 	TnySessionCamelPriv *priv = self->priv;
@@ -207,14 +207,13 @@
 			break;
 		}
 
-		/* TODO: A string comparison is not a very safe way to do this: */
-		if (strstr (msg, "Canceled") != NULL)
+		if (ex->id == CAMEL_EXCEPTION_USER_CANCEL)
 			g_set_error (&err, TNY_ACCOUNT_STORE_ERROR, 
-				TNY_ACCOUNT_STORE_ERROR_CANCEL_ALERT, "The connecting got canceled");
+				TNY_ACCOUNT_STORE_ERROR_CANCEL_ALERT, "The connecting was canceled");
 		else {
-			/* TODO: Use a more specific error code, based on a CamelException ID: */
 			g_set_error (&err, TNY_ACCOUNT_STORE_ERROR, 
-				TNY_ACCOUNT_STORE_ERROR_UNKNOWN_ALERT, msg);
+				_tny_camel_account_get_tny_error_code_for_camel_exception_id (ex), 
+				camel_exception_get_description (ex));
 		}
 
 		tny_lockable_lock (self->priv->ui_lock);
Index: libtinymail-camel/tny-camel-account.c
===================================================================
--- libtinymail-camel/tny-camel-account.c	(revision 2419)
+++ libtinymail-camel/tny-camel-account.c	(working copy)
@@ -333,6 +333,8 @@
 		return TNY_ACCOUNT_ERROR_TRY_CONNECT_SERVICE_UNAVAILABLE;
 	case CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE:
 		return TNY_ACCOUNT_ERROR_TRY_CONNECT_AUTHENTICATION_NOT_SUPPORTED;
+	case CAMEL_EXCEPTION_SERVICE_CERTIFICATE:
+		return TNY_ACCOUNT_ERROR_TRY_CONNECT_CERTIFICATE;
 	case CAMEL_EXCEPTION_SYSTEM:
 	default:
 		/* A generic exception. 
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 2419)
+++ ChangeLog	(working copy)
@@ -1,3 +1,44 @@
+2007-07-06  Murray Cumming  <murrayc murrayc com>
+
+	* libtinymail/tny-enums.h:
+	* libtinymail/tny-error.h:
+	* libtinymail/tny-error.c: (tny_error_get_type):
+	Added TNY_ACCOUNT_ERROR_TRY_CONNECT_CERTIFICATE and documented the enum 
+	values that I added last time.
+	* libtinymail-camel/tny-camel-account.c:
+	(_tny_camel_account_get_tny_error_code_for_camel_exception_id):
+	Handle CAMEL_EXCEPTION_SERVICE_CERTIFICATE as TNY_ACCOUNT_ERROR_TRY_CONNECT_CERTIFICATE.
+	* libtinymail-camel/tny-session-camel.c:
+	(tny_session_camel_alert_user): Adapt signature, as follows.
+	Also handle the CAMEL_EXCEPTION_USER_CANCEL error ID instead of checking the message text. 
+
+	* camel/camel-exception-list.def: Added CAMEL_EXCEPTION_SERVICE_CERTIFICATE.
+	* camel/camel-session.h:
+	* camel/camel-session.c: (camel_session_alert_user): Take a CamelException 
+	instead of a message, so we don't lose the error ID sometimes.
+	(camel_session_alert_user_with_id),
+	(camel_session_alert_user_generic): Convenience functions to use when 
+	no CamelException is available.
+
+	* camel/providers/smtp/camel-smtp-transport.c: (smtp_connect):
+	Use the exception instead of just the message with camel_session_alert_user(), 
+	so that the application has the error code. 
+
+	* camel/camel-disco-diary.c: (camel_disco_diary_log),
+	(diary_decode_folder):
+	* camel/providers/imap/camel-imap-command.c:
+	(camel_imap_command_response), (camel_imap_command_response_idle):
+	* camel/providers/imap4/camel-imap4-engine.c:
+	(camel_imap4_engine_parse_resp_code):
+	* camel/providers/imap4/camel-imap4-summary.c:
+	(courier_imap_is_a_piece_of_shit): Use camel_session_alert_user_generic() 
+	instead of camel_session_alert_user(), because we have no ID or exception here.
+
+	* camel/camel-tcp-stream-openssl.c: (ssl_verify):
+	* camel/camel-tcp-stream-ssl.c: (ssl_bad_cert): Use the new 
+	CAMEL_EXCEPTION_SERVICE_CERTIFICATE error ID here. There are still many different 
+	types of certificate error, but this at least classifies them a bit.
+
 2007-07-05  Armin Burgmeier  <armin openismus com>
 
 	* libtinymail/tny-merge-folder.c: When propagating a TnyFolderChange
Index: libtinymail/tny-error.c
===================================================================
--- libtinymail/tny-error.c	(revision 2419)
+++ libtinymail/tny-error.c	(working copy)
@@ -82,6 +82,7 @@
       { TNY_ACCOUNT_ERROR_TRY_CONNECT_HOST_LOOKUP_FAILED, "TNY_ACCOUNT_ERROR_TRY_CONNECT_HOST_LOOKUP_FAILED", "account_error_try_connect_host_lookup_failed" },
       { TNY_ACCOUNT_ERROR_TRY_CONNECT_SERVICE_UNAVAILABLE, "TNY_ACCOUNT_ERROR_TRY_CONNECT_SERVICE_UNAVAILABLE", "account_error_try_connect_service_unavailable" },
       { TNY_ACCOUNT_ERROR_TRY_CONNECT_AUTHENTICATION_NOT_SUPPORTED, "TNY_ACCOUNT_ERROR_TRY_CONNECT_AUTHENTICATION_NOT_SUPPORTED", "account_error_try_connect_authentication_not_supported" },
+      { TNY_ACCOUNT_ERROR_TRY_CONNECT_CERTIFICATE, "TNY_ACCOUNT_ERROR_TRY_CONNECT_CERTIFICATE", "account_error_try_connect_certificate" },
      
       { TNY_ACCOUNT_STORE_ERROR_UNKNOWN_ALERT, "TNY_ACCOUNT_STORE_ERROR_UNKNOWN_ALERT", "account_store_error_unknown_alert" },
 
Index: libtinymail/tny-enums.h
===================================================================
--- libtinymail/tny-enums.h	(revision 2419)
+++ libtinymail/tny-enums.h	(working copy)
@@ -78,6 +78,7 @@
 	TNY_ACCOUNT_ERROR_TRY_CONNECT_HOST_LOOKUP_FAILED = 19,
 	TNY_ACCOUNT_ERROR_TRY_CONNECT_SERVICE_UNAVAILABLE = 20,
 	TNY_ACCOUNT_ERROR_TRY_CONNECT_AUTHENTICATION_NOT_SUPPORTED = 21,
+	TNY_ACCOUNT_ERROR_TRY_CONNECT_CERTIFICATE = 22,
 
 	TNY_ACCOUNT_STORE_ERROR_UNKNOWN_ALERT = 15,
 
Index: libtinymail/tny-error.h
===================================================================
--- libtinymail/tny-error.h	(revision 2419)
+++ libtinymail/tny-error.h	(working copy)
@@ -68,6 +68,21 @@
  * even this level of exact detection of the particular error is not currently 
  * possible, so a generic error dialog should probably be shown, though the 
  * application could choose to suggest possible causes for the error.
+ *
+ * TNY_ACCOUNT_ERROR_TRY_CONNECT_HOST_LOOKUP_FAILED: The specified host name 
+ * cannot be resolved to an IP address. It is probably incorrect.
+ *
+ * TNY_ACCOUNT_ERROR_TRY_CONNECT_SERVICE_UNAVAILABLE: No connection could be 
+ * made with the specified server. Maybe the server is not running on the 
+ * specified host.
+ *
+ * TNY_ACCOUNT_ERROR_TRY_CONNECT_AUTHENTICATION_NOT_SUPPORTED: The server reported 
+ * that it does not support the specified secure authentication method. It might 
+ * support a different method instead.
+ *
+ * TNY_ACCOUNT_ERROR_TRY_CONNECT_CERTIFICATE: There was a problem with an 
+ * authentication or connection certificate. For instance, a bad certificate must 
+ * be manually accepted.
  * 
  * TNY_ACCOUNT_STORE_ERROR_UNKNOWN_ALERT: This indicates that an unknown error 
  * has occurred. Depending on the implementation being used, and the server 
@@ -97,6 +112,7 @@
 	TNY_ACCOUNT_ERROR_TRY_CONNECT_HOST_LOOKUP_FAILED = 19,
 	TNY_ACCOUNT_ERROR_TRY_CONNECT_SERVICE_UNAVAILABLE = 20,
 	TNY_ACCOUNT_ERROR_TRY_CONNECT_AUTHENTICATION_NOT_SUPPORTED = 21,
+	TNY_ACCOUNT_ERROR_TRY_CONNECT_CERTIFICATE = 22,
 
 	TNY_ACCOUNT_STORE_ERROR_UNKNOWN_ALERT = 15,
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]