X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fwebcit.h;h=94c4832fae7f30ff26774812b2853f4f7e1efd9a;hb=85a7e6b84462d72e14a287d4bbdbd3e41c97e76d;hp=7dd9d277c3d0632e8cc84da84ffe304663f78f0e;hpb=266e75a42b41389c5fe5de8e66b725dcc79e9062;p=citadel.git diff --git a/webcit/webcit.h b/webcit/webcit.h index 7dd9d277c..94c4832fa 100644 --- a/webcit/webcit.h +++ b/webcit/webcit.h @@ -124,9 +124,9 @@ extern locale_t wc_locales[]; #define PORT_NUM 2000 /* port number to listen on */ #define DEVELOPER_ID 0 #define CLIENT_ID 4 -#define CLIENT_VERSION 734 /* This version of WebCit */ +#define CLIENT_VERSION 735 /* This version of WebCit */ #define MINIMUM_CIT_VERSION 730 /* min required Citadel ver */ -#define LIBCITADEL_MIN 109 /* min required libcitadel ver */ +#define LIBCITADEL_MIN 113 /* min required libcitadel ver */ #define DEFAULT_HOST "localhost" /* Default Citadel server */ #define DEFAULT_PORT "504" #define LB (1) /* Internal escape chars */ @@ -225,10 +225,11 @@ struct httprequest { /** * \brief Linked list of session variables encoded in an x-www-urlencoded content type */ +typedef struct urlcontent urlcontent; struct urlcontent { - struct urlcontent *next; /**< the next variable in the list */ char url_key[32]; /**< the variable name */ char *url_data; /**< its value */ + size_t url_data_size; /**< how big is it? */ }; /** @@ -283,13 +284,12 @@ struct roomlisting { /** * \brief Dynamic content for variable substitution in templates */ -struct wcsubst { - struct wcsubst *next; /**< next item in the list */ +typedef struct _wcsubst { int wcs_type; /**< which type of ??? */ char wcs_key[32]; /**< ??? what?*/ void *wcs_value; /**< ???? what?*/ void (*wcs_function)(void); /**< funcion hook ???*/ -}; +} wcsubst; /** * \brief Values for wcs_type @@ -319,7 +319,7 @@ struct message_summary { long msgnum; /**< the message number on the citadel server */ char from[128]; /**< the author */ char to[128]; /**< the recipient */ - char subj[128]; /**< the title / subject */ + char subj[256]; /**< the title / subject */ int hasattachments; /**< does it have atachments? */ int is_new; /**< is it yet read? */ }; @@ -338,6 +338,20 @@ struct folder { int num_rooms; /**< If this is a floor, how many rooms does it have */ }; +typedef struct _disp_cal { + icalcomponent *cal; /**< cal items for display */ + long cal_msgnum; /**< cal msgids for display */ + char *from; /**< owner of this component */ + int unread; /**< already seen by the user? */ + + time_t event_start; + time_t event_end; + + int multi_day_event; + int is_repeat; +} disp_cal; + + /** * \brief One of these is kept for each active Citadel session. * HTTP transactions are bound to on e at a time. @@ -383,18 +397,12 @@ struct wcsession { int num_summ; /**< number of messages in mailbox summary view */ struct message_summary *summ; /**< array of messages for mailbox summary view */ int is_wap; /**< Client is a WAP gateway */ - struct urlcontent *urlstrings; /**< variables passed to webcit in a URL */ - struct wcsubst *vars; /**< HTTP variable substitutions for this page */ + HashList *urlstrings; /**< variables passed to webcit in a URL */ + HashList *vars; /**< HTTP variable substitutions for this page */ char this_page[512]; /**< URL of current page */ char http_host[512]; /**< HTTP Host: header */ HashList *hash_prefs; /**< WebCit preferences for this user */ - struct disp_cal { - icalcomponent *cal; /**< cal items for display */ - long cal_msgnum; /**< cal msgids for display */ - char *from; /**< owner of this component */ - int unread; /**< already seen by the user? */ - } *disp_cal; - int num_cal; /**< number of calendar items for display */ + HashList *disp_cal_items; /**< sorted list of calendar items; startdate is the sort criteria. */ struct wc_attachment *first_attachment; /**< linked list of attachments for 'enter message' */ char last_chat_user[256]; /**< ??? todo */ char ImportantMessage[SIZ]; /**< ??? todo */ @@ -458,6 +466,7 @@ extern int setup_wizard; extern char wizard_filename[]; extern time_t if_modified_since; extern int follow_xff; +extern HashList *HandlerHash; void do_setup_wizard(void); @@ -475,7 +484,9 @@ void cookie_to_stuff(char *cookie, int *session, void locate_host(char *, int); void become_logged_in(char *, char *, char *); void do_login(void); +void do_openid_login(void); void display_login(char *mesg); +void display_openid_login(char *mesg); void do_welcome(void); void do_logout(void); void display_main_menu(void); @@ -501,7 +512,33 @@ void fmout(char *align); void pullquote_fmout(void); void wDumpContent(int); void serv_printf(const char *format,...); -char *bstr(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); + +#define xbstr(a, b) (char*) XBstr(a, sizeof(a) - 1, b) +const char *XBstr(char *key, size_t keylen, size_t *len); +const char *XBSTR(char *key, size_t *len); + +#define lbstr(a) LBstr(a, sizeof(a) - 1) +long LBstr(char *key, size_t keylen); +long LBSTR(char *key); + +#define ibstr(a) IBstr(a, sizeof(a) - 1) +int IBstr(char *key, size_t keylen); +int IBSTR(char *key); + +#define havebstr(a) HaveBstr(a, sizeof(a) - 1) +int HaveBstr(char *key, size_t keylen); +int HAVEBSTR(char *key); + +#define yesbstr(a) YesBstr(a, sizeof(a) - 1) +int YesBstr(char *key, size_t keylen); +int YESBSTR(char *key); + + void urlescputs(char *); void jsesc(char *, size_t, char *); void jsescputs(char *); @@ -517,7 +554,7 @@ void display_mime_icon(void); void print_menu_box(char* Title, char *Class, int nLines, ...); long stresc(char *target, long tSize, char *strbuf, int nbsp, int nolinebreaks); void escputs(char *strbuf); -void url(char *buf); +void url(char *buf, size_t bufsize); void escputs1(char *strbuf, int nbsp, int nolinebreaks); void msgesc(char *target, size_t tlen, char *strbuf); void msgescputs(char *strbuf); @@ -607,9 +644,22 @@ void chat_send(void); void http_redirect(char *); void clear_substs(struct wcsession *wc); void clear_local_substs(void); -void svprintf(char *keyname, int keytype, const char *format,...); -void svcallback(char *keyname, void (*fcn_ptr)() ); + + +typedef void (*var_callback_fptr)(); + + +void SVPut(char *keyname, size_t keylen, int keytype, char *Data); +#define svput(a, b, c) SVPut(a, sizeof(a) - 1, b, c) +void svprintf(char *keyname, size_t keylen, int keytype, const char *format,...); +void SVPRINTF(char *keyname, int keytype, const char *format,...); +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); + + int lingering_close(int fd); char *memreadline(char *start, char *buf, int maxlen); char *memreadlinelen(char *start, char *buf, int maxlen, int *retlen); @@ -654,10 +704,11 @@ void cal_process_attachment(char *part_source, long msgnum, char *cal_partnum); void display_calendar(long msgnum, int unread); void display_task(long msgnum, int unread); void display_note(long msgnum, int unread); +void add_new_note(void); void updatenote(void); +void ajax_update_note(void); void do_calendar_view(void); void do_tasks_view(void); -void free_calendar_buffer(void); void calendar_summary_view(void); int load_msg_ptrs(char *servcmd, int with_headers); void free_attachments(struct wcsession *sess); @@ -699,6 +750,7 @@ void display_edit_task(void); void save_task(void); void display_edit_event(void); void save_event(void); +icaltimezone *get_default_icaltimezone(void); void display_icaltimetype_as_webform(struct icaltimetype *, char *); void icaltime_from_webform(struct icaltimetype *result, char *prefix); void icaltime_from_webform_dateonly(struct icaltimetype *result, char *prefix); @@ -731,7 +783,7 @@ 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 unescape_input(char *buf); +long unescape_input(char *buf); void do_iconbar(void); void do_iconbar_roomlist(void); void do_selected_iconbar(void); @@ -755,6 +807,7 @@ void display_wiki_page(void); int get_time_format_cached (void); int xtoi(char *in, size_t len); void webcit_fmt_date(char *buf, time_t thetime, int brief); +void fetch_http(char *url); #ifdef HAVE_ICONV @@ -796,6 +849,15 @@ extern char *hourname[]; /**< Names of hours (12am, 1am, etc.) */ void http_datestring(char *buf, size_t n, time_t xtime); +typedef void (*WebcitHandlerFunc)(void); +typedef struct _WebcitHandler{ + WebcitHandlerFunc F; + int IsAjax; +} WebcitHandler; +void WebcitAddUrlHandler(const char * UrlString, long UrlSLen, WebcitHandlerFunc F, int IsAjax); + + + /* These should be empty, but we have them for testing */ #define DEFAULT_HTTPAUTH_USER "" #define DEFAULT_HTTPAUTH_PASS ""