* made *bstr things const
authorWilfried Göesgens <willi@citadel.org>
Thu, 4 Sep 2008 17:49:41 +0000 (17:49 +0000)
committerWilfried Göesgens <willi@citadel.org>
Thu, 4 Sep 2008 17:49:41 +0000 (17:49 +0000)
* add DOTABBED api to the template stuff
* add sysconfig detemplater
* create a list of config settings, for hashing and reading from the query params.
* print empty lin with serv_puts to remove warnings.

webcit/context_loop.c
webcit/siteconfig.c
webcit/subst.c
webcit/tabs.c
webcit/tcp_sockets.c
webcit/webcit.c
webcit/webcit.h

index b00852c179b252aed9c8f2da81e2a3cd428ffef4..45113cbc52fc48ff291c6f572d6764a3e0d456f8 100644 (file)
@@ -34,6 +34,30 @@ void free_attachments(struct wcsession *sess) {
 }
 
 
+void DestroySession(struct wcsession **sessions_to_kill)
+{
+       close((*sessions_to_kill)->serv_sock);
+       close((*sessions_to_kill)->chat_sock);
+//             if ((*sessions_to_kill)->preferences != NULL) {
+//                     free((*sessions_to_kill)->preferences);
+//             }
+       if ((*sessions_to_kill)->cache_fold != NULL) {
+               free((*sessions_to_kill)->cache_fold);
+       }
+       free_attachments((*sessions_to_kill));
+       free_march_list((*sessions_to_kill));
+       DeleteHash(&((*sessions_to_kill)->hash_prefs));
+       DeleteHash(&((*sessions_to_kill)->IconBarSetttings));
+       DeleteHash(&((*sessions_to_kill)->ServCfg));
+       FreeStrBuf(&((*sessions_to_kill)->UrlFragment1));
+       FreeStrBuf(&((*sessions_to_kill)->UrlFragment2));
+       FreeStrBuf(&((*sessions_to_kill)->WBuf));
+       FreeStrBuf(&((*sessions_to_kill)->HBuf));
+
+       free((*sessions_to_kill));
+       (*sessions_to_kill) = NULL;
+}
+
 void shutdown_sessions(void)
 {
        struct wcsession *sptr;
@@ -90,26 +114,10 @@ void do_housekeeping(void)
        while (sessions_to_kill != NULL) {
                lprintf(3, "Destroying session %d\n", sessions_to_kill->wc_session);
                pthread_mutex_lock(&sessions_to_kill->SessionMutex);
-               close(sessions_to_kill->serv_sock);
-               close(sessions_to_kill->chat_sock);
-//             if (sessions_to_kill->preferences != NULL) {
-//                     free(sessions_to_kill->preferences);
-//             }
-               if (sessions_to_kill->cache_fold != NULL) {
-                       free(sessions_to_kill->cache_fold);
-               }
-               free_attachments(sessions_to_kill);
-               free_march_list(sessions_to_kill);
-               DeleteHash(&(sessions_to_kill->hash_prefs));
-               DeleteHash(&(sessions_to_kill->IconBarSetttings));
-               FreeStrBuf(&(sessions_to_kill->UrlFragment1));
-               FreeStrBuf(&(sessions_to_kill->UrlFragment2));
-               FreeStrBuf(&(sessions_to_kill->WBuf));
-               FreeStrBuf(&(sessions_to_kill->HBuf));
-
                pthread_mutex_unlock(&sessions_to_kill->SessionMutex);
                sptr = sessions_to_kill->next;
-               free(sessions_to_kill);
+
+               DestroySession(&sessions_to_kill);
                sessions_to_kill = sptr;
                --num_sessions;
        }
index cce2baebc6e8e4eb3067f0aba998f92ee2351dae..aa034ca83a49e790ebe4a7d57343718591bf7cf1 100644 (file)
@@ -784,11 +784,153 @@ void display_siteconfig(void)
        wDumpContent(1);
 }
 
+typedef struct _CfgMapping {
+       int type;
+       const char *Key;
+       long len;
+}CfgMapping;
+
+#define CFG_STR 1
+#define CFG_YES 2
+#define CFG_NO 3
+
+CfgMapping ServerConfig[] = {
+       {CFG_STR, HKEY("c_nodename")},
+       {CFG_STR, HKEY("c_fqdn")},
+       {CFG_STR, HKEY("c_humannode")},
+       {CFG_STR, HKEY("c_phonenum")},
+       {CFG_YES, HKEY("c_creataide")},
+       {CFG_STR, HKEY("c_sleeping")},
+       {CFG_STR, HKEY("c_initax")},
+       {CFG_YES, HKEY("c_regiscall")},
+       {CFG_YES, HKEY("c_twitdetect")},
+       {CFG_STR, HKEY("c_twitroom")},
+       {CFG_STR, HKEY("c_moreprompt")},
+       {CFG_YES, HKEY("c_restrict")},
+       {CFG_STR, HKEY("c_bbs_city")},
+       {CFG_STR, HKEY("c_sysadm")},
+       {CFG_STR, HKEY("c_maxsessions")},
+       {CFG_STR, HKEY("reserved1")},
+       {CFG_STR, HKEY("c_userpurge")},
+       {CFG_STR, HKEY("c_roompurge")},
+       {CFG_STR, HKEY("c_logpages")},
+       {CFG_STR, HKEY("c_createax")},
+       {CFG_STR, HKEY("c_maxmsglen")},
+       {CFG_STR, HKEY("c_min_workers")},
+       {CFG_STR, HKEY("c_max_workers")},
+       {CFG_STR, HKEY("c_pop3_port")},
+       {CFG_STR, HKEY("c_smtp_port")},
+       {CFG_NO , HKEY("c_rfc822_strict_from")},        /* note: reverse bool */
+       {CFG_YES, HKEY("c_aide_zap")},
+       {CFG_STR, HKEY("c_imap_port")},
+       {CFG_STR, HKEY("c_net_freq")},
+       {CFG_YES, HKEY("c_disable_newu")},
+       {CFG_STR, HKEY("reserved2")},
+       {CFG_STR, HKEY("c_purge_hour")},
+       {CFG_STR, HKEY("c_ldap_host")},
+       {CFG_STR, HKEY("c_ldap_port")},
+       {CFG_STR, HKEY("c_ldap_base_dn")},
+       {CFG_STR, HKEY("c_ldap_bind_dn")},
+       {CFG_STR, HKEY("c_ldap_bind_pw")},
+       {CFG_STR, HKEY("c_ip_addr")},
+       {CFG_STR, HKEY("c_msa_port")},
+       {CFG_STR, HKEY("c_imaps_port")},
+       {CFG_STR, HKEY("c_pop3s_port")},
+       {CFG_STR, HKEY("c_smtps_port")},
+       {CFG_YES, HKEY("c_enable_fulltext")},
+       {CFG_YES, HKEY("c_auto_cull")},
+       {CFG_YES, HKEY("c_instant_expunge")},
+       {CFG_YES, HKEY("c_allow_spoofing")},
+       {CFG_YES, HKEY("c_journal_email")},
+       {CFG_YES, HKEY("c_journal_pubmsgs")},
+       {CFG_STR, HKEY("c_journal_dest")},
+       {CFG_STR, HKEY("c_default_cal_zone")},
+       {CFG_STR, HKEY("c_pftcpdict_port")},
+       {CFG_STR, HKEY("c_mgesve_port")},
+       {CFG_STR, HKEY("c_auth_mode")},
+       {CFG_STR, HKEY("c_funambol_host")},
+       {CFG_STR, HKEY("c_funambol_port")},
+       {CFG_STR, HKEY("c_funambol_source")},
+       {CFG_STR, HKEY("c_funambol_auth")},
+       {CFG_YES, HKEY("c_rbl_at_greeting")},
+       {CFG_STR, HKEY("c_master_user")},
+       {CFG_STR, HKEY("c_master_pass")},
+       {CFG_STR, HKEY("c_pager_program")},
+       {CFG_YES, HKEY("c_imap_keep_from")},
+       {CFG_STR, HKEY("c_xmpp_c2s_port")},
+       {CFG_STR, HKEY("c_xmpp_s2s_port")},
+       {CFG_STR, HKEY("c_pop3_fetch")},
+       {CFG_STR, HKEY("c_pop3_fastest")}
+};
+
+
+/*
+ * \brief display all configuration items
+ */
+void load_siteconfig(void)
+{
+       struct wcsession *WCC = WC;
+       StrBuf *Buf, *Token;
+       HashList *Cfg;
+       char buf[SIZ];
+       long len;
+       int i;
+       
+       if (WCC->ServCfg == NULL)
+               WCC->ServCfg = NewHash(1, NULL);
+       Cfg = WCC->ServCfg;
+
+       serv_printf("CONF get");
+       serv_getln(buf, sizeof buf);
+       i = 0;
+       while (len = serv_getln(buf, sizeof buf), 
+              strcmp(buf, "000") && 
+              (i < sizeof(ServerConfig))) 
+       {
+               Put(Cfg,
+                   ServerConfig[i].Key, 
+                   ServerConfig[i].len, 
+                   NewStrBufPlain(buf, len), 
+                   HFreeStrBuf);
+               i++;
+       }
+
+       serv_puts("GPEX site");
+       StrBuf_ServGetln(Buf);
+       if (ChrPtr(Buf)[0] == '2') {
+               StrBufCutLeft(Buf, 4);
+
+               Token = NewStrBuf();
+               StrBufExtract_token(Token, Buf, 0, '|');
+               Put(Cfg, HKEY("sitepolicy"), Token, HFreeStrBuf);
+
+               Token = NewStrBuf();
+               StrBufExtract_token(Token, Buf, 1, '|');
+               Put(Cfg, HKEY("sitevalue"), Token, HFreeStrBuf);
+       }
+
+       serv_puts("GPEX mailboxes");
+       serv_getln(buf, sizeof buf);
+       if (buf[0] == '2') {
+               StrBufCutLeft(Buf, 4);
+
+               Token = NewStrBuf();
+               StrBufExtract_token(Token, Buf, 0, '|');
+               Put(Cfg, HKEY("mboxpolicy"), Token, HFreeStrBuf);
+
+               Token = NewStrBuf();
+               StrBufExtract_token(Token, Buf, 1, '|');
+               Put(Cfg, HKEY("mboxvalue"), Token, HFreeStrBuf);
+       }
+}
+
+
 /**
  * parse siteconfig changes 
  */
 void siteconfig(void)
 {
+       int i;
        char buf[256];
 
        if (strlen(bstr("ok_button")) == 0) {
@@ -802,73 +944,27 @@ void siteconfig(void)
                display_aide_menu();
                return;
        }
-       serv_printf("%s", bstr("c_nodename"));
-       serv_printf("%s", bstr("c_fqdn"));
-       serv_printf("%s", bstr("c_humannode"));
-       serv_printf("%s", bstr("c_phonenum"));
-       serv_printf("%s", ((yesbstr("c_creataide") ? "1" : "0")));
-       serv_printf("%s", bstr("c_sleeping"));
-       serv_printf("%s", bstr("c_initax"));
-       serv_printf("%s", ((yesbstr("c_regiscall") ? "1" : "0")));
-       serv_printf("%s", ((yesbstr("c_twitdetect") ? "1" : "0")));
-       serv_printf("%s", bstr("c_twitroom"));
-       serv_printf("%s", bstr("c_moreprompt"));
-       serv_printf("%s", ((yesbstr("c_restrict") ? "1" : "0")));
-       serv_printf("%s", bstr("c_bbs_city"));
-       serv_printf("%s", bstr("c_sysadm"));
-       serv_printf("%s", bstr("c_maxsessions"));
-       serv_printf("");  /* placeholder - this field is not in use */
-       serv_printf("%s", bstr("c_userpurge"));
-       serv_printf("%s", bstr("c_roompurge"));
-       serv_printf("%s", bstr("c_logpages"));
-       serv_printf("%s", bstr("c_createax"));
-       serv_printf("%s", bstr("c_maxmsglen"));
-       serv_printf("%s", bstr("c_min_workers"));
-       serv_printf("%s", bstr("c_max_workers"));
-       serv_printf("%s", bstr("c_pop3_port"));
-       serv_printf("%s", bstr("c_smtp_port"));
-       serv_printf("%s", ((yesbstr("c_rfc822_strict_from") ? "0" : "1"))); /* note: reverse bool */
-       serv_printf("%s", ((yesbstr("c_aide_zap") ? "1" : "0")));
-       serv_printf("%s", bstr("c_imap_port"));
-       serv_printf("%s", bstr("c_net_freq"));
-       serv_printf("%s", ((yesbstr("c_disable_newu") ? "1" : "0")));
-       serv_printf("1"); /* placeholder - this field is not in use */
-       serv_printf("%s", bstr("c_purge_hour"));
-       serv_printf("%s", bstr("c_ldap_host"));
-       serv_printf("%s", bstr("c_ldap_port"));
-       serv_printf("%s", bstr("c_ldap_base_dn"));
-       serv_printf("%s", bstr("c_ldap_bind_dn"));
-       serv_printf("%s", bstr("c_ldap_bind_pw"));
-       serv_printf("%s", bstr("c_ip_addr"));
-       serv_printf("%s", bstr("c_msa_port"));
-       serv_printf("%s", bstr("c_imaps_port"));
-       serv_printf("%s", bstr("c_pop3s_port"));
-       serv_printf("%s", bstr("c_smtps_port"));
-       serv_printf("%s", ((yesbstr("c_enable_fulltext") ? "1" : "0")));
-       serv_printf("%s", ((yesbstr("c_auto_cull") ? "1" : "0")));
-       serv_printf("%s", ((yesbstr("c_instant_expunge") ? "1" : "0")));
-       serv_printf("%s", ((yesbstr("c_allow_spoofing") ? "1" : "0")));
-       serv_printf("%s", ((yesbstr("c_journal_email") ? "1" : "0")));
-       serv_printf("%s", ((yesbstr("c_journal_pubmsgs") ? "1" : "0")));
-       serv_printf("%s", bstr("c_journal_dest"));
-       serv_printf("%s", bstr("c_default_cal_zone"));
-       serv_printf("%s", bstr("c_pftcpdict_port"));
-       serv_printf("%s", bstr("c_mgesve_port"));
-       serv_printf("%s", bstr("c_auth_mode"));
-       serv_printf("%s", bstr("c_funambol_host"));
-       serv_printf("%s", bstr("c_funambol_port"));
-       serv_printf("%s", bstr("c_funambol_source"));
-       serv_printf("%s", bstr("c_funambol_auth"));
-       serv_printf("%s", ((yesbstr("c_rbl_at_greeting") ? "1" : "0")));
-       serv_printf("%s", bstr("c_master_user"));
-       serv_printf("%s", bstr("c_master_pass"));
-       serv_printf("%s", bstr("c_pager_program"));
-       serv_printf("%s", ((yesbstr("c_imap_keep_from") ? "1" : "0")));
-       serv_printf("%s", bstr("c_xmpp_c2s_port"));
-       serv_printf("%s", bstr("c_xmpp_s2s_port"));
-       serv_printf("%s", bstr("c_pop3_fetch"));
-       serv_printf("%s", bstr("c_pop3_fastest"));
-       serv_printf("000");
+
+       i = sizeof(ServerConfig);
+       for (i=0; i < sizeof(ServerConfig); i ++)
+       {
+               switch (ServerConfig[i].type) {
+               default:
+               case CFG_STR:
+                       serv_putbuf(SBstr(ServerConfig[i].Key, ServerConfig[i].len));
+                       break;
+               case CFG_YES:
+                       serv_puts(YesBstr(ServerConfig[i].Key, 
+                                         ServerConfig[i].len) ?
+                                 "1" : "0");
+                       break;
+               case CFG_NO:
+                       serv_puts(YesBstr(ServerConfig[i].Key, 
+                                         ServerConfig[i].len) ?
+                                 "0" : "1");
+                       break;
+               }
+       }
 
        serv_printf("SPEX site|%d|%d", ibstr("sitepolicy"), ibstr("sitevalue"));
        serv_getln(buf, sizeof buf);
@@ -882,11 +978,55 @@ void siteconfig(void)
        display_aide_menu();
 }
 
+void tmplput_servcfg(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context)
+{
+       struct wcsession *WCC = WC;
+       void *vBuf;
+       StrBuf *Buf;
+
+       if (WCC->is_aide) {
+               if (WCC->ServCfg == NULL)
+                       load_siteconfig();
+               GetHash(WCC->ServCfg, 
+                       Tokens->Params[0]->Start,
+                       Tokens->Params[0]->len, 
+                       &vBuf);
+               Buf = (StrBuf*) vBuf;
+               StrBufAppendBuf(Target, Buf, 0);
+       }
+}
+
+int ConditionalServCfg(WCTemplateToken *Tokens, void *Context)
+{
+       struct wcsession *WCC = WC;
+       void *vBuf;
+       StrBuf *Buf;
+
+       if (WCC->is_aide) {
+               if (WCC->ServCfg == NULL)
+                       load_siteconfig();
+               GetHash(WCC->ServCfg, 
+                       Tokens->Params[0]->Start,
+                       Tokens->Params[0]->len, 
+                       &vBuf);
+               if (vBuf == NULL) return 0;
+               Buf = (StrBuf*) vBuf;
+               if (Tokens->nParameters == 1)
+                       return 1;
+               else 
+                       return (strcmp(Tokens->Params[0]->Start, ChrPtr(Buf)) == 0);
+       }
+       else return 0;
+}
+
 void 
 InitModule_SITECONFIG
 (void)
 {
        WebcitAddUrlHandler(HKEY("display_siteconfig"), display_siteconfig, 0);
        WebcitAddUrlHandler(HKEY("siteconfig"), siteconfig, 0);
+
+       RegisterNamespace("SERV:CFG", 1, 1, tmplput_servcfg);
+       RegisterConditional(HKEY("COND:SERVCFG"), 1, ConditionalServCfg);
 }
 /*@}*/
index 18360c270ca8e7e0b4f75fe924bf398af135ade0..76f02e0726d38b88c3044d1aee949e67f3980583 100644 (file)
@@ -1106,6 +1106,34 @@ void tmpl_do_boxed(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Con
        DoTemplate(HKEY("endbox"), Context, Target);
 }
 
+void tmpl_do_tabbed(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context)
+{
+       StrBuf **TabNames;
+       int i, ntabs;
+
+       ntabs = Tokens->nParameters / 2;
+       TabNames = (StrBuf **) malloc(ntabs * sizeof(StrBuf*));
+
+       for (i = 0; i < ntabs; i++) {
+               TabNames[i] = NewStrBuf();
+               DoTemplate(Tokens->Params[i * 2]->Start, 
+                          Tokens->Params[0]->len,
+                          Context,
+                          TabNames[i]);
+       }
+
+       StrTabbedDialog(Target, ntabs, TabNames);
+       for (i = 0; i < ntabs; i++) {
+               StrBeginTab(Target, ntabs, i);
+
+               DoTemplate(Tokens->Params[i * 2 + 1]->Start, 
+                          Tokens->Params[i * 2 + 1]->len,
+                          Context, 
+                          Target);
+               StrEndTab(Target, ntabs, i);
+       }
+}
+
 void 
 InitModule_SUBST
 (void)
@@ -1121,6 +1149,7 @@ InitModule_SUBST
        RegisterNamespace("CURRENT_ROOM", 0, 0, tmplput_current_room);
        RegisterNamespace("ITERATE", 2, 4, tmpl_iterate_subtmpl);
        RegisterNamespace("DOBOXED", 1, 2, tmpl_do_boxed);
+       RegisterNamespace("DOTABBED", 2, 100, tmpl_do_tabbed);
        RegisterConditional(HKEY("COND:SUBST"), 3, ConditionalVar);
 }
 
index 569a7f7633e8ea79d912115b0239e90267bfb535..78d2954ecdd4e5dd0eb439b9877bf752fa73a008 100644 (file)
@@ -2,7 +2,8 @@
  * $Id$
  *
  */
-
+#include <stdarg.h>
+#define SHOW_ME_VAPPEND_PRINTF
 #include "webcit.h"
 
 /*
@@ -97,3 +98,120 @@ void end_tab(int tabnum, int num_tabs) {
 }
 
 
+/*
+ * print tabbed dialog
+ */
+void StrTabbedDialog(StrBuf *Target, int num_tabs, StrBuf *tabnames[]) {
+       int i;
+
+       StrBufAppendBufPlain(
+               Target, 
+               HKEY(
+                       "<script type=\"text/javascript\">                                              "
+                       "var previously_selected_tab = '0';                                             "
+                       "function tabsel(which_tab) {                                                   "
+                       "       if (which_tab == previously_selected_tab) {                             "
+                       "               return;                                                         "
+                       "       }                                                                       "
+                       "       $('tabdiv'+previously_selected_tab).style.display = 'none';             "
+                       "       $('tabdiv'+which_tab).style.display = 'block';                          "
+                       "       $('tabtd'+previously_selected_tab).className = 'tab_cell_edit';         "
+                       "       $('tabtd'+which_tab).className = 'tab_cell_label';                      "
+                       "       previously_selected_tab = which_tab;                                    "
+                       "}                                                                              "
+                       "</script>                                                                      \n"
+                       ), 0);
+
+       StrBufAppendBufPlain(
+               Target, 
+               HKEY(
+                       "<table id=\"TheTabs\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">"
+                       "<tr align=\"center\" style=\"cursor:pointer\"><td>&nbsp;</td>"
+                       ), 0);
+
+       for (i=0; i<num_tabs; ++i) {
+               StrBufAppendPrintf(
+                       Target, 
+                       "<td id=\"tabtd%d\" class=\"%s\" "
+                       "onClick='tabsel(\"%d\");'"
+                       ">",
+                       i,
+                       ( (i==0) ? "tab_cell_label" : "tab_cell_edit" ),
+                       i
+                       );
+               StrBufAppendBuf(Target, tabnames[i], 0);
+               StrBufAppendBufPlain(
+                       Target, 
+                       HKEY(
+                               "</td>"
+                               "<td>&nbsp;</td>\n"), 0);
+       }
+
+       StrBufAppendBufPlain(
+               Target, 
+               HKEY("</tr></table>\n"), 0);
+}
+
+/*
+ * print the tab-header
+ *
+ * tabnum:      number of the tab to print
+ * num_tabs:    total number oftabs to be printed
+ *
+ */
+void StrBeginTab(StrBuf *Target, int tabnum, int num_tabs) {
+
+       if (tabnum == num_tabs) {
+               StrBufAppendBufPlain(
+                       Target, 
+                       HKEY(
+                               "<!-- begin tab-common epilogue -->\n"
+                               "<div class=\"tabcontent_submit\">"), 0);
+       }
+
+       else {
+               StrBufAppendPrintf(
+                       Target, 
+                       "<!-- begin tab %d of %d -->\n"
+                       "<div id=\"tabdiv%d\" style=\"display:%s\" class=\"tabcontent\" >",
+                       tabnum, num_tabs, 
+                       tabnum,
+                       ( (tabnum == 0) ? "block" : "none" )
+                       );
+       }
+}
+
+/*
+ * print the tab-footer
+ * tabnum:      number of the tab to print
+ * num_tabs:    total number of tabs to be printed
+ *
+ */
+void StrEndTab(StrBuf *Target, int tabnum, int num_tabs) {
+
+       if (tabnum == num_tabs) {
+               StrBufAppendBufPlain(
+                       Target, 
+                       HKEY(
+                               "</div>\n"
+                               "<!-- end tab-common epilogue -->\n"), 0);
+       }
+
+       else {
+               StrBufAppendPrintf(
+                       Target, 
+                       "</div>\n",
+                       "<!-- end tab %d of %d -->\n", tabnum, num_tabs);
+       
+               if (tabnum == num_tabs-1) {
+                       StrBufAppendBufPlain(
+                               Target, 
+                               HKEY(
+                                       "<script type=\"text/javascript\">"
+                                       " Nifty(\"table#TheTabs td\", \"small transparent top\");"
+                                       "</script>"), 0);
+               }
+       }
+}
+
+
index a786c6cbea875915b96c05d616dfa1a6e2b5ecb4..6c9b34f3564732ca1df7ebf8b97ab20942682c8a 100644 (file)
@@ -252,6 +252,19 @@ void serv_puts(const char *string)
        serv_write("\n", 1);
 }
 
+/**
+ * \brief send line to server
+ * \param string the line to send to the citadel server
+ */
+void serv_putbuf(const StrBuf *string)
+{
+#ifdef SERV_TRACE
+       lprintf(9, "%3d<%s\n", WC->serv_sock, ChrPtr(string));
+#endif
+       serv_write(ChrPtr(string), StrLength(string));
+       serv_write("\n", 1);
+}
+
 
 /**
  * \brief convenience function to send stuff to the server
index d2c2c2cd0eef79d09bdad9a94da4126f8676cefe..34a66f3158209b21b0bad7ec32a854978265a55e 100644 (file)
@@ -187,7 +187,7 @@ void dump_vars(void)
  * Return the value of a variable supplied to the current web page (from the url or a form)
  */
 
-const char *XBstr(char *key, size_t keylen, size_t *len)
+const char *XBstr(const char *key, size_t keylen, size_t *len)
 {
        void *U;
 
@@ -202,7 +202,7 @@ const char *XBstr(char *key, size_t keylen, size_t *len)
        }
 }
 
-const char *XBSTR(char *key, size_t *len)
+const char *XBSTR(const char *key, size_t *len)
 {
        void *U;
 
@@ -218,7 +218,7 @@ const char *XBSTR(char *key, size_t *len)
 }
 
 
-const char *BSTR(char *key)
+const char *BSTR(const char *key)
 {
        void *U;
 
@@ -229,7 +229,7 @@ const char *BSTR(char *key)
                return ("");
 }
 
-const char *Bstr(char *key, size_t keylen)
+const char *Bstr(const char *key, size_t keylen)
 {
        void *U;
 
@@ -262,7 +262,7 @@ const StrBuf *SBstr(const char *key, size_t keylen)
                return NULL;
 }
 
-long LBstr(char *key, size_t keylen)
+long LBstr(const char *key, size_t keylen)
 {
        void *U;
 
@@ -273,7 +273,7 @@ long LBstr(char *key, size_t keylen)
                return (0);
 }
 
-long LBSTR(char *key)
+long LBSTR(const char *key)
 {
        void *U;
 
@@ -284,7 +284,7 @@ long LBSTR(char *key)
                return (0);
 }
 
-int IBstr(char *key, size_t keylen)
+int IBstr(const char *key, size_t keylen)
 {
        void *U;
 
@@ -295,7 +295,7 @@ int IBstr(char *key, size_t keylen)
                return (0);
 }
 
-int IBSTR(char *key)
+int IBSTR(const char *key)
 {
        void *U;
 
@@ -306,7 +306,7 @@ int IBSTR(char *key)
                return (0);
 }
 
-int HaveBstr(char *key, size_t keylen)
+int HaveBstr(const char *key, size_t keylen)
 {
        void *U;
 
@@ -317,7 +317,7 @@ int HaveBstr(char *key, size_t keylen)
                return (0);
 }
 
-int HAVEBSTR(char *key)
+int HAVEBSTR(const char *key)
 {
        void *U;
 
@@ -329,7 +329,7 @@ int HAVEBSTR(char *key)
 }
 
 
-int YesBstr(char *key, size_t keylen)
+int YesBstr(const char *key, size_t keylen)
 {
        void *U;
 
@@ -340,7 +340,7 @@ int YesBstr(char *key, size_t keylen)
                return (0);
 }
 
-int YESBSTR(char *key)
+int YESBSTR(const char *key)
 {
        void *U;
 
index c71fa59ccf9f0bcbb1115d798abfc5e940ebad1e..83f404ac659e87f6d993520797893439ce48497b 100644 (file)
@@ -468,6 +468,8 @@ struct wcsession {
        StrBuf *UrlFragment2;                   /**< second urlfragment, if NEED_URL is specified by the handler*/
        StrBuf *WBuf;                           /**< Our output buffer */
        StrBuf *HBuf;                           /**< Our HeaderBuffer */
+
+       HashList *ServCfg;                      /**< cache our server config for editing */
 };
 
 /** values for WC->current_iconbar */
@@ -564,29 +566,29 @@ 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);
-const char *XBSTR(char *key, size_t *len);
+const char *XBstr(const char *key, size_t keylen, size_t *len);
+const char *XBSTR(const char *key, size_t *len);
 
 #define lbstr(a) LBstr(a, sizeof(a) - 1)
-long LBstr(char *key, size_t keylen);
-long LBSTR(char *key);
+long LBstr(const char *key, size_t keylen);
+long LBSTR(const char *key);
 
 #define ibstr(a) IBstr(a, sizeof(a) - 1)
-int IBstr(char *key, size_t keylen);
-int IBSTR(char *key);
+int IBstr(const char *key, size_t keylen);
+int IBSTR(const char *key);
 
 #define havebstr(a) HaveBstr(a, sizeof(a) - 1)
-int HaveBstr(char *key, size_t keylen);
-int HAVEBSTR(char *key);
+int HaveBstr(const char *key, size_t keylen);
+int HAVEBSTR(const char *key);
 
 #define yesbstr(a) YesBstr(a, sizeof(a) - 1)
-int YesBstr(char *key, size_t keylen);
-int YESBSTR(char *key);
+int YesBstr(const char *key, size_t keylen);
+int YESBSTR(const 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);
+const char *BSTR(const char *key);
+const char *Bstr(const char *key, size_t keylen);
 
 
 
@@ -640,6 +642,7 @@ 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);
 void shutdown_sessions(void);
@@ -797,6 +800,9 @@ void go_selected_language(void);
 void stop_selected_language(void);
 void preset_locale(void);
 void httplang_to_locale(char *LocaleString);
+void StrEndTab(StrBuf *Target, int tabnum, int num_tabs);
+void StrBeginTab(StrBuf *Target, int tabnum, int num_tabs);
+void StrTabbedDialog(StrBuf *Target, int num_tabs, StrBuf *tabnames[]);
 void tabbed_dialog(int num_tabs, char *tabnames[]);
 void begin_tab(int tabnum, int num_tabs);
 void end_tab(int tabnum, int num_tabs);