2
* im.h - XMPP "IM" library API
3
* Copyright (C) 2003 Justin Karneges
5
* This library is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU Lesser General Public
7
* License as published by the Free Software Foundation; either
8
* version 2.1 of the License, or (at your option) any later version.
10
* This library is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
* Lesser General Public License for more details.
15
* You should have received a copy of the GNU Lesser General Public
16
* License along with this library; if not, write to the Free Software
17
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
32
Url(const QString &url="", const QString &desc="");
34
Url & operator=(const Url &);
40
void setUrl(const QString &);
41
void setDesc(const QString &);
48
typedef QValueList<Url> UrlList;
49
typedef QMap<QString, QString> StringMap;
53
Message(const Jid &to="");
54
Message(const Message &from);
55
Message & operator=(const Message &from);
63
QString subject(const QString &lang="") const;
64
QString body(const QString &lang="") const;
65
QString thread() const;
66
Stanza::Error error() const;
68
void setTo(const Jid &j);
69
void setFrom(const Jid &j);
70
void setId(const QString &s);
71
void setType(const QString &s);
72
void setLang(const QString &s);
73
void setSubject(const QString &s, const QString &lang="");
74
void setBody(const QString &s, const QString &lang="");
75
void setThread(const QString &s);
76
void setError(const Stanza::Error &err);
79
QDateTime timeStamp() const;
80
void setTimeStamp(const QDateTime &ts);
83
UrlList urlList() const;
84
void urlAdd(const Url &u);
86
void setUrlList(const UrlList &list);
89
QString xencrypted() const;
90
void setXEncrypted(const QString &s);
92
// Obsolete invitation
93
QString invite() const;
94
void setInvite(const QString &s);
96
// for compatibility. delete me later
98
void setSpooled(bool);
99
bool wasEncrypted() const;
100
void setWasEncrypted(bool);
102
Stanza toStanza(Stream *stream) const;
103
bool fromStanza(const Stanza &s, int tzoffset);
113
enum SubType { None, To, From, Both, Remove };
115
Subscription(SubType type=None);
119
QString toString() const;
120
bool fromString(const QString &);
129
Status(const QString &show="", const QString &status="", int priority=0, bool available=true);
132
int priority() const;
133
const QString & show() const;
134
const QString & status() const;
135
QDateTime timeStamp() const;
136
const QString & keyID() const;
137
bool isAvailable() const;
139
bool isInvisible() const;
140
bool hasError() const;
141
int errorCode() const;
142
const QString & errorString() const;
144
const QString & xsigned() const;
145
const QString & songTitle() const;
147
void setPriority(int);
148
void setShow(const QString &);
149
void setStatus(const QString &);
150
void setTimeStamp(const QDateTime &);
151
void setKeyID(const QString &);
152
void setIsAvailable(bool);
153
void setIsInvisible(bool);
154
void setError(int, const QString &);
156
void setXSigned(const QString &);
157
void setSongTitle(const QString &);
161
QString v_show, v_status, v_key;
162
QDateTime v_timeStamp;
167
// gabber song extension
180
Resource(const QString &name="", const Status &s=Status());
183
const QString & name() const;
184
int priority() const;
185
const Status & status() const;
187
void setName(const QString &);
188
void setStatus(const Status &);
194
class ResourcePrivate *d;
197
class ResourceList : public QValueList<Resource>
203
ResourceList::Iterator find(const QString &);
204
ResourceList::Iterator priority();
206
ResourceList::ConstIterator find(const QString &) const;
207
ResourceList::ConstIterator priority() const;
210
class ResourceListPrivate *d;
216
RosterItem(const Jid &jid="");
217
virtual ~RosterItem();
219
const Jid & jid() const;
220
const QString & name() const;
221
const QStringList & groups() const;
222
const Subscription & subscription() const;
223
const QString & ask() const;
225
bool inGroup(const QString &) const;
227
virtual void setJid(const Jid &);
228
void setName(const QString &);
229
void setGroups(const QStringList &);
230
void setSubscription(const Subscription &);
231
void setAsk(const QString &);
232
void setIsPush(bool);
233
bool addGroup(const QString &);
234
bool removeGroup(const QString &);
236
QDomElement toXml(QDomDocument *) const;
237
bool fromXml(const QDomElement &);
242
QStringList v_groups;
243
Subscription v_subscription;
247
class RosterItemPrivate *d;
250
class Roster : public QValueList<RosterItem>
256
Roster::Iterator find(const Jid &);
257
Roster::ConstIterator find(const Jid &) const;
260
class RosterPrivate *d;
267
Features(const QStringList &);
268
Features(const QString &);
271
QStringList list() const; // actual featurelist
272
void setList(const QStringList &);
275
bool canRegister() const;
276
bool canSearch() const;
277
bool canGroupchat() const;
278
bool canDisco() const;
279
bool isGateway() const;
280
bool haveVCard() const;
292
// private Psi actions
297
bool test(const QStringList &) const;
299
QString name() const;
300
static QString name(long id);
301
static QString name(const QString &feature);
304
static long id(const QString &feature);
305
static QString feature(long id);
317
const Jid & jid() const { return v_jid; }
318
const QString & name() const { return v_name; }
319
const QString & category() const { return v_category; }
320
const QString & type() const { return v_type; }
321
const Features & features() const { return v_features; }
323
void setJid(const Jid &j) { v_jid = j; }
324
void setName(const QString &n) { v_name = n; }
325
void setCategory(const QString &c) { v_category = c; }
326
void setType(const QString &t) { v_type = t; }
327
void setFeatures(const Features &f) { v_features = f; }
331
QString v_name, v_category, v_type;
335
typedef QValueList<AgentItem> AgentList;
343
const Jid &jid() const;
344
const QString &node() const;
345
const QString &name() const;
347
void setJid(const Jid &);
348
void setName(const QString &);
349
void setNode(const QString &);
357
Action action() const;
358
void setAction(Action);
360
const Features &features() const;
361
void setFeatures(const Features &);
370
typedef QValueList<Identity> Identities;
372
const Identities &identities() const;
373
void setIdentities(const Identities &);
375
// some useful helper functions
376
static Action string2action(QString s);
377
static QString action2string(Action a);
379
DiscoItem & operator= (const DiscoItem &);
380
DiscoItem(const DiscoItem &);
382
operator AgentItem() const { return toAgentItem(); }
383
AgentItem toAgentItem() const;
384
void fromAgentItem(const AgentItem &);
391
typedef QValueList<DiscoItem> DiscoList;
396
enum { username, nick, password, name, first, last, email, address, city, state, zip, phone, url, date, misc };
397
FormField(const QString &type="", const QString &value="");
401
QString fieldName() const;
402
QString realName() const;
403
bool isSecret() const;
404
const QString & value() const;
406
bool setType(const QString &);
407
void setValue(const QString &);
410
int tagNameToType(const QString &) const;
411
QString typeToTagName(int) const;
420
class Form : public QValueList<FormField>
423
Form(const Jid &j="");
427
QString instructions() const;
429
void setJid(const Jid &);
430
void setInstructions(const QString &);
431
void setKey(const QString &);
435
QString v_instructions, v_key;
444
SearchResult(const Jid &jid="");
447
const Jid & jid() const;
448
const QString & nick() const;
449
const QString & first() const;
450
const QString & last() const;
451
const QString & email() const;
453
void setJid(const Jid &);
454
void setNick(const QString &);
455
void setFirst(const QString &);
456
void setLast(const QString &);
457
void setEmail(const QString &);
461
QString v_nick, v_first, v_last, v_email;
465
class LiveRosterItem;
469
class JidLinkManager;
470
class FileTransferManager;
472
class Task : public QObject
478
Task(Client *, bool isRoot);
481
Task *parent() const;
482
Client *client() const;
483
QDomDocument *doc() const;
486
bool success() const;
487
int statusCode() const;
488
const QString & statusString() const;
490
void go(bool autoDelete=false);
491
virtual bool take(const QDomElement &);
499
virtual void onDisconnect();
500
void send(const QDomElement &);
501
void setSuccess(int code=0, const QString &str="");
502
void setError(const QDomElement &);
503
void setError(int code=0, const QString &str="");
504
void debug(const char *, ...);
505
void debug(const QString &);
506
bool iqVerify(const QDomElement &x, const Jid &to, const QString &id, const QString &xmlns="");
509
void clientDisconnected();
519
class Client : public QObject
524
Client(QObject *parent=0);
527
bool isActive() const;
528
void connectToServer(ClientStream *s, const Jid &j, bool auth=true);
529
void start(const QString &host, const QString &user, const QString &pass, const QString &resource);
530
void close(bool fast=false);
533
const LiveRoster & roster() const;
534
const ResourceList & resourceList() const;
536
void send(const QDomElement &);
537
void send(const QString &);
539
QString host() const;
540
QString user() const;
541
QString pass() const;
542
QString resource() const;
545
void rosterRequest();
546
void sendMessage(const Message &);
547
void sendSubscription(const Jid &, const QString &);
548
void setPresence(const Status &);
550
void debug(const QString &);
551
QString genUniqueId();
553
QDomDocument *doc() const;
555
QString OSName() const;
556
QString timeZone() const;
557
int timeZoneOffset() const;
558
QString clientName() const;
559
QString clientVersion() const;
561
void setOSName(const QString &);
562
void setTimeZone(const QString &, int);
563
void setClientName(const QString &);
564
void setClientVersion(const QString &);
566
S5BManager *s5bManager() const;
567
IBBManager *ibbManager() const;
568
JidLinkManager *jidLinkManager() const;
570
void setFileTransferEnabled(bool b);
571
FileTransferManager *fileTransferManager() const;
573
bool groupChatJoin(const QString &host, const QString &room, const QString &nick);
574
void groupChatSetStatus(const QString &host, const QString &room, const Status &);
575
void groupChatChangeNick(const QString &host, const QString &room, const QString &nick, const Status &);
576
void groupChatLeave(const QString &host, const QString &room);
581
//void authFinished(bool, int, const QString &);
582
void rosterRequestFinished(bool, int, const QString &);
583
void rosterItemAdded(const RosterItem &);
584
void rosterItemUpdated(const RosterItem &);
585
void rosterItemRemoved(const RosterItem &);
586
void resourceAvailable(const Jid &, const Resource &);
587
void resourceUnavailable(const Jid &, const Resource &);
588
void presenceError(const Jid &, int, const QString &);
589
void subscription(const Jid &, const QString &);
590
void messageReceived(const Message &);
591
void debugText(const QString &);
592
void xmlIncoming(const QString &);
593
void xmlOutgoing(const QString &);
594
void groupChatJoined(const Jid &);
595
void groupChatLeft(const Jid &);
596
void groupChatPresence(const Jid &, const Status &);
597
void groupChatError(const Jid &, int, const QString &);
599
void incomingJidLink();
602
//void streamConnected();
603
//void streamHandshaken();
604
//void streamError(const StreamError &);
605
//void streamSSLCertificateReady(const QSSLCert &);
606
//void streamCloseFinished();
607
void streamError(int);
608
void streamReadyRead();
609
void streamIncomingXml(const QString &);
610
void streamOutgoingXml(const QString &);
612
void slotRosterRequestFinished();
615
void ppSubscription(const Jid &, const QString &);
616
void ppPresence(const Jid &, const Status &);
617
void pmMessage(const Message &);
618
void prRoster(const Roster &);
620
void s5b_incomingReady();
621
void ibb_incomingReady();
627
void distribute(const QDomElement &);
628
void importRoster(const Roster &);
629
void importRosterItem(const RosterItem &);
630
void updateSelfPresence(const Jid &, const Status &);
631
void updatePresence(LiveRosterItem *, const Jid &, const Status &);
637
class LiveRosterItem : public RosterItem
640
LiveRosterItem(const Jid &j="");
641
LiveRosterItem(const RosterItem &);
644
void setRosterItem(const RosterItem &);
646
ResourceList & resourceList();
647
ResourceList::Iterator priority();
649
const ResourceList & resourceList() const;
650
ResourceList::ConstIterator priority() const;
652
bool isAvailable() const;
653
const Status & lastUnavailableStatus() const;
654
bool flagForDelete() const;
656
void setLastUnavailableStatus(const Status &);
657
void setFlagForDelete(bool);
660
ResourceList v_resourceList;
661
Status v_lastUnavailableStatus;
662
bool v_flagForDelete;
664
class LiveRosterItemPrivate;
665
LiveRosterItemPrivate *d;
668
class LiveRoster : public QValueList<LiveRosterItem>
674
void flagAllForDelete();
675
LiveRoster::Iterator find(const Jid &, bool compareRes=true);
676
LiveRoster::ConstIterator find(const Jid &, bool compareRes=true) const;
679
class LiveRosterPrivate;
680
LiveRosterPrivate *d;