32
PeerConnector::PeerConnector(const QString & ip,Uint16 port,bool local,PeerManager* pman)
33
: QObject(pman),ip(ip),port(port),local(local),pman(pman),auth(0),stopping(false)
32
static ResourceManager half_open_connections(50);
34
class PeerConnector::Private
37
Private(PeerConnector* p,const QString & ip,Uint16 port,bool local,PeerManager* pman)
38
: p(p),ip(ip),port(port),local(local),pman(pman),stopping(false),do_not_start(false)
52
void start(Method method);
53
void authenticationFinished(Authenticate* auth, bool ok);
57
QSet<Method> tried_methods;
58
Method current_method;
62
QWeakPointer<PeerManager> pman;
63
QWeakPointer<Authenticate> auth;
66
PeerConnector::WPtr self;
69
PeerConnector::PeerConnector(const QString& ip, Uint16 port, bool local, bt::PeerManager* pman)
70
: Resource(&half_open_connections,pman->getTorrent().getInfoHash().toString()),
71
d(new Private(this,ip,port,local,pman))
37
75
PeerConnector::~PeerConnector()
80
void PeerConnector::setWeakPointer(PeerConnector::WPtr ptr)
86
void PeerConnector::setMaxActive(Uint32 mc)
88
half_open_connections.setMaxActive(mc);
47
91
void PeerConnector::start()
93
half_open_connections.add(this);
96
void PeerConnector::acquired()
98
PeerManager* pm = d->pman.data();
99
if (!pm || !pm->isStarted())
49
102
bool encryption = ServerInterface::isEncryptionEnabled();
50
103
bool utp = ServerInterface::isUtpEnabled();
55
start(UTP_WITH_ENCRYPTION);
108
d->start(UTP_WITH_ENCRYPTION);
57
start(TCP_WITH_ENCRYPTION);
110
d->start(TCP_WITH_ENCRYPTION);
62
start(UTP_WITHOUT_ENCRYPTION);
115
d->start(UTP_WITHOUT_ENCRYPTION);
64
start(TCP_WITHOUT_ENCRYPTION);
68
void PeerConnector::stop()
117
d->start(TCP_WITHOUT_ENCRYPTION);
80
121
void PeerConnector::authenticationFinished(Authenticate* auth, bool ok)
123
d->authenticationFinished(auth,ok);
126
void PeerConnector::Private::authenticationFinished(Authenticate* auth, bool ok)
132
PeerManager* pm = pman.data();
88
pman->peerAuthenticated(auth,this,ok);
138
pm->peerAuthenticated(auth,self,ok);
111
161
allowed.removeAll(m);
113
163
if (allowed.isEmpty())
114
pman->peerAuthenticated(auth,this,false);
164
pm->peerAuthenticated(auth,self,false);
116
166
start(allowed.front());
119
void PeerConnector::start(PeerConnector::Method method)
169
void PeerConnector::Private::start(PeerConnector::Method method)
171
PeerManager* pm = pman.data();
121
175
current_method = method;
122
Torrent & tor = pman->getTorrent();
176
const Torrent & tor = pm->getTorrent();
123
177
TransportProtocol proto = (method == TCP_WITH_ENCRYPTION || method == TCP_WITHOUT_ENCRYPTION) ? TCP : UTP;
124
178
if (method == TCP_WITH_ENCRYPTION || method == UTP_WITH_ENCRYPTION)
125
auth = new mse::EncryptedAuthenticate(ip,port,proto,tor.getInfoHash(),tor.getPeerID(),this);
179
auth = new mse::EncryptedAuthenticate(ip,port,proto,tor.getInfoHash(),tor.getPeerID(),self);
127
auth = new Authenticate(ip,port,proto,tor.getInfoHash(),tor.getPeerID(),this);
181
auth = new Authenticate(ip,port,proto,tor.getInfoHash(),tor.getPeerID(),self);
130
auth->setLocal(true);
184
auth.data()->setLocal(true);
132
AuthenticationMonitor::instance().add(auth);
186
AuthenticationMonitor::instance().add(auth.data());