SUBST: Dynamicaly generate contexts
authorWilfried Goesgens <dothebart@citadel.org>
Fri, 24 Aug 2012 10:37:43 +0000 (12:37 +0200)
committerWilfried Goesgens <dothebart@citadel.org>
Fri, 24 Aug 2012 10:37:43 +0000 (12:37 +0200)
  - so far we needed to add contexts to subst.h + subst.c; Now we simply register new ones before registering tokens using them.
  - RegisterCTX is duplicate safe, so you can call it several times for the same context. That way you can make shure the context is there before registering handlers in several .c files.

19 files changed:
webcit/dav_main.c
webcit/downloads.c
webcit/ical_subst.c
webcit/messages.h
webcit/msg_renderers.c
webcit/netconf.c
webcit/notes.c
webcit/roomlist.c
webcit/roomops.h
webcit/roomtokens.c
webcit/roomviews.c
webcit/sieve.c
webcit/siteconfig.c
webcit/smtpqueue.c
webcit/subst.c
webcit/subst.h
webcit/useredit.c
webcit/vcard_edit.c
webcit/who.c

index 157c953976e4fc7ee05d2a092be5b6a9a467974e..06466f2bbea63ae0c0beee76baedc46b715be5e4 100644 (file)
@@ -16,6 +16,7 @@
 #include "webserver.h"
 #include "dav.h"
 
+CtxType CTX_DAVNS = CTX_NONE;
 extern HashList *HandlerHash;
 
 HashList *DavNamespaces = NULL;
@@ -333,6 +334,7 @@ void
 InitModule_GROUPDAV
 (void)
 {
+       RegisterCTX(CTX_DAVNS);
        RegisterDAVNamespace(HKEY("groupdav"), HKEY("GroupDAV"), 
                             dav_main, GroupdavDispatchREST, 
                             XHTTP_COMMANDS|COOKIEUNNEEDED|FORCE_SESSIONCLOSE
index f7f9c9dc52d390bea015b6fdee455b44ff3267c9..f39622495cc9ca918faf1b3624a1ed4e08cd9b41 100644 (file)
@@ -13,6 +13,8 @@
 #include "webcit.h"
 #include "webserver.h"
 
+CtxType CTX_FILELIST = CTX_NONE;
+
 extern void output_static(const char* What);
 
 extern char* static_dirs[];
@@ -420,6 +422,7 @@ void
 InitModule_DOWNLOAD
 (void)
 {
+       RegisterCTX(CTX_FILELIST);
 
        RegisterIterator("ROOM:FILES", 0, NULL, LoadFileList,
                         NULL, DeleteHash, CTX_FILELIST, CTX_NONE, 
index 852fcc87b03aac7e97297b51e6263616267790fa..aceb56c2816fc5d395db745c29e2464287375f6b 100644 (file)
@@ -15,7 +15,7 @@
 extern IcalEnumMap icalproperty_kind_map[];
 
 HashList *IcalComponentMap = NULL;
-
+CtxType CTX_ICAL = CTX_NONE;
 #if 0
 void SortPregetMatter(HashList *Cals)
 {
@@ -123,6 +123,7 @@ void
 InitModule_ICAL_SUBST
 (void)
 {
+       RegisterCTX(CTX_ICAL);
        CreateIcalComponendKindLookup ();
 
 }
index 21ae4746782909142e936b19f54e4e4f5a7548a0..3129b18e0ef825a7efefb90e55330f89f36e5d6a 100644 (file)
@@ -1,4 +1,4 @@
-
+extern CtxType CTX_MAILSUM;
 extern HashList *MsgHeaderHandler;
 extern HashList *MimeRenderHandler;
 extern HashList *ReadLoopHandler;
index 3e5c29fcef4d1c93ee0e575c381161bbe0c10cba..8de9f45d53be633716ea8ad3daf4c5ff730c6479 100644 (file)
@@ -2,7 +2,8 @@
 #include "webserver.h"
 #include "dav.h"
 
-
+CtxType CTX_MAILSUM = CTX_NONE;
+CtxType CTX_MIME_ATACH = CTX_NONE;
 
 inline void CheckConvertBufs(struct wcsession *WCC)
 {
@@ -618,40 +619,6 @@ void render_MIME_VCard(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundC
 
 }
 
-void render_MIME_VNote(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
-{
-       if (StrLength(Mime->Data) == 0)
-               MimeLoadData(Mime);
-       if (StrLength(Mime->Data) > 0) {
-               struct vnote *v;
-               StrBuf *Buf;
-               char *vcard;
-
-               Buf = NewStrBuf();
-               vcard = SmashStrBuf(&Mime->Data);
-               v = vnote_new_from_str(vcard);
-               free (vcard);
-               if (v) {
-                       WCTemplputParams TP;
-                       
-                       memset(&TP, 0, sizeof(WCTemplputParams));
-                       TP.Filter.ContextType = CTX_VNOTE;
-                       TP.Context = v;
-                       DoTemplate(HKEY("mail_vnoteitem"),
-                                  Buf, &TP);
-                       
-                       vnote_free(v);
-                       Mime->Data = Buf;
-               }
-               else {
-                       if (Mime->Data == NULL)
-                               Mime->Data = NewStrBuf();
-                       else
-                               FlushStrBuf(Mime->Data);
-               }
-       }
-}
-
 void render_MIME_ICS(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
 {
        if (StrLength(Mime->Data) == 0) {
@@ -1481,6 +1448,8 @@ void
 InitModule_MSGRENDERERS
 (void)
 {
+       RegisterCTX(CTX_MAILSUM);
+       RegisterCTX(CTX_MIME_ATACH);
        RegisterReadLoopHandlerset(
                VIEW_MAILBOX,
                mailview_GetParamsGetServerCall,
@@ -1594,7 +1563,6 @@ InitModule_MSGRENDERERS
 
        /* mime renderers translate an attachment into webcit viewable html text */
        RegisterMimeRenderer(HKEY("message/rfc822"), render_MAIL, 0, 150);
-       RegisterMimeRenderer(HKEY("text/vnote"), render_MIME_VNote, 1, 300);
        RegisterMimeRenderer(HKEY("text/x-vcard"), render_MIME_VCard, 1, 201);
        RegisterMimeRenderer(HKEY("text/vcard"), render_MIME_VCard, 1, 200);
        RegisterMimeRenderer(HKEY("text/calendar"), render_MIME_ICS, 1, 501);
index 4dd20d45eb79c788097b06eaad856b16971b02c9..83c391429c95aa0d7a4b10fed5706fa6facda289 100644 (file)
@@ -2,6 +2,7 @@
 
 void display_netconf(void);
 
+CtxType CTX_NODECONF = CTX_NONE;
 /*----------------------------------------------------------------------*/
 /*              Business Logic                                          */
 /*----------------------------------------------------------------------*/
@@ -287,6 +288,7 @@ void
 InitModule_NETCONF
 (void)
 {
+       RegisterCTX(CTX_NODECONF);
        WebcitAddUrlHandler(HKEY("display_edit_node"), "", 0, display_edit_node, 0);
 
        WebcitAddUrlHandler(HKEY("aide_ignetconf_edit_node"), "", 0, edit_node, 0);
index 11412484097d26ed352d45092b4d8ead3cfde49b..df39e36a3e3c777b11f285a4cd0b924eb96a4714 100644 (file)
@@ -3,6 +3,8 @@
 #include "dav.h"
 #include "webserver.h"
 
+CtxType CTX_VNOTE = CTX_NONE;
+
 int pastel_palette[9][3] = {
        { 0x80, 0x80, 0x80 },
        { 0xff, 0x80, 0x80 },
@@ -433,11 +435,48 @@ int notes_Cleanup(void **ViewSpecific)
        return 0;
 }
 
+void render_MIME_VNote(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
+{
+       if (StrLength(Mime->Data) == 0)
+               MimeLoadData(Mime);
+       if (StrLength(Mime->Data) > 0) {
+               struct vnote *v;
+               StrBuf *Buf;
+               char *vcard;
+
+               Buf = NewStrBuf();
+               vcard = SmashStrBuf(&Mime->Data);
+               v = vnote_new_from_str(vcard);
+               free (vcard);
+               if (v) {
+                       WCTemplputParams TP;
+                       
+                       memset(&TP, 0, sizeof(WCTemplputParams));
+                       TP.Filter.ContextType = CTX_VNOTE;
+                       TP.Context = v;
+                       DoTemplate(HKEY("mail_vnoteitem"),
+                                  Buf, &TP);
+                       
+                       vnote_free(v);
+                       Mime->Data = Buf;
+               }
+               else {
+                       if (Mime->Data == NULL)
+                               Mime->Data = NewStrBuf();
+                       else
+                               FlushStrBuf(Mime->Data);
+               }
+       }
+}
+
+
 
 void 
 InitModule_NOTES
 (void)
 {
+       RegisterCTX(CTX_VNOTE);
+
        RegisterReadLoopHandlerset(
                VIEW_NOTES,
                notes_GetParamsGetServerCall,
@@ -461,4 +500,6 @@ InitModule_NOTES
        RegisterNamespace("VNOTE:BGCOLOR", 0, 0,tmpl_vcard_put_bgcolor, NULL, CTX_VNOTE);
        RegisterNamespace("VNOTE:MSG", 0, 1, tmpl_vcard_put_message, NULL, CTX_VNOTE);
        RegisterNamespace("VNOTE:UID", 0, 0, tmpl_vcard_put_uid, NULL, CTX_VNOTE);
+
+       RegisterMimeRenderer(HKEY("text/vnote"), render_MIME_VNote, 1, 300);
 }
index 5ade41ead4365c3069c5a69b2fe8577cc1ed3e6f..3dad18a29dfc54d3f04fc687d9b62a654633769f 100644 (file)
@@ -5,6 +5,7 @@
 #include "webcit.h"
 #include "webserver.h"
 
+
 HashList *GetWhoKnowsHash(StrBuf *Target, WCTemplputParams *TP)
 {
        StrBuf *Line;
@@ -680,6 +681,9 @@ void
 InitModule_ROOMLIST
 (void)
 {
+       /* we duplicate this, just to be shure its already done. */
+       RegisterCTX(CTX_ROOMS);
+       RegisterCTX(CTX_FLOORS);
 
        RegisterIterator("ITERATE:THISROOM:WHO_KNOWS", 0, NULL, GetWhoKnowsHash, NULL, DeleteHash, CTX_STRBUF, CTX_NONE, IT_NOFLAG);
        RegisterIterator("ITERATE:THISROOM:GNET", 1, NULL, GetNetConfigHash, NULL, NULL, CTX_STRBUFARR, CTX_NONE, IT_NOFLAG);
index 516c00d783846452011691cc629355e5a3a6fdc5..d64cf1f0418374a9c2eb9476492555c6ee4b0058 100644 (file)
@@ -149,3 +149,6 @@ int CompareRooms(const folder *room1, const folder *room2);
 #define REST_GOT_LOCAL_PART (1<<4)
 #define REST_NONEXIST (1<<5)
 
+
+extern CtxType CTX_ROOMS;
+extern CtxType CTX_FLOORS;
index 7a993dd6af96d169e704c9c17f482c55916b77e2..57d21443ef342c3071900b984cf666ee4fa23056 100644 (file)
@@ -15,6 +15,8 @@
 #include "webcit.h"
 #include "webserver.h"
 
+CtxType CTX_ROOMS = CTX_NONE;
+CtxType CTX_FLOORS = CTX_NONE;
 
 /*
  * Embed the room banner
@@ -570,6 +572,10 @@ void
 InitModule_ROOMTOKENS
 (void)
 {
+       /* we duplicate this, just to be shure its already done. */
+       RegisterCTX(CTX_ROOMS);
+       RegisterCTX(CTX_FLOORS);
+
        RegisterNamespace("ROOMBANNER", 0, 1, tmplput_roombanner, NULL, CTX_NONE);
 
        RegisterNamespace("FLOOR:ID", 0, 0, tmplput_FLOOR_ID, NULL, CTX_FLOORS);
index 7cdbac4b24bdcce72844a1d0b34be3b8870b2a4c..e7ff823b2779ebec018e1677ad41145f14357add 100644 (file)
@@ -249,6 +249,10 @@ void
 InitModule_ROOMVIEWS
 (void)
 {
+       /* we duplicate this, just to be shure its already done. */
+       RegisterCTX(CTX_ROOMS);
+       RegisterCTX(CTX_FLOORS);
+
        initialize_viewdefs();
 
        RegisterNamespace("THISROOM:VIEW_STRING", 0, 1, tmplput_CurrentRoomViewString, NULL, CTX_NONE);
index a49d6b30d29a2fe063b33ea4ffb9a83890317dec..214e7b4460759f252f02ed8be8e32fcfefd36ae7 100644 (file)
@@ -14,6 +14,9 @@
 
 #include "webcit.h"
 
+CtxType CTX_SIEVELIST = CTX_NONE;
+CtxType CTX_SIEVESCRIPT = CTX_NONE;
+
 #define MAX_SCRIPTS    100
 #define MAX_RULES      50
 #define RULES_SCRIPT   "__WebCit_Generated_Script__"
@@ -890,6 +893,8 @@ void
 InitModule_SIEVE
 (void)
 {
+       RegisterCTX(CTX_SIEVELIST);
+       RegisterCTX(CTX_SIEVESCRIPT);
        REGISTERTokenParamDefine(from);         
        REGISTERTokenParamDefine(tocc);         
        REGISTERTokenParamDefine(subject);      
index dede757680390795fccc3f398ef7994d726ebc5e..f755b54f9f9a1626ffee39979c27604975230e71 100644 (file)
@@ -15,6 +15,8 @@
 #include "webcit.h"
 #include "webserver.h"
 
+CtxType CTX_SRVLOG = CTX_NONE;
+
 HashList *ZoneHash = NULL;
 
 ConstStr ExpirePolicyString = {CStrOf(roompolicy)     };
@@ -472,6 +474,7 @@ void
 InitModule_SITECONFIG
 (void)
 {
+       RegisterCTX(CTX_SRVLOG);
        WebcitAddUrlHandler(HKEY("siteconfig"), "", 0, siteconfig, CTX_NONE);
 
        RegisterNamespace("SERV:CFG", 1, 2, tmplput_servcfg, NULL, CTX_NONE);
index 8bf02a7f60f8cb752d5aee22a2528e1fe3b74885..2004bad8c6141494bb794dd463030063887e60b9 100644 (file)
@@ -3,6 +3,8 @@
  */
 
 #include "webcit.h"
+CtxType CTX_MAILQITEM = CTX_NONE;
+CtxType CTX_MAILQ_RCPT = CTX_NONE;
 HashList *QItemHandlers = NULL;
 
 
@@ -406,6 +408,8 @@ void
 InitModule_SMTP_QUEUE
 (void)
 {
+       RegisterCTX(CTX_MAILQITEM);
+       RegisterCTX(CTX_MAILQ_RCPT);
 
        RegisterQItemHandler(HKEY("msgid"),             QItem_Handle_MsgID);
        RegisterQItemHandler(HKEY("envelope_from"),     QItem_Handle_EnvelopeFrom);
index 83f780875a068ba6024a2c5fda088f42033aea41..52f50f4489d3a4e9f4827c0bcbe8101b91688b91 100644 (file)
@@ -83,44 +83,70 @@ typedef struct _SortStruct {
        CompareFunc Reverse;
        CompareFunc GroupChange;
 
-       long ContextType;
+       CtxType ContextType;
 }SortStruct;
 
-const char *CtxNames[]  = {
-       "Context NONE",
-       "Context SITECFG",
-       "Context SESSION",
-       "Context INETCFG",
-       "Context VNOTE",
-       "Context WHO",
-       "Context PREF",
-       "Context NODECONF",
-       "Context USERLIST",
-       "Context MAILSUM",
-       "Context MIME_ATACH",
-       "Context FILELIST",
-       "Context STRBUF",
-       "Context STRBUFARR",
-       "Context LONGVECTOR",
-       "Context ROOMS",
-       "Context FLOORS",
-       "Context ITERATE",
-       "Context ICAL",
-       "Context DavNamespace",
-       "Context TAB",
-       "Context VCARD",
-       "Context SIEVE List",
-       "Context SIEVE Script",
-       "Context MailQ-Item",
-       "Context MailQ-Recipient",
-       "Context ServLogStatus",
-       "Context UNKNOWN"
-};
+HashList *CtxList = NULL;
+
+static CtxType CtxCounter = CTX_NONE;
+
+CtxType CTX_STRBUF = CTX_NONE;
+CtxType CTX_STRBUFARR = CTX_NONE;
+CtxType CTX_LONGVECTOR = CTX_NONE;
+
+CtxType CTX_ITERATE = CTX_NONE;
+CtxType CTX_TAB = CTX_NONE;
+
+void HFreeContextType(void *pCtx)
+{
+       CtxTypeStruct *FreeStruct = (CtxTypeStruct *) pCtx;
+       FreeStrBuf(&FreeStruct->Name);
+       free(FreeStruct);
+}
+void PutContextType(const char *name, long len, CtxType TheCtx)
+{
+       CtxTypeStruct *NewStruct;
+
+       NewStruct = (CtxTypeStruct*) malloc(sizeof(CtxTypeStruct));
+       NewStruct->Name = NewStrBufPlain(name, len);
+       NewStruct->Type = TheCtx;
+
+       Put(CtxList, IKEY(NewStruct->Type), NewStruct, HFreeContextType);
+}
+void RegisterContextType(const char *name, long len, CtxType *TheCtx)
+{
+       if (*TheCtx != CTX_NONE)
+               return;
+
+       *TheCtx = ++CtxCounter;
+       PutContextType(name, len, *TheCtx);
+}
+
+CtxTypeStruct *GetContextType(CtxType Type)
+{
+       void *pv = NULL;
+       GetHash(CtxList, IKEY(Type), &pv);
+       return pv;
+}
+
+const char *UnknownContext = "CTX_UNKNOWN";
+
+const char *ContextName(CtxType ContextType)
+{
+       CtxTypeStruct *pCtx;
+
+       pCtx = GetContextType(ContextType);
+
+       if (pCtx != NULL) 
+               return ChrPtr(pCtx->Name);
+       else
+               return UnknownContext;
+}
 
 void StackContext(WCTemplputParams *Super, 
                  WCTemplputParams *Sub, 
                  void *Context,
-                 int ContextType,
+                 CtxType ContextType,
                  int nArgs,
                  WCTemplateToken *Tokens)
 {
@@ -146,7 +172,7 @@ void UnStackContext(WCTemplputParams *Sub)
        }
 }
 
-void *GetContextPayload(WCTemplputParams *TP, int ContextType)
+void *GetContextPayload(WCTemplputParams *TP, CtxType ContextType)
 {
        WCTemplputParams *whichTP = TP;
 
@@ -167,13 +193,6 @@ void DestroySortStruct(void *vSort)
        free (Sort);
 }
 
-const char *ContextName(int ContextType)
-{
-       if (ContextType < CTX_UNKNOWN)
-               return CtxNames[ContextType];
-       else
-               return CtxNames[CTX_UNKNOWN];
-}
 
 void LogTemplateError (StrBuf *Target, const char *Type, int ErrorPos, WCTemplputParams *TP, const char *Format, ...)
 {
@@ -322,7 +341,7 @@ void RegisterNS(const char *NSName,
                int nMaxArgs, 
                WCHandlerFunc HandlerFunc, 
                WCPreevalFunc PreevalFunc,
-               int ContextRequired)
+               CtxType ContextRequired)
 {
        HashHandler *NewHandler;
        
@@ -1077,8 +1096,7 @@ WCTemplateToken *NewTemplateSubstitute(StrBuf *Buf,
                } else {
                        LogTemplateError(
                                NULL, "Token ", ERR_NAME, &TP,
-                               " isn't known to us.", 
-                               NULL);
+                               " isn't known to us.");
                }
                break;
        case SV_GETTEXT:
@@ -1815,8 +1833,8 @@ void tmplput_Comment(StrBuf *Target, WCTemplputParams *TP)
 typedef struct _HashIterator {
        HashList *StaticList;
        int AdditionalParams;
-       int ContextType;
-       int XPectContextType;
+       CtxType ContextType;
+       CtxType XPectContextType;
        int Flags;
        RetrieveHashlistFunc GetHash;
        HashDestructorFunc Destructor;
@@ -1829,8 +1847,8 @@ void RegisterITERATOR(const char *Name, long len,
                      RetrieveHashlistFunc GetHash, 
                      SubTemplFunc DoSubTempl,
                      HashDestructorFunc Destructor,
-                     int ContextType, 
-                     int XPectContextType, 
+                     CtxType ContextType, 
+                     CtxType XPectContextType, 
                      int Flags)
 {
        HashIterator *It;
@@ -2400,7 +2418,7 @@ void RegisterSortFunc(const char *name, long len,
                      CompareFunc Forward, 
                      CompareFunc Reverse, 
                      CompareFunc GroupChange, 
-                     long ContextType)
+                     CtxType ContextType)
 {
        SortStruct *NewSort;
 
@@ -2756,6 +2774,9 @@ void
 InitModule_SUBST
 (void)
 {
+       RegisterCTX(CTX_TAB);
+       RegisterCTX(CTX_ITERATE);
+
        memset(&NoCtx, 0, sizeof(WCTemplputParams));
        RegisterNamespace("--", 0, 2, tmplput_Comment, NULL, CTX_NONE);
        RegisterNamespace("SORT:ICON", 1, 2, tmplput_SORT_ICON, NULL, CTX_NONE);
@@ -2812,6 +2833,13 @@ ServerStartModule_SUBST
        Conditionals = NewHash(1, NULL);
        SortHash = NewHash(1, NULL);
        Defines = NewHash(1, NULL);
+       CtxList = NewHash(1, NULL);
+       
+       PutContextType(HKEY("CTX_NONE"), 0);
+
+       RegisterCTX(CTX_STRBUF);
+       RegisterCTX(CTX_STRBUFARR);
+       RegisterCTX(CTX_LONGVECTOR);
 }
 
 void
@@ -2833,6 +2861,7 @@ ServerShutdownModule_SUBST
        DeleteHash(&Conditionals);
        DeleteHash(&SortHash);
        DeleteHash(&Defines);
+       DeleteHash(&CtxList);
 }
 
 
index f0aa90c2407ffcc96ad4870369492d5e9413dd55..75bbf3e33d7d4346f8f9b322f5238550e84820cd 100644 (file)
@@ -36,35 +36,20 @@ enum {
 };
 
 #define CTX_NONE 0
-#define CTX_SITECFG 1
-#define CTX_SESSION 2
-#define CTX_INETCFG 3
-#define CTX_VNOTE 4
-#define CTX_WHO 5
-#define CTX_PREF 6
-#define CTX_NODECONF 7
-#define CTX_USERLIST 8
-#define CTX_MAILSUM 9
-#define CTX_MIME_ATACH 10
-#define CTX_FILELIST 11
-#define CTX_STRBUF 12
-#define CTX_STRBUFARR 13
-#define CTX_LONGVECTOR 14
-#define CTX_ROOMS 15
-#define CTX_FLOORS 16
-#define CTX_ITERATE 17
-#define CTX_ICAL 18
-#define CTX_DAVNS 19
-#define CTX_TAB 20
-#define CTX_VCARD 21
-#define CTX_SIEVELIST 22
-#define CTX_SIEVESCRIPT 23
-#define CTX_MAILQITEM 24
-#define CTX_MAILQ_RCPT 25
-#define CTX_SRVLOG 26
-
-#define CTX_UNKNOWN 27
 
+typedef int CtxType;
+typedef struct __CtxTypeStruct {
+       CtxType Type;
+       StrBuf *Name;
+} CtxTypeStruct;
+
+CtxTypeStruct *GetContextType(CtxType Type);
+void RegisterContextType(const char *name, long len, CtxType *TheCtx);
+#define RegisterCTX(a) RegisterContextType(#a, sizeof(#a) - 1, &a)
+
+extern CtxType CTX_STRBUF;
+extern CtxType CTX_STRBUFARR;
+extern CtxType CTX_LONGVECTOR;
 
 /**
  * @ingroup subst
@@ -74,7 +59,7 @@ enum {
  * if not, we will log/print an error and refuse to call it.
  */
 typedef struct _contexts {
-       int ContextType;                /* do we require a User Context ? */
+       CtxType ContextType;                /* do we require a User Context ? */
        int nMinArgs;                   /* How many arguments do we need at least? */
        int nMaxArgs;                   /* up to how many arguments can we handle? */
 } ContextFilter;
@@ -93,7 +78,7 @@ typedef int (*WCPreevalFunc)(WCTemplateToken *Token);
 /* make a template token a lookup key: */
 #define TKEY(a) TP->Tokens->Params[a]->Start, TP->Tokens->Params[a]->len
 
-void *GetContextPayload(WCTemplputParams *TP, int ContextType);
+void *GetContextPayload(WCTemplputParams *TP, CtxType ContextType);
 #define CTX(a) GetContextPayload(TP, a)
 
 /**
@@ -356,8 +341,8 @@ void RegisterITERATOR(const char *Name, long len, /* Our identifier */
                      RetrieveHashlistFunc GetHash, /* else retrieve the hashlist by calling this function */
                      SubTemplFunc DoSubTempl,       /* call this function on each iteration for svput & friends */
                      HashDestructorFunc Destructor, /* use this function to shut down the hash; NULL if its a reference */
-                     int ContextType,               /* which context do we provide to the subtemplate? */
-                     int XPectContextType,          /* which context do we expct to be called in? */
+                     CtxType ContextType,               /* which context do we provide to the subtemplate? */
+                     CtxType XPectContextType,          /* which context do we expct to be called in? */
                      int Flags);
 
 
@@ -365,7 +350,7 @@ void RegisterITERATOR(const char *Name, long len, /* Our identifier */
 void StackContext(WCTemplputParams *Super, 
                  WCTemplputParams *Sub, 
                  void *Context,
-                 int ContextType,
+                 CtxType ContextType,
                  int nArgs,
                  WCTemplateToken *Tokens);
 
@@ -382,7 +367,7 @@ void RegisterSortFunc(const char *name, long len,
                      CompareFunc Forward, 
                      CompareFunc Reverse, 
                      CompareFunc GroupChange, 
-                     long ContextType);
+                     CtxType ContextType);
 
 void dbg_print_longvector(long *LongVector);
 
index 657588a0d019809382e472ab7fc3e90d38f2a0d9..9e70f81d3c5dbc0b7467365d4bd3ecc649884382 100644 (file)
@@ -13,7 +13,7 @@
 #include "webcit.h"
 #include "webserver.h"
 
-
+CtxType CTX_USERLIST = CTX_NONE;
 /*
  *  show a list of available users to edit them
  *  message the header message???
@@ -806,6 +806,7 @@ void
 InitModule_USEREDIT
 (void)
 {
+       RegisterCTX(CTX_USERLIST);
        WebcitAddUrlHandler(HKEY("select_user_to_edit"), "", 0, _select_user_to_edit, 0);
        WebcitAddUrlHandler(HKEY("display_edituser"), "", 0, _display_edituser, 0);
        WebcitAddUrlHandler(HKEY("edituser"), "", 0, edituser, 0);
index 8be73cd870b4ae5525ce0cbebf5d227b03c4d7df..950fae6f43671e43fb53a16449eacd4390554b48 100644 (file)
@@ -14,7 +14,7 @@
 #include "webserver.h"
 #include "calendar.h"
 
-
+CtxType CTX_VCARD = CTX_NONE;
 
 ConstStr VCStr [] = {
        {HKEY("n")}, /* N is name, but only if there's no FN already there */
@@ -1511,6 +1511,7 @@ void
 InitModule_VCARD
 (void)
 {
+       RegisterCTX(CTX_VCARD);
        RegisterReadLoopHandlerset(
                VIEW_ADDRESSBOOK,
                vcard_GetParamsGetServerCall,
index de0160e7f9be9154e79fae280dadc9425fa1482d..15600113772395a92a616453e08461f718eae2c5 100644 (file)
@@ -1,6 +1,8 @@
 
 #include "webcit.h"
 
+CtxType CTX_WHO = CTX_NONE;
+
 typedef struct UserStateStruct {
        StrBuf *UserName;
        StrBuf *Room;
@@ -307,7 +309,7 @@ void
 InitModule_WHO
 (void)
 {
-       
+       RegisterCTX(CTX_WHO);
 
        WebcitAddUrlHandler(HKEY("terminate_session"), "", 0, _terminate_session, 0);
        WebcitAddUrlHandler(HKEY("edit_me"), "", 0, edit_me, 0);