STRPROP(iq, id);
STRPROP(iq, from);
STRPROP(iq, to);
- })
+ });
#define NAMESPACE_piq "bub"
STRPROP(piq, id);
STRPROP(piq, from);
STRPROP(piq, to);
- })
+ });
#define NAMESPACE_message "jabber:client"
TOKEN(message,
STRPROP(message, type);
STRPROP(message, id);
PAYLOAD(message, body);
- })
+ });
+#define NAMESPACE_message_chatstate "http://jabber.org/protocol/chatstates"
+
+SUBTOKEN(message,
+ chatstate,
+ active,
+ {
+ CALLBACK(active);
+ });
+
+SUBTOKEN(message,
+ chatstate,
+ composing,
+ {
+ CALLBACK(composing);
+ });
+
+SUBTOKEN(message,
+ chatstate,
+ paused,
+ {
+ CALLBACK(paused);
+ });
+
+SUBTOKEN(message,
+ chatstate,
+ inactive,
+ {
+ CALLBACK(inactive);
+ });
+
+SUBTOKEN(message,
+ chatstate,
+ gone,
+ {
+ CALLBACK(gone);
+ });
// <message type='chat' id='purplef5a7ed34' to='testuser@blarg.potzblitz.outgesourced.org'><active xmlns='http://jabber.org/protocol/chatstates'/><body>gci</body></message>
return &XMPP->Message;
}
+/// TODO
+#define CALLBACK(NAME);
#define STRPROP(STRUCTNAME, NAME) \
if (StrLength(pdata->NAME) > 0) \
} \
}
+#define SUBTOKEN(NAME, NS, STOKEN, STRUCT) \
+ void serialize_##NAME##NS##STOKEN( \
+ theSubToken_##NAME##NS##STOKEN *pdata, int Close) \
+ { \
+ XPUT("<"); \
+ XPut(#NAME, sizeof(#NAME)); \
+ XPUT(" "); \
+ STRUCT ; \
+ XPUT(">"); \
+ if (Close) \
+ { \
+ XPut("</", 2); \
+ XPut(#NAME, sizeof(#NAME)); \
+ XPut(">", 1); \
+ } \
+ }
+
#include "token.def"
#undef STRPROP
#undef PAYLOAD
#undef TOKEN
-
+#undef SUBTOKEN
#define STRPROP(STRUCTNAME, NAME) \
FreeStrBuf(&pdata->NAME);
STRUCT ; \
}
+#define SUBTOKEN(NAME, NS, STOKEN, STRUCT) void free_buf__##NAME##NS##STOKEN \
+ (theSubToken_##NAME##NS##STOKEN *pdata){ \
+ STRUCT ; \
+ }
+
#include "token.def"
#undef STRPROP
#undef PAYLOAD
#undef TOKEN
+#undef SUBTOKEN
#define TOKEN(NAME, STRUCT) \
void free_##NAME(TheToken_##NAME *pdata) \
free(pdata); \
}
+#define SUBTOKEN(NAME, NS, STOKEN, STRUCT) void free__##NAME##NS##STOKEN \
+ (theSubToken_##NAME##NS##STOKEN *pdata) \
+ { \
+ free_buf__##NAME##NS##STOKEN(pdata); \
+ free(pdata); \
+ }
+
#include "token.def"
#undef STRPROP
#undef TOKEN
+#undef SUBTOKEN
GetToken_##TOKENNAME, \
offset##PROPERTYNAME);
#define TOKEN(NAME, STRUCT) STRUCT
+#define SUBTOKEN(NAME, NS, STOKEN, STRUCT) STRUCT
#include "token.def"
#undef STRPROP
#undef TOKEN
* define the structures for one token each
* typename: TheToken_<Tokenname>
*/
+
+#define XMPPARGS char *token, long len
+typedef void (*XMPP_callback)(XMPPARGS);
+#define CALLBACK(NAME) XMPP_callback CB_##NAME;
#define PAYLOAD(STRUCTNAME, NAME) StrBuf *NAME;int encoding_##NAME;
#define STRPROP(STRUCTNAME, NAME) StrBuf *NAME;
#define TOKEN(NAME, STRUCT) typedef struct __##NAME \
STRUCT \
TheToken_##NAME;
+#define SUBTOKEN(NAME, NS, STOKEN, STRUCT) typedef struct __##NAME##NS##STOKEN \
+ STRUCT \
+ theSubToken_##NAME##NS##STOKEN;
+
#include "token.def"
+
#undef STRPROP
#undef PAYLOAD
#undef TOKEN
+#undef SUBTOKEN
/*
# name: free_buf_<Tokenname>
*/
+#define SUBTOKEN(NAME, NS, STOKEN, STRUCT) void free_buf__##NAME##NS##STOKEN \
+ (theSubToken_##NAME##NS##STOKEN *pdata);
#define TOKEN(NAME, STRUCT) \
void free_buf_##NAME(TheToken_##NAME *pdata);
#include "token.def"
#undef STRPROP
#undef PAYLOAD
#undef TOKEN
+#undef SUBTOKEN
/*
* forward declarations, freeing structs and member.
* name: free_<Tokenname>
*/
+#define SUBTOKEN(NAME, NS, STOKEN, STRUCT) void free__##NAME##NS##STOKEN \
+ (theSubToken_##NAME##NS##STOKEN *pdata);
#define TOKEN(NAME, STRUCT) \
void free_##NAME(TheToken_##NAME *pdata);
#undef STRPROP
#undef PAYLOAD
#undef TOKEN
+#undef SUBTOKEN
+
+#undef CALLBACK