Conflicts:
src/lib/client/Client.cpp src/lib/net/TCPSocketFactory.cpp
This commit is contained in:
parent
e32402b5c6
commit
95464d97cf
|
@ -82,6 +82,7 @@ REGISTER_EVENT(IpcServerProxy, messageReceived)
|
||||||
//
|
//
|
||||||
|
|
||||||
REGISTER_EVENT(IDataSocket, connected)
|
REGISTER_EVENT(IDataSocket, connected)
|
||||||
|
REGISTER_EVENT(IDataSocket, secureConnected)
|
||||||
REGISTER_EVENT(IDataSocket, connectionFailed)
|
REGISTER_EVENT(IDataSocket, connectionFailed)
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -230,6 +230,7 @@ class IDataSocketEvents : public EventTypes {
|
||||||
public:
|
public:
|
||||||
IDataSocketEvents() :
|
IDataSocketEvents() :
|
||||||
m_connected(Event::kUnknown),
|
m_connected(Event::kUnknown),
|
||||||
|
m_secureConnected(Event::kUnknown),
|
||||||
m_connectionFailed(Event::kUnknown) { }
|
m_connectionFailed(Event::kUnknown) { }
|
||||||
|
|
||||||
//! @name accessors
|
//! @name accessors
|
||||||
|
@ -241,6 +242,13 @@ public:
|
||||||
event when a remote connection has been established.
|
event when a remote connection has been established.
|
||||||
*/
|
*/
|
||||||
Event::Type connected();
|
Event::Type connected();
|
||||||
|
|
||||||
|
//! Get secure connected event type
|
||||||
|
/*!
|
||||||
|
Returns the secure socket connected event type. A secure socket sends
|
||||||
|
this event when a remote connection has been established.
|
||||||
|
*/
|
||||||
|
Event::Type secureConnected();
|
||||||
|
|
||||||
//! Get connection failed event type
|
//! Get connection failed event type
|
||||||
/*!
|
/*!
|
||||||
|
@ -254,6 +262,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Event::Type m_connected;
|
Event::Type m_connected;
|
||||||
|
Event::Type m_secureConnected;
|
||||||
Event::Type m_connectionFailed;
|
Event::Type m_connectionFailed;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -435,10 +435,19 @@ Client::setupConnecting()
|
||||||
{
|
{
|
||||||
assert(m_stream != NULL);
|
assert(m_stream != NULL);
|
||||||
|
|
||||||
m_events->adoptHandler(m_events->forIDataSocket().connected(),
|
if (m_args.m_enableCrypto) {
|
||||||
m_stream->getEventTarget(),
|
m_events->adoptHandler(m_events->forIDataSocket().secureConnected(),
|
||||||
new TMethodEventJob<Client>(this,
|
m_stream->getEventTarget(),
|
||||||
|
new TMethodEventJob<Client>(this,
|
||||||
&Client::handleConnected));
|
&Client::handleConnected));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_events->adoptHandler(m_events->forIDataSocket().connected(),
|
||||||
|
m_stream->getEventTarget(),
|
||||||
|
new TMethodEventJob<Client>(this,
|
||||||
|
&Client::handleConnected));
|
||||||
|
}
|
||||||
|
|
||||||
m_events->adoptHandler(m_events->forIDataSocket().connectionFailed(),
|
m_events->adoptHandler(m_events->forIDataSocket().connectionFailed(),
|
||||||
m_stream->getEventTarget(),
|
m_stream->getEventTarget(),
|
||||||
new TMethodEventJob<Client>(this,
|
new TMethodEventJob<Client>(this,
|
||||||
|
@ -589,8 +598,6 @@ Client::handleConnected(const Event&, void*)
|
||||||
m_sentClipboard[id] = false;
|
m_sentClipboard[id] = false;
|
||||||
m_timeClipboard[id] = 0;
|
m_timeClipboard[id] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_socket->secureConnect();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -39,9 +39,9 @@
|
||||||
|
|
||||||
TCPSocket::TCPSocket(IEventQueue* events, SocketMultiplexer* socketMultiplexer) :
|
TCPSocket::TCPSocket(IEventQueue* events, SocketMultiplexer* socketMultiplexer) :
|
||||||
IDataSocket(events),
|
IDataSocket(events),
|
||||||
|
m_events(events),
|
||||||
m_mutex(),
|
m_mutex(),
|
||||||
m_flushed(&m_mutex, true),
|
m_flushed(&m_mutex, true),
|
||||||
m_events(events),
|
|
||||||
m_socketMultiplexer(socketMultiplexer)
|
m_socketMultiplexer(socketMultiplexer)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
@ -56,10 +56,10 @@ TCPSocket::TCPSocket(IEventQueue* events, SocketMultiplexer* socketMultiplexer)
|
||||||
|
|
||||||
TCPSocket::TCPSocket(IEventQueue* events, SocketMultiplexer* socketMultiplexer, ArchSocket socket) :
|
TCPSocket::TCPSocket(IEventQueue* events, SocketMultiplexer* socketMultiplexer, ArchSocket socket) :
|
||||||
IDataSocket(events),
|
IDataSocket(events),
|
||||||
|
m_events(events),
|
||||||
m_mutex(),
|
m_mutex(),
|
||||||
m_socket(socket),
|
m_socket(socket),
|
||||||
m_flushed(&m_mutex, true),
|
m_flushed(&m_mutex, true),
|
||||||
m_events(events),
|
|
||||||
m_socketMultiplexer(socketMultiplexer)
|
m_socketMultiplexer(socketMultiplexer)
|
||||||
{
|
{
|
||||||
assert(m_socket != NULL);
|
assert(m_socket != NULL);
|
||||||
|
|
|
@ -58,6 +58,9 @@ public:
|
||||||
// IDataSocket overrides
|
// IDataSocket overrides
|
||||||
virtual void connect(const NetworkAddress&);
|
virtual void connect(const NetworkAddress&);
|
||||||
|
|
||||||
|
|
||||||
|
virtual ISocketMultiplexerJob*
|
||||||
|
newJob();
|
||||||
virtual void secureConnect() {}
|
virtual void secureConnect() {}
|
||||||
virtual void secureAccept() {}
|
virtual void secureAccept() {}
|
||||||
virtual void setFingerprintFilename(String& f) {}
|
virtual void setFingerprintFilename(String& f) {}
|
||||||
|
@ -71,8 +74,7 @@ protected:
|
||||||
virtual int secureWrite(const void*, int, int& ) { return 0; }
|
virtual int secureWrite(const void*, int, int& ) { return 0; }
|
||||||
|
|
||||||
void setJob(ISocketMultiplexerJob*);
|
void setJob(ISocketMultiplexerJob*);
|
||||||
ISocketMultiplexerJob*
|
|
||||||
newJob();
|
|
||||||
bool isReadable() { return m_readable; }
|
bool isReadable() { return m_readable; }
|
||||||
bool isWritable() { return m_writable; }
|
bool isWritable() { return m_writable; }
|
||||||
|
|
||||||
|
@ -99,14 +101,14 @@ private:
|
||||||
protected:
|
protected:
|
||||||
bool m_readable;
|
bool m_readable;
|
||||||
bool m_writable;
|
bool m_writable;
|
||||||
|
bool m_connected;
|
||||||
|
IEventQueue* m_events;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Mutex m_mutex;
|
Mutex m_mutex;
|
||||||
ArchSocket m_socket;
|
ArchSocket m_socket;
|
||||||
StreamBuffer m_inputBuffer;
|
StreamBuffer m_inputBuffer;
|
||||||
StreamBuffer m_outputBuffer;
|
StreamBuffer m_outputBuffer;
|
||||||
CondVar<bool> m_flushed;
|
CondVar<bool> m_flushed;
|
||||||
bool m_connected;
|
|
||||||
IEventQueue* m_events;
|
|
||||||
SocketMultiplexer* m_socketMultiplexer;
|
SocketMultiplexer* m_socketMultiplexer;
|
||||||
};
|
};
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "SecureSocket.h"
|
#include "SecureSocket.h"
|
||||||
|
|
||||||
#include "net/TSocketMultiplexerMethodJob.h"
|
#include "net/TSocketMultiplexerMethodJob.h"
|
||||||
|
#include "base/TMethodEventJob.h"
|
||||||
#include "net/TCPSocket.h"
|
#include "net/TCPSocket.h"
|
||||||
#include "mt/Lock.h"
|
#include "mt/Lock.h"
|
||||||
#include "arch/XArch.h"
|
#include "arch/XArch.h"
|
||||||
|
@ -100,6 +101,29 @@ SecureSocket::close()
|
||||||
TCPSocket::close();
|
TCPSocket::close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SecureSocket::connect(const NetworkAddress& addr)
|
||||||
|
{
|
||||||
|
m_events->adoptHandler(m_events->forIDataSocket().connected(),
|
||||||
|
getEventTarget(),
|
||||||
|
new TMethodEventJob<SecureSocket>(this,
|
||||||
|
&SecureSocket::handleTCPConnected));
|
||||||
|
|
||||||
|
TCPSocket::connect(addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
ISocketMultiplexerJob*
|
||||||
|
SecureSocket::newJob()
|
||||||
|
{
|
||||||
|
// after TCP connection is established, SecureSocket will pick up
|
||||||
|
// connected event and do secureConnect
|
||||||
|
if (m_connected && !m_secureReady) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TCPSocket::newJob();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SecureSocket::secureConnect()
|
SecureSocket::secureConnect()
|
||||||
{
|
{
|
||||||
|
@ -609,6 +633,7 @@ SecureSocket::serviceConnect(ISocketMultiplexerJob* job,
|
||||||
|
|
||||||
// If status > 0, success
|
// If status > 0, success
|
||||||
if (status > 0) {
|
if (status > 0) {
|
||||||
|
sendEvent(m_events->forIDataSocket().secureConnected());
|
||||||
return newJob();
|
return newJob();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -714,3 +739,9 @@ SecureSocket::showSecureConnectInfo()
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SecureSocket::handleTCPConnected(const Event& event, void*)
|
||||||
|
{
|
||||||
|
secureConnect();
|
||||||
|
}
|
||||||
|
|
|
@ -41,6 +41,11 @@ public:
|
||||||
// ISocket overrides
|
// ISocket overrides
|
||||||
void close();
|
void close();
|
||||||
|
|
||||||
|
// IDataSocket overrides
|
||||||
|
virtual void connect(const NetworkAddress&);
|
||||||
|
|
||||||
|
ISocketMultiplexerJob*
|
||||||
|
newJob();
|
||||||
void secureConnect();
|
void secureConnect();
|
||||||
void secureAccept();
|
void secureAccept();
|
||||||
bool isReady() const { return m_secureReady; }
|
bool isReady() const { return m_secureReady; }
|
||||||
|
@ -80,6 +85,8 @@ private:
|
||||||
void showSecureConnectInfo();
|
void showSecureConnectInfo();
|
||||||
void showSecureLibInfo();
|
void showSecureLibInfo();
|
||||||
void showSecureCipherInfo();
|
void showSecureCipherInfo();
|
||||||
|
|
||||||
|
void handleTCPConnected(const Event& event, void*);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ssl* m_ssl;
|
Ssl* m_ssl;
|
||||||
|
|
Loading…
Reference in New Issue