From: Wilfried Goesgens Date: Wed, 3 Nov 2010 20:47:55 +0000 (+0100) Subject: move old tokenizer over to the managesieve server; its only used there. X-Git-Tag: v8.01~612 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=ec4814cf844f6f070da547fe585ce2f96e806731 move old tokenizer over to the managesieve server; its only used there. - remove old_imap_tokenizer from imap_tools.h - move old_imap_tokenizer to modules/managesieve/serv_managesieve.c - move imap_tools.h to modules/imap; since its not needed globaly anymore. --- diff --git a/citadel/imap_tools.h b/citadel/imap_tools.h deleted file mode 100644 index 8c64aba24..000000000 --- a/citadel/imap_tools.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * FDELIM defines which character we want to use as a folder delimiter - * in room names. Originally we used a forward slash, but that caused - * rooms with names like "Sent/Received Pages" to get delimited, so we - * changed it to a backslash. This is completely irrelevant to how Citadel - * speaks to IMAP clients -- the delimiter used in the IMAP protocol is - * a vertical bar, which is illegal in Citadel room names anyway. - */ -#define FDELIM '\\' - -typedef struct __citimap_command { - StrBuf *CmdBuf; /* our current commandline; gets chopped into: */ - ConstStr *Params; /* Commandline tokens */ - int num_parms; /* Number of Commandline tokens available */ - int avail_parms; /* Number of ConstStr args is big */ -} citimap_command; - -/* - * since we work with shifted pointers to ConstStrs in some places, - * we can't just say we want to cut the n'th of Cmd, we have to pass it in - * and rely on that CutMe references Cmd->CmdBuf; else peek won't work out - * and len will differ. - */ -void TokenCutRight(citimap_command *Cmd, - ConstStr *CutMe, - int n); -/* - * since we just move Key around here, Cmd is just here so the syntax is identical. - */ -void TokenCutLeft(citimap_command *Cmd, - ConstStr *CutMe, - int n); -void MakeStringOf(StrBuf *Buf, int skip); - -int CmdAdjust(citimap_command *Cmd, - int nArgs, - int Realloc); - - -void imap_strout(ConstStr *args); -void plain_imap_strout(char *buf); -int imap_parameterize(citimap_command *Cmd); -int old_imap_parameterize(char** args, char *n); -void imap_mailboxname(char *buf, int bufsize, struct ctdlroom *qrbuf); -void imap_ial_out(struct internet_address_list *ialist); -int imap_roomname(char *buf, int bufsize, const char *foldername); -int imap_is_message_set(const char *); -int imap_mailbox_matches_pattern(const char *pattern, char *mailboxname); -int imap_datecmp(const char *datestr, time_t msgtime); - -/* - * Flags that may be returned by imap_roomname() - * (the lower eight bits will be the floor number) - */ -#define IR_MAILBOX 0x0100 /* Mailbox */ -#define IR_EXISTS 0x0200 /* Room exists (not implemented) */ -#define IR_BABOON 0x0000 /* Just had to put this here :) */ diff --git a/citadel/modules/imap/imap_tools.c b/citadel/modules/imap/imap_tools.c index 645478a47..d0f4c2cac 100644 --- a/citadel/modules/imap/imap_tools.c +++ b/citadel/modules/imap/imap_tools.c @@ -604,65 +604,6 @@ int imap_parameterize(citimap_command *Cmd) return Cmd->num_parms; } -int old_imap_parameterize(char** args, char *in) -{ - char* out = in; - int num = 0; - - for (;;) - { - /* Skip whitespace. */ - - while (isspace(*in)) - in++; - if (*in == 0) - break; - - /* Found the start of a token. */ - - args[num++] = out; - - /* Read in the token. */ - - for (;;) - { - int c = *in++; - if (isspace(c)) - break; - - if (c == '\"') - { - /* Found a quoted section. */ - - for (;;) - { - c = *in++; - if (c == '\"') - break; - else if (c == '\\') - c = *in++; - - *out++ = c; - if (c == 0) - return num; - } - } - else if (c == '\\') - { - c = *in++; - *out++ = c; - } - else - *out++ = c; - - if (c == 0) - return num; - } - *out++ = '\0'; - } - - return num; -} /* Convert a struct ctdlroom to an IMAP-compatible mailbox name. */ diff --git a/citadel/modules/imap/imap_tools.h b/citadel/modules/imap/imap_tools.h new file mode 100644 index 000000000..d9b72cc51 --- /dev/null +++ b/citadel/modules/imap/imap_tools.h @@ -0,0 +1,56 @@ +/* + * FDELIM defines which character we want to use as a folder delimiter + * in room names. Originally we used a forward slash, but that caused + * rooms with names like "Sent/Received Pages" to get delimited, so we + * changed it to a backslash. This is completely irrelevant to how Citadel + * speaks to IMAP clients -- the delimiter used in the IMAP protocol is + * a vertical bar, which is illegal in Citadel room names anyway. + */ +#define FDELIM '\\' + +typedef struct __citimap_command { + StrBuf *CmdBuf; /* our current commandline; gets chopped into: */ + ConstStr *Params; /* Commandline tokens */ + int num_parms; /* Number of Commandline tokens available */ + int avail_parms; /* Number of ConstStr args is big */ +} citimap_command; + +/* + * since we work with shifted pointers to ConstStrs in some places, + * we can't just say we want to cut the n'th of Cmd, we have to pass it in + * and rely on that CutMe references Cmd->CmdBuf; else peek won't work out + * and len will differ. + */ +void TokenCutRight(citimap_command *Cmd, + ConstStr *CutMe, + int n); +/* + * since we just move Key around here, Cmd is just here so the syntax is identical. + */ +void TokenCutLeft(citimap_command *Cmd, + ConstStr *CutMe, + int n); +void MakeStringOf(StrBuf *Buf, int skip); + +int CmdAdjust(citimap_command *Cmd, + int nArgs, + int Realloc); + + +void imap_strout(ConstStr *args); +void plain_imap_strout(char *buf); +int imap_parameterize(citimap_command *Cmd); +void imap_mailboxname(char *buf, int bufsize, struct ctdlroom *qrbuf); +void imap_ial_out(struct internet_address_list *ialist); +int imap_roomname(char *buf, int bufsize, const char *foldername); +int imap_is_message_set(const char *); +int imap_mailbox_matches_pattern(const char *pattern, char *mailboxname); +int imap_datecmp(const char *datestr, time_t msgtime); + +/* + * Flags that may be returned by imap_roomname() + * (the lower eight bits will be the floor number) + */ +#define IR_MAILBOX 0x0100 /* Mailbox */ +#define IR_EXISTS 0x0200 /* Room exists (not implemented) */ +#define IR_BABOON 0x0000 /* Just had to put this here :) */ diff --git a/citadel/modules/managesieve/serv_managesieve.c b/citadel/modules/managesieve/serv_managesieve.c index 2f67d2f6f..f1523d73b 100644 --- a/citadel/modules/managesieve/serv_managesieve.c +++ b/citadel/modules/managesieve/serv_managesieve.c @@ -63,7 +63,6 @@ #include "database.h" #include "msgbase.h" #include "internet_addressing.h" -#include "imap_tools.h" /* Needed for imap_parameterize */ #include "genstamp.h" #include "domain.h" #include "clientsocket.h" @@ -104,6 +103,66 @@ enum { /** Command states for login authentication */ #define MGSVE ((struct citmgsve *)CC->session_specific_data) +int old_imap_parameterize(char** args, char *in) +{ + char* out = in; + int num = 0; + + for (;;) + { + /* Skip whitespace. */ + + while (isspace(*in)) + in++; + if (*in == 0) + break; + + /* Found the start of a token. */ + + args[num++] = out; + + /* Read in the token. */ + + for (;;) + { + int c = *in++; + if (isspace(c)) + break; + + if (c == '\"') + { + /* Found a quoted section. */ + + for (;;) + { + c = *in++; + if (c == '\"') + break; + else if (c == '\\') + c = *in++; + + *out++ = c; + if (c == 0) + return num; + } + } + else if (c == '\\') + { + c = *in++; + *out++ = c; + } + else + *out++ = c; + + if (c == 0) + return num; + } + *out++ = '\0'; + } + + return num; +} + /*****************************************************************************/ /* MANAGESIEVE Server */ /*****************************************************************************/