So Nov 07 2010 15:53:26 EST von IGnatius T Foobar @ Uncensored Betreff: Re: [SCM] citadel.org branch, master, updated. 826932b012c26b5ef97a5bbf45acf10fca6acc60

When I see the words "rewrite IMAP module" I get very very scared.

How many different clients were tested to make sure nothing broke?

so far? imaptest and thunderbird.

Imaptest: me has a question here. it groans over imap_fetch.c:

/*
* Fetch RFC822-formatted messages.
*
* 'whichfmt' should be set to one of:
*      "RFC822"        entire message
*      "RFC822.HEADER" headers only (with trailing blank line)
*      "RFC822.SIZE"   size of translated message
*      "RFC822.TEXT"   body only (without leading blank line)
*/
void imap_fetch_rfc822(long msgnum, const char *whichfmt) {
....

if (IMAP->cached_rfc822 == NULL) {
...

if (!need_body) cprintf("\r\n");        /* extra trailing newline */

if thats here (commented it out for testing, success then) imaptest complains about that it doesn't find the closing ')' from that reply. TSS in irc://##imap gave me the hint that this linebreak mustn't be there.

since I didn't find a usefull commit message for that line, IG, do you remember a specific reason why its there anyways?

 

in general, that rewrite wasn't intended to change syntax in by any means; its there because of evolutions imap implementation can't stand us sending the greeting in several tcp packages (cut where i've added the linebreaks):

CAPABILITY IMAP4REV1 NAMESPACE ID AUTH=PLAIN AUTH=LOGIN UIDPLUS

ACL

STARTTLS

METADATA

citadel blablabla

which now come in one chunk like that:

CAPABILITY IMAP4REV1 NAMESPACE ID AUTH=PLAIN AUTH=LOGIN UIDPLUS ACL STARTTLS METADATA citadel blablabla

which is achieved by replacing cprintf by calls writing to outbound buffers which is then sent to the client in one piece at the end.

There are several tiny exceptions from it, where the code chatters with the client without the dispatcher loop (hope I found all of them)

 

Next i've replaced all "%s BAD lorem ipsum\r\n" , Params[0].Key by a function implicitely prepending  Params[0].Key' ' and appending '\r\n' So we don't need a printf here in most places (which is good because of it saves us lots of strlens ;-)

 

the other part of the rewrite is to replace the rumpelstilskin handler lookup by a hashtable filled a start time.

Reply via email to