diff options
author | Jeffrey Stedfast <fejj@ximian.com> | 2003-06-14 03:06:52 +0800 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2003-06-14 03:06:52 +0800 |
commit | 398d437cedc1b66726dbb94ebae25508e09582d6 (patch) | |
tree | 378fd45653c21eb6bac38af117c23cabcbb6aaf8 /camel/providers/pop3/camel-pop3-engine.c | |
parent | 8853de7d70254a1cf2f6e38ceef9282fde1264f2 (diff) | |
download | gsoc2013-evolution-398d437cedc1b66726dbb94ebae25508e09582d6.tar gsoc2013-evolution-398d437cedc1b66726dbb94ebae25508e09582d6.tar.gz gsoc2013-evolution-398d437cedc1b66726dbb94ebae25508e09582d6.tar.bz2 gsoc2013-evolution-398d437cedc1b66726dbb94ebae25508e09582d6.tar.lz gsoc2013-evolution-398d437cedc1b66726dbb94ebae25508e09582d6.tar.xz gsoc2013-evolution-398d437cedc1b66726dbb94ebae25508e09582d6.tar.zst gsoc2013-evolution-398d437cedc1b66726dbb94ebae25508e09582d6.zip |
Fix for bug #40788.
2003-06-05 Jeffrey Stedfast <fejj@ximian.com>
Fix for bug #40788.
* providers/pop3/camel-pop3-engine.c (camel_pop3_engine_new): Now
takes a flags argument. Currently there is only 1 flag which can
be used to disable Pop3 server extensions.
(get_capabilities): Don't check for Pop3 server extensions if the
DISABLE_EXTENSIONS flag is set on the engine.
(camel_pop3_engine_iterate): If we get a response that is neither
+OK nor -ERR, default to treating it like a -ERR.
* providers/pop3/camel-pop3-store.c (connect_to_server): Check for
the disable_extensions param.
* providers/pop3/camel-pop3-provider.c: Define a checkbox to
disable all POP3 extension support.
svn path=/trunk/; revision=21438
Diffstat (limited to 'camel/providers/pop3/camel-pop3-engine.c')
-rw-r--r-- | camel/providers/pop3/camel-pop3-engine.c | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/camel/providers/pop3/camel-pop3-engine.c b/camel/providers/pop3/camel-pop3-engine.c index 762212388e..2186136f95 100644 --- a/camel/providers/pop3/camel-pop3-engine.c +++ b/camel/providers/pop3/camel-pop3-engine.c @@ -97,6 +97,7 @@ camel_pop3_engine_get_type (void) /** * camel_pop3_engine_new: * @source: source stream + * @flags: engine flags * * Returns a NULL stream. A null stream is always at eof, and * always returns success for all reads and writes. @@ -104,7 +105,7 @@ camel_pop3_engine_get_type (void) * Return value: the stream **/ CamelPOP3Engine * -camel_pop3_engine_new(CamelStream *source) +camel_pop3_engine_new(CamelStream *source, guint32 flags) { CamelPOP3Engine *pe; @@ -112,7 +113,8 @@ camel_pop3_engine_new(CamelStream *source) pe->stream = (CamelPOP3Stream *)camel_pop3_stream_new(source); pe->state = CAMEL_POP3_ENGINE_AUTH; - + pe->flags = flags; + get_capabilities(pe, TRUE); return pe; @@ -213,21 +215,23 @@ get_capabilities(CamelPOP3Engine *pe, int read_greeting) pe->auth = g_list_prepend(pe->auth, &camel_pop3_password_authtype); } - pc = camel_pop3_engine_command_new(pe, CAMEL_POP3_COMMAND_MULTI, cmd_capa, NULL, "CAPA\r\n"); - while (camel_pop3_engine_iterate(pe, pc) > 0) - ; - camel_pop3_engine_command_free(pe, pc); - - if (pe->state == CAMEL_POP3_ENGINE_TRANSACTION && !(pe->capa & CAMEL_POP3_CAP_UIDL)) { - /* check for UIDL support manually */ - pc = camel_pop3_engine_command_new (pe, CAMEL_POP3_COMMAND_SIMPLE, NULL, NULL, "UIDL 1\r\n"); - while (camel_pop3_engine_iterate (pe, pc) > 0) + if (!(pe->flags & CAMEL_POP3_ENGINE_DISABLE_EXTENSIONS)) { + pc = camel_pop3_engine_command_new(pe, CAMEL_POP3_COMMAND_MULTI, cmd_capa, NULL, "CAPA\r\n"); + while (camel_pop3_engine_iterate(pe, pc) > 0) ; + camel_pop3_engine_command_free(pe, pc); - if (pc->state == CAMEL_POP3_COMMAND_OK) - pe->capa |= CAMEL_POP3_CAP_UIDL; - - camel_pop3_engine_command_free (pe, pc); + if (pe->state == CAMEL_POP3_ENGINE_TRANSACTION && !(pe->capa & CAMEL_POP3_CAP_UIDL)) { + /* check for UIDL support manually */ + pc = camel_pop3_engine_command_new (pe, CAMEL_POP3_COMMAND_SIMPLE, NULL, NULL, "UIDL 1\r\n"); + while (camel_pop3_engine_iterate (pe, pc) > 0) + ; + + if (pc->state == CAMEL_POP3_COMMAND_OK) + pe->capa |= CAMEL_POP3_CAP_UIDL; + + camel_pop3_engine_command_free (pe, pc); + } } } @@ -304,8 +308,8 @@ camel_pop3_engine_iterate(CamelPOP3Engine *pe, CamelPOP3Command *pcwait) default: /* what do we do now? f'knows! */ g_warning("Bad server response: %s\n", p); - errno = EIO; - return -1; + pc->state = CAMEL_POP3_COMMAND_ERR; + break; } e_dlist_addtail(&pe->done, (EDListNode *)pc); @@ -313,7 +317,7 @@ camel_pop3_engine_iterate(CamelPOP3Engine *pe, CamelPOP3Command *pcwait) /* Set next command */ pe->current = (CamelPOP3Command *)e_dlist_remhead(&pe->active); - + /* check the queue for sending any we can now send also */ pw = (CamelPOP3Command *)pe->queue.head; pn = pw->next; |