X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=citadel%2Fmodules%2Fxmpp%2Fxmpp_xmacros.c;fp=citadel%2Fmodules%2Fxmpp%2Fxmpp_xmacros.c;h=3ef9f3161c8db450ef00ac9ef030d56bed7cf524;hp=0000000000000000000000000000000000000000;hb=6ae0819ac13984a0dfa583281fc0081af735c77d;hpb=1aa2da0249792527f99172681aecc77e0ad086af diff --git a/citadel/modules/xmpp/xmpp_xmacros.c b/citadel/modules/xmpp/xmpp_xmacros.c new file mode 100644 index 000000000..3ef9f3161 --- /dev/null +++ b/citadel/modules/xmpp/xmpp_xmacros.c @@ -0,0 +1,127 @@ +#include +#include +#include +#include "ctdl_module.h" +#include "serv_xmpp.h" + +void *GetToken_iq(void) +{ + return &XMPP->IQ; +} +void *GetToken_piq(void) +{ + return NULL; +} + +void *GetToken_message(void) +{ + return NULL; +} + + +#define STRPROP(STRUCTNAME, NAME) \ + if (StrLength(pdata->NAME) > 0) \ + { \ + XPut(#NAME, sizeof(#NAME) - 1); \ + XPut("=\"", 2); \ + XPutProp(SKEY(pdata->NAME)); \ + 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); \ + XPutProp(NAMESPACE_##STRUCTNAME, \ + sizeof(NAMESPACE_##STRUCTNAME)-1); \ + XPut("\" ", 2); + +#define TOKEN(NAME, STRUCT) \ + void serialize_##NAME(TheToken_##NAME *pdata, int Close) \ + { \ + XPUT("<"); \ + XPut(#NAME, sizeof(#NAME)); \ + XPUT(" "); \ + STRUCT ; \ + XPUT(">"); \ + if (Close) \ + { \ + XPut("", 1); \ + } \ + } + +#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) \ + { \ + STRUCT ; \ + } + +#include "token.def" +#undef STRPROP +#undef PAYLOAD +#undef TOKEN + +#define TOKEN(NAME, STRUCT) \ + void free_##NAME(TheToken_##NAME *pdata) \ + { \ + free_buf_##NAME(pdata); \ + free(pdata); \ + } + +#include "token.def" +#undef STRPROP +#undef TOKEN + + + +CTDL_MODULE_INIT(xmpp_xmacros) +{ + if (!threading) { +#define STRPROP(TOKENNAME, PROPERTYNAME) \ + long offset##PROPERTYNAME = \ + offsetof(TheToken_##TOKENNAME, PROPERTYNAME); \ + XMPP_RegisterTokenProperty( \ + NAMESPACE_##TOKENNAME, \ + sizeof(NAMESPACE_##TOKENNAME)-1, \ + #TOKENNAME, sizeof(#TOKENNAME)-1, \ + #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 +#undef TOKEN + } + + /* return our module name for the log */ + return "xmpp_xmacros"; +}