1/*
2 Copyright (C) 2006-2007 KovoKs <info@kovoks.nl>
3
4 This library is free software; you can redistribute it and/or modify it
5 under the terms of the GNU Library General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or (at your
7 option) any later version.
8
9 This library is distributed in the hope that it will be useful, but WITHOUT
10 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
12 License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to the
16 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17 02110-1301, USA.
18*/
19
20#ifndef MAILTRANSPORT_SOCKET_H
21#define MAILTRANSPORT_SOCKET_H
22
23#include <mailtransport/mailtransport_export.h>
24
25#include <QtNetwork/QSslSocket>
26
27namespace MailTransport {
28
29class SocketPrivate;
30
31/**
32 * @class Socket
33 * Responsible for communicating with the server, it's designed to work
34 * with the ServerTest class.
35 * @author Tom Albers <tomalbers@kde.nl>
36 */
37class MAILTRANSPORT_EXPORT Socket : public QObject
38{
39 Q_OBJECT
40
41 public:
42
43 /**
44 * Contructor, it will not auto connect. Call reconnect() to connect to
45 * the parameters given.
46 * @param parent the parent
47 */
48 explicit Socket( QObject *parent );
49
50 /**
51 * Destructor
52 */
53 ~Socket();
54
55 /**
56 * Existing connection will be closed and a new connection will be
57 * made
58 */
59 virtual void reconnect();
60
61 /**
62 * Write @p text to the socket
63 */
64 virtual void write( const QString &text );
65
66 /**
67 * @return true when the connection is live and kicking
68 */
69 virtual bool available();
70
71 /**
72 * set the protocol to use
73 */
74 void setProtocol( const QString &proto );
75
76 /**
77 * set the server to use
78 */
79 void setServer( const QString &server );
80
81 /**
82 * set the port to use. If not specified, it will use the default
83 * belonging to the protocol.
84 */
85 void setPort( int port );
86
87 /**
88 * this will be a secure connection
89 */
90 void setSecure( bool what );
91
92 /**
93 * If you want to start TLS encryption, call this. For example after the starttls command.
94 */
95 void startTLS();
96
97 private:
98 Q_DECLARE_PRIVATE( Socket )
99 SocketPrivate *const d;
100
101 Q_PRIVATE_SLOT( d, void slotConnected() )
102 Q_PRIVATE_SLOT( d, void slotStateChanged( QAbstractSocket::SocketState state ) )
103 Q_PRIVATE_SLOT( d, void slotModeChanged( QSslSocket::SslMode state ) )
104 Q_PRIVATE_SLOT( d, void slotSocketRead() )
105 Q_PRIVATE_SLOT( d, void slotSslErrors( const QList<QSslError> &errors ) )
106
107 Q_SIGNALS:
108 /**
109 * emits the incoming data
110 */
111 void data( const QString & );
112
113 /**
114 * emitted when there is a connection (ready to send something).
115 */
116 void connected();
117
118 /**
119 * emitted when not connected.
120 */
121 void failed();
122
123 /**
124 * emitted when startShake() is completed.
125 */
126 void tlsDone();
127};
128
129} // namespace MailTransport
130
131#endif // MAILTRANSPORT_SOCKET_H
132
133