]> code.citadel.org Git - citadel.git/blobdiff - citadel/modules/nntp/serv_nntp.c
NNTP ARTICLE/HEAD/BODY/STAT now return the message-id associated with the message...
[citadel.git] / citadel / modules / nntp / serv_nntp.c
index 0970e68b43f1624060a33a90f32c48fcbb75bc38..6a75c622a5cd0e9c5b7845e7327b7f940171a9da 100644 (file)
@@ -721,7 +721,8 @@ void nntp_article(const char *cmd) {
        // 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];
@@ -760,6 +761,7 @@ void nntp_article(const char *cmd) {
 
        // 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
@@ -769,7 +771,8 @@ void nntp_article(const char *cmd) {
                        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;
@@ -781,22 +784,24 @@ void nntp_article(const char *cmd) {
        }
 
        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);
 }