start defining stuff that could handle subtokens - message-chatstate here.
[citadel.git] / citadel / modules / xmpp / xmpp_xmacros.c
index 3366cbcfc9cc5b64d17e2af63b45de637a028059..63c99edaba96809499ad178f457f630bf4b92f94 100644 (file)
@@ -13,6 +13,13 @@ void *GetToken_piq(void)
        return NULL;
 }
 
+void *GetToken_message(void)
+{
+       return &XMPP->Message;
+}
+
+/// TODO
+#define CALLBACK(NAME);
 
 #define STRPROP(STRUCTNAME, NAME)                                      \
        if (StrLength(pdata->NAME) > 0)                                 \
@@ -23,6 +30,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);                                                 \
@@ -46,23 +59,51 @@ void *GetToken_piq(void)
        }                                                               \
        }
 
+#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);
 
+#define PAYLOAD(STRUCTNAME, NAME)                                      \
+       FreeStrBuf(&pdata->NAME);
+
 #define TOKEN(NAME, STRUCT)                                            \
        void free_buf_##NAME(TheToken_##NAME *pdata)                    \
        {                                                               \
                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)                        \
@@ -71,9 +112,17 @@ void *GetToken_piq(void)
                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
 
 
 
@@ -90,7 +139,18 @@ 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
+#define SUBTOKEN(NAME, NS, STOKEN, STRUCT) STRUCT
 #include "token.def"
 #undef STRPROP
 #undef TOKEN