MailTransport

servertest.h
1 /*
2  SPDX-FileCopyrightText: 2007 KovoKs <[email protected]>
3  SPDX-FileCopyrightText: 2008 Thomas McGuire <[email protected]>
4 
5  SPDX-License-Identifier: LGPL-2.0-or-later
6 */
7 
8 #pragma once
9 
10 #include "mailtransport_export.h"
11 #include "transport.h"
12 
13 #include <QList>
14 #include <QObject>
15 
16 #include <memory>
17 
18 class QProgressBar;
19 
20 namespace MailTransport
21 {
22 class ServerTestPrivate;
23 
24 /**
25  * @class ServerTest
26  * This class can be used to test certain server to see if they support stuff.
27  * @author Tom Albers <[email protected]>
28  */
29 class MAILTRANSPORT_EXPORT ServerTest : public QObject
30 {
31  Q_OBJECT
32  Q_PROPERTY(QString server READ server WRITE setServer)
33  Q_PROPERTY(QString protocol READ protocol WRITE setProtocol)
34  Q_PROPERTY(QProgressBar *progressBar READ progressBar WRITE setProgressBar)
35 
36 public:
37  /**
38  * This enumeration has the special capabilities a server might
39  * support. This covers only capabilities not related to authentication.
40  * @since 4.1
41  */
42  enum Capability {
43  Pipelining, ///< POP3 only. The server supports pipeplining of commands
44  Top, ///< POP3 only. The server supports fetching only the headers
45  UIDL ///< POP3 only. The server has support for unique identifiers
46  };
47 
48  /**
49  * Creates a new server test.
50  *
51  * @param parent The parent widget.
52  */
53  explicit ServerTest(QObject *parent = nullptr);
54 
55  /**
56  * Destroys the server test.
57  */
58  ~ServerTest() override;
59 
60  /**
61  * Sets the server to test.
62  */
63  void setServer(const QString &server);
64 
65  /**
66  * Returns the server to test.
67  */
68  Q_REQUIRED_RESULT QString server() const;
69 
70  /**
71  * Set a custom port to use.
72  *
73  * Each encryption mode (no encryption or SSL) has a different port.
74  * TLS uses the same port as no encryption, because TLS is invoked during
75  * a normal session.
76  *
77  * If this function is never called, the default port is used, which is:
78  * (normal first, then SSL)
79  * SMTP: 587 (falls back to 25), 465
80  * POP: 110, 995
81  * IMAP: 143, 993
82  * NNTP: 119, 563
83  *
84  * @param encryptionMode the port will only be used in this encryption mode.
85  * Valid values for this are only 'None' and 'SSL'.
86  * @param port the port to use
87  *
88  * @since 4.1
89  */
90  void setPort(Transport::EnumEncryption::type encryptionMode, uint port);
91 
92  /**
93  * @param encryptionMode the port of this encryption mode is returned.
94  * Can only be 'None' and 'SSL'
95  *
96  * @return the port set by @ref setPort or -1 if @ref setPort() was never
97  * called for this encryption mode.
98  *
99  * @since 4.1
100  */
101  Q_REQUIRED_RESULT int port(Transport::EnumEncryption::type encryptionMode) const;
102 
103  /**
104  * Sets a fake hostname for the test. This is currently only used when
105  * testing a SMTP server; there, the command for testing the capabilities
106  * (called EHLO) needs to have the hostname of the client included.
107  * The user can however choose to send a fake hostname instead of the
108  * local hostname to work around various problems. This fake hostname needs
109  * to be set here.
110  *
111  * @param fakeHostname the fake hostname to send
112  */
113  void setFakeHostname(const QString &fakeHostname);
114 
115  /**
116  * @return the fake hostname, as set before with @ref setFakeHostname
117  */
118  Q_REQUIRED_RESULT QString fakeHostname() const;
119 
120  /**
121  * Makes @p pb the progressbar to use. This class will call show()
122  * and hide() and will count down. It does not take ownership of
123  * the progressbar.
124  */
125  void setProgressBar(QProgressBar *pb);
126 
127  /**
128  * Returns the used progress bar.
129  */
130  QProgressBar *progressBar() const;
131 
132  /**
133  * Sets @p protocol the protocol to test, currently supported are
134  * "smtp", "pop", "imap", and "nntp".
135  */
136  void setProtocol(const QString &protocol);
137 
138  /**
139  * Returns the protocol.
140  */
141  Q_REQUIRED_RESULT QString protocol() const;
142 
143  /**
144  * Starts the test. Will emit finished() when done.
145  */
146  void start();
147 
148  /**
149  * Get the protocols for the normal connections.. Call this only
150  * after the finished() signals has been sent.
151  * @return an enum of the type Transport::EnumAuthenticationType
152  */
153  Q_REQUIRED_RESULT QVector<int> normalProtocols() const;
154 
155  /**
156  * tells you if the normal server is available
157  * @since 4.5
158  */
159  Q_REQUIRED_RESULT bool isNormalPossible() const;
160 
161  /**
162  * Get the protocols for the TLS connections. Call this only
163  * after the finished() signals has been sent.
164  * @return an enum of the type Transport::EnumAuthenticationType
165  * @since 4.1
166  */
167  Q_REQUIRED_RESULT QVector<int> tlsProtocols() const;
168 
169  /**
170  * Get the protocols for the SSL connections. Call this only
171  * after the finished() signals has been sent.
172  * @return an enum of the type Transport::EnumAuthenticationType
173  */
174  Q_REQUIRED_RESULT QVector<int> secureProtocols() const;
175 
176  /**
177  * tells you if the ssl server is available
178  * @since 4.5
179  */
180  Q_REQUIRED_RESULT bool isSecurePossible() const;
181 
182  /**
183  * Get the special capabilities of the server.
184  * Call this only after the finished() signals has been sent.
185  *
186  * @return the list of special capabilities of the server.
187  * @since 4.1
188  */
189  Q_REQUIRED_RESULT QList<Capability> capabilities() const;
190 
191 Q_SIGNALS:
192  /**
193  * This will be emitted when the test is done. It will contain
194  * the values from the enum EnumEncryption which are possible.
195  */
196  void finished(const QVector<int> &);
197 
198 private:
199  Q_DECLARE_PRIVATE(ServerTest)
200  std::unique_ptr<ServerTestPrivate> const d;
201 
202  Q_PRIVATE_SLOT(d, void slotNormalPossible())
203  Q_PRIVATE_SLOT(d, void slotTlsDone())
204  Q_PRIVATE_SLOT(d, void slotSslPossible())
205  Q_PRIVATE_SLOT(d, void slotReadNormal(const QString &text))
206  Q_PRIVATE_SLOT(d, void slotReadSecure(const QString &text))
207  Q_PRIVATE_SLOT(d, void slotNormalNotPossible())
208  Q_PRIVATE_SLOT(d, void slotSslNotPossible())
209  Q_PRIVATE_SLOT(d, void slotUpdateProgress())
210 };
211 } // namespace MailTransport
Q_SCRIPTABLE Q_NOREPLY void start()
@ Top
POP3 only. The server supports fetching only the headers.
Definition: servertest.h:44
Capability
This enumeration has the special capabilities a server might support.
Definition: servertest.h:42
@ Pipelining
POP3 only. The server supports pipeplining of commands.
Definition: servertest.h:43
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon Feb 6 2023 03:57:53 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.