// Which NNTP command was issued, determines whether we will fetch headers, body, or both.
int headers_only = HEADERS_ALL;
if (acmd == HEAD) headers_only = HEADERS_FAST;
- if (acmd == BODY) headers_only = HEADERS_NONE;
+ else if (acmd == BODY) headers_only = HEADERS_NONE;
+ else if (acmd == STAT) headers_only = HEADERS_FAST;
// now figure out what the client is asking for.
char requested_article[256];
// At this point we know the message number of the "article" being requested.
// We have an awesome API call that does all the heavy lifting for us.
+ char *fetched_message_id = NULL;
CC->redirect_buffer = NewStrBufPlain(NULL, SIZ);
int fetch = CtdlOutputMsg(requested_msgnum,
MT_RFC822, // output in RFC822 format ... sort of
NULL, // teh whole thing, not just a section
0, // no flags yet ... maybe new ones for Path: etc ?
NULL,
- NULL
+ NULL,
+ &fetched_message_id // extract the message ID from the message as we go...
);
StrBuf *msgtext = CC->redirect_buffer;
CC->redirect_buffer = NULL;
}
if (acmd == ARTICLE) {
- cprintf("220 %ld <FIXME@FIXME>\r\n", requested_msgnum);
+ cprintf("220 %ld <%s>\r\n", requested_msgnum, fetched_message_id);
}
if (acmd == HEAD) {
- cprintf("221 %ld <FIXME@FIXME>\r\n", requested_msgnum);
+ cprintf("221 %ld <%s>\r\n", requested_msgnum, fetched_message_id);
}
if (acmd == BODY) {
- cprintf("222 %ld <FIXME@FIXME>\r\n", requested_msgnum);
+ cprintf("222 %ld <%s>\r\n", requested_msgnum, fetched_message_id);
}
if (acmd == STAT) {
- // crash FIXME
- cprintf("223 %ld <FIXME@FIXME>\r\n", requested_msgnum);
+ cprintf("223 %ld <%s>\r\n", requested_msgnum, fetched_message_id);
+ FreeStrBuf(&msgtext);
+ return;
}
client_write(SKEY(msgtext));
cprintf(".\r\n"); // this protocol uses a dot terminator
FreeStrBuf(&msgtext);
+ if (fetched_message_id) free(fetched_message_id);
}