summaryrefslogtreecommitdiffstats
path: root/src/torclient.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/torclient.h')
-rw-r--r--src/torclient.h274
1 files changed, 274 insertions, 0 deletions
diff --git a/src/torclient.h b/src/torclient.h
new file mode 100644
index 0000000..caaed20
--- /dev/null
+++ b/src/torclient.h
@@ -0,0 +1,274 @@
+/****************************************************************************
+ ** $Id: torclient.h,v 1.76 2009/01/17 15:49:08 hoganrobert Exp $
+ * Copyright (C) 2006 - 2008 Robert Hogan *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************
+**
+** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
+**
+** This file is part of an example program for Qt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+
+#ifndef _TORCLIENT_H_
+#define _TORCLIENT_H_
+
+#include <qsocket.h>
+#include <qtextstream.h>
+#include <kdebug.h>
+#include <kconfigskeleton.h>
+#include <qlistview.h>
+#include "torkconfig.h"
+
+
+class KConfigSkeleton;
+class KConfigSkeletonItem;
+
+class PrevConfig
+ {
+ public:
+ PrevConfig(): pr(0) {}
+ PrevConfig( const QString& name, const QVariant& property )
+ : nm(name), pr(property)
+ {}
+ typedef QValueList<PrevConfig> PrevConfigList;
+ QString name() const { return nm; }
+ QVariant property() const { return pr; }
+ void setName( QString n ) { nm = n; }
+ void setProperty( QVariant p ) { pr = p; }
+ private:
+ QString nm;
+ QVariant pr;
+ };
+
+
+
+class TorClient : public QObject
+{
+ Q_OBJECT
+public:
+ TorClient( const QString &host, Q_UINT16 port );
+
+ virtual ~TorClient();
+
+
+ void sendToServer(const QString &string)
+ {
+ if (!socket)
+ return;
+ QTextStream os(socket);
+ os << string << "\r\n";
+ }
+
+ QStringList currentServerReport()
+ {
+ return serverReport;
+ }
+
+ QStringList currentClientReport()
+ {
+ return clientReport;
+ }
+
+ void bandwidth();
+ bool isControllerWorking( );
+ void updatePrevConfig(PrevConfig::PrevConfigList previtems);
+ void newIdentity();
+ void createService(const QString &dir, const QString &port);
+ void setBandwidth(const QString &rate, const QString &burst, const QString &max);
+ void setGeoIPAvailable(bool set){geoip_db = set;};
+ unsigned long int getCurBandwidthRate(){return m_CurBandwidthRate;};
+ unsigned long int getCurBandwidthBurst(){return m_CurBandwidthBurst;};
+ unsigned long int getCurMaxAdvertisedBandwidth()
+ {return m_CurMaxAdvertisedBandwidth;};
+ void getBandwidth();
+ void enableDNS( bool set );
+ void enableTransPort( bool set );
+ void cleanUp();
+
+signals:
+
+ void streamStatusUpdate(const QString &, const QString &,
+ const QString &, const QString &, const QString &);
+ void ORStatusUpdate(const QString &, const QString &);
+ void guardStatusUpdate(const QString &, const QString &);
+ void circuitStatusUpdate(const QString &, const QString &,
+ const QString &, const QString &);
+ void infoUpdate(const QString &,const QString &, const QString &);
+ void bwUpdate(const QString &,const QString &);
+ void updateActiveServers(const QStringList &);
+ void updateServerStatus(const QString &, const QString &,
+ const QString &,const QString &);
+ void fatalError();
+ void serverError();
+ void displayError(const QString &,const QString &);
+ void displayServer(const QString &,const QString &);
+ void whatImDoing(const QString &);
+ void copyOldConfig();
+ void shouldIApplySettings();
+ void torConnectionClosed();
+ void makeTorkStoppable();
+ void warnNoServerInfo();
+ void needAlphaVersion( );
+ void connectedToTor( );
+ void authenticated();
+ void streamBwUpdate(const QString &,const QString &,const QString & );
+ void setTorCaption(const QString &);
+ void processWarning(const QString &,const QString &);
+ void processQuestion(const QString &,const QString &);
+ void showServerBW(const QString&);
+ void updateTrayIcon(const QString&);
+ void resolvedAddress(const QString&);
+ void authenticationFailed();
+
+public slots:
+ void socketReadyRead();
+ void applySettingsToRunningTor();
+ void attemptAttach(const QString &, const QString &);
+ void attemptExtendCircuit(const QString &, const QString &, bool);
+ void attemptCreateCircuit(const QString &, bool);
+ void attemptCloseStream(const QString &);
+ void attemptAttachStreams( bool );
+ void attemptCloseCircuit(const QString &);
+ void fetchServerInfo(const QString &);
+ void fetchServerInfoByNick(const QString &);
+ void slotCheckTorNet();
+ void authenticate();
+ void slotCheckGuards();
+ void updateExcludeNodes();
+ void updateEntryNodes();
+ void updateExitNodes();
+ void safeLogging( bool safe);
+ void clearNodes();
+ void strictExitNodes( bool strict );
+ void configureServer( int orPort, int dirPort);
+ void closeAllCircuits( QListView* &circuitList);
+ void allowPlainTextPorts( );
+ void assignPortToRemove();
+ void resolveAddress(const QString &);
+ void terminateTor();
+
+private slots:
+ void closeConnection()
+ {
+ socket->close();
+ if ( socket->state() == QSocket::Closing ) {
+ // We have a delayed close.
+ connect( socket, SIGNAL(delayedCloseFinished()),
+ SLOT(socketClosed()) );
+ } else {
+ // The socket is closed.
+ socketClosed();
+ }
+ }
+
+
+ void socketConnected()
+ {
+ emit connectedToTor();
+ }
+
+ void socketConnectionClosed()
+ {
+ emit torConnectionClosed();
+ }
+
+ void socketClosed()
+ {
+ }
+
+ void socketError( int e )
+ {
+ if ( e == QSocket::ErrHostNotFound ||
+ e == QSocket::ErrConnectionRefused )
+ emit fatalError();
+ }
+
+ void parseEvent(const QString &type, const QString &info);
+ void parseStream(const QString &info);
+ void parseGuards(const QString &info);
+ void parseORConn(const QString &info);
+ void parseServer(const QString &info);
+ void parseCircuit(const QString &info);
+ void parseInfo(const QString &type, const QString &info);
+ void parseBW(const QString &info);
+ void parseAddrmap(const QString &info);
+ void parseStreamBW(const QString &info);
+ void parseDirStatus(const QString &info);
+ void parseStatusGeneral(const QString &info);
+ void resetClientReport();
+ void updateCandidateServers(const QString &path);
+ void handle250(const QString &line);
+ void updateServerReport(const QString &message,
+ const QString &info);
+ void updateClientReport(const QString &message);
+ void populateMessageFromStatusDetail(const QString &line,
+ QString &message);
+ void handleTorVersion( const QString &caption);
+ void readRouters();
+
+private:
+ QSocket *socket;
+ bool m_expectingCircuitInfo;
+ bool m_expectingStreamInfo;
+ bool m_expectingOrconnInfo;
+ bool m_expectingGuardsInfo;
+ bool m_expectingDirStatus;
+ bool m_expectingServerInfo;
+ bool m_resolvingServerAddress;
+ bool geoip_db;
+ QString m_currentTorVersion;
+ bool elementShouldBeUsed(const KConfigSkeletonItem* it);
+ bool noSpecialProcessing(const KConfigSkeletonItem* it);
+ bool readCookie();
+ QString ds_identity;
+ QString ds_fp_identity;
+ QString ds_ip;
+ QString ds_server;
+ QString ds_date;
+ QString ds_statuses;
+ QString m_statustip;
+ QString m_statustiptmp;
+ bool m_controllerWorking;
+ bool authorityread;
+ bool m_firstloadcomplete;
+ bool m_firstdircomplete;
+ PrevConfig::PrevConfigList m_previtems;
+ int m_CurBandwidthRate;
+ int m_CurBandwidthBurst;
+ int m_CurMaxAdvertisedBandwidth;
+ QString m_statustipIP;
+ typedef QMap<QString, QString> statusmap;
+ statusmap statusMessage;
+ statusmap serverStatus;
+ statusmap serverStatusIcon;
+ statusmap clientStatus;
+ statusmap portMessage;
+ statusmap clientStatusIcon;
+ QStringList serverReport;
+ QStringList clientReport;
+ QStringList m_WarnedPorts;
+ QStringList m_portsToReject;
+ QString m_portToRemove;
+ QStringList logResolveList;
+};
+
+#endif //
+
+