• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdepimlibs-4.14.10 API Reference
  • KDE Home
  • Contact Us
 

kioslave/imap4

  • kioslave
  • imap4
imapparser.h
1#ifndef _IMAPPARSER_H
2#define _IMAPPARSER_H
3/**********************************************************************
4 *
5 * imapparser.h - IMAP4rev1 Parser
6 * Copyright (C) 2001-2002 Michael Haeckel <haeckel@kde.org>
7 * Copyright (C) 2000 Sven Carstens <s.carstens@gmx.de>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22 *
23 * Send comments and bug fixes to s.carstens@gmx.de
24 *
25 *********************************************************************/
26
27#include "imap4-config.h"
28#include "imaplist.h"
29#include "imapcommand.h"
30#include "imapinfo.h"
31#include "mailheader.h"
32
33#include <kio/authinfo.h>
34#include <kio/slavebase.h>
35
36#include <QHash>
37#include <QList>
38#include <QStringList>
39#include <QByteArray>
40
41class KUrl;
42class QString;
43class mailAddress;
44class mimeHeader;
45
51class parseString
52{
53public:
54 parseString() : pos(0) {}
55 char operator[](int i) const { return data.length() > (i + pos) ? data[i + pos] : '\0'; }
56 bool isEmpty() const { return pos >= data.size(); }
57 QByteArray cstr() const
58 {
59 if ( pos >= data.size() ) {
60 return QByteArray();
61 }
62 return QByteArray( data.data() + pos, data.size() - pos );
63 }
64 int find(char c, int index = 0) const
65 {
66 int res = data.indexOf( c, index + pos );
67 return ( res == -1 ) ? res : ( res - pos );
68 }
69 // Warning: does not check for going past end of "data"
70 void takeLeftNoResize(QByteArray& dest, uint len) const
71 {
72 memmove( dest.data(), data.data() + pos, len );
73 }
74 // Warning: does not check for going past end of "data"
75 void takeMidNoResize(QByteArray& dest, uint start, uint len) const
76 {
77 memmove( dest.data(), data.data() + pos + start, len );
78 }
79 void clear()
80 {
81 data.resize( 0 );
82 pos = 0;
83 }
84 uint length()
85 {
86 return data.size() - pos;
87 }
88 void fromString(const QString &s)
89 {
90 clear();
91 data = s.toLatin1();
92 }
93 QByteArray data;
94 int pos;
95};
96
97class imapCache
98{
99public:
100 imapCache ()
101 {
102 myHeader = NULL;
103 mySize = 0;
104 myFlags = 0;
105 myUid = 0;
106 }
107
108 ~imapCache ()
109 {
110 delete myHeader;
111 }
112
113 mailHeader *getHeader ()
114 {
115 return myHeader;
116 }
117 void setHeader (mailHeader * inHeader)
118 {
119 myHeader = inHeader;
120 }
121
122 ulong getSize ()
123 {
124 return mySize;
125 }
126 void setSize (ulong inSize)
127 {
128 mySize = inSize;
129 }
130
131 ulong getUid ()
132 {
133 return myUid;
134 }
135 void setUid (ulong inUid)
136 {
137 myUid = inUid;
138 }
139
140 ulong getFlags ()
141 {
142 return myFlags;
143 }
144 void setFlags (ulong inFlags)
145 {
146 myFlags = inFlags;
147 }
148
149 QByteArray getDate ()
150 {
151 return myDate;
152 }
153 void setDate (const QByteArray & _str)
154 {
155 myDate = _str;
156 }
157 void clear()
158 {
159 delete myHeader;
160 myHeader = NULL;
161 mySize = 0;
162 myFlags = 0;
163 myDate = QByteArray();
164 myUid = 0;
165 }
166
167protected:
168 mailHeader * myHeader;
169 ulong mySize;
170 ulong myFlags;
171 ulong myUid;
172 QByteArray myDate;
173};
174
175
176class imapParser
177{
178
179public:
180
182 enum IMAP_STATE {
183 ISTATE_NO,
184 ISTATE_CONNECT,
185 ISTATE_LOGIN,
186 ISTATE_SELECT
187 };
188
189public:
190 imapParser ();
191 virtual ~ imapParser ();
192
194 enum IMAP_STATE getState () { return currentState; }
196 void setState(enum IMAP_STATE state) { currentState = state; }
197
198 /* @brief return the currently selected mailbox */
199 const QString getCurrentBox ()
200 {
201 return KIMAP::decodeImapFolderName( currentBox );
202 }
203
209 CommandPtr sendCommand (CommandPtr aCmd);
215 CommandPtr doCommand (CommandPtr aCmd);
216
217
225 bool clientLogin (const QString & aUser, const QString & aPass, QString & resultInfo);
235 bool clientAuthenticate (KIO::SlaveBase *slave, KIO::AuthInfo &ai, const QString & aFQDN,
236 const QString & aAuth, bool isSSL, QString & resultInfo);
237
242 int parseLoop ();
243
248 void parseUntagged (parseString & result);
249
251 void parseRecent (ulong value, parseString & result);
253 void parseResult (QByteArray & result, parseString & rest,
254 const QString & command = QString());
256 void parseCapability (parseString & result);
258 void parseFlags (parseString & result);
260 void parseList (parseString & result);
262 void parseLsub (parseString & result);
264 void parseListRights (parseString & result);
266 void parseMyRights (parseString & result);
268 void parseSearch (parseString & result);
270 void parseStatus (parseString & result);
272 void parseExists (ulong value, parseString & result);
274 void parseExpunge (ulong value, parseString & result);
276 void parseAcl (parseString & result);
278 void parseAnnotation (parseString & result);
280 void parseNamespace (parseString & result);
282 void parseQuotaRoot (parseString & result);
284 void parseQuota (parseString & result);
286 void parseCustom (parseString & result);
288 void parseOtherUser (parseString & result);
290 void parseDelegate (parseString & result);
292 void parseOutOfOffice (parseString & result);
293
298 void parseFetch (ulong value, parseString & inWords);
299
301 mailHeader *parseEnvelope (parseString & inWords);
303 void parseAddressList (parseString & inWords, QList<mailAddress *>& list);
305 const mailAddress& parseAddress (parseString & inWords, mailAddress& buffer);
306
308 void parseBody (parseString & inWords);
309
311 mimeHeader *parseBodyStructure (parseString & inWords,
312 QString & section, mimeHeader * inHeader = 0);
313
315 mimeHeader *parseSimplePart (parseString & inWords, QString & section,
316 mimeHeader * localPart = 0);
317
319 QHash< QByteArray, QString > parseParameters (parseString & inWords);
320
325 QHash< QByteArray, QString > parseDisposition (parseString & inWords);
326
327 // reimplement these
328
330 virtual void parseRelay (const QByteArray & buffer);
331
334 virtual void parseRelay (ulong);
335
337 virtual bool parseRead (QByteArray & buffer, long len, long relay = 0);
338
340 virtual bool parseReadLine (QByteArray & buffer, long relay = 0);
341
343 virtual void parseWriteLine (const QString &);
344
345 // generic parser routines
346
348 void parseSentence (parseString & inWords);
349
351 QByteArray parseLiteral(parseString & inWords, bool relay = false,
352 bool stopAtBracket = false);
353
354 // static parser routines, can be used elsewhere
355
357 static QByteArray parseOneWord (parseString & inWords,
358 bool stopAtBracket = false);
359
361 static bool parseOneNumber (parseString & inWords, ulong & num);
362
364 static void parseURL (const KUrl & _url, QString & _box, QString & _section,
365 QString & _type, QString & _uid, QString & _validity,
366 QString & _info);
367
368
372 imapCache *getLastHandled ()
373 {
374 return lastHandled;
375 }
376
378 const QStringList & getResults ()
379 {
380 return lastResults;
381 }
382
384 const imapInfo & getStatus ()
385 {
386 return lastStatus;
387 }
389 const imapInfo & getSelected ()
390 {
391 return selectInfo;
392 }
393
394 const QByteArray & getContinuation ()
395 {
396 return continuation;
397 }
398
400 bool hasCapability (const QString &);
401
402 void removeCapability (const QString & cap);
403
404 static inline void skipWS (parseString & inWords)
405 {
406 char c;
407 while ( !inWords.isEmpty() &&
408 ( ( c = inWords[0] ) == ' ' || c == '\t' || c == '\r' || c == '\n' ) ) {
409 inWords.pos++;
410 }
411 }
412
414 QString namespaceForBox( const QString & box );
415
416
417protected:
418
420 enum IMAP_STATE currentState;
421
423 QString currentBox;
424
426 imapInfo selectInfo;
427
429 imapInfo lastStatus;
430
432 QStringList imapCapabilities;
433
435 QList < imapList > listResponses;
436
438 QList <CommandPtr> sentQueue;
439 QList <CommandPtr> completeQueue;
440
444 QStringList unhandled;
445
447 QByteArray continuation;
448
450 QString seenUid;
451 imapCache *lastHandled;
452
453 ulong commandCounter;
454
456 QStringList lastResults;
457
462 QMap<QString, QString> namespaceToDelimiter;
463
468 QStringList imapNamespaces;
469
470private:
471
473 imapParser & operator = (const imapParser &); // hide the copy ctor
474
475};
476#endif
mailHeader
Definition mailheader.h:34
mimeHeader
Definition mimeheader.h:36
parseString
a string used during parsing the string allows you to move the effective start of the string using st...
Definition imapparser.h:52
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Wed Jan 24 2024 00:00:00 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kioslave/imap4

Skip menu "kioslave/imap4"
  • Main Page
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • Related Pages

kdepimlibs-4.14.10 API Reference

Skip menu "kdepimlibs-4.14.10 API Reference"
  • akonadi
  •   contact
  •   kmime
  •   socialutils
  • kabc
  • kalarmcal
  • kblog
  • kcal
  • kcalcore
  • kcalutils
  • kholidays
  • kimap
  • kioslave
  •   imap4
  •   mbox
  •   nntp
  • kldap
  • kmbox
  • kmime
  • kontactinterface
  • kpimidentities
  • kpimtextedit
  • kpimutils
  • kresources
  • ktnef
  • kxmlrpcclient
  • mailtransport
  • microblog
  • qgpgme
  • syndication
  •   atom
  •   rdf
  •   rss2
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal