PTLib
Version 2.14.3
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
xmpp.h
Go to the documentation of this file.
1
/*
2
* xmpp.h
3
*
4
* Extensible Messaging and Presence Protocol (XMPP) Core
5
*
6
* Portable Windows Library
7
*
8
* Copyright (c) 2004 Reitek S.p.A.
9
*
10
* The contents of this file are subject to the Mozilla Public License
11
* Version 1.0 (the "License"); you may not use this file except in
12
* compliance with the License. You may obtain a copy of the License at
13
* http://www.mozilla.org/MPL/
14
*
15
* Software distributed under the License is distributed on an "AS IS"
16
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
17
* the License for the specific language governing rights and limitations
18
* under the License.
19
*
20
* The Original Code is Portable Windows Library.
21
*
22
* The Initial Developer of the Original Code is Post Increment
23
*
24
* Contributor(s): ______________________________________.
25
*
26
* $Revision: 28497 $
27
* $Author: rjongbloed $
28
* $Date: 2012-10-05 22:38:38 +1000 (Fri, 05 Oct 2012) $
29
*/
30
31
#ifndef PTLIB_XMPP_H
32
#define PTLIB_XMPP_H
33
34
#ifdef P_USE_PRAGMA
35
#pragma interface
36
#endif
37
38
#include <ptlib.h>
39
40
#if P_EXPAT
41
42
#include <
ptclib/pxml.h
>
43
#include <
ptlib/notifier_ext.h
>
44
45
47
48
namespace
XMPP
49
{
52
extern
const
PCaselessString
&
LanguageTag
();
53
extern
const
PCaselessString
&
NamespaceTag
();
54
extern
const
PCaselessString
&
MessageStanzaTag
();
55
extern
const
PCaselessString
&
PresenceStanzaTag
();
56
extern
const
PCaselessString
&
IQStanzaTag
();
57
extern
const
PCaselessString
&
IQQueryTag
();
58
59
class
JID
:
public
PObject
60
{
61
PCLASSINFO(
JID
,
PObject
);
62
63
public
:
64
JID
(
const
char
* jid = 0);
65
JID
(
const
PString
& jid);
66
JID
(
const
PString
& user,
const
PString
& server,
const
PString
& resource =
PString::Empty
());
67
68
virtual
Comparison
Compare
(
69
const
PObject
& obj
70
)
const
;
71
72
JID
&
operator=
(
73
const
PString
& jid
74
);
75
76
operator
const
PString
&()
const
;
77
78
virtual
PObject
*
Clone
()
const
{
return
new
JID
(
m_JID
); }
79
80
PString
GetUser
()
const
{
return
m_User
; }
81
PString
GetServer
()
const
{
return
m_Server
; }
82
83
virtual
PString
GetResource
()
const
{
return
m_Resource
; }
84
85
virtual
void
SetUser
(
const
PString
& user);
86
virtual
void
SetServer
(
const
PString
& server);
87
virtual
void
SetResource
(
const
PString
& resource);
88
89
virtual
PBoolean
IsBare
()
const
{
return
m_Resource
.
IsEmpty
(); }
90
virtual
void
PrintOn
(ostream & strm)
const
;
91
92
protected
:
93
virtual
void
ParseJID
(
const
PString
& jid);
94
virtual
void
BuildJID
()
const
;
95
96
PString
m_User
;
97
PString
m_Server
;
98
PString
m_Resource
;
99
100
mutable
PString
m_JID
;
101
mutable
PBoolean
m_IsDirty
;
102
};
103
104
// A bare jid is a jid with no resource
105
class
BareJID
:
public
JID
106
{
107
PCLASSINFO(
BareJID
,
JID
);
108
109
public
:
110
BareJID
(
const
char
* jid = 0) :
JID
(jid) { }
111
BareJID
(
const
PString
& jid) :
JID
(jid) { }
112
BareJID
(
const
PString
& user,
const
PString
& server,
const
PString
& resource =
PString::Empty
())
113
:
JID
(user, server, resource) { }
114
115
virtual
Comparison
Compare
(
116
const
PObject
& obj
117
)
const
;
118
119
BareJID
&
operator=
(
120
const
PString
& jid
121
);
122
123
virtual
PObject
*
Clone
()
const
{
return
new
BareJID
(
m_JID
); }
124
virtual
PString
GetResource
()
const
{
return
PString::Empty
(); }
125
virtual
void
SetResource
(
const
PString
&) { }
126
virtual
PBoolean
IsBare
()
const
{
return
true
; }
127
};
128
134
class
Transport
:
public
PIndirectChannel
135
{
136
PCLASSINFO(
Transport
,
PIndirectChannel
);
137
138
public
:
139
virtual
PBoolean
Open
() = 0;
140
virtual
PBoolean
Close
() = 0;
141
};
142
143
147
class
Stream
:
public
PIndirectChannel
148
{
149
PCLASSINFO(
Stream
,
PIndirectChannel
);
150
151
public
:
152
Stream
(
Transport
* transport = 0);
153
~Stream
();
154
155
virtual
bool
OnOpen
() {
m_OpenHandlers
(*
this
, 0);
return
true
; }
156
PNotifierList
&
OpenHandlers
() {
return
m_OpenHandlers
; }
157
158
virtual
PBoolean
Close
();
159
virtual
void
OnClose
() {
m_CloseHandlers
(*
this
, 0); }
160
PNotifierList
&
CloseHandlers
() {
return
m_CloseHandlers
; }
161
162
virtual
PBoolean
Write
(
const
void
* buf, PINDEX len);
163
virtual
PBoolean
Write
(
const
PString
& data);
164
// virtual PBoolean Write(const PXMLElement & pdu);
165
virtual
PBoolean
Write
(
const
PXML
& pdu);
166
169
virtual
PXMLElement
*
Read
();
170
174
virtual
void
Reset
();
175
PXMLStreamParser
*
GetParser
() {
return
m_Parser
; }
176
177
protected
:
178
PXML
m_Document
;
179
PXMLStreamParser
*
m_Parser
;
180
PNotifierList
m_OpenHandlers
;
181
PNotifierList
m_CloseHandlers
;
182
};
183
184
185
class
BaseStreamHandler
:
public
PThread
186
{
187
PCLASSINFO(
BaseStreamHandler
,
PThread
);
188
189
public
:
190
BaseStreamHandler
();
191
~BaseStreamHandler
();
192
193
virtual
PBoolean
Start
(
Transport
* transport = 0);
194
virtual
PBoolean
Stop
(
const
PString
& error =
PString::Empty
());
195
196
void
SetAutoReconnect
(
PBoolean
b =
true
,
long
timeout = 1000);
197
198
void
AddNotifier
(
const
PNotifierTemplate<PXMLElement&>
& notifier) {
m_ElementHandlers
.
Add
(notifier); }
199
200
Stream
*
GetStream
()
const
{
return
m_Stream
; }
201
202
virtual
PBoolean
Write
(
const
void
* buf, PINDEX len);
203
virtual
PBoolean
Write
(
const
PString
& data);
204
virtual
PBoolean
Write
(
const
PXML
& pdu);
205
virtual
void
OnElement
(
PXMLElement
& pdu);
206
207
virtual
void
Main
();
208
209
protected
:
210
PDECLARE_NOTIFIER
(
Stream
,
BaseStreamHandler
, OnOpen);
211
PDECLARE_NOTIFIER
(
Stream
,
BaseStreamHandler
, OnClose);
212
213
Stream
*
m_Stream
;
214
bool
m_AutoReconnect
;
215
PTimeInterval
m_ReconnectTimeout
;
216
217
PNotifierListTemplate<PXMLElement&>
m_ElementHandlers
;
218
};
219
220
225
class
Stanza
:
public
PXML
226
{
227
PCLASSINFO
(
Stanza
,
PXML
)
228
229
public
:
232
static
const
PCaselessString
&
IDTag
();
233
static
const
PCaselessString
&
FromTag
();
234
static
const
PCaselessString
&
ToTag
();
235
236
virtual
PBoolean
IsValid
()
const
= 0;
237
238
virtual
PString
GetID
()
const
;
239
virtual
PString
GetFrom
()
const
;
240
virtual
PString
GetTo
()
const
;
241
242
virtual
void
SetID
(
const
PString
&
id
);
243
virtual
void
SetFrom
(
const
PString
& from);
244
virtual
void
SetTo
(
const
PString
& to);
245
246
virtual
PXMLElement
*
GetElement
(
const
PString
& name, PINDEX i = 0);
247
248
static
PString
GenerateID
();
249
};
250
251
PLIST
(StanzaList,
Stanza
);
252
253
254
class
Message
:
public
Stanza
255
{
256
PCLASSINFO
(
Message
,
Stanza
)
257
258
public
:
259
enum
MessageType
{
260
Normal
,
261
Chat
,
262
Error
,
263
GroupChat
,
264
HeadLine
,
265
Unknown
= 999
266
};
267
270
static
const
PCaselessString
&
TypeTag
();
271
static
const
PCaselessString
&
SubjectTag
();
272
static
const
PCaselessString
&
BodyTag
();
273
static
const
PCaselessString
&
ThreadTag
();
274
277
Message
();
278
283
Message
(
PXMLElement
& pdu);
284
285
virtual
PBoolean
IsValid
()
const
;
286
287
virtual
MessageType
GetType
(
PString
* typeName = 0)
const
;
288
virtual
PString
GetLanguage
()
const
;
289
294
virtual
PString
GetSubject
(
const
PString
& lang =
PString::Empty
());
295
virtual
PString
GetBody
(
const
PString
& lang =
PString::Empty
());
296
virtual
PString
GetThread
();
297
298
virtual
PXMLElement
*
GetSubjectElement
(
const
PString
& lang =
PString::Empty
());
299
virtual
PXMLElement
*
GetBodyElement
(
const
PString
& lang =
PString::Empty
());
300
301
virtual
void
SetType
(
MessageType
type);
302
virtual
void
SetType
(
const
PString
& type);
// custom, possibly non standard, type
303
virtual
void
SetLanguage
(
const
PString
& lang);
304
305
virtual
void
SetSubject
(
const
PString
& subj,
const
PString
& lang =
PString::Empty
());
306
virtual
void
SetBody
(
const
PString
& body,
const
PString
& lang =
PString::Empty
());
307
virtual
void
SetThread
(
const
PString
& thrd);
308
};
309
310
311
class
Presence
:
public
Stanza
312
{
313
PCLASSINFO
(
Presence
,
Stanza
)
314
315
public
:
316
enum
PresenceType
{
317
Available
,
318
Unavailable
,
319
Subscribe
,
320
Subscribed
,
321
Unsubscribe
,
322
Unsubscribed
,
323
Probe
,
324
Error
,
325
Unknown
= 999
326
};
327
328
enum
ShowType
{
329
Online
,
330
Away
,
331
Chat
,
332
DND
,
333
XA
,
334
Other
= 999
335
};
336
339
static
const
PCaselessString
&
TypeTag
();
340
static
const
PCaselessString
&
ShowTag
();
341
static
const
PCaselessString
&
StatusTag
();
342
static
const
PCaselessString
&
PriorityTag
();
343
346
Presence
();
347
352
Presence
(
PXMLElement
& pdu);
353
354
virtual
PBoolean
IsValid
()
const
;
355
356
virtual
PresenceType
GetType
(
PString
* typeName = 0)
const
;
357
virtual
ShowType
GetShow
(
PString
* showName = 0)
const
;
358
virtual
BYTE
GetPriority
()
const
;
359
364
virtual
PString
GetStatus
(
const
PString
& lang =
PString::Empty
());
365
virtual
PXMLElement
*
GetStatusElement
(
const
PString
& lang =
PString::Empty
());
366
367
virtual
void
SetType
(
PresenceType
type);
368
virtual
void
SetType
(
const
PString
& type);
// custom, possibly non standard, type
369
virtual
void
SetShow
(
ShowType
show);
370
virtual
void
SetShow
(
const
PString
& show);
// custom, possibly non standard, type
371
virtual
void
SetPriority
(BYTE priority);
372
373
virtual
void
SetStatus
(
const
PString
& status,
const
PString
& lang =
PString::Empty
());
374
};
375
376
377
class
IQ
:
public
Stanza
378
{
379
PCLASSINFO
(
IQ
,
Stanza
)
380
381
public
:
382
enum
IQType
{
383
Get
,
384
Set
,
385
Result
,
386
Error
,
387
Unknown
= 999
388
};
389
392
static
const
PCaselessString
&
TypeTag
();
393
394
IQ
(
IQType
type);
395
IQ
(
PXMLElement
& pdu);
396
~IQ
();
397
398
virtual
PBoolean
IsValid
()
const
;
399
405
void
SetProcessed
() {
m_Processed
=
true
; }
406
PBoolean
HasBeenProcessed
()
const
{
return
m_Processed
; }
407
408
virtual
IQType
GetType
(
PString
* typeName = 0)
const
;
409
virtual
PXMLElement
*
GetBody
();
410
411
virtual
void
SetType
(
IQType
type);
412
virtual
void
SetType
(
const
PString
& type);
// custom, possibly non standard, type
413
virtual
void
SetBody
(
PXMLElement
* body);
414
415
// If the this message is response, returns a pointer to the
416
// original set/get message
417
virtual
IQ
*
GetOriginalMessage
()
const
{
return
m_OriginalIQ
; }
418
virtual
void
SetOriginalMessage
(
IQ
* iq);
419
423
virtual
IQ
*
BuildResult
()
const
;
424
427
virtual
IQ
*
BuildError
(
const
PString
& type,
const
PString
& code)
const
;
428
429
virtual
PNotifierList
GetResponseHandlers
() {
return
m_ResponseHandlers
; }
430
431
protected
:
432
bool
m_Processed
;
433
IQ
*
m_OriginalIQ
;
434
PNotifierList
m_ResponseHandlers
;
435
};
438
namespace
Disco
439
{
440
class
Item
:
public
PObject
441
{
442
PCLASSINFO(
Item
,
PObject
);
443
public
:
444
Item
(
PXMLElement
* item);
445
Item
(
const
PString
& jid,
const
PString
& node =
PString::Empty
());
446
447
const
JID
&
GetJID
()
const
{
return
m_JID
; }
448
const
PString
&
GetNode
()
const
{
return
m_Node
; }
449
450
PXMLElement
*
AsXML
(
PXMLElement
* parent)
const
;
451
452
protected
:
453
const
JID
m_JID
;
454
const
PString
m_Node
;
455
};
456
457
PDECLARE_LIST
(
ItemList
,
Item
)
458
public:
459
ItemList
(
PXMLElement
* list);
460
PXMLElement
*
AsXML
(
PXMLElement
* parent) const;
461
};
462
463
class
Identity
: public
PObject
464
{
465
PCLASSINFO
(
Identity
, PObject);
466
public
:
467
Identity
(
PXMLElement
* identity);
468
Identity
(
const
PString
& category,
const
PString
& type,
const
PString
& name);
469
470
const
PString
&
GetCategory
()
const
{
return
m_Category; }
471
const
PString
&
GetType
()
const
{
return
m_Type; }
472
const
PString
&
GetName
()
const
{
return
m_Name; }
473
474
PXMLElement
*
AsXML
(
PXMLElement
* parent)
const
;
475
476
protected
:
477
const
PString
m_Category
;
478
const
PString
m_Type
;
479
const
PString
m_Name
;
480
};
481
482
PDECLARE_LIST
(
IdentityList
,
Identity
)
483
public:
484
IdentityList
(
PXMLElement
* list);
485
PXMLElement
*
AsXML
(
PXMLElement
* parent) const;
486
};
487
488
class
Info
: public
PObject
489
{
490
PCLASSINFO
(
Info
, PObject);
491
public
:
492
Info
(
PXMLElement
* info);
493
494
IdentityList
&
GetIdentities
() {
return
m_Identities; }
495
PStringSet
&
GetFeatures
() {
return
m_Features; }
496
497
PXMLElement
*
AsXML
(
PXMLElement
* parent)
const
;
498
499
protected
:
500
IdentityList
m_Identities
;
501
PStringSet
m_Features
;
502
};
503
}
// namespace Disco
504
505
};
// class XMPP
506
507
508
#endif // P_EXPAT
509
510
#endif // PTLIB_XMPP_H
511
512
// End of File ///////////////////////////////////////////////////////////////
include
ptclib
xmpp.h
Generated on Fri Oct 10 2014 21:15:13 for PTLib by
1.8.3.1