This commit is contained in:
parent
7e639776b8
commit
8a4c5dbc57
|
|
@ -98,8 +98,9 @@ void ClientPrivate::connect()
|
||||||
void ClientPrivate::parseCnnString( const QUrl & con )
|
void ClientPrivate::parseCnnString( const QUrl & con )
|
||||||
{
|
{
|
||||||
P_Q(QAMQP::Client);
|
P_Q(QAMQP::Client);
|
||||||
if(con.scheme() == AMQPSCHEME )
|
if(con.scheme() == AMQPSCHEME || con.scheme() == AMQPSSCHEME )
|
||||||
{
|
{
|
||||||
|
q->setSsl(con.scheme() == AMQPSSCHEME);
|
||||||
q->setPassword(con.password());
|
q->setPassword(con.password());
|
||||||
q->setUser(con.userName());
|
q->setUser(con.userName());
|
||||||
q->setPort(con.port());
|
q->setPort(con.port());
|
||||||
|
|
@ -154,6 +155,8 @@ void ClientPrivate::disconnect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -327,4 +330,14 @@ void QAMQP::Client::setAuth( Authenticator * auth )
|
||||||
Authenticator * QAMQP::Client::auth() const
|
Authenticator * QAMQP::Client::auth() const
|
||||||
{
|
{
|
||||||
return pd_func()->auth_.data();
|
return pd_func()->auth_.data();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QAMQP::Client::isSsl() const
|
||||||
|
{
|
||||||
|
return pd_func()->network_->isSsl();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QAMQP::Client::setSsl( bool value )
|
||||||
|
{
|
||||||
|
pd_func()->network_->setSsl(value);
|
||||||
}
|
}
|
||||||
|
|
@ -21,6 +21,7 @@ namespace QAMQP
|
||||||
Q_PROPERTY(QString virtualHost READ virtualHost WRITE setVirtualHost);
|
Q_PROPERTY(QString virtualHost READ virtualHost WRITE setVirtualHost);
|
||||||
Q_PROPERTY(QString user READ user WRITE setUser);
|
Q_PROPERTY(QString user READ user WRITE setUser);
|
||||||
Q_PROPERTY(QString password READ password WRITE setPassword);
|
Q_PROPERTY(QString password READ password WRITE setPassword);
|
||||||
|
Q_PROPERTY(bool ssl READ isSsl WRITE setSsl);
|
||||||
|
|
||||||
Q_DISABLE_COPY(Client)
|
Q_DISABLE_COPY(Client)
|
||||||
|
|
||||||
|
|
@ -64,6 +65,11 @@ namespace QAMQP
|
||||||
void open(const QUrl & connectionString);
|
void open(const QUrl & connectionString);
|
||||||
void close();
|
void close();
|
||||||
void reopen();
|
void reopen();
|
||||||
|
|
||||||
|
bool isSsl() const;
|
||||||
|
void setSsl(bool value);
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ClientPrivate * const pd_ptr;
|
ClientPrivate * const pd_ptr;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
#define QAMQP_P_INCLUDE
|
#define QAMQP_P_INCLUDE
|
||||||
#define AMQPSCHEME "amqp"
|
#define AMQPSCHEME "amqp"
|
||||||
|
#define AMQPSSCHEME "amqps"
|
||||||
#define AMQPPORT 5672
|
#define AMQPPORT 5672
|
||||||
#define AMQPHOST "localhost"
|
#define AMQPHOST "localhost"
|
||||||
#define AMQPVHOST "/"
|
#define AMQPVHOST "/"
|
||||||
|
|
|
||||||
|
|
@ -6,17 +6,14 @@ QAMQP::Network::Network( QObject * parent /*= 0*/ ):QObject(parent)
|
||||||
{
|
{
|
||||||
qRegisterMetaType<QAMQP::Frame::Method>("QAMQP::Frame::Method");
|
qRegisterMetaType<QAMQP::Frame::Method>("QAMQP::Frame::Method");
|
||||||
|
|
||||||
socket_ = new QTcpSocket(this);
|
|
||||||
buffer_ = new QBuffer(this);
|
buffer_ = new QBuffer(this);
|
||||||
offsetBuf = 0;
|
offsetBuf = 0;
|
||||||
leftSize = 0;
|
leftSize = 0;
|
||||||
|
|
||||||
|
|
||||||
buffer_->open(QIODevice::ReadWrite);
|
buffer_->open(QIODevice::ReadWrite);
|
||||||
connect(socket_, SIGNAL(connected()), this, SLOT(connected()));
|
|
||||||
connect(socket_, SIGNAL(disconnected()), this, SLOT(disconnected()));
|
initSocket(false);
|
||||||
connect(socket_, SIGNAL(readyRead()), this, SLOT(readyRead()));
|
|
||||||
connect(socket_, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(error(QAbstractSocket::SocketError)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QAMQP::Network::~Network()
|
QAMQP::Network::~Network()
|
||||||
|
|
@ -26,7 +23,13 @@ QAMQP::Network::~Network()
|
||||||
|
|
||||||
void QAMQP::Network::connectTo( const QString & host, quint32 port )
|
void QAMQP::Network::connectTo( const QString & host, quint32 port )
|
||||||
{
|
{
|
||||||
socket_->connectToHost(host, port);
|
if (isSsl())
|
||||||
|
{
|
||||||
|
static_cast<QSslSocket *>(socket_.data())->connectToHostEncrypted(host, port);
|
||||||
|
} else {
|
||||||
|
socket_->connectToHost(host, port);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAMQP::Network::disconnect()
|
void QAMQP::Network::disconnect()
|
||||||
|
|
@ -37,8 +40,14 @@ void QAMQP::Network::disconnect()
|
||||||
|
|
||||||
void QAMQP::Network::connected()
|
void QAMQP::Network::connected()
|
||||||
{
|
{
|
||||||
char header_[8] = {'A', 'M', 'Q', 'P', 0,0,9,1};
|
if(isSsl() && !static_cast<QSslSocket *>(socket_.data())->isEncrypted() )
|
||||||
socket_->write(header_, 8);
|
{
|
||||||
|
qDebug() << "[SSL] start encrypt";
|
||||||
|
static_cast<QSslSocket *>(socket_.data())->startClientEncryption();
|
||||||
|
} else {
|
||||||
|
conectionReady();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAMQP::Network::disconnected()
|
void QAMQP::Network::disconnected()
|
||||||
|
|
@ -118,4 +127,50 @@ void QAMQP::Network::sendFrame( const QAMQP::Frame::Base & frame )
|
||||||
{
|
{
|
||||||
QDataStream stream(socket_);
|
QDataStream stream(socket_);
|
||||||
frame.toStream(stream);
|
frame.toStream(stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QAMQP::Network::isSsl() const
|
||||||
|
{
|
||||||
|
return QString(socket_->metaObject()->className()).compare( "QSslSocket", Qt::CaseInsensitive) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QAMQP::Network::setSsl( bool value )
|
||||||
|
{
|
||||||
|
initSocket(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void QAMQP::Network::initSocket( bool ssl /*= false*/ )
|
||||||
|
{
|
||||||
|
if(socket_)
|
||||||
|
delete socket_;
|
||||||
|
|
||||||
|
if(ssl)
|
||||||
|
{
|
||||||
|
socket_ = new QSslSocket(this);
|
||||||
|
QSslSocket * ssl_= static_cast<QSslSocket*> (socket_.data());
|
||||||
|
ssl_->setProtocol(QSsl::AnyProtocol);
|
||||||
|
connect(socket_, SIGNAL(sslErrors(const QList<QSslError> &)),
|
||||||
|
this, SLOT(sslErrors(const QList<QSslError> &)));
|
||||||
|
|
||||||
|
//connect(socket_, SIGNAL(encrypted()), this, SLOT(conectionReady()));
|
||||||
|
connect(socket_, SIGNAL(connected()), this, SLOT(conectionReady()));
|
||||||
|
} else {
|
||||||
|
socket_ = new QTcpSocket(this);
|
||||||
|
connect(socket_, SIGNAL(connected()), this, SLOT(conectionReady()));
|
||||||
|
}
|
||||||
|
|
||||||
|
connect(socket_, SIGNAL(disconnected()), this, SLOT(disconnected()));
|
||||||
|
connect(socket_, SIGNAL(readyRead()), this, SLOT(readyRead()));
|
||||||
|
connect(socket_, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(error(QAbstractSocket::SocketError)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void QAMQP::Network::sslErrors( const QList<QSslError> & errors )
|
||||||
|
{
|
||||||
|
static_cast<QSslSocket*>(socket_.data())->ignoreSslErrors();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QAMQP::Network::conectionReady()
|
||||||
|
{
|
||||||
|
char header_[8] = {'A', 'M', 'Q', 'P', 0,0,9,1};
|
||||||
|
socket_->write(header_, 8);
|
||||||
}
|
}
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QTcpSocket>
|
#include <QTcpSocket>
|
||||||
|
#include <QSslSocket>
|
||||||
#include <QPointer>
|
#include <QPointer>
|
||||||
#include <QBuffer>
|
#include <QBuffer>
|
||||||
|
|
||||||
|
|
@ -24,6 +25,9 @@ namespace QAMQP
|
||||||
|
|
||||||
void sendFrame(const QAMQP::Frame::Base & frame);
|
void sendFrame(const QAMQP::Frame::Base & frame);
|
||||||
|
|
||||||
|
bool isSsl() const;
|
||||||
|
void setSsl(bool value);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void method(const QAMQP::Frame::Method & method);
|
void method(const QAMQP::Frame::Method & method);
|
||||||
void content(const QAMQP::Frame::Content & content);
|
void content(const QAMQP::Frame::Content & content);
|
||||||
|
|
@ -34,8 +38,12 @@ namespace QAMQP
|
||||||
void disconnected();
|
void disconnected();
|
||||||
void error( QAbstractSocket::SocketError socketError );
|
void error( QAbstractSocket::SocketError socketError );
|
||||||
void readyRead();
|
void readyRead();
|
||||||
|
void sslErrors ( const QList<QSslError> & errors );
|
||||||
|
|
||||||
|
void conectionReady();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void initSocket(bool ssl = false);
|
||||||
QPointer<QTcpSocket> socket_;
|
QPointer<QTcpSocket> socket_;
|
||||||
QPointer<QBuffer> buffer_;
|
QPointer<QBuffer> buffer_;
|
||||||
int offsetBuf;
|
int offsetBuf;
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,8 @@ namespace QAMQP
|
||||||
QPointer<QAMQP::Connection> connection_;
|
QPointer<QAMQP::Connection> connection_;
|
||||||
QSharedPointer<Authenticator> auth_;
|
QSharedPointer<Authenticator> auth_;
|
||||||
|
|
||||||
|
bool isSSl() const;
|
||||||
|
|
||||||
|
|
||||||
Client * const pq_ptr;
|
Client * const pq_ptr;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue