aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-04-05 10:55:21 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-04-05 10:55:21 +0000
commit130f58af6de1b8669c01ee873a4188b2ffd9c4d5 (patch)
tree91874a0aa5d9b25b3333cf0b323f1bb963ad6631
parentfba3c2429350e98598460ac9e006d92cbc04c554 (diff)
made a workaround for Gmail SMTP server.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@201 ee746299-78ed-0310-b773-934348b2243d
-rw-r--r--ChangeLog8
-rw-r--r--ChangeLog.ja8
-rw-r--r--src/procheader.c2
-rw-r--r--src/send_message.c5
-rw-r--r--src/socket.c18
5 files changed, 36 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 2e5af87a..362ad975 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2005-04-05
+
+ * src/send_messages.c: send_message_smtp(): consider EOF right after
+ QUIT successful (workaround for Gmail SMTP server).
+ * src/socket.c: ssl_read(), ssl_peek(): check EOF which violates the
+ SSL protocol.
+ * src/procheader.c: removed an unused variable.
+
2005-04-01
* configure.in: changed -traditional-cpp to -no-cpp-precomp for newer
diff --git a/ChangeLog.ja b/ChangeLog.ja
index 015dea3e..cb28f91f 100644
--- a/ChangeLog.ja
+++ b/ChangeLog.ja
@@ -1,3 +1,11 @@
+2005-04-05
+
+ * src/send_messages.c: send_message_smtp(): QUIT 直後の EOF を成功と
+ みなすようにした(Gmail の SMTP サーバへの対処)。
+ * src/socket.c: ssl_read(), ssl_peek(): SSL プロトコル違反の EOF を
+ チェック。
+ * src/procheader.c: 未使用の変数を削除。
+
2005-04-01
* configure.in: 新しい Mac OS X に対応するために -traditional-cpp を
diff --git a/src/procheader.c b/src/procheader.c
index eff43f48..415bc59c 100644
--- a/src/procheader.c
+++ b/src/procheader.c
@@ -503,7 +503,7 @@ MsgInfo *procheader_parse_stream(FILE *fp, MsgFlags flags, gboolean full)
MsgInfo *msginfo;
gchar buf[BUFFSIZE];
- gchar *p, *q;
+ gchar *p;
gchar *hp;
HeaderEntry *hentry;
gint hnum;
diff --git a/src/send_message.c b/src/send_message.c
index b2e5bd6b..efe6a66e 100644
--- a/src/send_message.c
+++ b/src/send_message.c
@@ -412,6 +412,11 @@ static gint send_message_smtp(PrefsAccount *ac_prefs, GSList *to_list, FILE *fp)
ac_prefs->tmp_smtp_pass = NULL;
}
ret = -1;
+ } else if (session->state == SESSION_EOF &&
+ SMTP_SESSION(session)->state == SMTP_QUIT) {
+ /* consider EOF right after QUIT successful */
+ log_warning("%s\n", _("Connection closed by the remote host."));
+ ret = 0;
} else if (session->state == SESSION_ERROR ||
session->state == SESSION_EOF ||
session->state == SESSION_TIMEOUT ||
diff --git a/src/socket.c b/src/socket.c
index f23dde62..2c337ccb 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -990,7 +990,7 @@ gint fd_read(gint fd, gchar *buf, gint len)
#if USE_SSL
gint ssl_read(SSL *ssl, gchar *buf, gint len)
{
- gint ret;
+ gint err, ret;
if (SSL_pending(ssl) == 0) {
if (fd_check_io(SSL_get_rfd(ssl), G_IO_IN) < 0)
@@ -999,14 +999,19 @@ gint ssl_read(SSL *ssl, gchar *buf, gint len)
ret = SSL_read(ssl, buf, len);
- switch (SSL_get_error(ssl, ret)) {
+ switch ((err = SSL_get_error(ssl, ret))) {
case SSL_ERROR_NONE:
return ret;
case SSL_ERROR_WANT_READ:
case SSL_ERROR_WANT_WRITE:
errno = EAGAIN;
return -1;
+ case SSL_ERROR_ZERO_RETURN:
+ return 0;
default:
+ g_warning("SSL_read() returned error %d, ret = %d\n", err, ret);
+ if (ret == 0)
+ return 0;
return -1;
}
}
@@ -1233,7 +1238,7 @@ gint sock_puts(SockInfo *sock, const gchar *buf)
#if USE_SSL
gint ssl_peek(SSL *ssl, gchar *buf, gint len)
{
- gint ret;
+ gint err, ret;
if (SSL_pending(ssl) == 0) {
if (fd_check_io(SSL_get_rfd(ssl), G_IO_IN) < 0)
@@ -1242,14 +1247,19 @@ gint ssl_peek(SSL *ssl, gchar *buf, gint len)
ret = SSL_peek(ssl, buf, len);
- switch (SSL_get_error(ssl, ret)) {
+ switch ((err = SSL_get_error(ssl, ret))) {
case SSL_ERROR_NONE:
return ret;
case SSL_ERROR_WANT_READ:
case SSL_ERROR_WANT_WRITE:
errno = EAGAIN;
return -1;
+ case SSL_ERROR_ZERO_RETURN:
+ return 0;
default:
+ g_warning("SSL_peek() returned error %d, ret = %d\n", err, ret);
+ if (ret == 0)
+ return 0;
return -1;
}
}