summaryrefslogtreecommitdiff
path: root/include/mailutils/sys
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2011-11-30 20:13:09 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2011-11-30 21:57:28 +0200
commitde2376862a1d3a9f00602eea7976751266287401 (patch)
treea0d4a63f848502646193b4aad40186cf3843b32d /include/mailutils/sys
parentb848706b89934be5a4419ab2ec382157d2f30aba (diff)
downloadmailutils-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.h87
-rw-r--r--include/mailutils/sys/pop3.h2
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; \

Return to:

Send suggestions and report system problems to the System administrator.