-const char cgisimple_rcs[] = "$Id: cgisimple.c,v 1.135 2016/03/04 13:22:22 fabiankeil Exp $";
+const char cgisimple_rcs[] = "$Id: cgisimple.c,v 1.140 2016/05/08 10:46:18 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/cgisimple.c,v $
#ifdef FEATURE_CLIENT_TAGS
+/*********************************************************************
+ *
+ * Function : cgi_create_client_tag_form
+ *
+ * Description : Creates a HTML form to enable or disable a given
+ * client tag.
+ * XXX: Could use a template.
+ *
+ * Parameters :
+ * 1 : form = Buffer to fill with the generated form
+ * 2 : size = Size of the form buffer
+ * 3 : tag = Name of the tag this form should affect
+ * 4 : toggle_state = Desired state after the button pressed 0
+ * 5 : expires = Whether or not the tag should be enabled.
+ * Only checked if toggle_state is 1.
+ *
+ * Returns : void
+ *
+ *********************************************************************/
+static void cgi_create_client_tag_form(char *form, size_t size,
+ const char *tag, int toggle_state, int expires)
+{
+ char *button_name;
+
+ if (toggle_state == 1)
+ {
+ button_name = (expires == 1) ? "Enable" : "Enable temporarily";
+ }
+ else
+ {
+ assert(toggle_state == 0);
+ button_name = "Disable";
+ }
+
+ snprintf(form, size,
+ "<form method=\"GET\" action=\"client-tags\" style=\"display: inline\">\n"
+ " <input type=\"hidden\" name=\"tag\" value=\"%s\">\n"
+ " <input type=\"hidden\" name=\"toggle-state\" value=\"%u\">\n"
+ " <input type=\"hidden\" name=\"expires\" value=\"%u\">\n"
+ " <input type=\"submit\" value=\"%s\">\n"
+ "</form>", tag, toggle_state, !expires, button_name);
+}
+
/*********************************************************************
*
* Function : cgi_show_client_tags
const char *toggle_state;
const char *tag_expires;
time_t time_to_live;
- char *client_tags = strdup_or_die("");
+ char *client_tag_status;
char buf[1000];
assert(csp);
assert(rsp);
assert(parameters);
- if (NULL == (exports = default_exports(csp, "show-client-tags")))
+ if (NULL == (exports = default_exports(csp, "client-tags")))
{
return JB_ERR_MEMORY;
}
disable_client_specific_tag(csp, toggled_tag);
}
}
-
this_tag = csp->config->client_tags;
if (this_tag->name == NULL)
{
- if (!err) err = string_append(&client_tags, "<p>No tags available.</p>\n");
+ client_tag_status = strdup_or_die("<p>No tags available.</p>\n");
}
else
{
- if (!err)
- {
- err = string_append(&client_tags, "<table border=\"1\">\n"
- "<tr><th>Tag name</th>\n"
- "<th>Current state</th><th>Change state</th><th>Description</th></tr>\n");
- }
+ client_tag_status = strdup_or_die("<table border=\"1\">\n"
+ "<tr><th>Tag name</th>\n"
+ "<th>Current state</th><th>Change state</th><th>Description</th></tr>\n");
while ((this_tag != NULL) && (this_tag->name != NULL))
{
int tag_state;
privoxy_mutex_lock(&client_tags_mutex);
tag_state = client_has_requested_tag(csp->ip_addr_str, this_tag->name);
privoxy_mutex_unlock(&client_tags_mutex);
- if (!err) err = string_append(&client_tags, "<tr><td>");
- if (!err) err = string_append(&client_tags, this_tag->name);
- if (!err) err = string_append(&client_tags, "</td><td>");
- if (!err) err = string_append(&client_tags, tag_state == 1 ? "Enabled" : "Disabled");
- snprintf(buf, sizeof(buf),
- "</td><td><a href=\"/show-client-tags?tag=%s&toggle-state=%d&expires=0\">%s</a>",
- this_tag->name, !tag_state, tag_state == 1 ? "Disable" : "Enable");
- if (!err) err = string_append(&client_tags, buf);
+ if (!err) err = string_append(&client_tag_status, "<tr><td>");
+ if (!err) err = string_append(&client_tag_status, this_tag->name);
+ if (!err) err = string_append(&client_tag_status, "</td><td>");
+ if (!err) err = string_append(&client_tag_status, tag_state == 1 ? "Enabled" : "Disabled");
+ if (!err) err = string_append(&client_tag_status, "</td><td>");
+ cgi_create_client_tag_form(buf, sizeof(buf), this_tag->name, !tag_state, 1);
+ if (!err) err = string_append(&client_tag_status, buf);
if (tag_state == 0)
{
- snprintf(buf, sizeof(buf), ". <a href=\"/show-client-tags?"
- "tag=%s&toggle-state=1&expires=1\">Enable temporarily</a>",
- this_tag->name);
- if (!err) err = string_append(&client_tags, buf);
+ cgi_create_client_tag_form(buf, sizeof(buf), this_tag->name, !tag_state, 0);
+ if (!err) err = string_append(&client_tag_status, buf);
}
- if (!err) err = string_append(&client_tags, "</td><td>");
- if (!err) err = string_append(&client_tags, this_tag->description);
- if (!err) err = string_append(&client_tags, "</td></tr>\n");
+ if (!err) err = string_append(&client_tag_status, "</td><td>");
+ if (!err) err = string_append(&client_tag_status, this_tag->description);
+ if (!err) err = string_append(&client_tag_status, "</td></tr>\n");
if (err)
{
free_map(exports);
}
this_tag = this_tag->next;
}
- if (!err) err = string_append(&client_tags, "</table>\n");
+ if (!err) err = string_append(&client_tag_status, "</table>\n");
}
- if (map(exports, "client-tags", 1, client_tags, 0))
+ if (map(exports, "client-tags", 1, client_tag_status, 0))
{
free_map(exports);
return JB_ERR_MEMORY;
return JB_ERR_MEMORY;
}
- return template_fill_for_cgi(csp, "show-client-tags", exports, rsp);
+ return template_fill_for_cgi(csp, "client-tags", exports, rsp);
}
#endif /* def FEATURE_CLIENT_TAGS */
};
static const struct feature features[] = {
+ {
+ "FEATURE_64_BIT_TIME_T",
+#if (SIZEOF_TIME_T == 8)
+ 1,
+#else
+ 0,
+#endif
+ },
{
"FEATURE_ACCEPT_FILTER",
#ifdef FEATURE_ACCEPT_FILTER