X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fwebcit.h;h=52f34f99e757e9a6c4fe50fa88e3e7245b9e9bea;hb=cceb9a8329c52e1476e7d8badaa252c39b6d2b19;hp=66456fe42daa98d9c7ce3065d31115f6714d949c;hpb=fe897801fd90cd5a8b7cbda3461694fda6506a11;p=citadel.git diff --git a/webcit/webcit.h b/webcit/webcit.h index 66456fe42..52f34f99e 100644 --- a/webcit/webcit.h +++ b/webcit/webcit.h @@ -113,9 +113,9 @@ #define PORT_NUM 2000 /* port number to listen on */ #define DEVELOPER_ID 0 #define CLIENT_ID 4 -#define CLIENT_VERSION 739 /* This version of WebCit */ -#define MINIMUM_CIT_VERSION 739 /* min required Citadel ver */ -#define LIBCITADEL_MIN 739 /* min required libcitadel ver */ +#define CLIENT_VERSION 760 /* This version of WebCit */ +#define MINIMUM_CIT_VERSION 744 /* min required Citadel ver */ +#define LIBCITADEL_MIN 744 /* min required libcitadel ver */ #define DEFAULT_HOST "localhost" /* Default Citadel server */ #define DEFAULT_PORT "504" #define TARGET "webcit01" /* Target for inline URL's */ @@ -214,7 +214,7 @@ struct urlcontent { /* * \brief information about us ??? */ -struct serv_info { +typedef struct _serv_info { int serv_pid; /* Process ID of the Citadel server */ StrBuf *serv_nodename; /* Node name of the Citadel server */ StrBuf *serv_humannode; /* human readable node name of the Citadel server */ @@ -232,7 +232,7 @@ struct serv_info { int serv_fulltext_enabled; /* Does the server have the full text index enabled? */ StrBuf *serv_svn_revision; /* SVN revision of the server */ int serv_supports_openid; /* Does the server support authentication via OpenID? */ -}; +} ServInfo; @@ -328,86 +328,116 @@ enum { */ typedef struct wcsession wcsession; struct wcsession { +/* infrastructural members */ wcsession *next; /**< Linked list */ + pthread_mutex_t SessionMutex; /**< mutex for exclusive access */ int wc_session; /**< WebCit session ID */ + int killthis; /**< Nonzero == purge this session */ + int is_mobile; /**< Client is a handheld browser */ + int ctdl_pid; /**< Session ID on the Citadel server */ + int nonce; /**< session nonce (to prevent session riding) */ + +/* Session local Members */ + int http_sock; /**< HTTP server socket */ + int serv_sock; /**< Client socket to Citadel server */ + StrBuf *ReadBuf; + int chat_sock; /**< Client socket to Citadel server - for chat */ + time_t lastreq; /**< Timestamp of most recent HTTP */ + time_t last_pager_check; /**< last time we polled for instant msgs */ + ServInfo *serv_info; /**< Iformation about the citserver we're connected to */ +/* Request local Members */ + StrBuf *CLineBuf; /**< linebuffering client stuff */ + 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 *UrlFragment3; /**< third urlfragment, if NEED_URL is specified by the handler*/ + StrBuf *UrlFragment4; /**< fourth urlfragment, if NEED_URL is specified by the handler*/ + StrBuf *WBuf; /**< Our output buffer */ + StrBuf *HBuf; /**< Our HeaderBuffer */ + StrBuf *this_page; /**< URL of current page */ + HashList *urlstrings; /**< variables passed to webcit in a URL */ + HashList *vars; /**< HTTP variable substitutions for this page */ + StrBuf *http_host; /**< HTTP Host: header */ + int is_ajax; /** < are we doing an ajax request? */ + int gzip_ok; /**< Nonzero if Accept-encoding: gzip */ + int nWildfireHeaders; /**< how many wildfire headers did we already send? */ + + StrBuf *trailing_javascript; /**< extra javascript to be appended to page */ + char ImportantMessage[SIZ]; /**< ??? todo */ + +/* accounting */ StrBuf *wc_username; /**< login name of current user */ + StrBuf *httpauth_user; /**< only for GroupDAV sessions */ StrBuf *wc_fullname; /**< Screen name of current user */ StrBuf *wc_password; /**< Password of current user */ - StrBuf *wc_roomname; /**< Room we are currently in */ - int connected; /**< nonzero == we are connected to Citadel */ - int logged_in; /**< nonzero == we are logged in */ + StrBuf *httpauth_pass; /**< only for GroupDAV sessions */ int axlevel; /**< this user's access level */ int is_aide; /**< nonzero == this user is an Aide */ int is_room_aide; /**< nonzero == this user is a Room Aide in this room */ - int http_sock; /**< HTTP server socket */ - int serv_sock; /**< Client socket to Citadel server */ - int chat_sock; /**< Client socket to Citadel server - for chat */ + int connected; /**< nonzero == we are connected to Citadel */ + int logged_in; /**< nonzero == we are logged in */ + int need_regi; /**< This user needs to register. */ + int need_vali; /**< New users require validation. */ + +/* Preferences */ + char cs_inet_email[256]; /**< User's preferred Internet addr. */ + char reply_to[512]; /**< reply-to address */ + HashList *hash_prefs; /**< WebCit preferences for this user */ + StrBuf *DefaultCharset; /**< Charset the user preferes */ + int downloaded_prefs; /** Has the client download its prefs yet? */ + int SavePrefsToServer; /**< Should we save our preferences to the server at the end of the request? */ + int selected_language; /**< Language selected by user */ + int time_format_cache; /**< which timeformat does our user like? */ + +/* current room related */ + StrBuf *wc_roomname; /**< Room we are currently in */ unsigned room_flags; /**< flags associated with the current room */ unsigned room_flags2; /**< flags associated with the current room */ int wc_view; /**< view for the current room */ int wc_default_view; /**< default view for the current room */ int wc_is_trash; /**< nonzero == current room is a Trash folder */ int wc_floor; /**< floor number of current room */ + int is_mailbox; /**< the current room is a private mailbox */ + +/* next/previous room thingabob */ + struct march *march; /**< march mode room list */ char ugname[128]; /**< where does 'ungoto' take us */ long uglsn; /**< last seen message number for ungoto */ + +/* Uploading; mime attachments for composing messages */ + HashList *attachments; /**< list of attachments for 'enter message' */ int upload_length; /**< content length of http-uploaded data */ char *upload; /**< pointer to http-uploaded data */ char upload_filename[PATH_MAX]; /**< filename of http-uploaded data */ char upload_content_type[256]; /**< content type of http-uploaded data */ + int new_mail; /**< user has new mail waiting */ int remember_new_mail; /**< last count of new mail messages */ - int need_regi; /**< This user needs to register. */ - int need_vali; /**< New users require validation. */ - char cs_inet_email[256]; /**< User's preferred Internet addr. */ - pthread_mutex_t SessionMutex; /**< mutex for exclusive access */ - time_t lastreq; /**< Timestamp of most recent HTTP */ - int killthis; /**< Nonzero == purge this session */ - struct march *march; /**< march mode room list */ - char reply_to[512]; /**< reply-to address */ + +/* Roomiew control */ HashList *summ; /**< list of messages for mailbox summary view */ /** Perhaps these should be within a struct instead */ long startmsg; /**< message number to start at */ long maxmsgs; /**< maximum messages to display */ long num_displayed; /**< number of messages actually displayed */ - int is_mobile; /**< Client is a handheld browser */ - 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 */ - int SavePrefsToServer; /**< Should we save our preferences to the server at the end of the request? */ HashList *disp_cal_items; /**< sorted list of calendar items; startdate is the sort criteria. */ - HashList *attachments; /**< list of attachments for 'enter message' */ + + char last_chat_user[256]; /**< ??? todo */ - char ImportantMessage[SIZ]; /**< ??? todo */ - int ctdl_pid; /**< Session ID on the Citadel server */ - StrBuf *httpauth_user; /**< only for GroupDAV sessions */ - StrBuf *httpauth_pass; /**< only for GroupDAV sessions */ - int gzip_ok; /**< Nonzero if Accept-encoding: gzip */ - int is_mailbox; /**< the current room is a private mailbox */ + +/* Iconbar controls */ struct folder *cache_fold; /**< cache the iconbar room list */ int cache_max_folders; /**< ??? todo */ int cache_num_floors; /**< ??? todo */ time_t cache_timestamp; /**< ??? todo */ HashList *IconBarSettings; /**< which icons should be shown / not shown? */ const StrBuf *floordiv_expanded; /**< which floordiv currently expanded */ - int selected_language; /**< Language selected by user */ - time_t last_pager_check; /**< last time we polled for instant msgs */ - int nonce; /**< session nonce (to prevent session riding) */ - 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 *UrlFragment3; /**< third urlfragment, if NEED_URL is specified by the handler*/ - StrBuf *WBuf; /**< Our output buffer */ - StrBuf *HBuf; /**< Our HeaderBuffer */ - StrBuf *CLineBuf; /**< linebuffering client stuff */ - StrBuf *DefaultCharset; /**< Charset the user preferes */ + + + +/* cache stuff for templates. TODO: find a smartrer way */ HashList *ServCfg; /**< cache our server config for editing */ HashList *InetCfg; /**< Our inet server config for editing */ - StrBuf *trailing_javascript; /**< extra javascript to be appended to page */ - int is_ajax; /** < are we doing an ajax request? */ - int downloaded_prefs; /** Has the client download its prefs yet? */ }; /* values for WC->current_iconbar */ @@ -461,7 +491,6 @@ extern char file_crpt_file_csr[PATH_MAX]; extern char file_crpt_file_cer[PATH_MAX]; #endif -struct serv_info serv_info; extern char floorlist[128][SIZ]; extern char *axdefs[]; extern char *ctdlhost, *ctdlport; @@ -488,7 +517,7 @@ void cookie_to_stuff(StrBuf *cookie, int *session, StrBuf *user, StrBuf *pass, StrBuf *room); -void locate_host(char *, int); +void locate_host(StrBuf *TBuf, int); void become_logged_in(const StrBuf *user, const StrBuf *pass, StrBuf *serv_response); void openid_manual_create(void); void display_login(); @@ -499,11 +528,13 @@ void display_main_menu(void); void display_aide_menu(void); void display_advanced_menu(void); void slrp_highest(void); -void get_serv_info(char *, char *); +ServInfo *get_serv_info(StrBuf *, char *); +void DeleteServInfo(ServInfo **FreeMe); int uds_connectsock(char *); int tcp_connectsock(char *, char *); int serv_getln(char *strbuf, int bufsize); int StrBuf_ServGetln(StrBuf *buf); +int StrBuf_ServGetlnBuffered(StrBuf *buf); int GetServerStatus(StrBuf *Line, long* FullState); void serv_puts(const char *string); void who(void); @@ -549,15 +580,14 @@ void escputs1(const char *strbuf, int nbsp, int nolinebreaks); void msgesc(char *target, size_t tlen, char *strbuf); void msgescputs(char *strbuf); void msgescputs1(char *strbuf); -void stripout(char *str, char leftboundary, char rightboundary); void dump_vars(void); void embed_main_menu(void); void serv_read(char *buf, int bytes); void SetAccessCommand(long Oper); void do_addrbook_view(addrbookent *addrbook, int num_ab); -void fetch_ab_name(message_summary *Msg, char *namebuf); -void display_vcard(StrBuf *Target, const char *vcard_source, char alpha, int full, char *storename, long msgnum); +void fetch_ab_name(message_summary *Msg, char **namebuf); +void display_vcard(StrBuf *Target, const char *vcard_source, char alpha, int full, char **storename, long msgnum); void jsonMessageList(void); void new_summary_view(void); void getseen(void); @@ -575,10 +605,8 @@ void confirm_delete_room(void); void validate(void); 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(const char *buf, int nbytes); -void serv_puts(const char *string); void serv_putbuf(const StrBuf *string); void serv_printf(const char *format,...)__attribute__((__format__(__printf__,1,2))); void load_floorlist(void); @@ -632,7 +660,7 @@ void updatenote(void); void parse_calendar_view_request(struct calview *c); void render_calendar_view(struct calview *c); void do_tasks_view(void); -void calendar_summary_view(void); +int calendar_summary_view(void); void free_march_list(wcsession *wcf); void display_rules_editor_inner_div(void); void generate_uuid(char *); @@ -689,10 +717,16 @@ void tabbed_dialog(int num_tabs, char *tabnames[]); void begin_tab(int tabnum, int num_tabs); void end_tab(int tabnum, int num_tabs); void str_wiki_index(char *s); +long guess_calhourformat(void); int get_time_format_cached (void); int xtoi(const char *in, size_t len); const char *get_selected_language(void); -void webcit_fmt_date(char *buf, time_t thetime, int brief); + +#define DATEFMT_FULL 0 +#define DATEFMT_BRIEF 1 +#define DATEFMT_RAWDATE 2 +#define DATEFMT_LOCALEDATE 3 +void webcit_fmt_date(char *buf, time_t thetime, int Format); int fetch_http(char *url, char *target_buf, int maxbytes); void free_attachments(wcsession *sess); void summary(void);