summaryrefslogtreecommitdiffstats
path: root/tdeio/tdeio/slave.h
diff options
context:
space:
mode:
Diffstat (limited to 'tdeio/tdeio/slave.h')
-rw-r--r--tdeio/tdeio/slave.h270
1 files changed, 270 insertions, 0 deletions
diff --git a/tdeio/tdeio/slave.h b/tdeio/tdeio/slave.h
new file mode 100644
index 000000000..80ae30d3a
--- /dev/null
+++ b/tdeio/tdeio/slave.h
@@ -0,0 +1,270 @@
+// -*- c++ -*-
+/*
+ * This file is part of the KDE libraries
+ * Copyright (c) 2000 Waldo Bastian <bastian@kde.org>
+ * 2000 Stephan Kulow <coolo@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#ifndef KIO_SLAVE_H
+#define KIO_SLAVE_H
+
+#include <time.h>
+#include <unistd.h>
+
+#include <tqobject.h>
+
+#include <kurl.h>
+
+#include "tdeio/slaveinterface.h"
+#include "tdeio/connection.h"
+
+class TDEServerSocket;
+class TDESocket;
+
+namespace TDEIO {
+
+ /** Attention developers: If you change the implementation of TDEIO::Slave,
+ * do *not* use connection() or slaveconn but the respective TDEIO::Slave
+ * accessor methods. Otherwise classes derived from Slave might break. (LS)
+ */
+ class TDEIO_EXPORT Slave : public TDEIO::SlaveInterface
+ {
+ Q_OBJECT
+
+
+ protected:
+ /**
+ * Use this constructor if you derive your own class from Slave
+ * @p derived must be true in any case
+ * @internal
+ * @since 3.2
+ */
+ Slave(bool derived, TDEServerSocket *unixdomain, const TQString &protocol,
+ const TQString &socketname); // TODO(BIC): Remove in KDE 4
+
+ public:
+ Slave(TDEServerSocket *unixdomain,
+ const TQString &protocol, const TQString &socketname);
+
+ virtual ~Slave();
+
+ void setPID(pid_t);
+
+ int slave_pid() { return m_pid; }
+
+ /**
+ * Force termination
+ */
+ void kill();
+
+ /**
+ * @return true if the slave survived the last mission.
+ */
+ bool isAlive() { return !dead; }
+
+ /**
+ * Set host for url
+ * @param host to connect to.
+ * @param port to connect to.
+ * @param user to login as
+ * @param passwd to login with
+ */
+ void setHost( const TQString &host, int port,
+ const TQString &user, const TQString &passwd); // TODO(BIC): make virtual
+
+ /**
+ * Clear host info.
+ */
+ void resetHost();
+
+ /**
+ * Configure slave
+ */
+ void setConfig(const MetaData &config); // TODO(BIC): make virtual
+
+ /**
+ * The protocol this slave handles.
+ *
+ * @return name of protocol handled by this slave, as seen by the user
+ */
+ TQString protocol() { return m_protocol; }
+
+ void setProtocol(const TQString & protocol);
+ /**
+ * The actual protocol used to handle the request.
+ *
+ * This method will return a different protocol than
+ * the one obtained by using protocol() if a
+ * proxy-server is used for the given protocol. This
+ * usually means that this method will return "http"
+ * when the actuall request was to retrieve a resource
+ * from an "ftp" server by going through a proxy server.
+ *
+ * @return the actual protocol (io-slave) that handled the request
+ */
+ TQString slaveProtocol() { return m_slaveProtocol; }
+
+ /**
+ * @return Host this slave is (was?) connected to
+ */
+ TQString host() { return m_host; }
+
+ /**
+ * @return port this slave is (was?) connected to
+ */
+ int port() { return m_port; }
+
+ /**
+ * @return User this slave is (was?) logged in as
+ */
+ TQString user() { return m_user; }
+
+ /**
+ * @return Passwd used to log in
+ */
+ TQString passwd() { return m_passwd; }
+
+ /**
+ * Creates a new slave.
+ *
+ * @param protocol protocol the slave is for.
+ * @param url URL the slave should operate on.
+ * @param error is the error code on failure and undefined else.
+ * @param error_text is the error text on failure and undefined else.
+ *
+ * @return 0 on failure, or a pointer to a slave otherwise.
+ * @todo What are legal @p protocol values?
+ */
+ static Slave* createSlave( const TQString &protocol, const KURL& url, int& error, TQString& error_text );
+
+ static Slave* holdSlave( const TQString &protocol, const KURL& url );
+
+ // == communication with connected tdeioslave ==
+ // whenever possible prefer these methods over the respective
+ // methods in connection()
+ /**
+ * Suspends the operation of the attached tdeioslave.
+ */
+ void suspend(); // TODO(BIC): make virtual
+ /**
+ * Resumes the operation of the attached tdeioslave.
+ */
+ void resume(); // TODO(BIC): make virtual
+ /**
+ * Tells wether the tdeioslave is suspended.
+ * @return true if the tdeioslave is suspended.
+ * @since 3.2
+ */
+ bool suspended(); // TODO(BIC): make virtual
+ /**
+ * Sends the given command to the tdeioslave.
+ * @param cmd command id
+ * @param data byte array containing data
+ * @since 3.2
+ */
+ void send(int cmd, const TQByteArray &data = TQByteArray());// TODO(BIC): make virtual
+ // == end communication with connected tdeioslave ==
+
+ /**
+ * Puts the tdeioslave associated with @p url at halt.
+ */
+ void hold(const KURL &url); // TODO(BIC): make virtual
+
+ /**
+ * @return The time this slave has been idle.
+ */
+ time_t idleTime();
+
+ /**
+ * Marks this slave as idle.
+ */
+ void setIdle();
+
+ /*
+ * @returns Whether the slave is connected
+ * (Connection oriented slaves only)
+ */
+ bool isConnected() { return contacted; }
+ void setConnected(bool c) { contacted = c; }
+
+ /** @deprecated This method is obsolete, use the accessor methods
+ * within TDEIO::Slave instead. Old code directly accessing connection()
+ * will not be able to access special protocols.
+ */
+ KDE_DEPRECATED Connection *connection() { return &slaveconn; } // TODO(BIC): remove before KDE 4
+
+ void ref() { m_refCount++; }
+ void deref() { m_refCount--; if (!m_refCount) delete this; }
+
+ public slots:
+ void accept(TDESocket *socket);
+ void gotInput();
+ void timeout();
+ signals:
+ void slaveDied(TDEIO::Slave *slave);
+
+ protected:
+ void unlinkSocket();
+
+ private:
+ TQString m_protocol;
+ TQString m_slaveProtocol;
+ TQString m_host;
+ int m_port;
+ TQString m_user;
+ TQString m_passwd;
+ TDEServerSocket *serv;
+ TQString m_socket;
+ pid_t m_pid;
+ bool contacted;
+ bool dead;
+ time_t contact_started;
+ time_t idle_since;
+ TDEIO::Connection slaveconn;
+ int m_refCount;
+ protected:
+ virtual void virtual_hook( int id, void* data );
+ // grant SlaveInterface all IDs < 0x200
+ enum { VIRTUAL_SUSPEND = 0x200, VIRTUAL_RESUME, VIRTUAL_SEND,
+ VIRTUAL_HOLD, VIRTUAL_SUSPENDED,
+ VIRTUAL_SET_HOST, VIRTUAL_SET_CONFIG };
+ struct SendParams {
+ int cmd;
+ const TQByteArray *arr;
+ };
+ struct HoldParams {
+ const KURL *url;
+ };
+ struct SuspendedParams {
+ bool retval;
+ };
+ struct SetHostParams {
+ const TQString *host;
+ int port;
+ const TQString *user;
+ const TQString *passwd;
+ };
+ struct SetConfigParams {
+ const MetaData *config;
+ };
+ private:
+ class SlavePrivate* d;
+ };
+
+}
+
+#endif