www.pudn.com > antispam-addin.rar > templatemailmgr.cxx
#include "unihead.hxx"
#include "configcontrol.hxx"
#include "templatemailmgr.hxx"
#include "templatemail.hxx"
#include "templatenode.hxx"
TemplateMailMgr::TemplateMailMgr(char* pszTemplateMailFile)
{
m_pszTemplateMailFile = strdup(pszTemplateMailFile);
m_pTemplateMail = new TemplateMail();
}
TemplateMailMgr::~TemplateMailMgr()
{
if(m_pTemplateMail)
{
free(m_pTemplateMail);
}
}
void TemplateMailMgr::SetValue(char *Name,char *Value)
{
m_pTemplateMail->SetValue(Name,Value);
}
char* TemplateMailMgr::getTemplate(TemplateMail *pTemplateMail)
{
char* pszTemplateMail = NULL;
return NULL;
}
int TemplateMailMgr::ReadTemplateMail()
{
int iRet = 0;
int len = 0;
char szLine[LINE_LEN_MAX + 2];
ConfigControl *pConfigControl = new ConfigControl();
iRet = pConfigControl->OpenConfig(m_pszTemplateMailFile);
if(iRet < 0)
{
return -1;
}
while(pConfigControl->NextLine())
{
memset(szLine,0,LINE_LEN_MAX + 2);
pConfigControl->GetLine(szLine);
len = strlen(szLine);
szLine[len] = '\r';
szLine[len+1] = '\n';
szLine[len+2] = '\0';
if(ParseALine(szLine) != true)
{
return -1;
}
printf(szLine);
}
if(pConfigControl)
{
free(pConfigControl);
}
return 0;
}
bool TemplateMailMgr::ParseALine(char *pszLine)
{
int LinePos = 0;
int cnt = 0;
TemplateNode *pNode = NULL;
char szTemp[LINE_LEN_MAX];
while(pszLine[LinePos] != '\0')
{
cnt = 0;
memset(szTemp,0,LINE_LEN_MAX);
if(LinePos+1 < LINE_LEN_MAX && pszLine[LinePos] == '$' && pszLine[LinePos + 1] == '{')
{
LinePos += 2;
while(pszLine[LinePos] != '\0')
{
if(pszLine[LinePos] == '}')
{
pNode = new TemplateNode();
pNode->Name = strdup(szTemp);
pNode->nType = NODE_TYPE_TAG;
m_pTemplateMail->Insert(pNode);
LinePos++;
break;
}else
{
if(pszLine[LinePos + 1] == '\0')
{//lost "}"
return false;
}
szTemp[cnt] = pszLine[LinePos];
cnt++;
LinePos++;
}
}
}else
{
while(pszLine[LinePos] != '\0')
{
if((LinePos+1 < LINE_LEN_MAX && pszLine[LinePos] == '$' && pszLine[LinePos + 1] == '{'))
{//"${"
pNode = new TemplateNode();
pNode->Value = strdup(szTemp);
pNode->nType = NODE_TYPE_DATA;
m_pTemplateMail->Insert(pNode);
break;
}else
{
szTemp[cnt] = pszLine[LinePos];
if(pszLine[LinePos + 1] == '\0')
{//"\0"
pNode = new TemplateNode();
pNode->Value = strdup(szTemp);
pNode->nType = NODE_TYPE_DATA;
m_pTemplateMail->Insert(pNode);
LinePos++;
break;
}
cnt++;
LinePos++;
}
}
}
}
return true;
}