summaryrefslogtreecommitdiffstats
path: root/tdeioslave/pop3/pop3.h
diff options
context:
space:
mode:
Diffstat (limited to 'tdeioslave/pop3/pop3.h')
-rw-r--r--tdeioslave/pop3/pop3.h133
1 files changed, 133 insertions, 0 deletions
diff --git a/tdeioslave/pop3/pop3.h b/tdeioslave/pop3/pop3.h
new file mode 100644
index 000000000..62812c82c
--- /dev/null
+++ b/tdeioslave/pop3/pop3.h
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 1999,2000 Alex Zepeda
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+#ifndef _POP3_H
+#define _POP3_H
+
+#include <sys/types.h>
+#include <sys/time.h>
+
+#include <stdio.h>
+
+#include <tqstring.h>
+
+#include <tdeio/tcpslavebase.h>
+
+#define MAX_PACKET_LEN 4096
+
+class POP3Protocol:public TDEIO::TCPSlaveBase {
+public:
+ POP3Protocol(const TQCString & pool, const TQCString & app, bool SSL);
+ virtual ~ POP3Protocol();
+
+ virtual void setHost(const TQString & host, int port,
+ const TQString & user, const TQString & pass);
+
+ virtual void special(const TQByteArray & aData);
+ virtual void get(const KURL & url);
+ virtual void stat(const KURL & url);
+ virtual void del(const KURL & url, bool isfile);
+ virtual void listDir(const KURL & url);
+
+protected:
+
+ ssize_t myRead(void *data, ssize_t len);
+ ssize_t myReadLine(char *data, ssize_t len);
+
+ /**
+ * This returns the size of a message as a long integer.
+ * This is useful as an internal member, because the "other"
+ * getSize command will emit a signal, which would be harder
+ * to trap when doing something like listing a directory.
+ */
+ size_t realGetSize(unsigned int msg_num);
+
+ /**
+ * Send a command to the server. Using this function, getResponse
+ * has to be called separately.
+ */
+ bool sendCommand(const char *cmd);
+
+ enum Resp{Err, Ok, Cont, Invalid};
+ /**
+ * Send a command to the server, and wait for the one-line-status
+ * reply via getResponse. Similar rules apply. If no buffer is
+ * specified, no data is passed back.
+ */
+ Resp command(const char *buf, char *r_buf = 0, unsigned int r_len = 0);
+
+ /**
+ * All POP3 commands will generate a response. Each response will
+ * either be prefixed with a "+OK " or a "-ERR ". The getResponse
+ * function will wait until there's data to be read, and then read in
+ * the first line (the response), and copy the response sans +OK/-ERR
+ * into a buffer (up to len bytes) if one was passed to it.
+ */
+ Resp getResponse(char *buf, unsigned int len, const char *command);
+
+ /** Call int pop3_open() and report an error, if if fails */
+ void openConnection();
+
+ /**
+ * Attempt to properly shut down the POP3 connection by sending
+ * "QUIT\r\n" before closing the socket.
+ */
+ void closeConnection();
+
+ /**
+ * Attempt to initiate a POP3 connection via a TCP socket. If no port
+ * is passed, port 110 is assumed, if no user || password is
+ * specified, the user is prompted for them.
+ */
+ bool pop3_open();
+ /**
+ * Authenticate via APOP
+ */
+ int loginAPOP( char *challenge, TDEIO::AuthInfo &ai );
+
+ bool saslInteract( void *in, TDEIO::AuthInfo &ai );
+ /**
+ * Authenticate via SASL
+ */
+ int loginSASL( TDEIO::AuthInfo &ai );
+ /**
+ * Authenticate via traditional USER/PASS
+ */
+ bool loginPASS( TDEIO::AuthInfo &ai );
+
+ int m_cmd;
+ unsigned short int m_iOldPort;
+ struct timeval m_tTimeout;
+ TQString m_sOldServer, m_sOldPass, m_sOldUser;
+ TQString m_sServer, m_sPass, m_sUser;
+ bool m_try_apop, m_try_sasl, opened, supports_apop;
+ TQString m_sError;
+ char readBuffer[MAX_PACKET_LEN];
+ ssize_t readBufferLen;
+};
+
+#endif