3366cbcfc9cc5b64d17e2af63b45de637a028059
[citadel.git] / citadel / modules / xmpp / xmpp_xmacros.c
1 #include <stdio.h>
2 #include <expat.h>
3 #include <libcitadel.h>
4 #include "ctdl_module.h"
5 #include "serv_xmpp.h"
6
7 void *GetToken_iq(void)
8 {
9         return &XMPP->IQ;
10 }
11 void *GetToken_piq(void)
12 {
13         return NULL;
14 }
15
16
17 #define STRPROP(STRUCTNAME, NAME)                                       \
18         if (StrLength(pdata->NAME) > 0)                                 \
19         {                                                               \
20         XPut(#NAME, sizeof(#NAME) - 1);                                 \
21         XPut("=\"", 2);                                                 \
22         XPutProp(SKEY(pdata->NAME));                                    \
23         XPut("\" ", 2);                                                 \
24         }
25
26 #define THENAMESPACE(STRUCTNAME, NAME)                                  \
27         XPut(#NAME, sizeof(#NAME) - 1);                                 \
28         XPut("=\"", 2);                                                 \
29         XPutProp(NAMESPACE_##STRUCTNAME,                                \
30                  sizeof(NAMESPACE_##STRUCTNAME)-1);                     \
31         XPut("\" ", 2);                                                 
32
33 #define TOKEN(NAME, STRUCT)                                             \
34         void serialize_##NAME(TheToken_##NAME *pdata, int Close)        \
35         {                                                               \
36         XPUT("<");                                                      \
37         XPut(#NAME, sizeof(#NAME));                                     \
38         XPUT(" ");                                                      \
39         STRUCT ;                                                        \
40         XPUT(">");                                                      \
41         if (Close)                                                      \
42         {                                                               \
43                 XPut("</", 2);                                          \
44                 XPut(#NAME, sizeof(#NAME));                             \
45                 XPut(">", 1);                                           \
46         }                                                               \
47         }
48
49 #include "token.def"
50 #undef STRPROP
51 #undef TOKEN
52
53
54 #define STRPROP(STRUCTNAME, NAME)                                       \
55         FreeStrBuf(&pdata->NAME);
56
57 #define TOKEN(NAME, STRUCT)                                             \
58         void free_buf_##NAME(TheToken_##NAME *pdata)                    \
59         {                                                               \
60                 STRUCT ;                                                \
61         }
62
63 #include "token.def"
64 #undef STRPROP
65 #undef TOKEN
66
67 #define TOKEN(NAME, STRUCT)                                             \
68         void free_##NAME(TheToken_##NAME *pdata)                        \
69         {                                                               \
70                 free_buf_##NAME(pdata);                                 \
71                 free(pdata);                                            \
72         }
73
74 #include "token.def"
75 #undef STRPROP
76 #undef TOKEN
77
78
79
80 CTDL_MODULE_INIT(xmpp_xmacros)
81 {
82         if (!threading) {
83 #define STRPROP(TOKENNAME, PROPERTYNAME)                                \
84                 long offset##PROPERTYNAME =                             \
85                         offsetof(TheToken_##TOKENNAME, PROPERTYNAME);   \
86                 XMPP_RegisterTokenProperty(                             \
87                         NAMESPACE_##TOKENNAME,                          \
88                         sizeof(NAMESPACE_##TOKENNAME)-1,                \
89                         #TOKENNAME, sizeof(#TOKENNAME)-1,               \
90                         #PROPERTYNAME, sizeof(#PROPERTYNAME)-1,         \
91                         GetToken_##TOKENNAME,                           \
92                         offset##PROPERTYNAME);
93 #define TOKEN(NAME, STRUCT) STRUCT
94 #include "token.def"
95 #undef STRPROP
96 #undef TOKEN
97         }
98
99         /* return our module name for the log */
100         return "xmpp_xmacros";
101 }