aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--src/rpop3.c26
2 files changed, 25 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 21f5832c..de6186f7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2013-01-31
+ * src/rpop3.c: do not disconnect immediately but send QUIT on normal
+ POP3 errors.
+
+2013-01-31
+
* src/main.c: changed safe mode option to "--safe-mode".
2013-01-30
diff --git a/src/rpop3.c b/src/rpop3.c
index c67ab9a0..c2c236df 100644
--- a/src/rpop3.c
+++ b/src/rpop3.c
@@ -1,6 +1,6 @@
/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2011 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2013 Hiroyuki Yamamoto
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -840,11 +840,22 @@ static gint rpop3_session_recv_msg(Session *session, const gchar *msg)
pop3_session->state != POP3_GETSIZE_LIST_RECV) {
val = pop3_ok(pop3_session, msg);
if (val != PS_SUCCESS) {
- if (val != PS_NOTSUPPORTED) {
+ if (val == PS_SOCKET) {
pop3_session->state = POP3_ERROR;
gdk_threads_leave();
return -1;
}
+ if (val != PS_NOTSUPPORTED) {
+ if (pop3_session->state != POP3_LOGOUT) {
+ if (pop3_logout_send(pop3_session) == PS_SUCCESS) {
+ gdk_threads_leave();
+ return 0;
+ } else {
+ gdk_threads_leave();
+ return -1;
+ }
+ }
+ }
}
if (*body == '+' || *body == '-')
@@ -952,7 +963,10 @@ static gint rpop3_session_recv_msg(Session *session, const gchar *msg)
rpop3_idle(TRUE);
break;
case POP3_LOGOUT:
- pop3_session->state = POP3_DONE;
+ if (val == PS_SUCCESS)
+ pop3_session->state = POP3_DONE;
+ else
+ pop3_session->state = POP3_ERROR;
session_disconnect(session);
break;
case POP3_ERROR:
@@ -984,7 +998,7 @@ static gint rpop3_session_recv_data_finished(Session *session, guchar *data,
if (val == PS_SUCCESS) {
if (rpop3_window.cancelled) {
rpop3_status_label_set(_("Quitting..."));
- pop3_logout_send(rpop3_window.session);
+ pop3_logout_send(pop3_session);
} else
pop3_getsize_list_send(pop3_session);
} else
@@ -996,7 +1010,7 @@ static gint rpop3_session_recv_data_finished(Session *session, guchar *data,
pop3_session->cur_msg = 1;
if (rpop3_window.cancelled || pop3_session->count == 0) {
rpop3_status_label_set(_("Quitting..."));
- pop3_logout_send(rpop3_window.session);
+ pop3_logout_send(pop3_session);
} else {
pop3_session->cur_msg = pop3_session->count;
gtk_widget_set_sensitive(rpop3_window.stop_btn,
@@ -1057,7 +1071,7 @@ static gint rpop3_session_recv_data_as_file_finished(Session *session,
if (rpop3_top_recv(pop3_session, fp, len) == PS_SUCCESS) {
if (rpop3_window.cancelled) {
rpop3_status_label_set(_("Quitting..."));
- pop3_logout_send(rpop3_window.session);
+ pop3_logout_send(pop3_session);
} else if (!rpop3_window.stop_load &&
(pop3_session->cur_msg > 1)) {
pop3_session->cur_msg--;