summaryrefslogtreecommitdiffstats
path: root/src/torclient.h
blob: 9a3724cef86f00b18f8201ddcc72815c66e02e26 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
/****************************************************************************
 ** $Id: torclient.h,v 1.76 2009/01/17 15:49:08 hoganrobert Exp $
 *   Copyright (C) 2006 - 2008 Robert Hogan                                *
 *   [email protected]                                                *
 *                                                                         *
 *   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 TQt.  This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/

#ifndef _TORCLIENT_H_
#define _TORCLIENT_H_

#include <tqsocket.h>
#include <tqtextstream.h>
#include <tqlistview.h>

#include <kdebug.h>
#include <tdeconfigskeleton.h>

#include "torkconfig.h"


class TDEConfigSkeleton;
class TDEConfigSkeletonItem;

class PrevConfig
    {
    public:
        PrevConfig(): pr(0) {}
        PrevConfig( const TQString& name, const TQVariant& property )
            : nm(name), pr(property)
        {}
        typedef TQValueList<PrevConfig> PrevConfigList;
        TQString name() const { return nm; }
        TQVariant property() const { return pr; }
        void setName( TQString n ) { nm = n; }
        void setProperty( TQVariant p ) { pr = p; }
    private:
        TQString nm;
        TQVariant pr;
    };



class TorClient : public TQObject
{
    TQ_OBJECT
public:
    TorClient( const TQString &host, TQ_UINT16 port );

    virtual ~TorClient();


    void sendToServer(const TQString &string)
    {
        if (!socket)
            return;
        TQTextStream os(socket);
        os << string << "\r\n";
    }

    TQStringList currentServerReport()
    {
        return serverReport;
    }

    TQStringList currentClientReport()
    {
        return clientReport;
    }

    void bandwidth();
    bool isControllerWorking( );
    void updatePrevConfig(PrevConfig::PrevConfigList previtems);
    void newIdentity();
    void createService(const TQString &dir, const TQString &port);
    void setBandwidth(const TQString &rate, const TQString &burst, const TQString &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 TQString &, const TQString &,
        const TQString &, const TQString &, const TQString &);
    void ORStatusUpdate(const TQString &, const TQString &);
    void guardStatusUpdate(const TQString &, const TQString &);
    void circuitStatusUpdate(const TQString &, const TQString &,
                             const TQString &, const TQString &);
    void infoUpdate(const TQString &,const TQString &, const TQString &);
    void bwUpdate(const TQString &,const TQString &);
    void updateActiveServers(const TQStringList &);
    void updateServerStatus(const TQString &, const TQString &,
                            const TQString &,const TQString &);
    void fatalError();
    void serverError();
    void displayError(const TQString &,const TQString &);
    void displayServer(const TQString &,const TQString &);
    void whatImDoing(const TQString &);
    void copyOldConfig();
    void shouldIApplySettings();
    void torConnectionClosed();
    void makeTorkStoppable();
    void warnNoServerInfo();
    void needAlphaVersion( );
    void connectedToTor( );
    void authenticated();
    void streamBwUpdate(const TQString &,const TQString &,const TQString & );
    void setTorCaption(const TQString &);
    void processWarning(const TQString &,const TQString &);
    void processQuestion(const TQString &,const TQString &);
    void showServerBW(const TQString&);
    void updateTrayIcon(const TQString&);
    void resolvedAddress(const TQString&);
	void authenticationFailed();

public slots:
    void socketReadyRead();
    void applySettingsToRunningTor();
    void attemptAttach(const TQString &, const TQString &);
    void attemptExtendCircuit(const TQString &, const TQString &, bool);
    void attemptCreateCircuit(const TQString &, bool);
    void attemptCloseStream(const TQString &);
    void attemptAttachStreams( bool );
    void attemptCloseCircuit(const TQString &);
    void fetchServerInfo(const TQString &);
    void fetchServerInfoByNick(const TQString &);
    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( TQListView* &circuitList);
    void allowPlainTextPorts( );
    void assignPortToRemove();
    void resolveAddress(const TQString &);
    void terminateTor();

private slots:
    void closeConnection()
    {
        socket->close();
        if ( socket->state() == TQSocket::Closing ) {
            // We have a delayed close.
            connect( socket, TQ_SIGNAL(delayedCloseFinished()),
                    TQ_SLOT(socketClosed()) );
        } else {
            // The socket is closed.
            socketClosed();
        }
    }


    void socketConnected()
    {
       emit connectedToTor();
    }

    void socketConnectionClosed()
    {
        emit torConnectionClosed();
    }

    void socketClosed()
    {
    }

    void socketError( int e )
    {
         if ( e == TQSocket::ErrHostNotFound ||
              e == TQSocket::ErrConnectionRefused )
            emit fatalError();
    }

    void parseEvent(const TQString &type, const TQString &info);
    void parseStream(const TQString &info);
    void parseGuards(const TQString &info);
    void parseORConn(const TQString &info);
    void parseServer(const TQString &info);
    void parseCircuit(const TQString &info);
    void parseInfo(const TQString &type, const TQString &info);
    void parseBW(const TQString &info);
    void parseAddrmap(const TQString &info);
    void parseStreamBW(const TQString &info);
    void parseDirStatus(const TQString &info);
    void parseStatusGeneral(const TQString &info);
    void resetClientReport();
    void updateCandidateServers(const TQString &path);
    void handle250(const TQString &line);
    void updateServerReport(const TQString &message,
                            const TQString &info);
    void updateClientReport(const TQString &message);
    void populateMessageFromStatusDetail(const TQString &line,
                                         TQString &message);
    void handleTorVersion( const TQString &caption);
    void readRouters();

private:
    TQSocket *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;
    TQString m_currentTorVersion;
    bool elementShouldBeUsed(const TDEConfigSkeletonItem* it);
    bool noSpecialProcessing(const TDEConfigSkeletonItem* it);
    bool readCookie();
    TQString ds_identity;
    TQString ds_fp_identity;
    TQString ds_ip;
    TQString ds_server;
    TQString ds_date;
    TQString ds_statuses;
    TQString m_statustip;
    TQString 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;
    TQString m_statustipIP;
    typedef TQMap<TQString, TQString> statusmap;
    statusmap statusMessage;
    statusmap serverStatus;
    statusmap serverStatusIcon;
    statusmap clientStatus;
    statusmap portMessage;
    statusmap clientStatusIcon;
    TQStringList serverReport;
    TQStringList clientReport;
    TQStringList m_WarnedPorts;
    TQStringList m_portsToReject;
    TQString m_portToRemove;
    TQStringList logResolveList;
};

#endif //