diff options
Diffstat (limited to 'samples/webserver/options.h')
-rw-r--r-- | samples/webserver/options.h | 124 |
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); + |