summaryrefslogtreecommitdiffstats
path: root/kdecore/ksocks.h
diff options
context:
space:
mode:
Diffstat (limited to 'kdecore/ksocks.h')
-rw-r--r--kdecore/ksocks.h210
1 files changed, 210 insertions, 0 deletions
diff --git a/kdecore/ksocks.h b/kdecore/ksocks.h
new file mode 100644
index 000000000..04fb4f79a
--- /dev/null
+++ b/kdecore/ksocks.h
@@ -0,0 +1,210 @@
+/* This file is part of the KDE libraries
+ Copyright (C) 2001 George Staikos <staikos@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 _KSOCKS_H_
+#define _KSOCKS_H_
+
+#include <qstringlist.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <kstaticdeleter.h>
+#include <kdelibs_export.h>
+
+#ifdef Q_OS_UNIX
+
+class KSocksTable;
+class KSocksPrivate;
+class KLibrary;
+class KConfigBase;
+struct sockaddr;
+
+typedef unsigned ksocklen_t;
+
+
+/**
+ * This class provides you with an interface to a
+ * <a href="http://www.socks.nec.com/">SOCKS</a> Proxy server. A SOCKS server
+ * is able to provide full internet access behind a firewall.
+ * KSocks is a singleton; there can only be one instance at any
+ * given time. To obtain a reference to that instance, use
+ * self().
+ *
+ * @short Access to a SOCKS Proxy.
+ */
+class KDECORE_EXPORT KSocks {
+ friend class KStaticDeleter<KSocks>;
+
+public:
+
+ /**
+ * Return an instance of class KSocks *.
+ * You cannot delete this object. It is a singleton class.
+ * @return the KSock instance
+ */
+ static KSocks *self();
+
+ /**
+ * Checks whether KSocks has been started (ie someone called self())
+ * @return true if activated
+ */
+ static bool activated();
+
+ /**
+ * Disable the use of SOCKS immediately
+ */
+ void disableSocks();
+
+ /**
+ * Enable the use of SOCKS immediately if hasSocks() is true.
+ */
+ void enableSocks();
+
+ /**
+ * Checks whether SOCKS is currently being used.
+ * @return true if SOCKS is currently being used.
+ */
+ bool usingSocks();
+
+ /**
+ * Checks whether SOCKS is available for use.
+ * @return true if SOCKS is available for use.
+ */
+ bool hasSocks();
+
+ /**
+ * Returns whether asynchronous connects work with the
+ * selected SOCKS impementation
+ */
+ bool hasWorkingAsyncConnect();
+
+ /*
+ ** REIMPLEMENTATIONS OF LIBC SOCKET FUNCTIONS
+ **/
+ /**
+ * This is the re-implementation of libc's function of the same
+ * name. Read the appropriate man page.
+ */
+ int connect (int sockfd, const sockaddr *serv_addr,
+ ksocklen_t addrlen);
+ /**
+ * This is the re-implementation of libc's function of the same
+ * name. Read the appropriate man page.
+ */
+ signed long int read (int fd, void *buf, unsigned long int count);
+ /**
+ * This is the re-implementation of libc's function of the same
+ * name. Read the appropriate man page.
+ */
+ signed long int write (int fd, const void *buf, unsigned long int count);
+ /**
+ * This is the re-implementation of libc's function of the same
+ * name. Read the appropriate man page.
+ */
+ int recvfrom (int s, void *buf, unsigned long int len, int flags,
+ sockaddr *from, ksocklen_t *fromlen);
+ /**
+ * This is the re-implementation of libc's function of the same
+ * name. Read the appropriate man page.
+ */
+ int sendto (int s, const void *msg, unsigned long int len, int flags,
+ const sockaddr *to, ksocklen_t tolen);
+ /**
+ * This is the re-implementation of libc's function of the same
+ * name. Read the appropriate man page.
+ */
+ int recv (int s, void *buf, unsigned long int len, int flags);
+ /**
+ * This is the re-implementation of libc's function of the same
+ * name. Read the appropriate man page.
+ */
+ int send (int s, const void *msg, unsigned long int len, int flags);
+ /**
+ * This is the re-implementation of libc's function of the same
+ * name. Read the appropriate man page.
+ */
+ int getsockname (int s, sockaddr *name, ksocklen_t *namelen);
+ /**
+ * This is the re-implementation of libc's function of the same
+ * name. Read the appropriate man page.
+ */
+ int getpeername (int s, sockaddr *name, ksocklen_t *namelen);
+ /**
+ * This is the re-implementation of libc's function of the same
+ * name. Read the appropriate man page.
+ */
+ int accept (int s, sockaddr *addr, ksocklen_t *addrlen);
+ /**
+ * This is the re-implementation of libc's function of the same
+ * name. Read the appropriate man page.
+ */
+ int select (int n, fd_set *readfds, fd_set *writefds,
+ fd_set *exceptfds, struct timeval *timeout);
+ /**
+ * This is the re-implementation of libc's function of the same
+ * name. Read the appropriate man page.
+ */
+ int listen (int s, int backlog);
+
+ /**
+ * This is the re-implementation of libc's function of the same
+ * name. Read the appropriate man page.
+ */
+ int bind (int sockfd, sockaddr *my_addr,
+ ksocklen_t addrlen);
+ int bind (int sockfd, const sockaddr *my_addr,
+ ksocklen_t addrlen);
+
+ /**
+ * If you're using this, you're probably doing something wrong.
+ * Please don't use it.
+ * @internal
+ */
+ void die();
+
+ /**
+ * Set this before the first call to KSocks::self() and it will fail
+ * to initialize SOCKS.
+ */
+ static void disable();
+
+ /**
+ * Set this before the first call to KSocks::self() and it will use
+ * @p config to read its configuration from.
+ */
+ static void setConfig(KConfigBase *config);
+
+private:
+ KSocks(KConfigBase *config);
+ ~KSocks();
+
+ void stopSocks();
+
+ static KSocks *_me;
+ static bool _disabled;
+ QStringList _libNames;
+ QStringList _libPaths;
+ bool _useSocks, _hasSocks;
+ KLibrary* _socksLib;
+
+
+ KSocksTable *_st;
+ KSocksPrivate *d;
+};
+
+#endif //Q_OS_UNIX
+
+#endif //_KSOCKS_H_