aboutsummaryrefslogtreecommitdiff
path: root/samples/webserver/options.h
diff options
context:
space:
mode:
Diffstat (limited to 'samples/webserver/options.h')
-rw-r--r--samples/webserver/options.h124
1 files changed, 124 insertions, 0 deletions
diff --git a/samples/webserver/options.h b/samples/webserver/options.h
new file mode 100644
index 0000000..c3ea7c5
--- /dev/null
+++ b/samples/webserver/options.h
@@ -0,0 +1,124 @@
+/*
+
+options.h
+
+Command line option handler for webserver.
+
+--------------------------------------------------------------------------------
+gSOAP XML Web services tools
+Copyright (C) 2001-2004, Robert van Engelen, Genivia, Inc. All Rights Reserved.
+This software is released under one of the following two licenses:
+GPL or Genivia's license for commercial use.
+--------------------------------------------------------------------------------
+GPL license.
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place, Suite 330, Boston, MA 02111-1307 USA
+
+Author contact information:
+engelen@genivia.com / engelen@acm.org
+--------------------------------------------------------------------------------
+A commercial use license is available from Genivia, Inc., contact@genivia.com
+--------------------------------------------------------------------------------
+
+ The option structure defines a program option as follows:
+ name the name of the option, which may include a period to
+ define a one-character name for command-line options
+ (single character followed by a period and the full
+ name). The last option in an array MUST be NULL.
+ When the name is empty (""), then this option is used to
+ collect remaining command-line arguments, such as file
+ names and so on.
+ selections: either must be NULL to define a boolean option. In this
+ case selected=0 is false and selected=1 is true.
+ or a space-delimited string of option values. In this
+ case 'selected' is set to # word in list.
+ or a single-word description for option values. In this
+ case the argument is stored in 'value' field.
+ selected: word index in 'selections' list, or 0/1 for boolean
+ option, or max length of string value a user can enter
+ (see below).
+ value: the (default) string value of option
+
+ Example:
+
+ static struct option options[] =
+ { { "c.compress", NULL }, on/off option (-c turns it on)
+ { "e.endpoint", "URL" }, this option requires an argument value
+ { "name", "alphanum", 20, "demo" },
+ this option requires an argument value.
+ The default value will be "demo".
+ The HTML slot will be 20 chars wide.
+ { "action", "start finish" }, this option requires an argument "start"
+ or "finish"
+ { "", "file1 file2 ..." }, collect remaining arguments
+ { NULL }, end of table
+ };
+
+ Functionality:
+
+ int parse_options(int argc, char **argv, struct option *options)
+ Parses options from the command line (argc, argv). When the command
+ line options include the '-?' and '-help', a diagnostic 'Usage:'
+ message is produced and the function returns 1 instead of a normal 0
+ return value.
+
+ void query_options(struct soap *soap, struct option *options)
+ Parses options from the HTTP query string. This requires linking the
+ httpget plugin. The function is normally called in the HTTP GET handler.
+
+ int save_options(const char *file, const char *name, struct option *options)
+ Saves an array of options to a file. The last option in the 'options'
+ array MUST have a NULL name to delimit the array. Options are saved
+ in XML format.
+
+ int load_options(const char *file, const char *name, struct option *options)
+ Parses options from a file saved with save_options(). The last option
+ in the 'options' array MUST have a NULL name to delimit the array.
+
+ int html_options(struct soap *soap, struct option *options)
+ Produces an HTML table with options and form submit buttons to
+ interactively change options through a Web page. The table is output
+ via soap_send() which uses the current soap.socket or soap.sendfd
+ descriptors. The table should be produced within a form, see also
+ html_form_options().
+ The HTML table uses the following picture files:
+ checked.gif check box (checked)
+ unchecked.gif check box (unchecked)
+ selected.gif radio button (selected)
+ deselected.gif radio button (deselected)
+
+ int html_form_options(struct soap *soap, struct option *options)
+ Produces an HTML form with action='' and method='get' (to send the
+ request back to the current service. An HTML option table is produced
+ within the form.
+*/
+
+struct option
+{ const char *name; /* name */
+ const char *selections; /* NULL (option does not require argument),
+ or one-word description,
+ or selection of possible values (separated by spaces) */
+ int selected; /* >=0: current selection in selections list */
+ char *value; /* parsed value (when 'selections' is one name) */
+};
+
+extern struct option *copy_options(const struct option *options);
+extern void free_options(struct option *options);
+extern int parse_options(int argc, char **argv, struct option *options);
+extern void query_options(struct soap *soap, struct option *options);
+extern int save_options(const char *file, const char *name, struct option *options);
+extern int load_options(const char *file, const char *name, struct option *options);
+extern int html_options(struct soap *soap, struct option *options);
+extern int html_form_options(struct soap *soap, struct option *options);
+