diff --git a/src/low-level/imap/mailimap.c b/src/low-level/imap/mailimap.c index bfb44093..4072c68b 100644 --- a/src/low-level/imap/mailimap.c +++ b/src/low-level/imap/mailimap.c @@ -2309,7 +2309,12 @@ int mailimap_send_current_tag(mailimap * session) int r; session->imap_tag ++; - snprintf(tag_str, 15, "%i", session->imap_tag); + + if(mailimap_is_163_workaround_enabled(session)) + snprintf(tag_str, 15, "C%i", session->imap_tag); + else + snprintf(tag_str, 15, "%i", session->imap_tag); + r = mailimap_tag_send(session->imap_stream, tag_str); if (r != MAILIMAP_NO_ERROR) @@ -2502,7 +2507,7 @@ mailimap * mailimap_new(size_t imap_progr_rate, f->imap_logger = NULL; f->imap_logger_context = NULL; - + f->is_163_workaround_enabled = 0; return f; free_stream_buffer: @@ -2590,3 +2595,13 @@ void mailimap_set_logger(mailimap * session, void (* logger)(mailimap * session, session->imap_logger = logger; session->imap_logger_context = logger_context; } + +LIBETPAN_EXPORT +void mailimap_set_163_workaround_enabled(mailimap * session, int enabled) { + session->is_163_workaround_enabled = enabled; +} + +LIBETPAN_EXPORT +int mailimap_is_163_workaround_enabled(mailimap * session) { + return session->is_163_workaround_enabled; +} diff --git a/src/low-level/imap/mailimap.h b/src/low-level/imap/mailimap.h index 9326b02b..620a1e09 100644 --- a/src/low-level/imap/mailimap.h +++ b/src/low-level/imap/mailimap.h @@ -803,6 +803,12 @@ LIBETPAN_EXPORT void mailimap_set_logger(mailimap * session, void (* logger)(mailimap * session, int log_type, const char * str, size_t size, void * context), void * logger_context); +LIBETPAN_EXPORT +int mailimap_is_163_workaround_enabled(mailimap * session); + +LIBETPAN_EXPORT +void mailimap_set_163_workaround_enabled(mailimap * session, int enabled); + #ifdef __cplusplus } #endif diff --git a/src/low-level/imap/mailimap_types.h b/src/low-level/imap/mailimap_types.h index 17d539df..379c38c4 100644 --- a/src/low-level/imap/mailimap_types.h +++ b/src/low-level/imap/mailimap_types.h @@ -3385,6 +3385,8 @@ struct mailimap { void (* imap_logger)(mailimap * session, int log_type, const char * str, size_t size, void * context); void * imap_logger_context; + + int is_163_workaround_enabled; };