text_size = 0;
}
- lprintf(CTDL_DEBUG, "RFC822: headers=%d, text=%d, total=%d\n",
+ lprintf(CTDL_DEBUG,
+ "RFC822: headers=" SIZE_T_FMT
+ ", text=" SIZE_T_FMT
+ ", total=" SIZE_T_FMT "\n",
headers_size, text_size, total_size);
if (!strcasecmp(whichfmt, "RFC822.SIZE")) {
- cprintf("RFC822.SIZE %d", total_size);
+ cprintf("RFC822.SIZE " SIZE_T_FMT, total_size);
return;
}
bytes_to_send = text_size;
}
- cprintf("%s {%d}\r\n", whichfmt, bytes_to_send);
+ cprintf("%s {" SIZE_T_FMT "}\r\n", whichfmt, bytes_to_send);
client_write(ptr, bytes_to_send);
}
if (!strncasecmp(which_fields, "HEADER.FIELDS.NOT", 17))
headers_not = 1;
- for (i=0; !IsEmptyStr(&which_fields[i]); ++i) {
+ for (i=0; which_fields[i]; ++i) {
if (which_fields[i]=='(')
strcpy(which_fields, &which_fields[i+1]);
}
- for (i=0; !IsEmptyStr(&which_fields[i]); ++i) {
+ for (i=0; which_fields[i]; ++i) {
if (which_fields[i]==')') {
which_fields[i] = 0;
break;
}
if (is_partial == 0) {
- cprintf("BODY[%s] {%d}\r\n", section, IMAP->cached_body_len);
+ cprintf("BODY[%s] {" SIZE_T_FMT "}\r\n", section, IMAP->cached_body_len);
pstart = 0;
pbytes = IMAP->cached_body_len;
}
else {
- sscanf(partial, "%d.%d", &pstart, &pbytes);
+ sscanf(partial, SIZE_T_FMT "." SIZE_T_FMT, &pstart, &pbytes);
if (pbytes > (IMAP->cached_body_len - pstart)) {
pbytes = IMAP->cached_body_len - pstart;
}
- cprintf("BODY[%s]<%d> {%d}\r\n", section, pstart, pbytes);
+ cprintf("BODY[%s]<" SIZE_T_FMT "> {" SIZE_T_FMT "}\r\n", section, pstart, pbytes);
}
/* Here we go -- output it */
imap_strout(subtype);
/* body language */
- cprintf(" NIL");
+ /* cprintf(" NIL"); We thought we needed this at one point, but maybe we don't... */
cprintf(")");
}
}
cprintf("(");
- imap_strout(cbmaintype);
+ imap_strout(cbmaintype); /* body type */
cprintf(" ");
- imap_strout(cbsubtype);
+ imap_strout(cbsubtype); /* body subtype */
cprintf(" ");
+ cprintf("("); /* begin body parameter list */
+
+ /* "NAME" must appear as the first parameter. This is not required by IMAP,
+ * but the Asterisk voicemail application blindly assumes that NAME will be in
+ * the first position. If it isn't, it rejects the message.
+ */
+ if (name != NULL) if (!IsEmptyStr(name)) {
+ cprintf("\"NAME\" ");
+ imap_strout(name);
+ cprintf(" ");
+ }
+
+ cprintf("\"CHARSET\" ");
if (cbcharset == NULL) {
- cprintf("(\"CHARSET\" \"US-ASCII\"");
+ imap_strout("US-ASCII");
}
- else if (IsEmptyStr(cbcharset)) {
- cprintf("(\"CHARSET\" \"US-ASCII\"");
+ else if (cbcharset[0] == 0) {
+ imap_strout("US-ASCII");
}
else {
- cprintf("(\"CHARSET\" ");
imap_strout(cbcharset);
}
+ cprintf(") "); /* end body parameter list */
- if (name != NULL) if (!IsEmptyStr(name)) {
- cprintf(" \"NAME\" ");
- imap_strout(name);
- }
+ cprintf("NIL "); /* Body ID */
+ cprintf("NIL "); /* Body description */
- cprintf(") ");
-
- cprintf("NIL "); /* Body ID */
- cprintf("NIL "); /* Body description */
-
- if (encoding != NULL) if (!IsEmptyStr(encoding)) have_encoding = 1;
+ if (encoding != NULL) if (encoding[0] != 0) have_encoding = 1;
if (have_encoding) {
imap_strout(encoding);
}
cprintf("BODYSTRUCTURE (\"TEXT\" \"PLAIN\" "
"(\"CHARSET\" \"US-ASCII\") NIL NIL "
- "\"7BIT\" %d %d)", rfc822_body_len, lines);
+ "\"7BIT\" " SIZE_T_FMT " %d)", rfc822_body_len, lines);
return;
}
*/
void imap_macro_replace(char *str, char *find, char *replace) {
char holdbuf[SIZ];
+ int findlen;
+
+ findlen = strlen(find);
- if (!strncasecmp(str, find, strlen(find))) {
- if (str[strlen(find)]==' ') {
- strcpy(holdbuf, &str[strlen(find)+1]);
+ if (!strncasecmp(str, find, findlen)) {
+ if (str[findlen]==' ') {
+ strcpy(holdbuf, &str[findlen+1]);
strcpy(str, replace);
strcat(str, " ");
strcat(str, holdbuf);
}
- if (str[strlen(find)]==0) {
- strcpy(holdbuf, &str[strlen(find)+1]);
+ if (str[findlen]==0) {
+ strcpy(holdbuf, &str[findlen+1]);
strcpy(str, replace);
}
}
int i;
int nest = 0;
- for (i=0; !IsEmptyStr(&str[i]); ++i) {
+ for (i=0; str[i]; ++i) {
if (str[i]=='(') ++nest;
if (str[i]=='[') ++nest;
if (str[i]=='<') ++nest;
long initial_len;
/* Convert all whitespace to ordinary space characters. */
- for (i=0; !IsEmptyStr(&items[i]); ++i) {
+ for (i=0; items[i]; ++i) {
if (isspace(items[i])) items[i]=' ';
}
char setstr[SIZ], lostr[SIZ], histr[SIZ];
long lo, hi;
char actual_range[SIZ];
+ struct citimap *Imap;
/*
* Handle the "ALL" macro
safestrncpy(actual_range, supplied_range, sizeof actual_range);
}
+ Imap = IMAP;
/*
* Clear out the IMAP_SELECTED flags for all messages.
*/
- for (i = 0; i < IMAP->num_msgs; ++i) {
- IMAP->flags[i] = IMAP->flags[i] & ~IMAP_SELECTED;
+ for (i = 0; i < Imap->num_msgs; ++i) {
+ Imap->flags[i] = Imap->flags[i] & ~IMAP_SELECTED;
}
/*
hi = atol(histr);
/* Loop through the array, flipping bits where appropriate */
- for (i = 1; i <= IMAP->num_msgs; ++i) {
+ for (i = 1; i <= Imap->num_msgs; ++i) {
if (is_uid) { /* fetch by sequence number */
- if ( (IMAP->msgids[i-1]>=lo)
- && (IMAP->msgids[i-1]<=hi)) {
- IMAP->flags[i-1] |= IMAP_SELECTED;
+ if ( (Imap->msgids[i-1]>=lo)
+ && (Imap->msgids[i-1]<=hi)) {
+ Imap->flags[i-1] |= IMAP_SELECTED;
}
}
else { /* fetch by uid */
if ( (i>=lo) && (i<=hi)) {
- IMAP->flags[i-1] |= IMAP_SELECTED;
+ Imap->flags[i-1] |= IMAP_SELECTED;
}
}
}