118 lines
3.0 KiB
C++
118 lines
3.0 KiB
C++
#include "tigris.hxx"
|
|
|
|
int
|
|
__cdecl main(
|
|
int argc,
|
|
char *argv[ ]
|
|
)
|
|
{
|
|
|
|
|
|
if (!CArticle::InitClass() )
|
|
return -1;
|
|
|
|
CNntpReturn nntpReturn;
|
|
if (2 != argc)
|
|
{
|
|
printf("%s <name-of-article-file-to-parse>\n", argv[0]);
|
|
return -1;
|
|
}
|
|
|
|
char * szFilename = argv[1];
|
|
|
|
char * pchLine = NULL;
|
|
|
|
//
|
|
// Create a allocator object for processing the article
|
|
//
|
|
|
|
const DWORD cchMaxBuffer = 8 * 1024;
|
|
char rgchBuffer[cchMaxBuffer];
|
|
CAllocator allocator(rgchBuffer, cchMaxBuffer);
|
|
|
|
CFromClientArticle *pArticle = new CFromClientArticle("primate") ;
|
|
|
|
CPCString pcHub("baboon", 6);
|
|
CNAMEREFLIST namereflist;
|
|
namereflist.fInit(3, &allocator);
|
|
|
|
__try{
|
|
if (!pArticle->fInit(szFilename, nntpReturn, &allocator))
|
|
__leave;
|
|
|
|
char chBad;
|
|
if (!(pArticle->m_pcHeader).fCheckTextOrSpace(chBad))
|
|
{
|
|
nntpReturn.fSet(nrcArticleBadChar, (BYTE) chBad, "header");
|
|
__leave;
|
|
}
|
|
|
|
// Check required and optional fields
|
|
CField * rgPFields [] = {
|
|
&(pArticle->m_fieldSubject),
|
|
&(pArticle->m_fieldNewsgroups),
|
|
&(pArticle->m_fieldFrom),
|
|
&(pArticle->m_fieldDate),
|
|
&(pArticle->m_fieldLines),
|
|
&(pArticle->m_fieldFollowupTo),
|
|
&(pArticle->m_fieldReplyTo),
|
|
&(pArticle->m_fieldApproved),
|
|
&(pArticle->m_fieldSender),
|
|
&(pArticle->m_fieldSummary),
|
|
&(pArticle->m_fieldReferences),
|
|
&(pArticle->m_fieldKeyword),
|
|
&(pArticle->m_fieldExpires),
|
|
&(pArticle->m_fieldOrganization)
|
|
};
|
|
DWORD cFields = sizeof(rgPFields)/sizeof(CField *);
|
|
if (!pArticle->fFindAndParseList((CField * *)rgPFields, cFields, nntpReturn))
|
|
__leave;
|
|
|
|
NAME_AND_ARTREF Nameref;
|
|
|
|
(Nameref.artref).m_groupId = 1;
|
|
(Nameref.artref).m_articleId = 3;
|
|
(Nameref.pcName).vInsert("sci.ssors");
|
|
namereflist.AddTail(Nameref);
|
|
|
|
(Nameref.artref).m_groupId = 2;
|
|
(Nameref.artref).m_articleId = 4;
|
|
(Nameref.pcName).vInsert("alt.itute");
|
|
namereflist.AddTail(Nameref);
|
|
|
|
(Nameref.artref).m_groupId = 123456789;
|
|
(Nameref.artref).m_articleId = 123456789;
|
|
(Nameref.pcName).vInsert("comp.atriot");
|
|
namereflist.AddTail(Nameref);
|
|
|
|
|
|
if (!(
|
|
(pArticle->m_fieldMessageID).fSet(*pArticle, pcHub, nntpReturn)
|
|
&& (pArticle->m_fieldNewsgroups).fSet(*pArticle, nntpReturn)
|
|
&& (pArticle->m_fieldDate).fSet(*pArticle, nntpReturn)
|
|
&& (pArticle->m_fieldLines).fSet(*pArticle, nntpReturn)
|
|
&& (pArticle->m_fieldOrganization).fSet(*pArticle, nntpReturn)
|
|
&& (pArticle->m_fieldPath).fSet(*pArticle, pcHub, nntpReturn)
|
|
&& (pArticle->m_fieldNNTPPostingHost).fSet(*pArticle, nntpReturn)
|
|
&& (pArticle->m_fieldXAuthLoginName).fSet(*pArticle, nntpReturn)
|
|
&& (pArticle->m_fieldXref).fSet(pcHub, namereflist, *pArticle,
|
|
pArticle->m_fieldNewsgroups, nntpReturn)
|
|
&& pArticle->fDeleteEmptyHeader(nntpReturn)
|
|
&& pArticle->fSaveHeader(nntpReturn)
|
|
|
|
))
|
|
__leave;
|
|
|
|
nntpReturn.fSetOK();
|
|
|
|
}__finally{
|
|
delete pArticle;
|
|
}
|
|
|
|
|
|
printf("%s: %d %s\n", szFilename, nntpReturn.m_nrc, nntpReturn.m_sz);
|
|
return 0;
|
|
}
|
|
|
|
|