X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=blobdiff_plain;f=src%2Fpop.c;h=ab4de2562b1a97a94287c56b7ede35af9be67a4c;hp=7ae10d5db0baa0bf68b73ddc9342b92b5ddd0742;hb=cf257c7224b591dc837aa41685c596512f8e5616;hpb=5a1a399abf402e83db80ca94e3dfd28fef5033ac diff --git a/src/pop.c b/src/pop.c index 7ae10d5db..ab4de2562 100644 --- a/src/pop.c +++ b/src/pop.c @@ -1,6 +1,6 @@ /* * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 1999,2000 Hiroyuki Yamamoto + * Copyright (C) 1999-2001 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 @@ -71,10 +71,16 @@ gint pop3_getauth_user_send(SockInfo *sock, gpointer data) gint pop3_getauth_user_recv(SockInfo *sock, gpointer data) { + Pop3State *state = (Pop3State *)data; + if (pop3_ok(sock, NULL) == PS_SUCCESS) return POP3_GETAUTH_PASS_SEND; - else + else { + log_warning(_("error occurred on authentication\n")); + state->error_val = PS_AUTHFAIL; + state->inc_state = INC_AUTH_FAILED; return -1; + } } gint pop3_getauth_pass_send(SockInfo *sock, gpointer data) @@ -95,8 +101,9 @@ gint pop3_getauth_pass_recv(SockInfo *sock, gpointer data) if (pop3_ok(sock, NULL) == PS_SUCCESS) return POP3_GETRANGE_STAT_SEND; else { - log_warning(_("error occurred on authorization\n")); + log_warning(_("error occurred on authentication\n")); state->error_val = PS_AUTHFAIL; + state->inc_state = INC_AUTH_FAILED; return -1; } } @@ -142,8 +149,9 @@ gint pop3_getauth_apop_recv(SockInfo *sock, gpointer data) if (pop3_ok(sock, NULL) == PS_SUCCESS) return POP3_GETRANGE_STAT_SEND; else { - log_warning(_("error occurred on authorization\n")); + log_warning(_("error occurred on authentication\n")); state->error_val = PS_AUTHFAIL; + state->inc_state = INC_AUTH_FAILED; return -1; } } @@ -296,18 +304,25 @@ gint pop3_getsize_list_recv(SockInfo *sock, gpointer data) state->cur_total_bytes = 0; while (sock_gets(sock, buf, sizeof(buf)) >= 0) { - gint num, size; + guint num, size; if (buf[0] == '.') break; - if (sscanf(buf, "%d %d", &num, &size) != 2) - continue; + if (sscanf(buf, "%u %u", &num, &size) != 2) + return -1; - if (num <= state->count) + if (num > 0 && num <= state->count) state->sizes[num] = size; - if (num < state->cur_msg) + if (num > 0 && num < state->cur_msg) state->cur_total_bytes += size; } + while (state->sizes[state->cur_msg] == 0) { + if (state->cur_msg == state->count) + return POP3_LOGOUT_SEND; + else + state->cur_msg++; + } + return POP3_RETR_SEND; } @@ -329,19 +344,19 @@ gint pop3_retr_recv(SockInfo *sock, gpointer data) gint ok, drop_ok; if ((ok = pop3_ok(sock, NULL)) == PS_SUCCESS) { - state->cur_msg_bytes = 0; - if (recv_write_to_file(sock, (file = get_tmp_file())) < 0) { state->inc_state = INC_NOSPACE; return -1; } - state->cur_total_bytes += state->sizes[state->cur_msg]; - if ((drop_ok = inc_drop_message(file, state)) < 0) { state->inc_state = INC_ERROR; return -1; } + + state->cur_total_bytes += state->sizes[state->cur_msg]; + state->cur_total_num++; + if (drop_ok == 0 && state->ac_prefs->rmmail) return POP3_DELETE_SEND; @@ -355,6 +370,12 @@ gint pop3_retr_recv(SockInfo *sock, gpointer data) if (state->cur_msg < state->count) { state->cur_msg++; + while (state->sizes[state->cur_msg] == 0) { + if (state->cur_msg == state->count) + return POP3_LOGOUT_SEND; + else + state->cur_msg++; + } return POP3_RETR_SEND; } else return POP3_LOGOUT_SEND; @@ -368,7 +389,7 @@ gint pop3_delete_send(SockInfo *sock, gpointer data) { Pop3State *state = (Pop3State *)data; - //inc_progress_update(state, POP3_DELETE_SEND); + /*inc_progress_update(state, POP3_DELETE_SEND);*/ pop3_gen_send(sock, "DELE %d", state->cur_msg); @@ -383,6 +404,12 @@ gint pop3_delete_recv(SockInfo *sock, gpointer data) if ((ok = pop3_ok(sock, NULL)) == PS_SUCCESS) { if (state->cur_msg < state->count) { state->cur_msg++; + while (state->sizes[state->cur_msg] == 0) { + if (state->cur_msg == state->count) + return POP3_LOGOUT_SEND; + else + state->cur_msg++; + } return POP3_RETR_SEND; } else return POP3_LOGOUT_SEND;