diff options
-rw-r--r-- | examples/mailtransportresource/mailtransport.cpp | 63 |
1 files changed, 38 insertions, 25 deletions
diff --git a/examples/mailtransportresource/mailtransport.cpp b/examples/mailtransportresource/mailtransport.cpp index 65299a2..361a89e 100644 --- a/examples/mailtransportresource/mailtransport.cpp +++ b/examples/mailtransportresource/mailtransport.cpp | |||
@@ -20,7 +20,9 @@ | |||
20 | 20 | ||
21 | #include <QByteArray> | 21 | #include <QByteArray> |
22 | #include <QList> | 22 | #include <QList> |
23 | #include <QDebug> | 23 | #include <QLoggingCategory> |
24 | |||
25 | Q_LOGGING_CATEGORY(mailtransportCategory, "mailtransport") | ||
24 | 26 | ||
25 | extern "C" { | 27 | extern "C" { |
26 | 28 | ||
@@ -48,7 +50,6 @@ static size_t payload_source(void *ptr, size_t size, size_t nmemb, void *userp) | |||
48 | if (len > size * nmemb) { | 50 | if (len > size * nmemb) { |
49 | len = size * nmemb; | 51 | len = size * nmemb; |
50 | } | 52 | } |
51 | fprintf(stdout, "read n bytes: %d\n", int(len)); | ||
52 | memcpy(ptr, data, len); | 53 | memcpy(ptr, data, len); |
53 | upload_ctx->offset += len; | 54 | upload_ctx->offset += len; |
54 | return len; | 55 | return len; |
@@ -57,26 +58,17 @@ static size_t payload_source(void *ptr, size_t size, size_t nmemb, void *userp) | |||
57 | return 0; | 58 | return 0; |
58 | } | 59 | } |
59 | 60 | ||
60 | static int progress_callback(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) | 61 | bool sendMessageCurl(const char *to[], int numTos, |
61 | { | 62 | const char *cc[], int numCcs, |
62 | if (ultotal > 0) { | 63 | const char *msg, |
63 | auto progress = ulnow * 100.0/ ultotal; | 64 | bool useTls, |
64 | fprintf(stdout, "Upload progress: %d \n", int(progress)); | 65 | const char* from, |
65 | } | 66 | const char *username, const char *password, |
66 | return 0; | 67 | const char *server, bool verifyPeer, const QByteArray &cacert, QByteArray &errorMessage, |
67 | } | 68 | bool enableDebugOutput, |
68 | 69 | int (*debug_callback)(CURL *handle, curl_infotype type, char *data, size_t size, void *userptr), | |
69 | static int debug_callback(CURL *handle, | 70 | int (*progress_callback)(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) |
70 | curl_infotype type, | 71 | ) |
71 | char *data, | ||
72 | size_t size, | ||
73 | void *userptr) | ||
74 | { | ||
75 | fprintf(stdout, "CURL_DEBUG: %s", data); | ||
76 | return 0; | ||
77 | } | ||
78 | |||
79 | bool sendMessageCurl(const char *to[], int numTos, const char *cc[], int numCcs, const char *msg, bool useTls, const char* from, const char *username, const char *password, const char *server, bool verifyPeer, const QByteArray &cacert, QByteArray &errorMessage) | ||
80 | { | 72 | { |
81 | CURL *curl; | 73 | CURL *curl; |
82 | CURLcode res = CURLE_OK; | 74 | CURLcode res = CURLE_OK; |
@@ -127,10 +119,11 @@ bool sendMessageCurl(const char *to[], int numTos, const char *cc[], int numCcs, | |||
127 | /* Since the traffic will be encrypted, it is very useful to turn on debug | 119 | /* Since the traffic will be encrypted, it is very useful to turn on debug |
128 | * information within libcurl to see what is happening during the transfer. | 120 | * information within libcurl to see what is happening during the transfer. |
129 | */ | 121 | */ |
130 | // curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); | 122 | if (enableDebugOutput) { |
123 | curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); | ||
124 | } | ||
131 | curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, debug_callback); | 125 | curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, debug_callback); |
132 | 126 | ||
133 | // curl_easy_setopt(curl, CURLOPT_TIMEOUT, 1L); | ||
134 | //Connection timeout of 40s | 127 | //Connection timeout of 40s |
135 | curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 40L); | 128 | curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 40L); |
136 | 129 | ||
@@ -190,7 +183,27 @@ MailTransport::SendResult MailTransport::sendMessage(const KMime::Message::Ptr & | |||
190 | auto serverAddress = server; | 183 | auto serverAddress = server; |
191 | serverAddress.replace("smtps://", "smtp://"); | 184 | serverAddress.replace("smtps://", "smtp://"); |
192 | 185 | ||
186 | bool enableDebugOutput = QLoggingCategory{"mailtransport"}.isEnabled(QtDebugMsg); | ||
193 | QByteArray errorMessage; | 187 | QByteArray errorMessage; |
194 | auto ret = sendMessageCurl(to, numTos, cc, numCcs, message->encodedContent(), useTls, from.isEmpty() ? nullptr : from, username, password, serverAddress, verifyPeer, cacert, errorMessage); | 188 | auto ret = sendMessageCurl(to, numTos, cc, numCcs, |
189 | message->encodedContent(), | ||
190 | useTls, | ||
191 | from.isEmpty() ? nullptr : from, | ||
192 | username, password, | ||
193 | serverAddress, verifyPeer, cacert, | ||
194 | errorMessage, | ||
195 | enableDebugOutput, | ||
196 | [] (CURL *handle, curl_infotype type, char *data, size_t size, void *) -> int { | ||
197 | //FIXME all a callback passed to sendMessage using the provided user pointer, | ||
198 | //because lambdas with captures cannot be converted to function pointers. | ||
199 | qCDebug(mailtransportCategory) << QString::fromUtf8(data, size); | ||
200 | return 0; | ||
201 | }, | ||
202 | [] (void *, curl_off_t, curl_off_t, curl_off_t ultotal, curl_off_t ulnow) -> int { | ||
203 | if (ultotal > 0) { | ||
204 | qCDebug(mailtransportCategory) << "Upload progress " << ulnow << " out of " << ultotal; | ||
205 | } | ||
206 | return 0; | ||
207 | }); | ||
195 | return {ret, errorMessage}; | 208 | return {ret, errorMessage}; |
196 | } | 209 | } |