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) 
		delete m_pTemplateMail; 
} 
 
void TemplateMailMgr::SetValue(char *Name,char *Value) 
{ 
	m_pTemplateMail->SetValue(Name,Value); 
} 
 
 
void TemplateMailMgr::GenerateAuthMail(char *pszAuthMail,int &Len) 
{ 
	int pos = 0; 
 
	TemplateNode *pCurNode = m_pTemplateMail->GetHeadNode(); 
 
	while(pCurNode) 
	{ 
		memcpy(pszAuthMail + pos,pCurNode->Value,pCurNode->ValueLen); 
 
		pos += pCurNode->ValueLen; 
 
		pCurNode = pCurNode->pNextNode; 
	} 
 
	Len = pos; 
} 
 
 
int TemplateMailMgr::ReadTemplateMail() 
{ 
	int iRet = 0; 
	int len = 0; 
	char szLine[LINE_LEN_MAX + 2]; 
 
	int charCnt = 0;//the count of templatemail 
 
	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; 
		} 
 
		charCnt += len; 
		printf(szLine); 
	} 
 
	if(pConfigControl) 
	{ 
		delete pConfigControl; 
	} 
 
	return charCnt; 
} 
 
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; 
					pNode->ValueLen = 0;//length of value is zero 
 
					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; 
					pNode->ValueLen = strlen(szTemp); 
 
					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; 
						pNode->ValueLen = strlen(szTemp); 
 
						m_pTemplateMail->Insert(pNode); 
 
						LinePos++; 
 
						break; 
					} 
 
					cnt++; 
					LinePos++; 
				} 
			} 
		} 
	} 
 
	return true; 
}