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