summaryrefslogtreecommitdiffstats
path: root/Utilities/cmxmlrpc/xmlrpc_server.h
diff options
context:
space:
mode:
Diffstat (limited to 'Utilities/cmxmlrpc/xmlrpc_server.h')
-rw-r--r--Utilities/cmxmlrpc/xmlrpc_server.h179
1 files changed, 179 insertions, 0 deletions
diff --git a/Utilities/cmxmlrpc/xmlrpc_server.h b/Utilities/cmxmlrpc/xmlrpc_server.h
new file mode 100644
index 0000000..e51d960
--- /dev/null
+++ b/Utilities/cmxmlrpc/xmlrpc_server.h
@@ -0,0 +1,179 @@
+/* Copyright (C) 2001 by First Peer, Inc. All rights reserved.
+**
+** Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions
+** are met:
+** 1. Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** 2. Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in the
+** documentation and/or other materials provided with the distribution.
+** 3. The name of the author may not be used to endorse or promote products
+** derived from this software without specific prior written permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+** ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+** OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+** OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+** SUCH DAMAGE. */
+
+
+#ifndef _XMLRPC_SERVER_H_
+#define _XMLRPC_SERVER_H_ 1
+
+#include <xmlrpc.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*=========================================================================
+** XML-RPC Server Method Registry
+**=========================================================================
+** A method registry maintains a list of functions, and handles
+** dispatching. To build an XML-RPC server, just add an XML-RPC protocol
+** driver.
+**
+** Methods are C functions which take some combination of the following
+** parameters. All pointers except user_data belong to the library, and
+** must not be freed by the callback or used after the callback returns.
+**
+** env: An XML-RPC error-handling environment. No faults will be
+** set when the function is called. If an error occurs,
+** set an appropriate fault and return NULL. (If a fault is
+** set, the NULL return value will be enforced!)
+** host: The 'Host:' header passed by the XML-RPC client, or NULL,
+** if no 'Host:' header has been provided.
+** method_name: The name used to call this method.
+** user_data: The user_data used to register this method.
+** param_array: The parameters passed to this function, stored in an
+** XML-RPC array. You are *not* responsible for calling
+** xmlrpc_DECREF on this array.
+**
+** Return value: If no fault has been set, the function must return a
+** valid xmlrpc_value. This will be serialized, returned
+** to the caller, and xmlrpc_DECREF'd.
+*/
+
+/* A function to call before invoking a method for doing things like access
+** control or sanity checks. If a fault is set from this function, the
+** method will not be called and the fault will be returned. */
+typedef void
+(*xmlrpc_preinvoke_method)(xmlrpc_env * env,
+ const char * method_name,
+ xmlrpc_value * param_array,
+ void * user_data);
+
+/* An ordinary method. */
+typedef xmlrpc_value *
+(*xmlrpc_method)(xmlrpc_env * env,
+ xmlrpc_value * param_array,
+ void * user_data);
+
+/* A default method to call if no method can be found. */
+typedef xmlrpc_value *
+(*xmlrpc_default_method)(xmlrpc_env * env,
+ const char * host,
+ const char * method_name,
+ xmlrpc_value * param_array,
+ void * user_data);
+
+/* Our registry structure. This has no public members. */
+typedef struct _xmlrpc_registry xmlrpc_registry;
+
+/* Create a new method registry. */
+xmlrpc_registry *
+xmlrpc_registry_new(xmlrpc_env * env);
+
+/* Delete a method registry. */
+void
+xmlrpc_registry_free(xmlrpc_registry * registry);
+
+/* Disable introspection. The xmlrpc_registry has introspection
+** capability built-in. If you want to make nosy people work harder,
+** you can turn this off. */
+void
+xmlrpc_registry_disable_introspection(xmlrpc_registry * registry);
+
+/* Register a method. The host parameter must be NULL (for now). You
+** are responsible for owning and managing user_data. The registry
+** will make internal copies of any other pointers it needs to
+** keep around. */
+void
+xmlrpc_registry_add_method(xmlrpc_env * env,
+ xmlrpc_registry * registry,
+ const char * host,
+ const char * method_name,
+ xmlrpc_method method,
+ void * user_data);
+
+/* As above, but allow the user to supply introspection information.
+**
+** Signatures use their own little description language. It consists
+** of one-letter type code (similar to the ones used in xmlrpc_parse_value)
+** for the result, a colon, and zero or more one-letter type codes for
+** the parameters. For example:
+** i:ibdsAS86
+** If a function has more than one possible prototype, separate them with
+** commas:
+** i:,i:s,i:ii
+** If the function signature can't be represented using this language,
+** pass a single question mark:
+** ?
+** Help strings are ASCII text, and may contain HTML markup. */
+void
+xmlrpc_registry_add_method_w_doc(xmlrpc_env * env,
+ xmlrpc_registry * registry,
+ const char * host,
+ const char * method_name,
+ xmlrpc_method method,
+ void * user_data,
+ const char * signature,
+ const char * help);
+
+/* Given a registry, a host name, and XML data; parse the <methodCall>,
+** find the appropriate method, call it, serialize the response, and
+** return it as an xmlrpc_mem_block. Most errors will be serialized
+** as <fault> responses. If a *really* bad error occurs, set a fault and
+** return NULL. (Actually, we currently give up with a fatal error,
+** but that should change eventually.)
+** The caller is responsible for destroying the memory block. */
+xmlrpc_mem_block *
+xmlrpc_registry_process_call(xmlrpc_env * const envP,
+ xmlrpc_registry * const registryP,
+ const char * const host,
+ const char * const xml_data,
+ size_t const xml_len);
+
+/* Define a default method for the specified registry. This will be invoked
+** if no other method matches. The user_data pointer is property of the
+** application, and will not be freed or manipulated by the registry. */
+void
+xmlrpc_registry_set_default_method(xmlrpc_env * env,
+ xmlrpc_registry * registry,
+ xmlrpc_default_method handler,
+ void * user_data);
+
+/* Define a preinvoke method for the specified registry. This function will
+** be called before any method (either the default or a registered one) is
+** invoked. Applications can use this to do things like access control or
+** sanity checks. The user_data pointer is property of the application,
+** and will not be freed or manipulated by the registry. */
+void
+xmlrpc_registry_set_preinvoke_method(xmlrpc_env * env,
+ xmlrpc_registry * registry,
+ xmlrpc_preinvoke_method method,
+ void * user_data);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif