XMPP: add proper cleanup; add basic support for body messages
[citadel.git] / citadel / modules / xmpp / xmpp_xmacros.c
index 3366cbcfc9cc5b64d17e2af63b45de637a028059..3ef9f3161c8db450ef00ac9ef030d56bed7cf524 100644 (file)
@@ -13,6 +13,11 @@ void *GetToken_piq(void)
        return NULL;
 }
 
+void *GetToken_message(void)
+{
+       return NULL;
+}
+
 
 #define STRPROP(STRUCTNAME, NAME)                                      \
        if (StrLength(pdata->NAME) > 0)                                 \
@@ -23,6 +28,12 @@ void *GetToken_piq(void)
        XPut("\" ", 2);                                                 \
        }
 
+#define PAYLOAD(STRUCTNAME, NAME)                                      \
+       XPrint(#NAME, sizeof(#NAME) -1,                                 \
+              XCLOSED,                                                 \
+              TYPE_BODYSTR, SKEY(pdata->NAME),                         \
+              TYPE_ARGEND);
+
 #define THENAMESPACE(STRUCTNAME, NAME)                                 \
        XPut(#NAME, sizeof(#NAME) - 1);                                 \
        XPut("=\"", 2);                                                 \
@@ -48,12 +59,16 @@ void *GetToken_piq(void)
 
 #include "token.def"
 #undef STRPROP
+#undef PAYLOAD
 #undef TOKEN
 
 
 #define STRPROP(STRUCTNAME, NAME)                                      \
        FreeStrBuf(&pdata->NAME);
 
+#define PAYLOAD(STRUCTNAME, NAME)                                      \
+       FreeStrBuf(&pdata->NAME);
+
 #define TOKEN(NAME, STRUCT)                                            \
        void free_buf_##NAME(TheToken_##NAME *pdata)                    \
        {                                                               \
@@ -62,6 +77,7 @@ void *GetToken_piq(void)
 
 #include "token.def"
 #undef STRPROP
+#undef PAYLOAD
 #undef TOKEN
 
 #define TOKEN(NAME, STRUCT)                                            \
@@ -90,6 +106,16 @@ CTDL_MODULE_INIT(xmpp_xmacros)
                        #PROPERTYNAME, sizeof(#PROPERTYNAME)-1,         \
                        GetToken_##TOKENNAME,                           \
                        offset##PROPERTYNAME);
+#define PAYLOAD(TOKENNAME, PROPERTYNAME)                               \
+               long offset##PROPERTYNAME =                             \
+                       offsetof(TheToken_##TOKENNAME, PROPERTYNAME);   \
+               XMPP_RegisterTokenProperty(                             \
+                       NAMESPACE_##TOKENNAME,                          \
+                       sizeof(NAMESPACE_##TOKENNAME)-1,                \
+                       #TOKENNAME, sizeof(#TOKENNAME)-1,               \
+                       NULL, 0,                                        \
+                       GetToken_##TOKENNAME,                           \
+                       offset##PROPERTYNAME);
 #define TOKEN(NAME, STRUCT) STRUCT
 #include "token.def"
 #undef STRPROP