Pyrogenesis  trunk
glooxwrapper.h
Go to the documentation of this file.
1 /* Copyright (C) 2014 Wildfire Games.
2  * This file is part of 0 A.D.
3  *
4  * 0 A.D. is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * 0 A.D. is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #ifndef INCLUDED_GLOOXWRAPPER_H
19 #define INCLUDED_GLOOXWRAPPER_H
20 
21 /*
22 
23 The gloox API uses various STL types (std::string, std::list, etc), and
24 it has functions that acquire/release ownership of objects and expect the
25 library's user's 'new'/'delete' functions to be compatible with the library's.
26 
27 These assumptions are invalid when the game and library are built with
28 different compiler versions (or the same version with different build flags):
29 the STL types have different layouts, and new/delete can use different heaps.
30 
31 We want to let people build the game on Windows with any compiler version
32 (VC2008, 2010, 2012, 2013, and debug vs release), without requiring them to
33 rebuild the gloox library themselves. And we don't want to provide ~8 different
34 prebuilt versions of the library.
35 
36 glooxwrapper replaces the gloox API with a version that is safe to use across
37 compiler versions. glooxwrapper and gloox must be compiled together with the
38 same version, but the resulting library can be used with any other compiler.
39 
40 This is the small subset of the API that the game currently uses, with no
41 attempt to be comprehensive.
42 
43 General design and rules:
44 
45  * There is a strict boundary between gloox+glooxwrapper.cpp, and the game
46  code that includes glooxwrapper.h.
47  Objects allocated with new/delete on one side of the boundary must be
48  freed/allocated on the same side.
49  Objects allocated with glooxwrapper_alloc()/glooxwrapper_delete() can be
50  freely shared across the boundary.
51 
52  * glooxwrapper.h and users of glooxwrapper must not use any types from
53  the gloox namespace, except for enums.
54 
55  * std::string is replaced with glooxwrapper::string,
56  std::list with glooxwrapper::list
57 
58  * Most glooxwrapper classes are simple wrappers around gloox classes.
59  Some always take ownership of their wrapped gloox object (i.e. their
60  destructor will delete the wrapped object too); some never do; and some
61  can be used either way (indicated by an m_Owned field).
62 
63 */
64 
65 #if OS_WIN
66 # include "lib/sysdep/os/win/win.h"
67 // Prevent gloox pulling in windows.h
68 # define _WINDOWS_
69 #endif
70 
71 #include <gloox/client.h>
72 #include <gloox/mucroom.h>
73 #include <gloox/registration.h>
74 #include <gloox/message.h>
75 
76 #include <cstring>
77 
78 #if OS_WIN
79 #define GLOOXWRAPPER_API __declspec(dllexport)
80 #else
81 #define GLOOXWRAPPER_API
82 #endif
83 
84 namespace glooxwrapper
85 {
86  class Client;
87  class DataForm;
88  class DelayedDelivery;
89  class Disco;
90  class IQ;
91  class JID;
92  class MUCRoom;
93  class MUCRoomConfigHandler;
94  class Message;
95  class MessageSession;
96  class OOB;
97  class Presence;
98  class StanzaError;
99  class StanzaExtension;
100  class Tag;
101 
102  class ClientImpl;
103  class MUCRoomHandlerWrapper;
104 
105  GLOOXWRAPPER_API void* glooxwrapper_alloc(size_t size);
106  GLOOXWRAPPER_API void glooxwrapper_free(void* p);
107 
108  class string
109  {
110  private:
111  size_t m_Size;
112  char* m_Data;
113  public:
115  {
116  m_Size = 0;
117  m_Data = (char*)glooxwrapper_alloc(1);
118  m_Data[0] = '\0';
119  }
120 
121  string(const string& str)
122  {
123  m_Size = str.m_Size;
124  m_Data = (char*)glooxwrapper_alloc(m_Size + 1);
125  memcpy(m_Data, str.m_Data, m_Size + 1);
126  }
127 
128  string(const std::string& str) : m_Data(NULL)
129  {
130  m_Size = str.size();
131  m_Data = (char*)glooxwrapper_alloc(m_Size + 1);
132  memcpy(m_Data, str.c_str(), m_Size + 1);
133  }
134 
135  string(const char* str)
136  {
137  m_Size = strlen(str);
138  m_Data = (char*)glooxwrapper_alloc(m_Size + 1);
139  memcpy(m_Data, str, m_Size + 1);
140  }
141 
142  string& operator=(const string& str)
143  {
144  if (this != &str)
145  {
146  glooxwrapper_free(m_Data);
147  m_Size = str.m_Size;
148  m_Data = (char*)glooxwrapper_alloc(m_Size + 1);
149  memcpy(m_Data, str.m_Data, m_Size + 1);
150  }
151  return *this;
152  }
153 
155  {
156  glooxwrapper_free(m_Data);
157  }
158 
159  std::string to_string() const
160  {
161  return std::string(m_Data, m_Size);
162  }
163 
164  const char* c_str() const
165  {
166  return m_Data;
167  }
168 
169  bool empty() const
170  {
171  return m_Size == 0;
172  }
173 
174  bool operator==(const char* str) const
175  {
176  return strcmp(m_Data, str) == 0;
177  }
178 
179  bool operator!=(const char* str) const
180  {
181  return strcmp(m_Data, str) != 0;
182  }
183  };
184 
185  static inline std::ostream& operator<<(std::ostream& stream, const string& string)
186  {
187  return stream << string.c_str();
188  }
189 
190  template<typename T>
191  class list
192  {
193  private:
194  struct node
195  {
196  node(const T& item) : m_Item(item), m_Next(NULL) {}
199  };
202 
203  public:
205  {
206  const node* m_Node;
207  const_iterator(const node* n) : m_Node(n) {}
208  bool operator!=(const const_iterator& it) { return m_Node != it.m_Node; }
209  const_iterator& operator++() { m_Node = m_Node->m_Next; return *this; }
210  const T& operator*() { return m_Node->m_Item; }
211  };
212  const_iterator begin() const { return const_iterator(m_Head); }
213  const_iterator end() const { return const_iterator(NULL); }
214 
215  list() : m_Head(NULL), m_Tail(NULL) {}
216 
217  list(const list& src) : m_Head(NULL), m_Tail(NULL)
218  {
219  *this = src;
220  }
221 
222  list& operator=(const list& src)
223  {
224  if (this != &src)
225  {
226  clear();
227  for (node* n = src.m_Head; n; n = n->m_Next)
228  push_back(n->m_Item);
229  }
230  return *this;
231  }
232 
234  {
235  clear();
236  }
237 
238  void push_back(const T& item)
239  {
240  node* n = new (glooxwrapper_alloc(sizeof(node))) node(item);
241  if (m_Tail)
242  m_Tail->m_Next = n;
243  m_Tail = n;
244  if (!m_Head)
245  m_Head = n;
246  }
247 
248  void clear()
249  {
250  node* n = m_Head;
251  while (n)
252  {
253  node* next = n->m_Next;
255  n = next;
256  }
257  m_Head = m_Tail = NULL;
258  }
259  };
260 
263 
264  struct CertInfo
265  {
266  int status;
267  bool chain;
268  string issuer;
269  string server;
271  int date_to;
272  string protocol;
273  string cipher;
274  string mac;
275  string compression;
276  };
277 
279  {
280  string username;
281  string nick;
282  string password;
283  string name;
284  string first;
285  string last;
286  string email;
287  string address;
288  string city;
289  string state;
290  string zip;
291  string phone;
292  string url;
293  string date;
294  string misc;
295  string text;
296  };
297 
299  {
301  gloox::MUCRoomAffiliation affiliation;
302  gloox::MUCRoomRole role;
304  int flags;
305  string reason;
307  string newNick;
308  string status;
310  };
311 
312 
314  {
315  public:
316  virtual ~ConnectionListener() {}
317  virtual void onConnect() = 0;
318  virtual void onDisconnect(gloox::ConnectionError e) = 0;
319  virtual bool onTLSConnect(const CertInfo& info) = 0;
320  };
321 
323  {
324  public:
325  virtual ~IqHandler() {}
326  virtual bool handleIq(const IQ& iq) = 0;
327  virtual void handleIqID(const IQ& iq, int context) = 0;
328  };
329 
331  {
332  public:
333  virtual ~MessageHandler() {}
334  virtual void handleMessage(const Message& msg, MessageSession* session = 0) = 0; // MessageSession not supported
335  };
336 
338  {
339  public:
340  virtual ~MUCRoomHandler() {}
341  virtual void handleMUCParticipantPresence(MUCRoom* room, const MUCRoomParticipant participant, const Presence& presence) = 0; // MUCRoom not supported
342  virtual void handleMUCMessage(MUCRoom* room, const Message& msg, bool priv) = 0; // MUCRoom not supported
343  virtual void handleMUCError(MUCRoom* room, gloox::StanzaError error) = 0; // MUCRoom not supported
344  virtual void handleMUCSubject(MUCRoom* room, const string& nick, const string& subject) = 0; // MUCRoom not supported
345  };
346 
348  {
349  public:
350  virtual ~RegistrationHandler() {}
351  virtual void handleRegistrationFields(const JID& from, int fields, string instructions) = 0;
352  virtual void handleAlreadyRegistered(const JID& from) = 0;
353  virtual void handleRegistrationResult(const JID& from, gloox::RegistrationResult regResult) = 0;
354  virtual void handleDataForm(const JID& from, const DataForm& form) = 0; // DataForm not supported
355  virtual void handleOOB(const JID& from, const OOB& oob) = 0; // OOB not supported
356  };
357 
359  {
360  public:
361  StanzaExtension(int type) : m_extensionType(type) {}
362  virtual ~StanzaExtension() {}
363  virtual const string& filterString() const = 0;
364  virtual StanzaExtension* newInstance(const Tag* tag) const = 0;
365  virtual glooxwrapper::Tag* tag() const = 0;
366  virtual StanzaExtension* clone() const = 0;
367 
368  int extensionType() const { return m_extensionType; }
369  private:
371  };
372 
373 
375  {
377  private:
378  gloox::Client* m_Wrapped;
381 
382  public:
383  gloox::Client* getWrapped() { return m_Wrapped; }
384 
385  bool connect(bool block = true);
386  gloox::ConnectionError recv(int timeout = -1);
387  void send(const IQ& iq);
388 
389  void setTls(gloox::TLSPolicy tls);
390  void setCompression(bool compression);
391 
392  void setSASLMechanisms(int mechanisms);
393  void registerStanzaExtension(StanzaExtension* ext);
394  void registerConnectionListener(ConnectionListener* cl);
395  void registerIqHandler(IqHandler* ih, int exttype);
396  void registerMessageHandler(MessageHandler* mh);
397 
398  bool removePresenceExtension(int type);
399 
400  Disco* disco() const { return m_DiscoWrapper; }
401 
402  Client(const string& server);
403  Client(const JID& jid, const string& password, int port = -1);
404  ~Client();
405 
406  void setPresence(gloox::Presence::PresenceType pres, int priority, const string& status = "");
407  void disconnect();
408  };
409 
411  {
413  private:
414  const gloox::DelayedDelivery* m_Wrapped;
415  public:
416  DelayedDelivery(const gloox::DelayedDelivery* wrapped);
417  const string stamp() const;
418  };
419 
421  {
423  private:
424  gloox::Disco* m_Wrapped;
425  public:
426  Disco(gloox::Disco* wrapped);
427  void setVersion(const string& name, const string& version, const string& os = "");
428  void setIdentity(const string& category, const string& type, const string& name = "");
429  };
430 
432  {
433  NONCOPYABLE(IQ);
434  private:
435  gloox::IQ* m_Wrapped;
436  bool m_Owned;
437  public:
438  const gloox::IQ& getWrapped() const { return *m_Wrapped; }
439  IQ(const gloox::IQ& iq) : m_Wrapped(const_cast<gloox::IQ*>(&iq)), m_Owned(false) { }
440 
441  IQ(gloox::IQ::IqType type, const JID& to, const string& id = "");
442  ~IQ();
443 
444  void addExtension(const StanzaExtension* se);
445  const StanzaExtension* findExtension(int type) const;
446 
447  template<class T>
448  inline const T* findExtension(int type) const
449  {
450  return static_cast<const T*>(findExtension(type));
451  }
452 
453  gloox::IQ::IqType subtype() const;
454 
455  gloox::StanzaError error_error() const; // wrapper for ->error()->error()
456  Tag* tag() const;
457  };
458 
460  {
461  NONCOPYABLE(JID);
462  private:
463  gloox::JID* m_Wrapped;
464  bool m_Owned;
465  void init(const char* data, size_t len);
466  public:
467  const gloox::JID& getWrapped() const { return *m_Wrapped; }
468  JID(const gloox::JID& jid) : m_Wrapped(const_cast<gloox::JID*>(&jid)), m_Owned(false) { }
469 
470  JID();
471  JID(const string& jid);
472  JID(const std::string& jid) { init(jid.c_str(), jid.size()); }
473  ~JID();
474 
475  string username() const;
476  string resource() const;
477  };
478 
480  {
482  private:
483  gloox::Message* m_Wrapped;
484  bool m_Owned;
486  public:
487  Message(gloox::Message* wrapped, bool owned);
488  ~Message();
489  gloox::Message::MessageType subtype() const;
490  const JID& from() const;
491  string body() const;
492  string subject(const string& lang = "default") const;
493  string thread() const;
494  const glooxwrapper::DelayedDelivery* when() const;
495  };
496 
498  {
500  private:
501  gloox::MUCRoom* m_Wrapped;
503  public:
504  MUCRoom(Client* parent, const JID& nick, MUCRoomHandler* mrh, MUCRoomConfigHandler* mrch = 0);
505  ~MUCRoom();
506  const string nick() const;
507  void join(gloox::Presence::PresenceType type = gloox::Presence::Available, const string& status = "", int priority = 0);
508  void leave(const string& msg = "");
509  void send(const string& message);
510  void setNick(const string& nick);
511  void setPresence(gloox::Presence::PresenceType presence, const string& msg = "");
512  void setRequestHistory(int value, gloox::MUCRoom::HistoryRequestType type);
513  void kick(const string& nick, const string& reason);
514  void ban(const string& nick, const string& reason);
515  };
516 
518  {
519  gloox::Presence::PresenceType m_Presence;
520  public:
521  Presence(gloox::Presence::PresenceType presence) : m_Presence(presence) {}
522  gloox::Presence::PresenceType presence() const { return m_Presence; }
523  };
524 
526  {
528  private:
529  gloox::Registration* m_Wrapped;
530  std::list<shared_ptr<gloox::RegistrationHandler> > m_RegistrationHandlers;
531  public:
532  Registration(Client* parent);
533  ~Registration();
534  void fetchRegistrationFields();
535  bool createAccount(int fields, const RegistrationFields& values);
536  void registerRegistrationHandler(RegistrationHandler* rh);
537  };
538 
540  {
541  NONCOPYABLE(Tag);
542  private:
544  bool m_Owned;
545 
546  Tag(const string& name);
547  Tag(const string& name, const string& cdata);
548  Tag(gloox::Tag* wrapped, bool owned) : m_Wrapped(wrapped), m_Owned(owned) {}
549  ~Tag();
550 
551  public:
552  // Internal use:
553  gloox::Tag* getWrapped() { return m_Wrapped; }
554  gloox::Tag* stealWrapped() { m_Owned = false; return m_Wrapped; }
555  static Tag* allocate(gloox::Tag* wrapped, bool owned);
556 
557  // Instead of using new/delete, Tags must be allocated/freed with these functions
558  static Tag* allocate(const string& name);
559  static Tag* allocate(const string& name, const string& cdata);
560  static void free(const Tag* tag);
561 
562  bool addAttribute(const string& name, const string& value);
563  string findAttribute(const string& name) const;
564  Tag* clone() const;
565  string xmlns() const;
566  bool setXmlns(const string& xmlns);
567  string xml() const;
568  void addChild(Tag* child);
569  string name() const;
570  string cdata() const;
571  const Tag* findTag_clone(const string& expression) const; // like findTag but must be Tag::free()d
572  ConstTagList findTagList_clone(const string& expression) const; // like findTagList but each tag must be Tag::free()d
573  };
574 }
575 
576 #endif // INCLUDED_GLOOXWRAPPER_H
#define NONCOPYABLE(className)
Indicates that a class is noncopyable (usually due to const or reference members, or because the clas...
Definition: code_annotation.h:217
string username
Definition: glooxwrapper.h:280
JID(const std::string &jid)
Definition: glooxwrapper.h:472
std::string to_string() const
Definition: glooxwrapper.h:159
string status
Definition: glooxwrapper.h:308
Definition: glooxwrapper.h:347
virtual ~StanzaExtension()
Definition: glooxwrapper.h:362
glooxwrapper::JID * m_From
Definition: glooxwrapper.h:485
void clear()
Definition: glooxwrapper.h:248
list(const list &src)
Definition: glooxwrapper.h:217
int date_to
Definition: glooxwrapper.h:271
bool error(JSContext *cx, uint argc, jsval *vp)
Definition: ScriptInterface.cpp:190
xml
Definition: tests.py:119
gloox::Registration * m_Wrapped
Definition: glooxwrapper.h:529
string protocol
Definition: glooxwrapper.h:272
Definition: glooxwrapper.h:204
const T * findExtension(int type) const
Definition: glooxwrapper.h:448
Definition: glooxwrapper.cpp:280
virtual ~MessageHandler()
Definition: glooxwrapper.h:333
string phone
Definition: glooxwrapper.h:291
int date_from
Definition: glooxwrapper.h:270
string nick
Definition: glooxwrapper.h:281
glooxwrapper::list< const Tag * > ConstTagList
Definition: glooxwrapper.h:262
string state
Definition: glooxwrapper.h:289
string(const string &str)
Definition: glooxwrapper.h:121
bool m_Owned
Definition: glooxwrapper.h:484
JID * actor
Definition: glooxwrapper.h:306
Definition: glooxwrapper.h:298
bool operator!=(const char *str) const
Definition: glooxwrapper.h:179
Definition: glooxwrapper.h:420
string newNick
Definition: glooxwrapper.h:307
string city
Definition: glooxwrapper.h:288
ClientImpl * m_Impl
Definition: glooxwrapper.h:379
string address
Definition: glooxwrapper.h:287
string text
Definition: glooxwrapper.h:295
virtual ~ConnectionListener()
Definition: glooxwrapper.h:316
string compression
Definition: glooxwrapper.h:275
gloox::Tag * m_Wrapped
Definition: glooxwrapper.h:543
~list()
Definition: glooxwrapper.h:233
gloox::MUCRoom * m_Wrapped
Definition: glooxwrapper.h:501
gloox::Message * m_Wrapped
Definition: glooxwrapper.h:483
JID * nick
Definition: glooxwrapper.h:300
gloox::JID * m_Wrapped
Definition: glooxwrapper.h:463
gloox::Tag * stealWrapped()
Definition: glooxwrapper.h:554
MUCRoomHandlerWrapper * m_HandlerWrapper
Definition: glooxwrapper.h:502
Tag(gloox::Tag *wrapped, bool owned)
Definition: glooxwrapper.h:548
Definition: glooxwrapper.h:358
const T & operator*()
Definition: glooxwrapper.h:210
Definition: glooxwrapper.h:497
Definition: glooxwrapper.h:459
bool m_Owned
Definition: glooxwrapper.h:544
gloox::IQ * m_Wrapped
Definition: glooxwrapper.h:435
Definition: glooxwrapper.h:517
bool operator==(const char *str) const
Definition: glooxwrapper.h:174
node * m_Tail
Definition: glooxwrapper.h:201
Definition: glooxwrapper.h:479
Definition: glooxwrapper.h:525
gloox::Disco * m_Wrapped
Definition: glooxwrapper.h:424
string last
Definition: glooxwrapper.h:285
string date
Definition: glooxwrapper.h:293
node * m_Next
Definition: glooxwrapper.h:198
node(const T &item)
Definition: glooxwrapper.h:196
void push_back(const T &item)
Definition: glooxwrapper.h:238
Presence(gloox::Presence::PresenceType presence)
Definition: glooxwrapper.h:521
string zip
Definition: glooxwrapper.h:290
string server
Definition: glooxwrapper.h:269
Definition: glooxwrapper.h:410
int extensionType() const
Definition: glooxwrapper.h:368
bool empty() const
Definition: glooxwrapper.h:169
string email
Definition: glooxwrapper.h:286
string()
Definition: glooxwrapper.h:114
bool operator!=(const const_iterator &it)
Definition: glooxwrapper.h:208
gloox::Client * m_Wrapped
Definition: glooxwrapper.h:378
int status
Definition: glooxwrapper.h:266
Definition: glooxwrapper.h:330
string(const std::string &str)
Definition: glooxwrapper.h:128
Definition: glooxwrapper.h:191
string first
Definition: glooxwrapper.h:284
const gloox::IQ & getWrapped() const
Definition: glooxwrapper.h:438
string issuer
Definition: glooxwrapper.h:268
Definition: glooxwrapper.h:374
IQ(const gloox::IQ &iq)
Definition: glooxwrapper.h:439
const gloox::JID & getWrapped() const
Definition: glooxwrapper.h:467
i64 Tag
Definition: h_mgr.cpp:97
string(const char *str)
Definition: glooxwrapper.h:135
const char * c_str() const
Definition: glooxwrapper.h:164
const gloox::DelayedDelivery * m_Wrapped
Definition: glooxwrapper.h:414
string password
Definition: glooxwrapper.h:282
#define GLOOXWRAPPER_API
Definition: glooxwrapper.h:81
Definition: glooxwrapper.h:337
#define T(string_literal)
Definition: secure_crt.cpp:76
Definition: glooxwrapper.h:108
char * m_Data
Definition: glooxwrapper.h:112
const node * m_Node
Definition: glooxwrapper.h:206
list & operator=(const list &src)
Definition: glooxwrapper.h:222
JID(const gloox::JID &jid)
Definition: glooxwrapper.h:468
gloox::MUCRoomAffiliation affiliation
Definition: glooxwrapper.h:301
static std::ostream & operator<<(std::ostream &stream, const string &string)
Definition: glooxwrapper.h:185
string & operator=(const string &str)
Definition: glooxwrapper.h:142
Definition: glooxwrapper.h:194
string mac
Definition: glooxwrapper.h:274
T m_Item
Definition: glooxwrapper.h:197
const_iterator end() const
Definition: glooxwrapper.h:213
string url
Definition: glooxwrapper.h:292
Definition: glooxwrapper.h:264
bool chain
Definition: glooxwrapper.h:267
int flags
Definition: glooxwrapper.h:304
string cipher
Definition: glooxwrapper.h:273
size_t m_Size
Definition: glooxwrapper.h:111
Definition: glooxwrapper.h:322
const_iterator(const node *n)
Definition: glooxwrapper.h:207
string name
Definition: glooxwrapper.h:283
~string()
Definition: glooxwrapper.h:154
GLOOXWRAPPER_API void glooxwrapper_free(void *p)
Definition: glooxwrapper.cpp:39
StanzaExtension(int type)
Definition: glooxwrapper.h:361
string reason
Definition: glooxwrapper.h:305
int m_extensionType
Definition: glooxwrapper.h:370
Disco * disco() const
Definition: glooxwrapper.h:400
gloox::MUCRoomRole role
Definition: glooxwrapper.h:302
Definition: glooxwrapper.h:431
glooxwrapper::list< Tag * > TagList
Definition: glooxwrapper.h:261
gloox::Presence::PresenceType m_Presence
Definition: glooxwrapper.h:519
Definition: glooxwrapper.h:313
Definition: glooxwrapper.cpp:45
const_iterator & operator++()
Definition: glooxwrapper.h:209
JID * alternate
Definition: glooxwrapper.h:309
gloox::Tag * getWrapped()
Definition: glooxwrapper.h:553
list()
Definition: glooxwrapper.h:215
Disco * m_DiscoWrapper
Definition: glooxwrapper.h:380
gloox::Client * getWrapped()
Definition: glooxwrapper.h:383
void init(ScriptInterface &scriptInterface)
Definition: JSInterface_GUITypes.cpp:260
node * m_Head
Definition: glooxwrapper.h:200
bool m_Owned
Definition: glooxwrapper.h:436
std::list< shared_ptr< gloox::RegistrationHandler > > m_RegistrationHandlers
Definition: glooxwrapper.h:530
virtual ~IqHandler()
Definition: glooxwrapper.h:325
virtual ~MUCRoomHandler()
Definition: glooxwrapper.h:340
GLOOXWRAPPER_API void * glooxwrapper_alloc(size_t size)
Definition: glooxwrapper.cpp:31
Definition: glooxwrapper.h:278
gloox::Presence::PresenceType presence() const
Definition: glooxwrapper.h:522
virtual ~RegistrationHandler()
Definition: glooxwrapper.h:350
string misc
Definition: glooxwrapper.h:294
JID * jid
Definition: glooxwrapper.h:303
const_iterator begin() const
Definition: glooxwrapper.h:212
bool m_Owned
Definition: glooxwrapper.h:464
Definition: glooxwrapper.cpp:116
Definition: glooxwrapper.h:539