StrBuf *FoundCharset,
StrBuf **Error)
{
- wcsession *WCC = WC;
StrBuf *Buf;
StrBuf *HdrToken;
headereval *Hdr;
/* now we put the body mimepart we read above into the mimelist */
Put(Msg->AllAttach, SKEY(Msg->MsgBody->PartNum), Msg->MsgBody, DestroyMime);
- /* Generate a reply-to address */
- if (StrLength(Msg->Rfca) > 0) {
- if (Msg->reply_to == NULL)
- Msg->reply_to = NewStrBuf();
- if (StrLength(Msg->from) > 0) {
- StrBufPrintf(Msg->reply_to, "%s <%s>", ChrPtr(Msg->from), ChrPtr(Msg->Rfca));
- }
- else {
- FlushStrBuf(Msg->reply_to);
- StrBufAppendBuf(Msg->reply_to, Msg->Rfca, 0);
- }
- }
- else
- {
- if ((StrLength(Msg->OtherNode)>0) &&
- (strcasecmp(ChrPtr(Msg->OtherNode), ChrPtr(WCC->serv_info->serv_nodename))) &&
- (strcasecmp(ChrPtr(Msg->OtherNode), ChrPtr(WCC->serv_info->serv_humannode)) ))
- {
- if (Msg->reply_to == NULL)
- Msg->reply_to = NewStrBuf();
- StrBufPrintf(Msg->reply_to,
- "%s @ %s",
- ChrPtr(Msg->from),
- ChrPtr(Msg->OtherNode));
- }
- else {
- if (Msg->reply_to == NULL)
- Msg->reply_to = NewStrBuf();
- FlushStrBuf(Msg->reply_to);
- StrBufAppendBuf(Msg->reply_to, Msg->from, 0);
- }
- }
FreeStrBuf(&Buf);
FreeStrBuf(&HdrToken);
return 1;
return;
}
+
+ /*
+ * If the "replying_to" variable is set, it refers to a message
+ * number from which we must extract some header fields...
+ */
+ long replying_to = lbstr("replying_to");
+ if (replying_to > 0) {
+ char wefw[1024] = "";
+ char msgn[1024] = "";
+ serv_printf("MSG0 %ld|1", replying_to);
+ serv_getln(buf, sizeof buf);
+ if (buf[0] == '1') while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
+
+ if ( (!strncasecmp(buf, "subj=", 5)) && (strlen(buf) > 5) ) {
+ StrBuf *subj = NewStrBuf();
+ if (strncasecmp(&buf[5], "Re:", 3)) {
+ StrBufAppendBufPlain(subj, HKEY("Re: "), 0);
+ }
+ StrBufAppendBufPlain(subj, &buf[5], -1, 0);
+ PutBstr(HKEY("subject"), subj);
+ }
+
+ else if (!strncasecmp(buf, "wefw=", 5)) {
+ safestrncpy(wefw, &buf[5], sizeof wefw);
+
+ /* Trim down excessively long lists of thread references. We eliminate the
+ * second one in the list so that the thread root remains intact.
+ */
+ int rrtok = num_tokens(wefw, '|');
+ int rrlen = strlen(wefw);
+ if ( ((rrtok >= 3) && (rrlen > 900)) || (rrtok > 10) ) {
+ remove_token(wefw, 1, '|');
+ }
+ }
+
+ else if (!strncasecmp(buf, "msgn=", 5)) {
+ safestrncpy(msgn, &buf[5], sizeof msgn);
+ }
+
+ }
+
+ if (strlen(wefw) + strlen(msgn) > 0) {
+ StrBuf *refs = NewStrBuf();
+ if (!IsEmptyStr(wefw)) {
+ StrBufAppendBufPlain(refs, wefw, -1, 0);
+ }
+ if ( (!IsEmptyStr(wefw)) && (!IsEmptyStr(msgn)) ) {
+ StrBufAppendBufPlain(refs, HKEY("|"), 0);
+ }
+ if (!IsEmptyStr(msgn)) {
+ StrBufAppendBufPlain(refs, msgn, -1, 0);
+ }
+ PutBstr(HKEY("references"), refs);
+ }
+ }
+
/*
* Otherwise proceed normally.
* Do a custom room banner with no navbar...