+
+#define ACTION_MASK_ALL (~0U)
+
+#define ACTION_MOST_COMPATIBLE 0U
+
+#define ACTION_BLOCK 0x0001U
+#define ACTION_FAST_REDIRECTS 0x0002U
+#define ACTION_FILTER 0x0004U
+#define ACTION_HIDE_FORWARDED 0x0008U
+#define ACTION_HIDE_FROM 0x0010U
+#define ACTION_HIDE_REFERER 0x0020U /* sic - follow HTTP, not English */
+#define ACTION_HIDE_USER_AGENT 0x0040U
+#define ACTION_IMAGE 0x0080U
+#define ACTION_NO_COOKIE_READ 0x0100U
+#define ACTION_NO_COOKIE_SET 0x0200U
+#define ACTION_NO_POPUPS 0x0400U
+#define ACTION_VANILLA_WAFER 0x0800U
+
+#define ACTION_STRING_FROM 0
+#define ACTION_STRING_REFERER 1
+#define ACTION_STRING_USER_AGENT 2
+#define ACTION_STRING_COUNT 3
+
+#define ACTION_MULTI_ADD_HEADER 0
+#define ACTION_MULTI_WAFER 1
+#define ACTION_MULTI_COUNT 2
+
+
+struct current_action_spec
+{
+ unsigned flags; /* a bit set to "1" = add action */
+
+ /* For those actions that require parameters: */
+
+ /* each entry is valid if & only if corresponding entry in "add" set. */
+ char * string[ACTION_STRING_COUNT];
+
+ /* Strings to add */
+ struct list_share multi[ACTION_MULTI_COUNT][1];
+};
+
+struct action_spec
+{
+ unsigned mask; /* a bit set to "0" = remove action */
+ unsigned add; /* a bit set to "1" = add action */
+
+ /* For those actions that require parameters: */
+
+ /* each entry is valid if & only if corresponding entry in "add" set. */
+ char * string[ACTION_STRING_COUNT];
+
+ /* Strings to remove. */
+ struct list multi_remove[ACTION_MULTI_COUNT][1];
+
+ /* If nonzero, remove *all* strings. */
+ int multi_remove_all[ACTION_MULTI_COUNT];
+
+ /* Strings to add */
+ struct list multi_add[ACTION_MULTI_COUNT][1];
+};
+
+struct url_actions
+{
+ struct url_spec url[1];
+
+ struct action_spec action[1];
+
+ struct url_actions * next;
+};
+
+