summaryrefslogtreecommitdiffstats
path: root/kio/misc/ksendbugmail/smtp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kio/misc/ksendbugmail/smtp.cpp')
-rw-r--r--kio/misc/ksendbugmail/smtp.cpp336
1 files changed, 0 insertions, 336 deletions
diff --git a/kio/misc/ksendbugmail/smtp.cpp b/kio/misc/ksendbugmail/smtp.cpp
deleted file mode 100644
index d282782fc..000000000
--- a/kio/misc/ksendbugmail/smtp.cpp
+++ /dev/null
@@ -1,336 +0,0 @@
-/* $Id$ */
-
-#include <sys/utsname.h>
-#include <unistd.h>
-#include <stdio.h>
-
-#include <kdebug.h>
-
-#include "smtp.h"
-
-SMTP::SMTP(char *serverhost, unsigned short int port, int timeout)
-{
- struct utsname uts;
-
- serverHost = serverhost;
- hostPort = port;
- timeOut = timeout * 1000;
-
- senderAddress = "user@example.net";
- recipientAddress = "user@example.net";
- messageSubject = "(no subject)";
- messageBody = "empty";
- messageHeader = "";
-
- connected = false;
- finished = false;
-
- sock = 0L;
- state = INIT;
- serverState = NONE;
-
- uname(&uts);
- domainName = uts.nodename;
-
-
- if(domainName.isEmpty())
- domainName = "somemachine.example.net";
-
- kdDebug() << "SMTP object created" << endl;
-
- connect(&connectTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(connectTimerTick()));
- connect(&timeOutTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(connectTimedOut()));
- connect(&interactTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(interactTimedOut()));
-
- // some sendmail will give 'duplicate helo' error, quick fix for now
- connect(this, TQT_SIGNAL(messageSent()), TQT_SLOT(closeConnection()));
-}
-
-SMTP::~SMTP()
-{
- if(sock){
- delete sock;
- sock = 0L;
- }
- connectTimer.stop();
- timeOutTimer.stop();
-}
-
-void SMTP::setServerHost(const TQString& serverhost)
-{
- serverHost = serverhost;
-}
-
-void SMTP::setPort(unsigned short int port)
-{
- hostPort = port;
-}
-
-void SMTP::setTimeOut(int timeout)
-{
- timeOut = timeout;
-}
-
-void SMTP::setSenderAddress(const TQString& sender)
-{
- senderAddress = sender;
- int index = senderAddress.find('<');
- if (index == -1)
- return;
- senderAddress = senderAddress.mid(index + 1);
- index = senderAddress.find('>');
- if (index != -1)
- senderAddress = senderAddress.left(index);
- senderAddress = senderAddress.simplifyWhiteSpace();
- while (1) {
- index = senderAddress.find(' ');
- if (index != -1)
- senderAddress = senderAddress.mid(index + 1); // take one side
- else
- break;
- }
- index = senderAddress.find('@');
- if (index == -1)
- senderAddress.append("@localhost"); // won't go through without a local mail system
-
-}
-
-void SMTP::setRecipientAddress(const TQString& recipient)
-{
- recipientAddress = recipient;
-}
-
-void SMTP::setMessageSubject(const TQString& subject)
-{
- messageSubject = subject;
-}
-
-void SMTP::setMessageBody(const TQString& message)
-{
- messageBody = message;
-}
-
-void SMTP::setMessageHeader(const TQString &header)
-{
- messageHeader = header;
-}
-
-void SMTP::openConnection(void)
-{
- kdDebug() << "started connect timer" << endl;
- connectTimer.start(100, true);
-}
-
-void SMTP::closeConnection(void)
-{
- socketClose(sock);
-}
-
-void SMTP::sendMessage(void)
-{
- if(!connected)
- connectTimerTick();
- if(state == FINISHED && connected){
- kdDebug() << "state was == FINISHED\n" << endl;
- finished = false;
- state = IN;
- writeString = TQString::fromLatin1("helo %1\r\n").arg(domainName);
- write(sock->socket(), writeString.ascii(), writeString.length());
- }
- if(connected){
- kdDebug() << "enabling read on sock...\n" << endl;
- interactTimer.start(timeOut, true);
- sock->enableRead(true);
- }
-}
-#include <stdio.h>
-
-void SMTP::connectTimerTick(void)
-{
- connectTimer.stop();
-// timeOutTimer.start(timeOut, true);
-
- kdDebug() << "connectTimerTick called..." << endl;
-
- if(sock){
- delete sock;
- sock = 0L;
- }
-
- kdDebug() << "connecting to " << serverHost << ":" << hostPort << " ..... " << endl;
- sock = new TDESocket(serverHost.ascii(), hostPort);
-
- if(sock == 0L || sock->socket() < 0) {
- timeOutTimer.stop();
- kdDebug() << "connection failed!" << endl;
- socketClose(sock);
- emit error(CONNECTERROR);
- connected = false;
- return;
- }
- connected = true;
- finished = false;
- state = INIT;
- serverState = NONE;
-
- connect(sock, TQT_SIGNAL(readEvent(TDESocket *)), this, TQT_SLOT(socketRead(TDESocket *)));
- connect(sock, TQT_SIGNAL(closeEvent(TDESocket *)), this, TQT_SLOT(socketClose(TDESocket *)));
- // sock->enableRead(true);
- timeOutTimer.stop();
- kdDebug() << "connected" << endl;
-}
-
-void SMTP::connectTimedOut(void)
-{
- timeOutTimer.stop();
-
- if(sock)
- sock->enableRead(false);
- kdDebug() << "socket connection timed out" << endl;
- socketClose(sock);
- emit error(CONNECTTIMEOUT);
-}
-
-void SMTP::interactTimedOut(void)
-{
- interactTimer.stop();
-
- if(sock)
- sock->enableRead(false);
- kdDebug() << "time out waiting for server interaction" << endl;
- socketClose(sock);
- emit error(INTERACTTIMEOUT);
-}
-
-void SMTP::socketRead(TDESocket *socket)
-{
- int n, nl;
-
- kdDebug() << "socketRead() called..." << endl;
- interactTimer.stop();
-
- if(socket == 0L || socket->socket() < 0)
- return;
- n = read(socket->socket(), readBuffer, SMTP_READ_BUFFER_SIZE-1 );
-
- if(n < 0)
- return;
-
- readBuffer[n] = '\0';
- lineBuffer += readBuffer;
- nl = lineBuffer.find('\n');
- if(nl == -1)
- return;
- lastLine = lineBuffer.left(nl);
- lineBuffer = lineBuffer.right(lineBuffer.length() - nl - 1);
- processLine(&lastLine);
- if(connected)
- interactTimer.start(timeOut, true);
-}
-
-void SMTP::socketClose(TDESocket *socket)
-{
- timeOutTimer.stop();
- disconnect(sock, TQT_SIGNAL(readEvent(TDESocket *)), this, TQT_SLOT(socketRead(TDESocket *)));
- disconnect(sock, TQT_SIGNAL(closeEvent(TDESocket *)), this, TQT_SLOT(socketClose(TDESocket *)));
- socket->enableRead(false);
- kdDebug() << "connection terminated" << endl;
- connected = false;
- if(socket){
- delete socket;
- socket = 0L;
- sock = 0L;
- }
- emit connectionClosed();
-}
-
-void SMTP::processLine(TQString *line)
-{
- int i, stat;
- TQString tmpstr;
-
- i = line->find(' ');
- tmpstr = line->left(i);
- if(i > 3)
- kdDebug() << "warning: SMTP status code longer then 3 digits: " << tmpstr << endl;
- stat = tmpstr.toInt();
- serverState = (SMTPServerStatus)stat;
- lastState = state;
-
- kdDebug() << "smtp state: [" << stat << "][" << *line << "]" << endl;
-
- switch(stat){
- case GREET: //220
- state = IN;
- writeString = TQString::fromLatin1("helo %1\r\n").arg(domainName);
- kdDebug() << "out: " << writeString << endl;
- write(sock->socket(), writeString.ascii(), writeString.length());
- break;
- case GOODBYE: //221
- state = QUIT;
- break;
- case SUCCESSFUL://250
- switch(state){
- case IN:
- state = READY;
- writeString = TQString::fromLatin1("mail from: %1\r\n").arg(senderAddress);
- kdDebug() << "out: " << writeString << endl;
- write(sock->socket(), writeString.ascii(), writeString.length());
- break;
- case READY:
- state = SENTFROM;
- writeString = TQString::fromLatin1("rcpt to: %1\r\n").arg(recipientAddress);
- kdDebug() << "out: " << writeString << endl;
- write(sock->socket(), writeString.ascii(), writeString.length());
- break;
- case SENTFROM:
- state = SENTTO;
- writeString = TQString::fromLatin1("data\r\n");
- kdDebug() << "out: " << writeString << endl;
- write(sock->socket(), writeString.ascii(), writeString.length());
- break;
- case DATA:
- state = FINISHED;
- finished = true;
- sock->enableRead(false);
- emit messageSent();
- break;
- default:
- state = CERROR;
- kdDebug() << "smtp error (state error): [" << lastState << "]:[" << stat << "][" << *line << "]" << endl;
- socketClose(sock);
- emit error(COMMAND);
- break;
- }
- break;
- case READYDATA: //354
- state = DATA;
- writeString = TQString::fromLatin1("Subject: %1\r\n").arg(messageSubject);
- writeString += messageHeader;
- writeString += "\r\n";
- writeString += messageBody;
- writeString += TQString::fromLatin1(".\r\n");
- kdDebug() << "out: " << writeString;
- write(sock->socket(), writeString.ascii(), writeString.length());
- break;
- case ERROR: //501
- state = CERROR;
- kdDebug() << "smtp error (command error): [" << lastState << "]:[" << stat << "][" << *line << "]\n" << endl;
- socketClose(sock);
- emit error(COMMAND);
- break;
- case UNKNOWN: //550
- state = CERROR;
- kdDebug() << "smtp error (unknown user): [" << lastState << "]:[" << stat << "][" << *line << "]" << endl;
- socketClose(sock);
- emit error(UNKNOWNUSER);
- break;
- default:
- state = CERROR;
- kdDebug() << "unknown response: [" << lastState << "]:[" << stat << "][" << *line << "]" << endl;
- socketClose(sock);
- emit error(UNKNOWNRESPONSE);
- }
-}
-
-#include "smtp.moc"