summaryrefslogtreecommitdiff
path: root/noncore/unsupported/mailit/popclient.cpp
Unidiff
Diffstat (limited to 'noncore/unsupported/mailit/popclient.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/unsupported/mailit/popclient.cpp24
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)
98void PopClient::connectionEstablished() 98void PopClient::connectionEstablished()
99{ 99{
100 emit updateStatus(tr("Connection established")); 100 emit updateStatus(tr("Connection established"));
101} 101}
102 102
103void PopClient::errorHandling(int status) 103void 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
111void PopClient::incomingData() 111void 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;