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 *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 #include #include #include #include #include #include #include #include #include #include HINSTANCE Main::smhInstance=0; HINSTANCE Main::smhPrevInstance=0; int Main::smnCmdShow=0; WORD open(void); void writeLines(Block &stringBlock); void saveLines(Block &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 &stringBlock) { for(short itemIndex=0;itemIndex &stringBlock,const String &saveName) { FileHandle saveFile(saveName,FileHandle::Write,FileHandle::ShareNone,FileHandle::Overwrite); for(short itemIndex=0;itemIndex receiveStrings; smtpControl.receive(receiveStrings); for(int lineIndex=0;lineIndex #include #include 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 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 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 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 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 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 &mailData) { String controlData; Block 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)[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 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 &responseStrings) { if(responseString.isNull())return FALSE; for(int itemIndex=0;itemIndex responseStrings; mSMTPControl.receive(responseStrings); return responseStrings.size(); } // virtuals void SMTPClient::message(const String &messageString) { mWinConsole.writeLine(messageString); } void SMTPClient::message(Block &messageStrings) { for(int lineIndex=0;lineIndex mAckConnectResponseStrings; Block mNakConnectResponseStrings; Block mAckHeloResponseStrings; Block mNakHeloResponseStrings; Block mAckMailResponseStrings; Block mNakMailResponseStrings; Block mAckRecipientResponseStrings; Block mNakRecipientResponseStrings; Block mAckDataResponseStrings; Block mNakDataResponseStrings; Block mAckResetResponseStrings; Block mNakResetResponseStrings; Block mAckSendResponseStrings; Block mNakSendResponseStrings; Block mAckSendOrMailResponseStrings; Block mNakSendOrMailResponseStrings; Block mAckSendAndMailResponseStrings; Block mNakSendAndMailResponseStrings; Block mAckVerifyResponseStrings; Block mNakVerifyResponseStrings; Block mAckExpandResponseStrings; Block mNakExpandResponseStrings; Block mAckHelpResponseStrings; Block mNakHelpResponseStrings; Block mAckNoopResponseStrings; Block mNakNoopResponseStrings; Block mAckTurnResponseStrings; Block mNakTurnResponseStrings; Block mAckQuitResponseStrings; Block 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 ")); mailData.insert(&String("to: Russ (Big Guy) Le Blang ")); mailData.insert(&String("Hey Russ,")); // smtpClient.verify("europa@li.net"); // verify command template void BTree::remove(const T &someItem,TreeNode *pCurrNode,TreeNode *pParentNode) { TreeNode *pTmpNode; if(!pCurrNode)return; if(someItemitem())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 *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 *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 //#include #include #include #include #include int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) { // Console winConsole; BTree wordTree; Block 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 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 #include #include #include int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) { // Console winConsole; BTree wordTree; Block 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 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 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 &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 FileHandle writeFile("uuencode.txt",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite); for(int lineIndex=0;lineIndex FileHandle writeFile("uuencode.txt",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite); for(int lineIndex=0;lineIndex #include #include #include #include #include BOOL UUEncode::encode(GUIWindow &parentWindow,String srcPathFileName,Block &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 &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(); //}