Files
Work/smtp/MAILREG.CPP
2024-08-07 09:16:27 -04:00

119 lines
3.1 KiB
C++

#include <smtp/mailreg.hpp>
#include <common/string.hpp>
#include <common/block.hpp>
#include <common/stdio.hpp>
BOOL MailReg::getRecipients(Block<String> &recipients)
{
DWORD itemIndex(0);
RegKey regKey;
String recipient;
recipients.remove();
if(!regKey.openKey(STRING_MAILRECIPIENTSKEYNAME))return FALSE;
while(regKey.enumValue(itemIndex++,String(STRING_RECIPIENTS),recipient))recipients.insert(&recipient);
return (recipients.size()?TRUE:FALSE);
}
void MailReg::setRecipients(const Block<String> &recipients)
{
String namePrefix;
RegKey regKey;
if(!regKey.openKey(STRING_MAILRECIPIENTSKEYNAME))
{
regKey.createKey(STRING_MAILRECIPIENTSKEYNAME,"");
regKey.openKey(STRING_MAILRECIPIENTSKEYNAME);
}
for(int lineIndex=0;lineIndex<recipients.size();lineIndex++)
{
::sprintf(namePrefix,"R%02d",lineIndex);
regKey.setValue(namePrefix,String(((Block<String>&)recipients)[lineIndex]));
}
}
BOOL MailReg::addRecipient(const String &recipient)
{
Block<String> recipients;
String namePrefix;
RegKey regKey;
if(recipient.isNull())return FALSE;
getRecipients(recipients);
if(isInBlock(recipient,recipients)){setRecipients(recipients);return FALSE;}
::sprintf(namePrefix,"R%02d",recipients.size());
if(!regKey.openKey(STRING_MAILRECIPIENTSKEYNAME))
{
regKey.createKey(STRING_MAILRECIPIENTSKEYNAME,"");
regKey.openKey(STRING_MAILRECIPIENTSKEYNAME);
}
regKey.setValue(namePrefix,recipient);
return TRUE;
}
BOOL MailReg::getReversePaths(Block<String> &reversePaths)
{
DWORD itemIndex(0);
RegKey regKey;
String reversePath;
reversePaths.remove();
if(!regKey.openKey(STRING_MAILREVERSEPATHKEYNAME))return FALSE;
while(regKey.enumValue(itemIndex++,String(STRING_REVERSEPATH),reversePath))reversePaths.insert(&reversePath);
return (reversePaths.size()?TRUE:FALSE);
}
void MailReg::setReversePaths(const Block<String> &reversePaths)
{
String namePrefix;
RegKey regKey;
if(!regKey.openKey(STRING_MAILREVERSEPATHKEYNAME))
{
regKey.createKey(STRING_MAILREVERSEPATHKEYNAME,"");
regKey.openKey(STRING_MAILREVERSEPATHKEYNAME);
}
for(int lineIndex=0;lineIndex<reversePaths.size();lineIndex++)
{
::sprintf(namePrefix,"R%02d",lineIndex);
regKey.setValue(namePrefix,String(((Block<String>&)reversePaths)[lineIndex]));
}
}
BOOL MailReg::addReversePath(const String &reversePath)
{
Block<String> reversePaths;
String namePrefix;
RegKey regKey;
if(reversePath.isNull())return FALSE;
getReversePaths(reversePaths);
if(isInBlock(reversePath,reversePaths)){setReversePaths(reversePaths);return FALSE;}
::sprintf(namePrefix,"R%02d",reversePaths.size());
if(!regKey.openKey(STRING_MAILREVERSEPATHKEYNAME))
{
regKey.createKey(STRING_MAILREVERSEPATHKEYNAME,"");
regKey.openKey(STRING_MAILREVERSEPATHKEYNAME);
}
regKey.setValue(namePrefix,reversePath);
return TRUE;
}
BOOL MailReg::isInBlock(const String &string,Block<String> &strings)
{
for(int itemIndex=0;itemIndex<strings.size();itemIndex++)
{
if(string==strings[itemIndex])
{
if(itemIndex)
{
String currTop=strings[0];
strings[0]=string;
strings[itemIndex]=currTop;
}
return TRUE;
}
}
return FALSE;
}