]> code.citadel.org Git - citadel.git/blobdiff - webcit/webcit.h
* add new 'Context' Parameter to the template call
[citadel.git] / webcit / webcit.h
index b8353a90b7a1aef7cc67969c5e384f3cae327a29..3923d5aca84ed37609c727a1471c1d5e57f4ac0b 100644 (file)
@@ -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,6 +291,35 @@ 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);
+
 /**
  * \brief Values for wcs_type
  */
@@ -410,9 +438,6 @@ struct wcsession {
        int ctdl_pid;                           /**< Session ID on the Citadel server */
        char httpauth_user[256];                /**< only for GroupDAV sessions */
        char httpauth_pass[256];                /**< only for GroupDAV sessions */
-       size_t burst_len;                       /** <??? todo */
-       size_t burst_alloc;                     /** <??? todo */
-       char *burst;                            /** <??? todo */
        int gzip_ok;                            /**< Nonzero if Accept-encoding: gzip */
        int is_mailbox;                         /**< the current room is a private mailbox */
        struct folder *cache_fold;              /**< cache the iconbar room list */
@@ -428,6 +453,8 @@ struct wcsession {
        int time_format_cache;                  /**< which timeformat does our user like? */
        StrBuf *UrlFragment1;                   /**< first urlfragment, if NEED_URL is specified by the handler*/
        StrBuf *UrlFragment2;                   /**< second urlfragment, if NEED_URL is specified by the handler*/
+       StrBuf *WBuf;                           /**< Our output buffer */
+       StrBuf *HBuf;                           /**< Our HeaderBuffer */
 };
 
 /** values for WC->current_iconbar */
@@ -471,6 +498,12 @@ 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;
 
 void InitialiseSemaphores(void);
 void begin_critical_section(int which_one);
@@ -499,7 +532,7 @@ 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);
@@ -507,10 +540,11 @@ void fmout(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);
@@ -532,8 +566,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,
@@ -543,6 +582,7 @@ void output_headers(    int do_httpheaders,
                        int suppress_check,
                        int cache);
 void wprintf(const char *format,...)__attribute__((__format__(__printf__,1,2)));
+void hprintf(const char *format,...)__attribute__((__format__(__printf__,1,2)));
 void output_static(char *what);
 void display_mime_icon(void);
 void print_menu_box(char* Title, char *Class, int nLines, ...);
@@ -575,8 +615,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 +646,8 @@ 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 DoTemplate(const char *templatename, long len, void *Context);
+#define do_template(a, b) DoTemplate(a, sizeof(a) -1, b);
 
 
 int lingering_close(int fd);
@@ -644,7 +685,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,24 +744,26 @@ 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[];
-void read_server_binary(char *buffer, size_t total_len);
-char *read_server_text(void);
+int read_server_binary(StrBuf *Ret, size_t total_len);
+int StrBuf_ServGetBLOB(StrBuf *buf, long BlobSize);
+int read_server_text(StrBuf *Buf, long *nLines);;
 int goto_config_room(void);
 long locate_user_vcard(char *username, long usernum);
 void sleeeeeeeeeep(int);
-void http_transmit_thing(char *thing, size_t length, const char *content_type,
-                        int is_static);
+void http_transmit_thing(const char *content_type, int is_static);
 long unescape_input(char *buf);
 void do_selected_iconbar(void);
 int CtdlDecodeQuotedPrintable(char *decoded, char *encoded, int sourcelen);
 void spawn_another_worker_thread(void);
 void display_rss(char *roomname, char *request_method);
 void offer_languages(void);
-void set_selected_language(char *);
+void set_selected_language(const char *);
 void go_selected_language(void);
 void stop_selected_language(void);
 void preset_locale(void);
@@ -752,7 +799,7 @@ void ssl_lock(int mode, int n, const char *file, int line);
 int starttls(int sock);
 extern SSL_CTX *ssl_ctx;  
 int client_read_ssl(char *buf, int bytes, int timeout);
-void client_write_ssl(char *buf, int nbytes);
+void client_write_ssl(const char *buf, int nbytes);
 #endif
 
 #ifdef HAVE_ZLIB
@@ -764,7 +811,7 @@ int ZEXPORT compress_gzip(Bytef * dest, size_t * destLen,
 void utf8ify_rfc822_string(char *buf);
 
 void begin_burst(void);
-void end_burst(void);
+long end_burst(void);
 
 extern char *hourname[];       /**< Names of hours (12am, 1am, etc.) */