X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fwebcit.h;h=7f01648f66a656a81058aa6b4582e8b0f50153bf;hb=3c8aa1790772c4f64f75a9c3ae3260154abd0120;hp=1e02177b5a821915bef29c9689fbba19c1bb2d0f;hpb=f4cdbd3692e2e04c711cfa1cb11d3a6dace2061f;p=citadel.git diff --git a/webcit/webcit.h b/webcit/webcit.h index 1e02177b5..7f01648f6 100644 --- a/webcit/webcit.h +++ b/webcit/webcit.h @@ -228,8 +228,7 @@ struct httprequest { typedef struct urlcontent urlcontent; struct urlcontent { char url_key[32]; /**< the variable name */ - char *url_data; /**< its value */ - size_t url_data_size; /**< how big is it? */ + StrBuf *url_data; /**< its value */ }; /** @@ -292,13 +291,59 @@ typedef struct _wcsubst { void (*wcs_function)(void); /**< funcion hook ???*/ } wcsubst; +#define TYPE_STR 1 +#define TYPE_LONG 2 +#define MAXPARAM 10 +typedef struct _TemplateParam { + const char *Start; + int Type; + long len; + long lvalue; +} TemplateParam; + +typedef struct _TemplateToken { + const char *pTokenStart; + size_t TokenStart; + size_t TokenEnd; + const char *pTokenEnd; + int IsGettext; + + const char *pName; + size_t NameEnd; + + int HaveParameters; + int nParameters; + TemplateParam *Params[MAXPARAM]; +} WCTemplateToken; + +typedef void (*WCHandlerFunc)(StrBuf *Target, int nArgs, WCTemplateToken *Token, void *Context); +void RegisterNS(const char *NSName, long len, + int nMinArgs, + int nMaxArgs, + WCHandlerFunc HandlerFunc); +#define RegisterNamespace(a, b, c, d) RegisterNS(a, sizeof(a)-1, b, c, d) + + +typedef void (*SubTemplFunc)(StrBuf *TemplBuffer, void *Context); +typedef HashList *(*RetrieveHashlistFunc)(void); +typedef void (*HashDestructorFunc) (HashList *KillMe); +void RegisterITERATOR(const char *Name, long len, + HashList *StaticList, + RetrieveHashlistFunc GetHash, + SubTemplFunc DoSubTempl, + HashDestructorFunc Destructor); +#define RegisterIterator(a, b, c, d, e) RegisterITERATOR(a, sizeof(a)-1, b, c, d, e) + + /** * \brief Values for wcs_type */ enum { - WCS_STRING, /**< its a string */ - WCS_FUNCTION, /**< its a function callback */ - WCS_SERVCMD /**< its a command to send to the citadel server */ + WCS_STRING, /**< its a string */ + WCS_FUNCTION, /**< its a function callback */ + WCS_SERVCMD, /**< its a command to send to the citadel server */ + WCS_STRBUF, /**< its a strbuf we own */ + WCS_STRBUF_REF /**< its a strbuf we mustn't free */ }; /** @@ -470,6 +515,16 @@ extern char wizard_filename[]; extern time_t if_modified_since; extern int follow_xff; extern HashList *HandlerHash; +extern HashList *PreferenceHooks; +extern HashList *WirelessTemplateCache; +extern HashList *WirelessLocalTemplateCache; +extern HashList *TemplateCache; +extern HashList *LocalTemplateCache; +extern HashList *GlobalNS; +extern HashList *Iterators; +extern HashList *ZoneHash; + + void InitialiseSemaphores(void); void begin_critical_section(int which_one); @@ -498,18 +553,20 @@ int uds_connectsock(char *); int tcp_connectsock(char *, char *); int serv_getln(char *strbuf, int bufsize); int StrBuf_ServGetln(StrBuf *buf); -void serv_puts(char *string); +void serv_puts(const char *string); void who(void); void who_inner_div(void); void ajax_mini_calendar(void); void fmout(char *align); +void _fmout(StrBuf *Targt, char *align); void pullquote_fmout(void); void wDumpContent(int); -/* TODO: get rid of the non-const-typecast */ -#define bstr(a) (char*) Bstr(a, sizeof(a) - 1) -const char *BSTR(char *key); -const char *Bstr(char *key, size_t keylen); + +/* These may return NULL if not foud */ +#define sbstr(a) SBstr(a, sizeof(a) - 1) +const StrBuf *SBSTR(const char *key); +const StrBuf *SBstr(const char *key, size_t keylen); #define xbstr(a, b) (char*) XBstr(a, sizeof(a) - 1, b) const char *XBstr(char *key, size_t keylen, size_t *len); @@ -531,8 +588,13 @@ int HAVEBSTR(char *key); int YesBstr(char *key, size_t keylen); int YESBSTR(char *key); +/* TODO: get rid of the non-const-typecast */ +#define bstr(a) (char*) Bstr(a, sizeof(a) - 1) +const char *BSTR(char *key); +const char *Bstr(char *key, size_t keylen); void urlescputs(char *); +void hurlescputs(char *); void jsesc(char *, size_t, char *); void jsescputs(char *); void output_headers( int do_httpheaders, @@ -575,8 +637,8 @@ void display_graphics_upload(char *, char *, char *); void do_graphics_upload(char *upl_cmd); void serv_read(char *buf, int bytes); void serv_gets(char *strbuf); -void serv_write(char *buf, int nbytes); -void serv_puts(char *string); +void serv_write(const char *buf, int nbytes); +void serv_puts(const char *string); void serv_printf(const char *format,...)__attribute__((__format__(__printf__,1,2))); void load_floorlist(void); void shutdown_sessions(void); @@ -606,7 +668,11 @@ void SVCALLBACK(char *keyname, var_callback_fptr fcn_ptr); void SVCallback(char *keyname, size_t keylen, var_callback_fptr fcn_ptr); #define svcallback(a, b) SVCallback(a, sizeof(a) - 1, b) -void do_template(void *templatename); +void SVPUTBuf(const char *keyname, int keylen, StrBuf *Buf, int ref); +#define SVPutBuf(a, b, c); SVPUTBuf(a, sizeof(a) - 1, b, c) + +void DoTemplate(const char *templatename, long len, void *Context, StrBuf *Target); +#define do_template(a, b) DoTemplate(a, sizeof(a) -1, b, NULL); int lingering_close(int fd); @@ -644,7 +710,11 @@ int get_PREF_YESNO(const char *key, size_t keylen, int *value, int Default); #define set_pref_yesno(a, b, c) set_PREF_YESNO(a, sizeof(a) - 1, b, c) void set_PREF_YESNO(const char *key, size_t keylen, int value, int save_to_server); +#define get_room_pref(a) get_ROOM_PREFS(a, sizeof(a) - 1) +StrBuf *get_ROOM_PREFS(const char *key, size_t keylen); +#define set_room_pref(a, b, c) set_ROOM_PREFS(a, sizeof(a) - 1, b, c) +void set_ROOM_PREFS(const char *key, size_t keylen, StrBuf *value, int save_to_server); int is_msg_in_mset(char *mset, long msgnum); void display_addressbook(long msgnum, char alpha); @@ -699,7 +769,9 @@ int ical_ctdl_is_overlap( #ifdef ENABLE_NLS void initialize_locales(void); +void ShutdownLocale(void); #endif +void TmplGettext(StrBuf *Target, int nTokens, WCTemplateToken *Token); extern char *months[]; extern char *days[];