1159 lines
40 KiB
Plaintext
1159 lines
40 KiB
Plaintext
|
|
|
|
if(pCurrNode==mlpRootNode)
|
|
{
|
|
if(!pCurrNode->leftNode()&&!pCurrNode->rightNode())
|
|
{
|
|
delete mlpRootNode;
|
|
mlpRootNode=0;
|
|
leaves(leaves()-1);
|
|
}
|
|
else if(!pCurrNode->rightNode())
|
|
{
|
|
if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(pCurrNode->leftNode());
|
|
else pParentNode->rightNode(pCurrNode->leftNode());
|
|
}
|
|
else if(!pCurrNode->leftNode())
|
|
{
|
|
if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(pCurrNode->leftNode());
|
|
else pParentNode->rightNode(pCurrNode->leftNode());
|
|
}
|
|
else
|
|
{
|
|
TreeNode<T> *pCursorNode;
|
|
pTmpNode=pCursorNode=pCurrNode->leftNode();
|
|
while(pTmpNode->rightNode()){pCursorNode=pTmpNode;pTmpNode=pTmpNode->rightNode();}
|
|
if(pCursorNode)pCursorNode->rightNode(0);
|
|
if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(pTmpNode);
|
|
else pParentNode->rightNode(pTmpNode);
|
|
}
|
|
delete pCurrNode;
|
|
leaves(leaves()-1);
|
|
|
|
// else
|
|
// {
|
|
// pTmpNode=(pCurrNode->leftNode()?pCurrNode->leftNode():pCurrNode->rightNode());
|
|
// delete mlpRootNode;
|
|
// mlpRootNode=pTmpNode;
|
|
// leaves(leaves()-1);
|
|
// }
|
|
}
|
|
else
|
|
{
|
|
|
|
|
|
#if 0
|
|
|
|
#include <http/main.hpp>
|
|
#include <common/string.hpp>
|
|
#include <common/console.hpp>
|
|
#include <common/openfile.hpp>
|
|
#include <common/filemap.hpp>
|
|
#include <common/pview.hpp>
|
|
#include <common/profile.hpp>
|
|
#include <socket/hostent.hpp>
|
|
#include <socket/servent.hpp>
|
|
#include <socket/intsaddr.hpp>
|
|
#include <socket/socket.hpp>
|
|
|
|
HINSTANCE Main::smhInstance=0;
|
|
HINSTANCE Main::smhPrevInstance=0;
|
|
int Main::smnCmdShow=0;
|
|
|
|
WORD open(void);
|
|
void writeLines(Block<String> &stringBlock);
|
|
void saveLines(Block<String> &stringBlock,const String &saveName);
|
|
|
|
Console winConsole;
|
|
|
|
int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/)
|
|
{
|
|
open();
|
|
winConsole.read();
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
void writeLines(Block<String> &stringBlock)
|
|
{
|
|
for(short itemIndex=0;itemIndex<stringBlock.size();itemIndex++)
|
|
winConsole.writeLine(stringBlock[itemIndex]);
|
|
}
|
|
|
|
void saveLines(Block<String> &stringBlock,const String &saveName)
|
|
{
|
|
FileHandle saveFile(saveName,FileHandle::Write,FileHandle::ShareNone,FileHandle::Overwrite);
|
|
|
|
for(short itemIndex=0;itemIndex<stringBlock.size();itemIndex++)
|
|
{
|
|
saveFile.write(stringBlock[itemIndex]);
|
|
saveFile.write(String("\n"));
|
|
}
|
|
}
|
|
|
|
WORD open(void)
|
|
{
|
|
String hostName;
|
|
String getRequest;
|
|
HostEnt hostEntry;
|
|
ServEnt serverEntry;
|
|
WSASystem wsaSystem;
|
|
Socket smtpControl;
|
|
INETSocketAddress internetSocketAddress;
|
|
Profile iniProfile("QUOTE.INI","UNSET");
|
|
|
|
hostName="hannibal";
|
|
winConsole.writeLine(String("trying ")+hostName+String("..."));
|
|
if(!wsaSystem.isInitialized()){winConsole.writeLine("WINSOCK initialization failure.");return FALSE;}
|
|
InternetAddress internetAddress(hostName);
|
|
if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){return FALSE;}}
|
|
else if(!hostEntry.hostByName(hostName)){return FALSE;}
|
|
if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){winConsole.writeLine(String("no DNS entry for ")+hostName);return FALSE;}}
|
|
else if(!hostEntry.hostByName(hostName)){winConsole.writeLine(String("no DNS entry for ")+hostName);return FALSE;}
|
|
winConsole.writeLine(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")"));
|
|
internetSocketAddress.internetAddress((hostEntry.addresses())[0]);
|
|
if(serverEntry.serviceByName("smtp","tcp"))
|
|
{
|
|
if(!smtpControl.openSocket()){winConsole.writeLine("unable to create socket.");return FALSE;}
|
|
internetSocketAddress.family(PF_INET);
|
|
internetSocketAddress.port(serverEntry.port());
|
|
}
|
|
else
|
|
{
|
|
if(!smtpControl.openSocket()){winConsole.writeLine("unable to create socket.");return FALSE;}
|
|
internetSocketAddress.family(PF_INET);
|
|
internetSocketAddress.port(htons(23));
|
|
}
|
|
if(!smtpControl.connect(internetSocketAddress)){winConsole.writeLine("unable to connect to pop daemon");return FALSE;}
|
|
smtpControl.getSocketName(internetSocketAddress);
|
|
|
|
|
|
Block<String> receiveStrings;
|
|
|
|
smtpControl.receive(receiveStrings);
|
|
for(int lineIndex=0;lineIndex<receiveStrings.size();lineIndex++)winConsole.writeLine(receiveStrings[lineIndex]);
|
|
smtpControl.send("HELO kesslers2@moodys.com");
|
|
|
|
smtpControl.receive(receiveStrings);
|
|
for(lineIndex=0;lineIndex<receiveStrings.size();lineIndex++)winConsole.writeLine(receiveStrings[lineIndex]);
|
|
|
|
|
|
return smtpControl.isConnected();
|
|
}
|
|
#endif#include <smtp/smtp.hpp>
|
|
#include <socket/hostent.hpp>
|
|
#include <socket/servent.hpp>
|
|
|
|
SMTPClient::SMTPClient(void)
|
|
{
|
|
mSMTPResponse.isInResponse("251",SMTPResponse::AckConnect);
|
|
createCmds();
|
|
createResponseStrings();
|
|
}
|
|
|
|
SMTPClient::~SMTPClient()
|
|
{
|
|
mWinConsole.read();
|
|
}
|
|
|
|
BOOL SMTPClient::open(const String &hostName)
|
|
{
|
|
HostEnt hostEntry;
|
|
ServEnt serverEntry;
|
|
Block<String> responseLines;
|
|
INETSocketAddress internetSocketAddress;
|
|
|
|
if(hostName.isNull())return FALSE;
|
|
if(mSMTPControl.isConnected())mSMTPControl.closeSocket();
|
|
message(String("trying ")+hostName+String("..."));
|
|
if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;}
|
|
InternetAddress internetAddress(hostName);
|
|
if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){return FALSE;}}
|
|
else if(!hostEntry.hostByName(hostName)){return FALSE;}
|
|
if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}}
|
|
else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;}
|
|
message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")"));
|
|
internetSocketAddress.internetAddress((hostEntry.addresses())[0]);
|
|
if(serverEntry.serviceByName("smtp","tcp"))
|
|
{
|
|
if(!mSMTPControl.openSocket()){message("unable to create socket.");return FALSE;}
|
|
internetSocketAddress.family(PF_INET);
|
|
internetSocketAddress.port(serverEntry.port());
|
|
}
|
|
else
|
|
{
|
|
if(!mSMTPControl.openSocket()){message("unable to create socket.");return FALSE;}
|
|
internetSocketAddress.family(PF_INET);
|
|
internetSocketAddress.port(htons(SMTPPort));
|
|
}
|
|
if(!mSMTPControl.connect(internetSocketAddress)){message("unable to connect to smtp server");return FALSE;}
|
|
mSMTPControl.getSocketName(internetSocketAddress);
|
|
if(!mSMTPControl.isConnected())return FALSE;
|
|
if(!mSMTPControl.receive(responseLines)||!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),mAckConnectResponseStrings))
|
|
{
|
|
mSMTPControl.closeSocket();
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::helo(const String &domainName)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected()||domainName.isNull())return FALSE;
|
|
controlData=mSMTPCmds[Helo];
|
|
controlData+=" ";
|
|
controlData+=domainName;
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),mAckHeloResponseStrings))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::quit(void)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected())return FALSE;
|
|
controlData=mSMTPCmds[Quit];
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),mAckQuitResponseStrings))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::mail(const String &reversePath)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected()||reversePath.isNull())return FALSE;
|
|
controlData=mSMTPCmds[Mail];
|
|
controlData+=" ";
|
|
controlData+=mSMTPCmds[From];
|
|
controlData+=reversePath;
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),mAckMailResponseStrings))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::rcpt(const String &forwardPath)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected()||forwardPath.isNull())return FALSE;
|
|
controlData=mSMTPCmds[Recipient];
|
|
controlData+=" ";
|
|
controlData+=mSMTPCmds[To];
|
|
controlData+=forwardPath;
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),mAckRecipientResponseStrings))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::data(const Block<String> &mailData)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected()||!mailData.size())return FALSE;
|
|
controlData=mSMTPCmds[Data];
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),mAckDataResponseStrings))return FALSE;
|
|
for(int lineIndex=0;lineIndex<mailData.size();lineIndex++)mSMTPControl.send(((Block<String>&)mailData)[lineIndex]);
|
|
mSMTPControl.send(".");
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),mAckDataResponseStrings))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::vrfy(const String &forwardPath)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected()||forwardPath.isNull())return FALSE;
|
|
controlData=mSMTPCmds[Verify];
|
|
controlData+=" ";
|
|
controlData+=forwardPath;
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),mAckVerifyResponseStrings))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::isInResponse(const String &responseString,Block<String> &responseStrings)
|
|
{
|
|
if(responseString.isNull())return FALSE;
|
|
for(int itemIndex=0;itemIndex<responseStrings.size();itemIndex++)
|
|
if(responseString==responseStrings[itemIndex])return TRUE;
|
|
return FALSE;
|
|
}
|
|
|
|
void SMTPClient::createCmds(void)
|
|
{
|
|
mSMTPCmds.remove();
|
|
mSMTPCmds.insert(&String("HELO"));
|
|
mSMTPCmds.insert(&String("QUIT"));
|
|
mSMTPCmds.insert(&String("MAIL"));
|
|
mSMTPCmds.insert(&String("FROM:"));
|
|
mSMTPCmds.insert(&String("RCPT"));
|
|
mSMTPCmds.insert(&String("TO:"));
|
|
mSMTPCmds.insert(&String("DATA"));
|
|
mSMTPCmds.insert(&String("VRFY"));
|
|
mSMTPCmds.insert(&String("EXPN"));
|
|
mSMTPCmds.insert(&String("SEND"));
|
|
mSMTPCmds.insert(&String("SOML"));
|
|
mSMTPCmds.insert(&String("SAML"));
|
|
mSMTPCmds.insert(&String("TURN"));
|
|
mSMTPCmds.insert(&String("RSET"));
|
|
mSMTPCmds.insert(&String("HELP"));
|
|
mSMTPCmds.insert(&String("NOOP"));
|
|
}
|
|
|
|
void SMTPClient::createResponseStrings(void)
|
|
{
|
|
mAckConnectResponseStrings.insert(&String("220"));
|
|
mNakConnectResponseStrings.insert(&String("421"));
|
|
mAckHeloResponseStrings.insert(&String("250"));
|
|
mNakHeloResponseStrings.insert(&String("500"));
|
|
mNakHeloResponseStrings.insert(&String("501"));
|
|
mNakHeloResponseStrings.insert(&String("504"));
|
|
mNakHeloResponseStrings.insert(&String("421"));
|
|
mAckMailResponseStrings.insert(&String("250"));
|
|
mNakMailResponseStrings.insert(&String("552"));
|
|
mNakMailResponseStrings.insert(&String("451"));
|
|
mNakMailResponseStrings.insert(&String("452"));
|
|
mNakMailResponseStrings.insert(&String("500"));
|
|
mNakMailResponseStrings.insert(&String("501"));
|
|
mNakMailResponseStrings.insert(&String("421"));
|
|
mAckRecipientResponseStrings.insert(&String("250"));
|
|
mAckRecipientResponseStrings.insert(&String("251"));
|
|
mNakRecipientResponseStrings.insert(&String("550"));
|
|
mNakRecipientResponseStrings.insert(&String("551"));
|
|
mNakRecipientResponseStrings.insert(&String("552"));
|
|
mNakRecipientResponseStrings.insert(&String("553"));
|
|
mNakRecipientResponseStrings.insert(&String("450"));
|
|
mNakRecipientResponseStrings.insert(&String("451"));
|
|
mNakRecipientResponseStrings.insert(&String("452"));
|
|
mNakRecipientResponseStrings.insert(&String("500"));
|
|
mNakRecipientResponseStrings.insert(&String("501"));
|
|
mNakRecipientResponseStrings.insert(&String("503"));
|
|
mNakRecipientResponseStrings.insert(&String("421"));
|
|
mAckDataResponseStrings.insert(&String("354"));
|
|
mAckDataResponseStrings.insert(&String("250"));
|
|
mNakDataResponseStrings.insert(&String("552"));
|
|
mNakDataResponseStrings.insert(&String("554"));
|
|
mNakDataResponseStrings.insert(&String("451"));
|
|
mNakDataResponseStrings.insert(&String("452"));
|
|
mNakDataResponseStrings.insert(&String("451"));
|
|
mNakDataResponseStrings.insert(&String("554"));
|
|
mNakDataResponseStrings.insert(&String("500"));
|
|
mNakDataResponseStrings.insert(&String("501"));
|
|
mNakDataResponseStrings.insert(&String("503"));
|
|
mNakDataResponseStrings.insert(&String("421"));
|
|
mAckResetResponseStrings.insert(&String("250"));
|
|
mNakResetResponseStrings.insert(&String("500"));
|
|
mNakResetResponseStrings.insert(&String("501"));
|
|
mNakResetResponseStrings.insert(&String("504"));
|
|
mNakResetResponseStrings.insert(&String("421"));
|
|
mAckSendResponseStrings.insert(&String("250"));
|
|
mNakSendResponseStrings.insert(&String("552"));
|
|
mNakSendResponseStrings.insert(&String("451"));
|
|
mNakSendResponseStrings.insert(&String("452"));
|
|
mNakSendResponseStrings.insert(&String("500"));
|
|
mNakSendResponseStrings.insert(&String("501"));
|
|
mNakSendResponseStrings.insert(&String("502"));
|
|
mNakSendResponseStrings.insert(&String("421"));
|
|
mAckSendOrMailResponseStrings.insert(&String("250"));
|
|
mNakSendOrMailResponseStrings.insert(&String("552"));
|
|
mNakSendOrMailResponseStrings.insert(&String("451"));
|
|
mNakSendOrMailResponseStrings.insert(&String("452"));
|
|
mNakSendOrMailResponseStrings.insert(&String("500"));
|
|
mNakSendOrMailResponseStrings.insert(&String("501"));
|
|
mNakSendOrMailResponseStrings.insert(&String("502"));
|
|
mNakSendOrMailResponseStrings.insert(&String("421"));
|
|
mAckSendAndMailResponseStrings.insert(&String("250"));
|
|
mNakSendAndMailResponseStrings.insert(&String("552"));
|
|
mNakSendAndMailResponseStrings.insert(&String("451"));
|
|
mNakSendAndMailResponseStrings.insert(&String("452"));
|
|
mNakSendAndMailResponseStrings.insert(&String("500"));
|
|
mNakSendAndMailResponseStrings.insert(&String("501"));
|
|
mNakSendAndMailResponseStrings.insert(&String("502"));
|
|
mNakSendAndMailResponseStrings.insert(&String("421"));
|
|
mAckVerifyResponseStrings.insert(&String("250"));
|
|
mAckVerifyResponseStrings.insert(&String("251"));
|
|
mNakVerifyResponseStrings.insert(&String("550"));
|
|
mNakVerifyResponseStrings.insert(&String("551"));
|
|
mNakVerifyResponseStrings.insert(&String("553"));
|
|
mNakVerifyResponseStrings.insert(&String("500"));
|
|
mNakVerifyResponseStrings.insert(&String("501"));
|
|
mNakVerifyResponseStrings.insert(&String("502"));
|
|
mNakVerifyResponseStrings.insert(&String("504"));
|
|
mNakVerifyResponseStrings.insert(&String("421"));
|
|
mAckExpandResponseStrings.insert(&String("250"));
|
|
mNakExpandResponseStrings.insert(&String("550"));
|
|
mNakExpandResponseStrings.insert(&String("500"));
|
|
mNakExpandResponseStrings.insert(&String("501"));
|
|
mNakExpandResponseStrings.insert(&String("502"));
|
|
mNakExpandResponseStrings.insert(&String("504"));
|
|
mNakExpandResponseStrings.insert(&String("421"));
|
|
mAckHelpResponseStrings.insert(&String("211"));
|
|
mAckHelpResponseStrings.insert(&String("214"));
|
|
mNakHelpResponseStrings.insert(&String("500"));
|
|
mNakHelpResponseStrings.insert(&String("501"));
|
|
mNakHelpResponseStrings.insert(&String("502"));
|
|
mNakHelpResponseStrings.insert(&String("504"));
|
|
mNakHelpResponseStrings.insert(&String("421"));
|
|
mAckNoopResponseStrings.insert(&String("250"));
|
|
mNakNoopResponseStrings.insert(&String("500"));
|
|
mNakNoopResponseStrings.insert(&String("421"));
|
|
mAckTurnResponseStrings.insert(&String("250"));
|
|
mNakTurnResponseStrings.insert(&String("502"));
|
|
mNakTurnResponseStrings.insert(&String("500"));
|
|
mNakTurnResponseStrings.insert(&String("503"));
|
|
mAckQuitResponseStrings.insert(&String("221"));
|
|
mNakQuitResponseStrings.insert(&String("500"));
|
|
}
|
|
|
|
WORD SMTPClient::putControlData(const String &stringData,WORD waitForResponse)
|
|
{
|
|
if(!mSMTPControl.isConnected())return FALSE;
|
|
if(!mSMTPControl.send(stringData))
|
|
{
|
|
mSMTPControl.closeSocket();
|
|
String errorString(String("error sending '")+stringData+String("' to SMTP server."));
|
|
message(errorString);
|
|
errorString+="\n";
|
|
::OutputDebugString(errorString);
|
|
return FALSE;
|
|
}
|
|
if(waitForResponse&&!getControlData())
|
|
{
|
|
mSMTPControl.closeSocket();
|
|
String errorString(String("error reading result of '")+stringData+String("' command from NNTP server."));
|
|
message(errorString);
|
|
errorString+="\n";
|
|
::OutputDebugString(errorString);
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
WORD SMTPClient::getControlData(void)
|
|
{
|
|
Block<String> responseStrings;
|
|
mSMTPControl.receive(responseStrings);
|
|
return responseStrings.size();
|
|
}
|
|
|
|
// virtuals
|
|
|
|
void SMTPClient::message(const String &messageString)
|
|
{
|
|
mWinConsole.writeLine(messageString);
|
|
}
|
|
|
|
void SMTPClient::message(Block<String> &messageStrings)
|
|
{
|
|
for(int lineIndex=0;lineIndex<messageStrings.size();lineIndex++)
|
|
mWinConsole.writeLine(messageStrings[lineIndex]);
|
|
}
|
|
|
|
|
|
Block<String> mAckConnectResponseStrings;
|
|
Block<String> mNakConnectResponseStrings;
|
|
Block<String> mAckHeloResponseStrings;
|
|
Block<String> mNakHeloResponseStrings;
|
|
Block<String> mAckMailResponseStrings;
|
|
Block<String> mNakMailResponseStrings;
|
|
Block<String> mAckRecipientResponseStrings;
|
|
Block<String> mNakRecipientResponseStrings;
|
|
Block<String> mAckDataResponseStrings;
|
|
Block<String> mNakDataResponseStrings;
|
|
Block<String> mAckResetResponseStrings;
|
|
Block<String> mNakResetResponseStrings;
|
|
Block<String> mAckSendResponseStrings;
|
|
Block<String> mNakSendResponseStrings;
|
|
Block<String> mAckSendOrMailResponseStrings;
|
|
Block<String> mNakSendOrMailResponseStrings;
|
|
Block<String> mAckSendAndMailResponseStrings;
|
|
Block<String> mNakSendAndMailResponseStrings;
|
|
Block<String> mAckVerifyResponseStrings;
|
|
Block<String> mNakVerifyResponseStrings;
|
|
Block<String> mAckExpandResponseStrings;
|
|
Block<String> mNakExpandResponseStrings;
|
|
Block<String> mAckHelpResponseStrings;
|
|
Block<String> mNakHelpResponseStrings;
|
|
Block<String> mAckNoopResponseStrings;
|
|
Block<String> mNakNoopResponseStrings;
|
|
Block<String> mAckTurnResponseStrings;
|
|
Block<String> mNakTurnResponseStrings;
|
|
Block<String> mAckQuitResponseStrings;
|
|
Block<String> mNakQuitResponseStrings;
|
|
|
|
|
|
|
|
void SMTPClient::createResponseStrings(void)
|
|
{
|
|
mAckConnectResponseStrings.insert(&String("220"));
|
|
mNakConnectResponseStrings.insert(&String("421"));
|
|
mAckHeloResponseStrings.insert(&String("250"));
|
|
mNakHeloResponseStrings.insert(&String("500"));
|
|
mNakHeloResponseStrings.insert(&String("501"));
|
|
mNakHeloResponseStrings.insert(&String("504"));
|
|
mNakHeloResponseStrings.insert(&String("421"));
|
|
mAckMailResponseStrings.insert(&String("250"));
|
|
mNakMailResponseStrings.insert(&String("552"));
|
|
mNakMailResponseStrings.insert(&String("451"));
|
|
mNakMailResponseStrings.insert(&String("452"));
|
|
mNakMailResponseStrings.insert(&String("500"));
|
|
mNakMailResponseStrings.insert(&String("501"));
|
|
mNakMailResponseStrings.insert(&String("421"));
|
|
mAckRecipientResponseStrings.insert(&String("250"));
|
|
mAckRecipientResponseStrings.insert(&String("251"));
|
|
mNakRecipientResponseStrings.insert(&String("550"));
|
|
mNakRecipientResponseStrings.insert(&String("551"));
|
|
mNakRecipientResponseStrings.insert(&String("552"));
|
|
mNakRecipientResponseStrings.insert(&String("553"));
|
|
mNakRecipientResponseStrings.insert(&String("450"));
|
|
mNakRecipientResponseStrings.insert(&String("451"));
|
|
mNakRecipientResponseStrings.insert(&String("452"));
|
|
mNakRecipientResponseStrings.insert(&String("500"));
|
|
mNakRecipientResponseStrings.insert(&String("501"));
|
|
mNakRecipientResponseStrings.insert(&String("503"));
|
|
mNakRecipientResponseStrings.insert(&String("421"));
|
|
mAckDataResponseStrings.insert(&String("354"));
|
|
mAckDataResponseStrings.insert(&String("250"));
|
|
mNakDataResponseStrings.insert(&String("552"));
|
|
mNakDataResponseStrings.insert(&String("554"));
|
|
mNakDataResponseStrings.insert(&String("451"));
|
|
mNakDataResponseStrings.insert(&String("452"));
|
|
mNakDataResponseStrings.insert(&String("451"));
|
|
mNakDataResponseStrings.insert(&String("554"));
|
|
mNakDataResponseStrings.insert(&String("500"));
|
|
mNakDataResponseStrings.insert(&String("501"));
|
|
mNakDataResponseStrings.insert(&String("503"));
|
|
mNakDataResponseStrings.insert(&String("421"));
|
|
mAckResetResponseStrings.insert(&String("250"));
|
|
mNakResetResponseStrings.insert(&String("500"));
|
|
mNakResetResponseStrings.insert(&String("501"));
|
|
mNakResetResponseStrings.insert(&String("504"));
|
|
mNakResetResponseStrings.insert(&String("421"));
|
|
mAckSendResponseStrings.insert(&String("250"));
|
|
mNakSendResponseStrings.insert(&String("552"));
|
|
mNakSendResponseStrings.insert(&String("451"));
|
|
mNakSendResponseStrings.insert(&String("452"));
|
|
mNakSendResponseStrings.insert(&String("500"));
|
|
mNakSendResponseStrings.insert(&String("501"));
|
|
mNakSendResponseStrings.insert(&String("502"));
|
|
mNakSendResponseStrings.insert(&String("421"));
|
|
mAckSendOrMailResponseStrings.insert(&String("250"));
|
|
mNakSendOrMailResponseStrings.insert(&String("552"));
|
|
mNakSendOrMailResponseStrings.insert(&String("451"));
|
|
mNakSendOrMailResponseStrings.insert(&String("452"));
|
|
mNakSendOrMailResponseStrings.insert(&String("500"));
|
|
mNakSendOrMailResponseStrings.insert(&String("501"));
|
|
mNakSendOrMailResponseStrings.insert(&String("502"));
|
|
mNakSendOrMailResponseStrings.insert(&String("421"));
|
|
mAckSendAndMailResponseStrings.insert(&String("250"));
|
|
mNakSendAndMailResponseStrings.insert(&String("552"));
|
|
mNakSendAndMailResponseStrings.insert(&String("451"));
|
|
mNakSendAndMailResponseStrings.insert(&String("452"));
|
|
mNakSendAndMailResponseStrings.insert(&String("500"));
|
|
mNakSendAndMailResponseStrings.insert(&String("501"));
|
|
mNakSendAndMailResponseStrings.insert(&String("502"));
|
|
mNakSendAndMailResponseStrings.insert(&String("421"));
|
|
mAckVerifyResponseStrings.insert(&String("250"));
|
|
mAckVerifyResponseStrings.insert(&String("251"));
|
|
mNakVerifyResponseStrings.insert(&String("550"));
|
|
mNakVerifyResponseStrings.insert(&String("551"));
|
|
mNakVerifyResponseStrings.insert(&String("553"));
|
|
mNakVerifyResponseStrings.insert(&String("500"));
|
|
mNakVerifyResponseStrings.insert(&String("501"));
|
|
mNakVerifyResponseStrings.insert(&String("502"));
|
|
mNakVerifyResponseStrings.insert(&String("504"));
|
|
mNakVerifyResponseStrings.insert(&String("421"));
|
|
mAckExpandResponseStrings.insert(&String("250"));
|
|
mNakExpandResponseStrings.insert(&String("550"));
|
|
mNakExpandResponseStrings.insert(&String("500"));
|
|
mNakExpandResponseStrings.insert(&String("501"));
|
|
mNakExpandResponseStrings.insert(&String("502"));
|
|
mNakExpandResponseStrings.insert(&String("504"));
|
|
mNakExpandResponseStrings.insert(&String("421"));
|
|
mAckHelpResponseStrings.insert(&String("211"));
|
|
mAckHelpResponseStrings.insert(&String("214"));
|
|
mNakHelpResponseStrings.insert(&String("500"));
|
|
mNakHelpResponseStrings.insert(&String("501"));
|
|
mNakHelpResponseStrings.insert(&String("502"));
|
|
mNakHelpResponseStrings.insert(&String("504"));
|
|
mNakHelpResponseStrings.insert(&String("421"));
|
|
mAckNoopResponseStrings.insert(&String("250"));
|
|
mNakNoopResponseStrings.insert(&String("500"));
|
|
mNakNoopResponseStrings.insert(&String("421"));
|
|
mAckTurnResponseStrings.insert(&String("250"));
|
|
mNakTurnResponseStrings.insert(&String("502"));
|
|
mNakTurnResponseStrings.insert(&String("500"));
|
|
mNakTurnResponseStrings.insert(&String("503"));
|
|
mAckQuitResponseStrings.insert(&String("221"));
|
|
mNakQuitResponseStrings.insert(&String("500"));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// BOOL isInResponse(const String &responseString,RspType responseType);
|
|
|
|
|
|
|
|
mailData.insert(&String("subject: My SMTP Client"));
|
|
mailData.insert(&String("date: 09/29/1997"));
|
|
mailData.insert(&String("from: Sean Kessler <europa@li.net>"));
|
|
mailData.insert(&String("to: Russ (Big Guy) Le Blang <leblangr@moodys.com>"));
|
|
mailData.insert(&String("Hey Russ,"));
|
|
|
|
|
|
// smtpClient.verify("europa@li.net"); // verify command
|
|
|
|
|
|
|
|
template <class T>
|
|
void BTree<T>::remove(const T &someItem,TreeNode<T> *pCurrNode,TreeNode<T> *pParentNode)
|
|
{
|
|
TreeNode<T> *pTmpNode;
|
|
|
|
if(!pCurrNode)return;
|
|
if(someItem<pCurrNode->item())remove(someItem,pCurrNode->leftNode(),pCurrNode);
|
|
else if(someItem>pCurrNode->item())remove(someItem,pCurrNode->rightNode(),pCurrNode);
|
|
else
|
|
{
|
|
if(pCurrNode==mlpRootNode)
|
|
{
|
|
if(!pCurrNode->leftNode()&&!pCurrNode->rightNode())
|
|
{
|
|
delete mlpRootNode;
|
|
mlpRootNode=0;
|
|
leaves(leaves()-1);
|
|
}
|
|
else if(!pCurrNode->rightNode())
|
|
{
|
|
if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(pCurrNode->leftNode());
|
|
else pParentNode->rightNode(pCurrNode->leftNode());
|
|
}
|
|
else if(!pCurrNode->leftNode())
|
|
{
|
|
if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(pCurrNode->leftNode());
|
|
else pParentNode->rightNode(pCurrNode->leftNode());
|
|
}
|
|
else
|
|
{
|
|
TreeNode<T> *pCursorNode;
|
|
pTmpNode=pCursorNode=pCurrNode->leftNode();
|
|
while(pTmpNode->rightNode()){pCursorNode=pTmpNode;pTmpNode=pTmpNode->rightNode();}
|
|
if(pCursorNode)pCursorNode->rightNode(0);
|
|
if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(pTmpNode);
|
|
else pParentNode->rightNode(pTmpNode);
|
|
}
|
|
delete pCurrNode;
|
|
leaves(leaves()-1);
|
|
|
|
// else
|
|
// {
|
|
// pTmpNode=(pCurrNode->leftNode()?pCurrNode->leftNode():pCurrNode->rightNode());
|
|
// delete mlpRootNode;
|
|
// mlpRootNode=pTmpNode;
|
|
// leaves(leaves()-1);
|
|
// }
|
|
}
|
|
else
|
|
{
|
|
if(!pCurrNode->leftNode()&&!pCurrNode->rightNode())
|
|
{
|
|
if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(0);
|
|
else pParentNode->rightNode(0);
|
|
}
|
|
else if(!pCurrNode->rightNode())
|
|
{
|
|
if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(pCurrNode->leftNode());
|
|
else pParentNode->rightNode(pCurrNode->leftNode());
|
|
}
|
|
else if(!pCurrNode->leftNode())
|
|
{
|
|
if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(pCurrNode->rightNode());
|
|
else pParentNode->rightNode(pCurrNode->rightNode());
|
|
}
|
|
else
|
|
{
|
|
TreeNode<T> *pCursorNode;
|
|
pTmpNode=pCursorNode=pCurrNode->leftNode();
|
|
while(pTmpNode->rightNode()){pCursorNode=pTmpNode;pTmpNode=pTmpNode->rightNode();}
|
|
if(pCursorNode)pCursorNode->rightNode(0);
|
|
if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(pTmpNode);
|
|
else pParentNode->rightNode(pTmpNode);
|
|
}
|
|
delete pCurrNode;
|
|
leaves(leaves()-1);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// pRootNode->rightNode(mlpRootNode->rightNode());
|
|
pRootNode->rightNode(pCurrNode->rightNode);
|
|
|
|
|
|
|
|
//#include <smtp/smtp.hpp>
|
|
//#include <smtp/mail.hpp>
|
|
|
|
#include <bsptree/btree.hpp>
|
|
#include <common/puredwrd.hpp>
|
|
#include <common/console.hpp>
|
|
#include <common/stdio.hpp>
|
|
|
|
int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/)
|
|
{
|
|
// Console winConsole;
|
|
BTree<PureDWORD> wordTree;
|
|
Block<PureDWORD> wordBlock;
|
|
String lineString;
|
|
|
|
// wordTree.insert(PureDWORD(500)); // root removal with both subtrees
|
|
// wordTree.insert(PureDWORD(600));
|
|
// wordTree.insert(PureDWORD(400));
|
|
// wordTree.remove(PureDWORD(500));
|
|
|
|
// wordTree.insert(PureDWORD(500)); // root removal with left subtree
|
|
// wordTree.insert(PureDWORD(400));
|
|
// wordTree.remove(PureDWORD(500));
|
|
|
|
// wordTree.insert(PureDWORD(500)); // root removal with right subtree
|
|
// wordTree.insert(PureDWORD(600));
|
|
// wordTree.remove(PureDWORD(500));
|
|
|
|
// wordTree.insert(PureDWORD(500)); // root removal with no subtrees
|
|
// wordTree.remove(PureDWORD(500));
|
|
|
|
// wordTree.insert(PureDWORD(500)); // subtree removal with both subtrees
|
|
// wordTree.insert(PureDWORD(250));
|
|
// wordTree.insert(PureDWORD(600));
|
|
// wordTree.insert(PureDWORD(275));
|
|
// wordTree.insert(PureDWORD(650));
|
|
// wordTree.insert(PureDWORD(249));
|
|
// wordTree.remove(PureDWORD(250));
|
|
|
|
// wordTree.insert(PureDWORD(500)); // subtree removal with right subtree
|
|
// wordTree.insert(PureDWORD(250));
|
|
// wordTree.insert(PureDWORD(600));
|
|
// wordTree.insert(PureDWORD(275));
|
|
// wordTree.insert(PureDWORD(650));
|
|
// wordTree.remove(PureDWORD(250));
|
|
|
|
// wordTree.insert(PureDWORD(500)); // subtree removal with right subtree
|
|
// wordTree.insert(PureDWORD(250));
|
|
// wordTree.insert(PureDWORD(600));
|
|
// wordTree.insert(PureDWORD(650));
|
|
// wordTree.remove(PureDWORD(250));
|
|
|
|
wordTree.treeItems(wordBlock);
|
|
// for(int lineIndex=0;lineIndex<wordBlock.size();lineIndex++)
|
|
// {
|
|
// ::sprintf(lineString,"%d",(DWORD)wordBlock[lineIndex]);
|
|
// winConsole.writeLine(lineString);
|
|
// }
|
|
// winConsole.read();
|
|
|
|
#if 0
|
|
Block<String> mailData;
|
|
|
|
mailData.insert(&String("TEST LINE 1"));
|
|
mailData.insert(&String("TEST LINE 2"));
|
|
mailData.insert(&String("TEST LINE 3"));
|
|
|
|
SMTPClient smtpClient;
|
|
if(!smtpClient.open("europa.com"))return FALSE; // open server
|
|
if(!smtpClient.helo("sean@europa.com"))return FALSE; // identify myself
|
|
if(!smtpClient.verify("sean@europa.com"))return FALSE; // verify
|
|
if(!smtpClient.send("sean@europa.com"))return FALSE; // send(reversePath)
|
|
if(!smtpClient.expand("mailhost.li.net"))return FALSE; // expand(mailList)
|
|
if(!smtpClient.sendAndMail("europa@li.net"))return FALSE; // sendAndMail(reversePath)
|
|
if(!smtpClient.sendOrMail("europa@li.net"))return FALSE; // sendOrMail(reversePath)
|
|
if(!smtpClient.reset())return FALSE; // reset server
|
|
if(!smtpClient.help("send"))return FALSE; // help(command)
|
|
|
|
// smtpClient.mail("sean@europa.com"); // send in reverse path for mail (from)
|
|
// if(!smtpClient.rcpt("sean@europa.com"))return FALSE; // specify recipient of mail
|
|
// if(!smtpClient.data(mailData))return FALSE; // message text lines
|
|
smtpClient.quit();
|
|
|
|
|
|
// if(!smtpClient.open("mailhost.li.net"))return FALSE; // europa.com
|
|
// if(!smtpClient.helo("europa@li.net"))return FALSE; // identify myself
|
|
// if(!smtpClient.noop())return FALSE; // ping smtp server
|
|
// smtpClient.mail("europa@li.net"); // send in reverse path for mail (from)
|
|
// if(!smtpClient.rcpt("europa@li.net"))return FALSE; // specify recipient of mail
|
|
// if(!smtpClient.data(mailData))return FALSE; // message text lines
|
|
// smtpClient.quit();
|
|
#endif
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
#include <bsptree/btree.hpp>
|
|
#include <common/puredwrd.hpp>
|
|
#include <common/console.hpp>
|
|
#include <common/stdio.hpp>
|
|
|
|
int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/)
|
|
{
|
|
// Console winConsole;
|
|
BTree<PureDWORD> wordTree;
|
|
Block<PureDWORD> wordBlock;
|
|
String lineString;
|
|
|
|
// wordTree.insert(PureDWORD(500)); // root removal with both subtrees
|
|
// wordTree.insert(PureDWORD(600));
|
|
// wordTree.insert(PureDWORD(400));
|
|
// wordTree.remove(PureDWORD(500));
|
|
|
|
// wordTree.insert(PureDWORD(500)); // root removal with left subtree
|
|
// wordTree.insert(PureDWORD(400));
|
|
// wordTree.remove(PureDWORD(500));
|
|
|
|
// wordTree.insert(PureDWORD(500)); // root removal with right subtree
|
|
// wordTree.insert(PureDWORD(600));
|
|
// wordTree.remove(PureDWORD(500));
|
|
|
|
// wordTree.insert(PureDWORD(500)); // root removal with no subtrees
|
|
// wordTree.remove(PureDWORD(500));
|
|
|
|
// wordTree.insert(PureDWORD(500)); // subtree removal with both subtrees
|
|
// wordTree.insert(PureDWORD(250));
|
|
// wordTree.insert(PureDWORD(600));
|
|
// wordTree.insert(PureDWORD(275));
|
|
// wordTree.insert(PureDWORD(650));
|
|
// wordTree.insert(PureDWORD(249));
|
|
// wordTree.remove(PureDWORD(250));
|
|
|
|
// wordTree.insert(PureDWORD(500)); // subtree removal with right subtree
|
|
// wordTree.insert(PureDWORD(250));
|
|
// wordTree.insert(PureDWORD(600));
|
|
// wordTree.insert(PureDWORD(275));
|
|
// wordTree.insert(PureDWORD(650));
|
|
// wordTree.remove(PureDWORD(250));
|
|
|
|
// wordTree.insert(PureDWORD(500)); // subtree removal with right subtree
|
|
// wordTree.insert(PureDWORD(250));
|
|
// wordTree.insert(PureDWORD(600));
|
|
// wordTree.insert(PureDWORD(650));
|
|
// wordTree.remove(PureDWORD(250));
|
|
|
|
wordTree.treeItems(wordBlock);
|
|
// for(int lineIndex=0;lineIndex<wordBlock.size();lineIndex++)
|
|
// {
|
|
// ::sprintf(lineString,"%d",(DWORD)wordBlock[lineIndex]);
|
|
// winConsole.writeLine(lineString);
|
|
// }
|
|
// winConsole.read();
|
|
|
|
|
|
|
|
#if 0
|
|
Block<String> mailData;
|
|
|
|
mailData.insert(&String("TEST LINE 1"));
|
|
mailData.insert(&String("TEST LINE 2"));
|
|
mailData.insert(&String("TEST LINE 3"));
|
|
|
|
SMTPClient smtpClient;
|
|
if(!smtpClient.open("europa.com"))return FALSE; // open server
|
|
if(!smtpClient.helo("sean@europa.com"))return FALSE; // identify myself
|
|
if(!smtpClient.verify("sean@europa.com"))return FALSE; // verify
|
|
if(!smtpClient.send("sean@europa.com"))return FALSE; // send(reversePath)
|
|
if(!smtpClient.expand("mailhost.li.net"))return FALSE; // expand(mailList)
|
|
if(!smtpClient.sendAndMail("europa@li.net"))return FALSE; // sendAndMail(reversePath)
|
|
if(!smtpClient.sendOrMail("europa@li.net"))return FALSE; // sendOrMail(reversePath)
|
|
if(!smtpClient.reset())return FALSE; // reset server
|
|
if(!smtpClient.help("send"))return FALSE; // help(command)
|
|
smtpClient.quit();
|
|
#endif
|
|
|
|
|
|
|
|
void MailDlg::sendMail(MailInfo &mailInfo)
|
|
{
|
|
Block<String> mailData;
|
|
String headerString;
|
|
|
|
// SMTPClient smtpClient;
|
|
// smtpClient.open(mailInfo.server());
|
|
// smtpClient.mail(mailInfo.reversePath());
|
|
// smtpClient.rcpt(mailInfo.toField());
|
|
open(mailInfo.server());
|
|
mail(mailInfo.reversePath());
|
|
rcpt(mailInfo.toField());
|
|
|
|
headerString="subject:";
|
|
headerString+=mailInfo.subjectField();
|
|
mailData.insert(&headerString);
|
|
SystemTime systemTime;
|
|
headerString="date:";
|
|
headerString+=(String)systemTime;
|
|
mailData.insert(&headerString);
|
|
for(int lineIndex=0;lineIndex<mailInfo.mailData().size();lineIndex++)
|
|
mailData.insert(&mailInfo.mailData()[lineIndex]);
|
|
data(mailData);
|
|
quit();
|
|
// smtpClient.data(mailData);
|
|
// smtpClient.quit();
|
|
}
|
|
|
|
|
|
// {
|
|
// MailInfo mailInfo;
|
|
// if(getFields(mailInfo))sendMail(mailInfo);
|
|
// if(getFields(mailInfo))open(mailInfo.server());
|
|
// }
|
|
|
|
|
|
EDITTEXT MAIL_TO, 46, 206, 179, 12
|
|
|
|
|
|
#if 0
|
|
BOOL UUEncode::encode(GUIWindow &parentWindow,String srcPathFileName,Block<String> &lineStrings,BOOL initBlock)const
|
|
{
|
|
Profile iniProfile;
|
|
char readBuff[45];
|
|
int readCount;
|
|
int byteCount;
|
|
int lineCount;
|
|
char *ptrBuff;
|
|
String outLine;
|
|
int ch;
|
|
|
|
if(initBlock)lineStrings.remove();
|
|
if(srcPathFileName.isNull())return FALSE;
|
|
FileHandle readFile(srcPathFileName,FileHandle::Read,FileHandle::ShareRead);
|
|
if(!readFile.isOkay())return FALSE;
|
|
FileMap readMap(readFile);
|
|
PureViewOfFile readView(readMap);
|
|
iniProfile.makeFileName(srcPathFileName);
|
|
::sprintf(outLine,"begin %d %s\n",644,srcPathFileName);
|
|
lineStrings.insert(&outLine);
|
|
Progress encodeProgress(parentWindow,srcPathFileName);
|
|
encodeProgress.canCancel(TRUE);
|
|
encodeProgress.show(TRUE);
|
|
encodeProgress.setText("encoding... (press ESC to cancel).");
|
|
while(sizeof(readBuff)==readView.read(readBuff,sizeof(readBuff))){parentWindow.yieldTask();lineCount++;}
|
|
readView.rewind();
|
|
encodeProgress.range(lineCount);
|
|
while(readCount=readView.read(readBuff,sizeof(readBuff)))
|
|
{
|
|
String lineString;
|
|
lineString+=(char)chEncode(readCount);
|
|
for(ptrBuff=readBuff,byteCount=readCount;byteCount>0;byteCount-=3,ptrBuff+=3)
|
|
{
|
|
ch=*ptrBuff>>2;
|
|
lineString+=(char)chEncode(ch);
|
|
ch=(*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F;
|
|
lineString+=(char)chEncode(ch);
|
|
ch=(ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03;
|
|
lineString+=(char)chEncode(ch);
|
|
ch=ptrBuff[2]&0x3F;
|
|
lineString+=(char)chEncode(ch);
|
|
parentWindow.yieldTask();
|
|
}
|
|
lineString+='\n';
|
|
lineStrings.insert(&lineString);
|
|
encodeProgress++;
|
|
if(!encodeProgress.isOkay()){lineStrings.remove();return FALSE;}
|
|
if(readCount!=45)break;
|
|
}
|
|
ch=('\0'?('\0'&0x3F)+' ':'`');
|
|
String lastLine;
|
|
lastLine+=(char)ch;
|
|
lastLine+='\n';
|
|
lineStrings.insert(&lastLine);
|
|
lineStrings.insert(&String("end"));
|
|
return TRUE;
|
|
}
|
|
#endif
|
|
|
|
|
|
|
|
#include <common/openfile.hpp>
|
|
FileHandle writeFile("uuencode.txt",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite);
|
|
for(int lineIndex=0;lineIndex<mAttachment.size();lineIndex++)
|
|
writeFile.write((BYTE*)(LPSTR)mAttachment[lineIndex],mAttachment[lineIndex].length());
|
|
|
|
|
|
|
|
// ch=('\0'?('\0'&0x3F)+' ':'`');
|
|
// lastLine+=(char)ch;
|
|
String lastLine;
|
|
lastLine+=(char)('\0'?('\0'&0x3F)+' ':'`');
|
|
lastLine+='\n';
|
|
|
|
|
|
#include <common/openfile.hpp>
|
|
FileHandle writeFile("uuencode.txt",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite);
|
|
for(int lineIndex=0;lineIndex<mAttachment.size();lineIndex++)
|
|
{
|
|
// writeFile.write((BYTE*)(LPSTR)mAttachment[lineIndex],mAttachment[lineIndex].length());
|
|
writeFile.writeLine(mAttachment[lineIndex]);
|
|
}
|
|
|
|
|
|
|
|
#include <smtp/uuencode.hpp>
|
|
#include <common/openfile.hpp>
|
|
#include <common/pview.hpp>
|
|
#include <common/filemap.hpp>
|
|
#include <common/progress.hpp>
|
|
#include <common/profile.hpp>
|
|
|
|
BOOL UUEncode::encode(GUIWindow &parentWindow,String srcPathFileName,Block<String> &lineStrings,BOOL initBlock)const
|
|
{
|
|
Profile iniProfile;
|
|
char readBuff[45];
|
|
int readCount;
|
|
int byteCount;
|
|
int lineCount;
|
|
char *ptrBuff;
|
|
String outLine;
|
|
int ch;
|
|
|
|
if(initBlock)lineStrings.remove();
|
|
if(srcPathFileName.isNull())return FALSE;
|
|
FileHandle readFile(srcPathFileName,FileHandle::Read,FileHandle::ShareRead);
|
|
if(!readFile.isOkay())return FALSE;
|
|
FileMap readMap(readFile);
|
|
PureViewOfFile readView(readMap);
|
|
iniProfile.makeFileName(srcPathFileName);
|
|
srcPathFileName.removeTokens("\\/");
|
|
::sprintf(outLine,"begin %d %s",644,(char*)srcPathFileName);
|
|
lineStrings.insert(&outLine);
|
|
Progress encodeProgress(parentWindow,srcPathFileName);
|
|
encodeProgress.canCancel(TRUE);
|
|
encodeProgress.show(TRUE);
|
|
encodeProgress.setText("encoding... (press ESC to cancel).");
|
|
while(sizeof(readBuff)==readView.read(readBuff,sizeof(readBuff))){parentWindow.yieldTask();lineCount++;}
|
|
readView.rewind();
|
|
encodeProgress.range(lineCount);
|
|
while(readCount=readView.read(readBuff,sizeof(readBuff)))
|
|
{
|
|
String lineString;
|
|
char *ptrLine=(LPSTR)lineString;
|
|
*(ptrLine++)=chEncode(readCount);
|
|
for(ptrBuff=readBuff,byteCount=readCount;byteCount>0;byteCount-=3,ptrBuff+=3)
|
|
{
|
|
*(ptrLine++)=chEncode(*ptrBuff>>2);
|
|
*(ptrLine++)=chEncode((*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F);
|
|
*(ptrLine++)=chEncode((ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03);
|
|
*(ptrLine++)=chEncode(ptrBuff[2]&0x3F);
|
|
parentWindow.yieldTask();
|
|
}
|
|
// *(ptrLine++)=0x0D;
|
|
// *(ptrLine++)=0x0A;
|
|
lineStrings.insert(&lineString);
|
|
encodeProgress++;
|
|
if(!encodeProgress.isOkay()){lineStrings.remove();return FALSE;}
|
|
if(readCount!=sizeof(readBuff))break;
|
|
}
|
|
String lastLine;
|
|
lastLine+=(char)('\0'?('\0'&0x3F)+' ':'`');
|
|
// lastLine+="\r\n";
|
|
lineStrings.insert(&lastLine);
|
|
lineStrings.insert(&String("end"));
|
|
return TRUE;
|
|
}
|
|
|
|
#if 0
|
|
BOOL UUEncode::encode(GUIWindow &parentWindow,String srcPathFileName,Block<String> &lineStrings,BOOL initBlock)const
|
|
{
|
|
Profile iniProfile;
|
|
char readBuff[45];
|
|
int readCount;
|
|
int byteCount;
|
|
int lineCount;
|
|
char *ptrBuff;
|
|
String outLine;
|
|
int ch;
|
|
|
|
if(initBlock)lineStrings.remove();
|
|
if(srcPathFileName.isNull())return FALSE;
|
|
FileHandle readFile(srcPathFileName,FileHandle::Read,FileHandle::ShareRead);
|
|
if(!readFile.isOkay())return FALSE;
|
|
FileMap readMap(readFile);
|
|
PureViewOfFile readView(readMap);
|
|
iniProfile.makeFileName(srcPathFileName);
|
|
srcPathFileName.removeTokens("\\/");
|
|
::sprintf(outLine,"begin %d %s\r\n",644,srcPathFileName);
|
|
lineStrings.insert(&outLine);
|
|
Progress encodeProgress(parentWindow,srcPathFileName);
|
|
encodeProgress.canCancel(TRUE);
|
|
encodeProgress.show(TRUE);
|
|
encodeProgress.setText("encoding... (press ESC to cancel).");
|
|
while(sizeof(readBuff)==readView.read(readBuff,sizeof(readBuff))){parentWindow.yieldTask();lineCount++;}
|
|
readView.rewind();
|
|
encodeProgress.range(lineCount);
|
|
while(readCount=readView.read(readBuff,sizeof(readBuff)))
|
|
{
|
|
String lineString;
|
|
char *ptrLine=(LPSTR)lineString;
|
|
*(ptrLine++)=chEncode(readCount);
|
|
for(ptrBuff=readBuff,byteCount=readCount;byteCount>0;byteCount-=3,ptrBuff+=3)
|
|
{
|
|
*(ptrLine++)=chEncode(*ptrBuff>>2);
|
|
*(ptrLine++)=chEncode((*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F);
|
|
*(ptrLine++)=chEncode((ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03);
|
|
*(ptrLine++)=chEncode(ptrBuff[2]&0x3F);
|
|
parentWindow.yieldTask();
|
|
}
|
|
*(ptrLine++)=0x0D;
|
|
*(ptrLine++)=0x0A;
|
|
lineStrings.insert(&lineString);
|
|
encodeProgress++;
|
|
if(!encodeProgress.isOkay()){lineStrings.remove();return FALSE;}
|
|
if(readCount!=sizeof(readBuff))break;
|
|
}
|
|
String lastLine;
|
|
lastLine+=(char)('\0'?('\0'&0x3F)+' ':'`');
|
|
lastLine+="\r\n";
|
|
lineStrings.insert(&lastLine);
|
|
lineStrings.insert(&String("end"));
|
|
return TRUE;
|
|
}
|
|
#endif
|
|
|
|
|
|
|
|
// void fatalThreadExit(void);
|
|
|
|
|
|
|
|
//inline
|
|
//void SMTPThread::fatalThreadExit(void)
|
|
//{
|
|
// MessageThread::fatalThreadExit();
|
|
//}
|