2
* socks.h - SOCKS5 TCP proxy client/server
3
* Copyright (C) 2003 Justin Karneges
5
* This library is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU Lesser General Public
7
* License as published by the Free Software Foundation; either
8
* version 2.1 of the License, or (at your option) any later version.
10
* This library is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
* Lesser General Public License for more details.
15
* You should have received a copy of the GNU Lesser General Public
16
* License along with this library; if not, write to the Free Software
17
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24
#include "bytestream.h"
32
class SocksUDP : public QObject
38
void change(const QString &host, int port);
39
void write(const QByteArray &data);
42
void packetReady(const QByteArray &data);
51
friend class SocksClient;
52
SocksUDP(SocksClient *sc, const QString &host, int port, const QHostAddress &routeAddr, int routePort);
55
class SocksClient : public ByteStream
59
enum Error { ErrConnectionRefused = ErrCustom, ErrHostNotFound, ErrProxyConnect, ErrProxyNeg, ErrProxyAuth };
60
enum Method { AuthNone=0x0001, AuthUsername=0x0002 };
61
enum Request { ReqConnect, ReqUDPAssociate };
62
SocksClient(QObject *parent=0);
63
SocksClient(int, QObject *parent=0);
66
bool isIncoming() const;
69
void setAuth(const QString &user, const QString &pass="");
70
void connectToHost(const QString &proxyHost, int proxyPort, const QString &host, int port, bool udpMode=false);
73
void chooseMethod(int);
77
void grantUDPAssociate(const QString &relayHost, int relayPort);
82
void write(const QByteArray &);
83
QByteArray read(int bytes=0);
84
int bytesAvailable() const;
85
int bytesToWrite() const;
88
QHostAddress peerAddress() const;
89
quint16 peerPort() const;
92
QString udpAddress() const;
93
quint16 udpPort() const;
94
SocksUDP *createUDP(const QString &host, int port, const QHostAddress &routeAddr, int routePort);
101
void incomingMethods(int);
102
void incomingAuth(const QString &user, const QString &pass);
103
void incomingConnectRequest(const QString &host, int port);
104
void incomingUDPAssociateRequest();
107
void sock_connected();
108
void sock_connectionClosed();
109
void sock_delayedCloseFinished();
110
void sock_readyRead();
111
void sock_bytesWritten(int);
112
void sock_error(int);
120
void reset(bool clear=false);
122
void processOutgoing(const QByteArray &);
123
void processIncoming(const QByteArray &);
124
void continueIncoming();
125
void writeData(const QByteArray &a);
128
class SocksServer : public QObject
132
SocksServer(QObject *parent=0);
135
bool isActive() const;
136
bool listen(quint16 port, bool udp=false);
139
QHostAddress address() const;
140
SocksClient *takeIncoming();
142
void writeUDP(const QHostAddress &addr, int port, const QByteArray &data);
145
void incomingReady();
146
void incomingUDP(const QString &host, int port, const QHostAddress &addr, int sourcePort, const QByteArray &data);
149
void connectionReady(int);
150
void connectionError();