]> code.citadel.org Git - citadel.git/blobdiff - citadel/internet_addressing.c
parse reply-to header into its permanent database field
[citadel.git] / citadel / internet_addressing.c
index c448001d17300b29858429be60f18b0693a89386..77e743a6bfaac8131fd4df7d2500f05000c7e159 100644 (file)
@@ -389,9 +389,10 @@ void unfold_rfc822_field(char **field, char **FieldEnd)
             pField++, sField++)
        {
                if ((*sField=='\r') || (*sField=='\n')) {
-                       while (isspace(*sField))
-                               sField++;
-                       *pField = *sField;
+                   sField++;
+                   if  (*sField == '\n')
+                       sField++;
+                   *pField = *sField;
                }
                else {
                        if (*sField=='\"') quote = 1 - quote;
@@ -680,6 +681,14 @@ int convert_field(struct CtdlMessage *msg, const char *beg, const char *end) {
                processed = 1;
        }
 
+       else if (!strcasecmp(key, "Reply-To")) {
+               if (msg->cm_fields['K'] != NULL) {
+                       free(msg->cm_fields['K']);
+               }
+               msg->cm_fields['K'] = strndup(value, valuelen);
+               processed = 1;
+       }
+
        else if (!strcasecmp(key, "In-reply-to")) {
                if (msg->cm_fields['W'] == NULL) {              /* References: supersedes In-reply-to: */
                        msg->cm_fields['W'] = strndup(value, valuelen);
@@ -779,8 +788,7 @@ struct CtdlMessage *convert_internet_message_buf(StrBuf **rfc822)
                       (done == 0) ) 
                {
 
-                       if ((*pos=='\n') &&
-                           (!isspace(*(pos+1)))) 
+                       if ( (*pos=='\n') && ((*(pos+1))!=0x20) && ((*(pos+1))!=0x09) )
                        {
                                end = pos;
                        }
@@ -864,13 +872,13 @@ char *rfc822_fetch_field(const char *rfc822, const char *fieldname) {
        snprintf(fieldhdr, sizeof fieldhdr, "%s:", fieldname);
 
        /* Locate the end of the headers, so we don't run past that point */
-       end_of_headers = bmstrcasestr(rfc822, "\n\r\n");
+       end_of_headers = cbmstrcasestr(rfc822, "\n\r\n");
        if (end_of_headers == NULL) {
-               end_of_headers = bmstrcasestr(rfc822, "\n\n");
+               end_of_headers = cbmstrcasestr(rfc822, "\n\n");
        }
        if (end_of_headers == NULL) return (NULL);
 
-       field_start = bmstrcasestr(rfc822, fieldhdr);
+       field_start = cbmstrcasestr(rfc822, fieldhdr);
        if (field_start == NULL) return(NULL);
        if (field_start > end_of_headers) return(NULL);
 
@@ -878,11 +886,11 @@ char *rfc822_fetch_field(const char *rfc822, const char *fieldname) {
        strcpy(fieldbuf, "");
 
        ptr = field_start;
-       ptr = memreadline(ptr, fieldbuf, SIZ-strlen(fieldbuf) );
+       ptr = cmemreadline(ptr, fieldbuf, SIZ-strlen(fieldbuf) );
        while ( (isspace(ptr[0])) && (ptr < end_of_headers) ) {
                strcat(fieldbuf, " ");
                cont = &fieldbuf[strlen(fieldbuf)];
-               ptr = memreadline(ptr, cont, SIZ-strlen(fieldbuf) );
+               ptr = cmemreadline(ptr, cont, SIZ-strlen(fieldbuf) );
                striplt(cont);
        }