diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-11-30 20:13:09 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-11-30 21:57:28 +0200 |
commit | de2376862a1d3a9f00602eea7976751266287401 (patch) | |
tree | a0d4a63f848502646193b4aad40186cf3843b32d /include/mailutils/sys | |
parent | b848706b89934be5a4419ab2ec382157d2f30aba (diff) | |
download | mailutils-de2376862a1d3a9f00602eea7976751266287401.tar.gz mailutils-de2376862a1d3a9f00602eea7976751266287401.tar.bz2 |
Clean-up state changes in imap client. Fix error handling in it and in pop3.
* include/mailutils/imap.h (mu_imap_state): Rename to struct
mu_imap_session_state, prefix all values with MU_IMAP_STATE_.
All uses updated.
* include/mailutils/sys/imap.h (mu_imap_client_state): Prefix all
values with MU_IMAP_CLIENT. Rename MU_IMAP_NO_STATE to MU_IMAP_READY.
All uses updated.
(_mu_imap)<state>: Rename to client_state, fix data type.
(imap_state): Rename to imap_state. All uses updated.
(MU_IMAP_CHECK_EAGAIN): Reset state to MU_IMAP_CLIENT_READY if
MU_ERR_REPLY or MU_ERR_BADREPLY is reported.
* include/mailutils/sys/pop3.h (MU_POP3_CHECK_EAGAIN): Reset state
to MU_POP3_NO_STATE, if MU_ERR_REPLY or MU_ERR_BADREPLY is reported.
* libproto/imap/fetch.c (_date_mapper): Avoid overwriting resp->type.
* libproto/imap/select.c (_mu_imap_collect_flags): Initialize *res
prior to collecting flags into it.
* mu/imap.c: Install a FETCH callback.
Diffstat (limited to 'include/mailutils/sys')
-rw-r--r-- | include/mailutils/sys/imap.h | 87 | ||||
-rw-r--r-- | include/mailutils/sys/pop3.h | 2 |
2 files changed, 46 insertions, 43 deletions
diff --git a/include/mailutils/sys/imap.h b/include/mailutils/sys/imap.h index ff23a917a..02deeada9 100644 --- a/include/mailutils/sys/imap.h +++ b/include/mailutils/sys/imap.h @@ -45,20 +45,19 @@ extern "C" { enum mu_imap_client_state { - MU_IMAP_NO_STATE, - MU_IMAP_ERROR, - MU_IMAP_CONNECT, - MU_IMAP_GREETINGS, - MU_IMAP_CONNECTED, - MU_IMAP_CAPABILITY_RX, - MU_IMAP_LOGIN_RX, - MU_IMAP_LOGOUT_RX, - MU_IMAP_ID_RX, - MU_IMAP_SELECT_RX, - MU_IMAP_STATUS_RX, - MU_IMAP_NOOP_RX, - MU_IMAP_FETCH_RX, - MU_IMAP_CLOSING + MU_IMAP_CLIENT_READY, + MU_IMAP_CLIENT_ERROR, + MU_IMAP_CLIENT_CONNECT_RX, + MU_IMAP_CLIENT_GREETINGS, + MU_IMAP_CLIENT_CAPABILITY_RX, + MU_IMAP_CLIENT_LOGIN_RX, + MU_IMAP_CLIENT_LOGOUT_RX, + MU_IMAP_CLIENT_ID_RX, + MU_IMAP_CLIENT_SELECT_RX, + MU_IMAP_CLIENT_STATUS_RX, + MU_IMAP_CLIENT_NOOP_RX, + MU_IMAP_CLIENT_FETCH_RX, + MU_IMAP_CLIENT_CLOSING }; enum mu_imap_response @@ -79,8 +78,8 @@ struct _mu_imap char *errstr; size_t errsize; - enum mu_imap_state state; - enum mu_imap_state imap_state; + enum mu_imap_client_state client_state; + enum mu_imap_session_state session_state; /* Tag */ size_t tag_len; /* Length of the command tag */ @@ -129,39 +128,41 @@ int _mu_imap_xscript_level (mu_imap_t imap, int xlev); /* If status indicates an error, return. */ -#define MU_IMAP_CHECK_ERROR(imap, status) \ - do \ - { \ - if (status != 0) \ - { \ - imap->state = MU_IMAP_ERROR; \ - return status; \ - } \ - } \ +#define MU_IMAP_CHECK_ERROR(imap, status) \ + do \ + { \ + if (status != 0) \ + { \ + imap->client_state = MU_IMAP_CLIENT_ERROR; \ + return status; \ + } \ + } \ while (0) /* Check if status indicates an error. If the error is recoverable just return the status. Otherwise, set the error state and return the status */ -#define MU_IMAP_CHECK_EAGAIN(imap, status) \ - do \ - { \ - switch (status) \ - { \ - case 0: \ - break; \ - case EAGAIN: \ - case EINPROGRESS: \ - case EINTR: \ - case MU_ERR_REPLY: \ - case MU_ERR_BADREPLY: \ - return status; \ - default: \ - imap->state = MU_IMAP_ERROR; \ - return status; \ - } \ - } \ +#define MU_IMAP_CHECK_EAGAIN(imap, status) \ + do \ + { \ + switch (status) \ + { \ + case 0: \ + break; \ + case EAGAIN: \ + case EINPROGRESS: \ + case EINTR: \ + return status; \ + case MU_ERR_REPLY: \ + case MU_ERR_BADREPLY: \ + imap->client_state = MU_IMAP_CLIENT_READY; \ + return status; \ + default: \ + imap->client_state = MU_IMAP_CLIENT_ERROR; \ + return status; \ + } \ + } \ while (0) int _mu_imap_seterrstr (mu_imap_t imap, const char *str, size_t len); diff --git a/include/mailutils/sys/pop3.h b/include/mailutils/sys/pop3.h index c727ca814..826dffb01 100644 --- a/include/mailutils/sys/pop3.h +++ b/include/mailutils/sys/pop3.h @@ -107,8 +107,10 @@ int _mu_pop3_init (mu_pop3_t pop3); case EAGAIN: \ case EINPROGRESS: \ case EINTR: \ + return status; \ case MU_ERR_REPLY: \ case MU_ERR_BADREPLY: \ + pop3->state = MU_POP3_NO_STATE; \ return status; \ default: \ pop3->state = MU_POP3_ERROR; \ |