If errno is EINTR, set USER_CANCEL instead of SERVICE_UNAVAILABLE or

2004-03-12  Jeffrey Stedfast  <fejj@ximian.com>

	* providers/smtp/camel-smtp-transport.c (connect_to_server): If
	errno is EINTR, set USER_CANCEL instead of SERVICE_UNAVAILABLE or
	whatever.
	(smtp_helo): Same.
	(smtp_auth): Same.
	(smtp_mail): Same.
	(smtp_rcpt): Same.
	(smtp_data): Same.
	(smtp_rset): Same.
	(smtp_quit): Same.
	(smtp_set_exception): Here too.
	(smtp_auth): If the AUTH response code is not 334, then use
	smtp_set_exception() to get the most accurate error report we can.

svn path=/trunk/; revision=25044
This commit is contained in:
Jeffrey Stedfast
2004-03-12 17:43:00 +00:00
committed by Jeffrey Stedfast
parent 2dc2990d21
commit f8a7bfbc7f
2 changed files with 44 additions and 37 deletions

View File

@ -1,3 +1,19 @@
2004-03-12 Jeffrey Stedfast <fejj@ximian.com>
* providers/smtp/camel-smtp-transport.c (connect_to_server): If
errno is EINTR, set USER_CANCEL instead of SERVICE_UNAVAILABLE or
whatever.
(smtp_helo): Same.
(smtp_auth): Same.
(smtp_mail): Same.
(smtp_rcpt): Same.
(smtp_data): Same.
(smtp_rset): Same.
(smtp_quit): Same.
(smtp_set_exception): Here too.
(smtp_auth): If the AUTH response code is not 334, then use
smtp_set_exception() to get the most accurate error report we can.
2004-03-11 Jeffrey Stedfast <fejj@ximian.com>
* camel-object.c (cobject_state_read): Sanity check that count is

View File

@ -281,7 +281,7 @@ connect_to_server (CamelService *service, int try_starttls, CamelException *ex)
ret = camel_tcp_stream_connect (CAMEL_TCP_STREAM (tcp_stream), h, port);
camel_free_host (h);
if (ret == -1) {
camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
camel_exception_setv (ex, errno == EINTR ? CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
_("Could not connect to %s (port %d): %s"),
service->url->host, port,
g_strerror (errno));
@ -354,8 +354,8 @@ connect_to_server (CamelService *service, int try_starttls, CamelException *ex)
starttls:
d(fprintf (stderr, "sending : STARTTLS\r\n"));
if (camel_stream_write (tcp_stream, "STARTTLS\r\n", 10) == -1) {
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("STARTTLS request timed out: %s"),
camel_exception_setv (ex, errno == EINTR ? CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
_("STARTTLS command failed: %s"),
g_strerror (errno));
goto exception_cleanup;
}
@ -683,8 +683,7 @@ smtp_send_to (CamelTransport *transport, CamelMimeMessage *message,
if (!camel_internet_address_get (CAMEL_INTERNET_ADDRESS (from), 0, NULL, &addr)) {
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("Cannot send message: "
"sender address not valid."));
_("Cannot send message: sender address not valid."));
return FALSE;
}
@ -818,8 +817,8 @@ smtp_set_exception (CamelSmtpTransport *transport, const char *respbuf, const ch
if (!respbuf || !(transport->flags & CAMEL_SMTP_TRANSPORT_ENHANCEDSTATUSCODES)) {
fake_status_code:
error = respbuf ? atoi (respbuf) : 0;
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, "%s: %s", message,
smtp_error_string (error));
camel_exception_setv (ex, error == 0 && errno == EINTR ? CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
"%s: %s", message, smtp_error_string (error));
} else {
string = g_string_new ("");
do {
@ -930,9 +929,8 @@ smtp_helo (CamelSmtpTransport *transport, CamelException *ex)
d(fprintf (stderr, "sending : %s", cmdbuf));
if (camel_stream_write (transport->ostream, cmdbuf, strlen (cmdbuf)) == -1) {
g_free (cmdbuf);
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("HELO request timed out: %s"),
g_strerror (errno));
camel_exception_setv (ex, errno == EINTR ? CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
_("HELO command failed: %s"), g_strerror (errno));
camel_operation_end (NULL);
transport->connected = FALSE;
@ -1041,9 +1039,8 @@ smtp_auth (CamelSmtpTransport *transport, const char *mech, CamelException *ex)
d(fprintf (stderr, "sending : %s", cmdbuf));
if (camel_stream_write (transport->ostream, cmdbuf, strlen (cmdbuf)) == -1) {
g_free (cmdbuf);
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("AUTH request timed out: %s"),
g_strerror (errno));
camel_exception_setv (ex, errno == EINTR ? CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
_("AUTH command failed: %s"), g_strerror (errno));
goto lose;
}
g_free (cmdbuf);
@ -1053,17 +1050,15 @@ smtp_auth (CamelSmtpTransport *transport, const char *mech, CamelException *ex)
while (!camel_sasl_authenticated (sasl)) {
if (!respbuf) {
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("AUTH request timed out: %s"),
g_strerror (errno));
camel_exception_setv (ex, errno == EINTR ? CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
_("AUTH command failed: %s"), g_strerror (errno));
goto lose;
}
/* the server challenge/response should follow a 334 code */
if (strncmp (respbuf, "334", 3)) {
if (strncmp (respbuf, "334", 3) != 0) {
smtp_set_exception (transport, respbuf, _("AUTH command failed"), ex);
g_free (respbuf);
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("AUTH request failed."));
goto lose;
}
@ -1148,8 +1143,8 @@ smtp_mail (CamelSmtpTransport *transport, const char *sender, gboolean has_8bit_
if (camel_stream_write (transport->ostream, cmdbuf, strlen (cmdbuf)) == -1) {
g_free (cmdbuf);
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("MAIL FROM request timed out: %s: mail not sent"),
camel_exception_setv (ex, errno == EINTR ? CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
_("MAIL FROM command failed: %s: mail not sent"),
g_strerror (errno));
camel_object_unref (transport->istream);
@ -1192,8 +1187,8 @@ smtp_rcpt (CamelSmtpTransport *transport, const char *recipient, CamelException
if (camel_stream_write (transport->ostream, cmdbuf, strlen (cmdbuf)) == -1) {
g_free (cmdbuf);
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("RCPT TO request timed out: %s: mail not sent"),
camel_exception_setv (ex, errno == EINTR ? CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
_("RCPT TO command failed: %s: mail not sent"),
g_strerror (errno));
camel_object_unref (transport->istream);
@ -1253,8 +1248,8 @@ smtp_data (CamelSmtpTransport *transport, CamelMimeMessage *message, CamelExcept
if (camel_stream_write (transport->ostream, cmdbuf, strlen (cmdbuf)) == -1) {
g_free (cmdbuf);
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("DATA request timed out: %s: mail not sent"),
camel_exception_setv (ex, errno == EINTR ? CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
_("DATA command failed: %s: mail not sent"),
g_strerror (errno));
camel_object_unref (transport->istream);
@ -1314,9 +1309,8 @@ smtp_data (CamelSmtpTransport *transport, CamelMimeMessage *message, CamelExcept
header->next = savedbcc;
if (ret == -1) {
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("DATA send timed out: message termination: "
"%s: mail not sent"),
camel_exception_setv (ex, errno == EINTR ? CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
_("DATA command failed: %s: mail not sent"),
g_strerror (errno));
camel_object_unref (filtered_stream);
@ -1337,9 +1331,8 @@ smtp_data (CamelSmtpTransport *transport, CamelMimeMessage *message, CamelExcept
d(fprintf (stderr, "sending : \\r\\n.\\r\\n\n"));
if (camel_stream_write (transport->ostream, "\r\n.\r\n", 5) == -1) {
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("DATA send timed out: message termination: "
"%s: mail not sent"),
camel_exception_setv (ex, errno == EINTR ? CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
_("DATA command failed: %s: mail not sent"),
g_strerror (errno));
camel_object_unref (transport->istream);
@ -1380,9 +1373,8 @@ smtp_rset (CamelSmtpTransport *transport, CamelException *ex)
if (camel_stream_write (transport->ostream, cmdbuf, strlen (cmdbuf)) == -1) {
g_free (cmdbuf);
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("RSET request timed out: %s"),
g_strerror (errno));
camel_exception_setv (ex, errno == EINTR ? CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
_("RSET command failed: %s"), g_strerror (errno));
camel_object_unref (transport->istream);
transport->istream = NULL;
@ -1423,9 +1415,8 @@ smtp_quit (CamelSmtpTransport *transport, CamelException *ex)
if (camel_stream_write (transport->ostream, cmdbuf, strlen (cmdbuf)) == -1) {
g_free (cmdbuf);
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("QUIT request timed out: %s"),
g_strerror (errno));
camel_exception_setv (ex, errno == EINTR ? CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
_("QUIT command failed: %s"), g_strerror (errno));
camel_object_unref (transport->istream);
transport->istream = NULL;