Diffstat (limited to 'noncore/unsupported/mailit/popclient.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/unsupported/mailit/popclient.cpp | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/noncore/unsupported/mailit/popclient.cpp b/noncore/unsupported/mailit/popclient.cpp index f9cc337..67306be 100644 --- a/noncore/unsupported/mailit/popclient.cpp +++ b/noncore/unsupported/mailit/popclient.cpp | |||
@@ -98,94 +98,83 @@ void PopClient::setSelectedMails(MailList *list) | |||
98 | void PopClient::connectionEstablished() | 98 | void PopClient::connectionEstablished() |
99 | { | 99 | { |
100 | emit updateStatus(tr("Connection established")); | 100 | emit updateStatus(tr("Connection established")); |
101 | } | 101 | } |
102 | 102 | ||
103 | void PopClient::errorHandling(int status) | 103 | void PopClient::errorHandling(int status) |
104 | { | 104 | { |
105 | emit updateStatus(tr("Error Occured")); | 105 | emit updateStatus(tr("Error Occured")); |
106 | emit errorOccurred(status); | 106 | emit errorOccurred(status); |
107 | socket->close(); | 107 | socket->close(); |
108 | receiving = FALSE; | 108 | receiving = FALSE; |
109 | } | 109 | } |
110 | 110 | ||
111 | void PopClient::incomingData() | 111 | void PopClient::incomingData() |
112 | { | 112 | { |
113 | QString response, temp, temp2, timeStamp; | 113 | QString response, temp, temp2, timeStamp; |
114 | QString md5Source; | 114 | QString md5Source; |
115 | int start, end; | 115 | int start, end; |
116 | // char *md5Digest; | 116 | // char *md5Digest; |
117 | char md5Digest[16]; | 117 | char md5Digest[16]; |
118 | // if ( !socket->canReadLine() ) | 118 | // if ( !socket->canReadLine() ) |
119 | // return; | 119 | // return; |
120 | 120 | ||
121 | response = socket->readLine(); | 121 | response = socket->readLine(); |
122 | //qDebug(response +" %d", status); | ||
123 | 122 | ||
124 | switch(status) { | 123 | switch(status) { |
125 | //logging in | 124 | //logging in |
126 | case Init: { | 125 | case Init: { |
127 | #ifdef APOP_TEST | 126 | #ifdef APOP_TEST |
128 | start = response.find('<',0); | 127 | start = response.find('<',0); |
129 | end = response.find('>', start); | 128 | end = response.find('>', start); |
130 | if( start >= 0 && end > start ) | 129 | if( start >= 0 && end > start ) |
131 | { | 130 | { |
132 | timeStamp = response.mid( start , end - start + 1); | 131 | timeStamp = response.mid( start , end - start + 1); |
133 | md5Source = timeStamp + popPassword; | 132 | md5Source = timeStamp + popPassword; |
134 | //qDebug( md5Source); | ||
135 | // for( int i = 0; i < md5Source.length(); i++) { | ||
136 | // buff[i] = (QChar)md5Source[i]; | ||
137 | // } | ||
138 | 133 | ||
139 | md5_buffer( (char const *)md5Source, md5Source.length(),&md5Digest[0]); | 134 | md5_buffer( (char const *)md5Source, md5Source.length(),&md5Digest[0]); |
140 | // md5_buffer(char const *buffer, unsigned int len, char *digest); | ||
141 | |||
142 | // MD5_Init( &ctx); | ||
143 | // MD5_Update( &ctx, buff, sizeof( buff) ); | ||
144 | // MD5_Final( md5Digest, &ctx); | ||
145 | // MD5( buff, md5Source.length(), md5Digest); | ||
146 | 135 | ||
147 | for(int j =0;j < MD5_DIGEST_LENGTH ;j++) | 136 | for(int j =0;j < MD5_DIGEST_LENGTH ;j++) |
148 | { | 137 | { |
149 | printf("%x", md5Digest[j]); | 138 | printf("%x", md5Digest[j]); |
150 | } | 139 | } |
151 | printf("\n"); | 140 | printf("\n"); |
152 | // qDebug(md5Digest); | 141 | // qDebug(md5Digest); |
153 | *stream << "APOP " << popUserName << " " << md5Digest << "\r\n"; | 142 | *stream << "APOP " << popUserName << " " << md5Digest << "\r\n"; |
154 | // qDebug("%s", stream); | 143 | // qDebug("%s", stream); |
155 | status = Stat; | 144 | status = Stat; |
156 | } | 145 | } |
157 | else | 146 | else |
158 | #endif | 147 | #endif |
159 | { | 148 | { |
160 | timeStamp = ""; | 149 | timeStamp = ""; |
161 | *stream << "USER " << popUserName << "\r\n"; | 150 | *stream << "USER " << popUserName << "\r\n"; |
162 | status = Pass; | 151 | status = Pass; |
163 | } | 152 | } |
164 | 153 | ||
165 | break; | 154 | break; |
166 | } | 155 | } |
167 | //password shhh. don't tell anyone (implement APOP...) | 156 | |
168 | case Pass: { | 157 | case Pass: { |
169 | *stream << "PASS " << popPassword << "\r\n"; | 158 | *stream << "PASS " << popPassword << "\r\n"; |
170 | status = Stat; | 159 | status = Stat; |
171 | break; | 160 | break; |
172 | } | 161 | } |
173 | //ask for number of messages | 162 | //ask for number of messages |
174 | case Stat: { | 163 | case Stat: { |
175 | if (response[0] == '+') { | 164 | if (response[0] == '+') { |
176 | *stream << "STAT" << "\r\n"; | 165 | *stream << "STAT" << "\r\n"; |
177 | status = Mcnt; | 166 | status = Mcnt; |
178 | } else errorHandling(ErrLoginFailed); | 167 | } else errorHandling(ErrLoginFailed); |
179 | break; | 168 | break; |
180 | } | 169 | } |
181 | //get count of messages, eg "+OK 4 900.." -> int 4 | 170 | //get count of messages, eg "+OK 4 900.." -> int 4 |
182 | case Mcnt: { | 171 | case Mcnt: { |
183 | if (response[0] == '+') { | 172 | if (response[0] == '+') { |
184 | temp = response.replace(0, 4, ""); | 173 | temp = response.replace(0, 4, ""); |
185 | int x = temp.find(" ", 0); | 174 | int x = temp.find(" ", 0); |
186 | temp.truncate((uint) x); | 175 | temp.truncate((uint) x); |
187 | newMessages = temp.toInt(); | 176 | newMessages = temp.toInt(); |
188 | messageCount = 1; | 177 | messageCount = 1; |
189 | status = List; | 178 | status = List; |
190 | 179 | ||
191 | if (synchronize) { | 180 | if (synchronize) { |
@@ -227,85 +216,88 @@ void PopClient::incomingData() | |||
227 | emit updateStatus(tr("No new Messages")); | 216 | emit updateStatus(tr("No new Messages")); |
228 | status = Quit; | 217 | status = Quit; |
229 | } | 218 | } |
230 | } | 219 | } |
231 | //get size of message, eg "500 characters in message.." -> int 500 | 220 | //get size of message, eg "500 characters in message.." -> int 500 |
232 | case Size: { | 221 | case Size: { |
233 | if (status != Quit) { //because of idiotic switch | 222 | if (status != Quit) { //because of idiotic switch |
234 | if (response[0] == '+') { | 223 | if (response[0] == '+') { |
235 | temp = response.replace(0, 4, ""); | 224 | temp = response.replace(0, 4, ""); |
236 | int x = temp.find(" ", 0); | 225 | int x = temp.find(" ", 0); |
237 | temp = temp.right(temp.length() - ((uint) x + 1) ); | 226 | temp = temp.right(temp.length() - ((uint) x + 1) ); |
238 | mailSize = temp.toInt(); | 227 | mailSize = temp.toInt(); |
239 | emit currentMailSize(mailSize); | 228 | emit currentMailSize(mailSize); |
240 | 229 | ||
241 | status = Retr; | 230 | status = Retr; |
242 | } else { | 231 | } else { |
243 | //qWarning(response); | 232 | //qWarning(response); |
244 | errorHandling(ErrUnknownResponse); | 233 | errorHandling(ErrUnknownResponse); |
245 | } | 234 | } |
246 | } | 235 | } |
247 | } | 236 | } |
248 | //Read message number x, count upwards to messageCount | 237 | //Read message number x, count upwards to messageCount |
249 | case Retr: { | 238 | case Retr: { |
250 | if (status != Quit) { | 239 | if (status != Quit) { |
251 | if (!preview || mailSize <= headerLimit) { | 240 | if (mailSize <= headerLimit) |
241 | { | ||
252 | *stream << "RETR " << messageCount << "\r\n"; | 242 | *stream << "RETR " << messageCount << "\r\n"; |
253 | } else { //only header | 243 | } else { //only header |
254 | *stream << "TOP " << messageCount << " 0\r\n"; | 244 | *stream << "TOP " << messageCount << " 0\r\n"; |
255 | } | 245 | } |
256 | messageCount++; | 246 | messageCount++; |
257 | status = Ignore; | 247 | status = Ignore; |
258 | break; | 248 | break; |
259 | } } | 249 | } } |
260 | case Ignore: { | 250 | case Ignore: { |
261 | if (status != Quit) { //because of idiotic switch | 251 | if (status != Quit) { //because of idiotic switch |
262 | if (response[0] == '+') { | 252 | if (response[0] == '+') { |
263 | message = ""; | 253 | message = ""; |
264 | status = Read; | 254 | status = Read; |
265 | if (!socket->canReadLine()) //sync. problems | 255 | if (!socket->canReadLine()) //sync. problems |
266 | break; | 256 | break; |
267 | response = socket->readLine(); | 257 | response = socket->readLine(); |
268 | } else errorHandling(ErrUnknownResponse); | 258 | } else errorHandling(ErrUnknownResponse); |
269 | } | 259 | } |
270 | } | 260 | } |
271 | //add all incoming lines to body. When size is reached, send | 261 | //add all incoming lines to body. When size is reached, send |
272 | //message, and go back to read new message | 262 | //message, and go back to read new message |
273 | case Read: { | 263 | case Read: { |
274 | if (status != Quit) { //because of idiotic switch | 264 | if (status != Quit) { //because of idiotic switch |
275 | message += response; | 265 | message += response; |
276 | while ( socket->canReadLine() ) { | 266 | while ( socket->canReadLine() ) { |
277 | response = socket->readLine(); | 267 | response = socket->readLine(); |
278 | message += response; | 268 | message += response; |
279 | } | 269 | } |
280 | emit downloadedSize(message.length()); | 270 | emit downloadedSize(message.length()); |
281 | int x = message.find("\r\n.\r\n",-5); | 271 | int x = message.find("\r\n.\r\n",-5); |
282 | if (x == -1) { | 272 | if (x == -1) { |
283 | break; | 273 | break; |
284 | } else { //message reach entire size | 274 | } else { //message reach entire size |
285 | //complete mail downloaded | 275 | //complete mail downloaded |
286 | if ( (!preview ) || ((preview) && (mailSize <= headerLimit)) ){ | 276 | //if ( (!preview ) || ((preview) && (mailSize <= headerLimit)) ){ |
287 | emit newMessage(message, messageCount-1, mailSize, TRUE); | 277 | if ( mailSize <= headerLimit) |
278 | { | ||
279 | emit newMessage(message, messageCount-1, mailSize, TRUE); | ||
288 | } else { //incomplete mail downloaded | 280 | } else { //incomplete mail downloaded |
289 | emit newMessage(message, messageCount-1, mailSize, FALSE); | 281 | emit newMessage(message, messageCount-1, mailSize, FALSE); |
290 | } | 282 | } |
291 | if (messageCount > newMessages) //that was the last message | 283 | if (messageCount > newMessages) //that was the last message |
292 | status = Quit; | 284 | status = Quit; |
293 | else { //ask for new message | 285 | else { //ask for new message |
294 | if (selected) { //grab next from queue | 286 | if (selected) { //grab next from queue |
295 | int *ptr = mailList->next(); | 287 | int *ptr = mailList->next(); |
296 | if (ptr != 0) { | 288 | if (ptr != 0) { |
297 | messageCount = *ptr; | 289 | messageCount = *ptr; |
298 | *stream << "LIST " << messageCount << "\r\n"; | 290 | *stream << "LIST " << messageCount << "\r\n"; |
299 | status = Size; | 291 | status = Size; |
300 | //completing a previously closed transfer | 292 | //completing a previously closed transfer |
301 | if ( (messageCount - lastSync) <= 0) { | 293 | if ( (messageCount - lastSync) <= 0) { |
302 | temp.setNum(messageCount); | 294 | temp.setNum(messageCount); |
303 | emit updateStatus(tr("Previous message ") + temp); | 295 | emit updateStatus(tr("Previous message ") + temp); |
304 | } else { | 296 | } else { |
305 | temp.setNum(messageCount - lastSync); | 297 | temp.setNum(messageCount - lastSync); |
306 | emit updateStatus(tr("Completing message ") + temp); | 298 | emit updateStatus(tr("Completing message ") + temp); |
307 | } | 299 | } |
308 | break; | 300 | break; |
309 | } else { | 301 | } else { |
310 | newMessages--; | 302 | newMessages--; |
311 | status = Quit; | 303 | status = Quit; |