#include <stdlib.h>
#include <unistd.h>
+#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include "citadel.h"
+#include "sysdep_decls.h"
#include "tools.h"
+#include "internet_addressing.h"
#include "imap_tools.h"
+
+/*
+ * Output a string to the IMAP client, either as a literal or quoted.
+ * (We do a literal if it has any double-quotes or backslashes.)
+ */
+void imap_strout(char *buf) {
+ int i;
+ int is_literal = 0;
+
+ if (buf == NULL) { /* yeah, we handle this */
+ cprintf("NIL");
+ return;
+ }
+
+ for (i=0; i<strlen(buf); ++i) {
+ if ( (buf[i]=='\"') || (buf[i]=='\\') ) is_literal = 1;
+ }
+
+ if (is_literal) {
+ cprintf("{%d}\r\n%s", strlen(buf), buf);
+ }
+
+ else {
+ cprintf("\"%s\"", buf);
+ }
+}
+
+
+
+
+
/*
* Break a command down into tokens, taking into consideration the
* possibility of escaping spaces using quoted tokens
}
+/*
+ * Output a struct internet_address_list in the form an IMAP client wants
+ */
+void imap_ial_out(struct internet_address_list *ialist) {
+ struct internet_address_list *iptr;
+
+ if (ialist == NULL) {
+ cprintf("NIL");
+ return;
+ }
+
+ cprintf("(");
+
+ for (iptr = ialist; iptr != NULL; iptr = iptr->next) {
+ cprintf("(");
+ imap_strout(iptr->ial_name);
+ cprintf(" NIL ");
+ imap_strout(iptr->ial_user);
+ cprintf(" ");
+ imap_strout(iptr->ial_node);
+ cprintf(")");
+ }
+
+ cprintf(")");
+}