32#include <ksocketfactory.h>
34using namespace MailTransport;
36namespace MailTransport {
41 SocketPrivate(
Socket *s );
51 void slotStateChanged( QAbstractSocket::SocketState state );
52 void slotModeChanged( QSslSocket::SslMode state );
53 void slotSocketRead();
54 void slotSslErrors(
const QList<QSslError> &errors );
62SocketPrivate::SocketPrivate(
Socket *s ) : q( s )
66void SocketPrivate::slotConnected()
71 kDebug() <<
"normal connect";
74 kDebug() <<
"encrypted connect";
75 socket->startClientEncryption();
79void SocketPrivate::slotStateChanged( QAbstractSocket::SocketState state )
82 kDebug() <<
"State is now:" << ( int ) state;
84 if ( state == QAbstractSocket::UnconnectedState ) {
89void SocketPrivate::slotModeChanged( QSslSocket::SslMode state )
92 kDebug() <<
"Mode is now:" << state;
94 if ( state == QSslSocket::SslClientMode ) {
99void SocketPrivate::slotSocketRead()
107 m_msg += QLatin1String( socket->readAll() );
109 if ( !m_msg.endsWith( QLatin1Char(
'\n' ) ) ) {
114 kDebug() << socket->isEncrypted() << m_msg.trimmed();
117 emit q->
data( m_msg );
121void SocketPrivate::slotSslErrors(
const QList<QSslError> & )
126 socket->ignoreSslErrors();
133 : QObject( parent ), d( new SocketPrivate( this ) )
149 kDebug() <<
"Connecting to:" << d->server <<
":" << d->port;
160 static_cast<QSslSocket *
>( KSocketFactory::connectToHost( d->protocol, d->server,
163 d->socket->setProtocol( QSsl::AnyProtocol );
165 connect( d->socket, SIGNAL(stateChanged(QAbstractSocket::SocketState)),
166 SLOT(slotStateChanged(QAbstractSocket::SocketState)) );
167 connect( d->socket, SIGNAL(modeChanged(QSslSocket::SslMode)),
168 SLOT(slotModeChanged(QSslSocket::SslMode)) );
169 connect( d->socket, SIGNAL(
connected()), SLOT(slotConnected()) );
170 connect( d->socket, SIGNAL(readyRead()), SLOT(slotSocketRead()) );
171 connect( d->socket, SIGNAL(encrypted()), SIGNAL(
connected()) );
172 connect( d->socket, SIGNAL(sslErrors(QList<QSslError>)),
173 SLOT(slotSslErrors(QList<QSslError>)) );
185 QByteArray cs = ( text + QLatin1String(
"\r\n" ) ).toLatin1();
188 kDebug() <<
"C :" << cs;
191 d->socket->write( cs.data(), cs.size() );
197 bool ok = d->socket && d->socket->state() == QAbstractSocket::ConnectedState;
203 kDebug() << objectName();
204 d->socket->setProtocol( QSsl::TlsV1 );
205 d->socket->startClientEncryption();
228#include "moc_socket.cpp"
Responsible for communicating with the server, it's designed to work with the ServerTest class.
void connected()
emitted when there is a connection (ready to send something).
Socket(QObject *parent)
Contructor, it will not auto connect.
void setServer(const QString &server)
set the server to use
void setPort(int port)
set the port to use.
virtual void reconnect()
Existing connection will be closed and a new connection will be made.
void failed()
emitted when not connected.
void data(const QString &)
emits the incoming data
void setSecure(bool what)
this will be a secure connection
void setProtocol(const QString &proto)
set the protocol to use
virtual void write(const QString &text)
Write text to the socket.
void tlsDone()
emitted when startShake() is completed.
void startTLS()
If you want to start TLS encryption, call this.