+/*============================================================================
+ xmlrpc_client.h
+==============================================================================
+ This header file defines the interface between xmlrpc.c and its users,
+ related to clients.
+
+ Copyright information is at the end of the file.
+============================================================================*/
+
+#ifndef XMLRPC_CLIENT_H_INCLUDED
+#define XMLRPC_CLIENT_H_INCLUDED
+
+#include <xmlrpc-c/base.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+struct xmlrpc_client;
+#ifndef __cplusplus
+typedef struct xmlrpc_client xmlrpc_client;
+#endif
+
+struct xmlrpc_xportparms;
+ /* This is a "base class". The struct is never complete; you're
+ supposed to cast between struct xmlrpc_xportparms * and
+ "struct xmlrpc_..._xportparms *" in order to use it.
+ */
+
+enum xmlrpc_sslversion {
+ XMLRPC_SSLVERSION_DEFAULT,
+ XMLRPC_SSLVERSION_TLSv1,
+ XMLRPC_SSLVERSION_SSLv2,
+ XMLRPC_SSLVERSION_SSLv3
+};
+
+struct xmlrpc_curl_xportparms {
+ /* This is designed so that zero values are always the defaults. */
+ const char * network_interface;
+ xmlrpc_bool no_ssl_verifypeer;
+ xmlrpc_bool no_ssl_verifyhost;
+ const char * user_agent;
+ const char * ssl_cert;
+ const char * sslcerttype;
+ const char * sslcertpasswd;
+ const char * sslkey;
+ const char * sslkeytype;
+ const char * sslkeypasswd;
+ const char * sslengine;
+ xmlrpc_bool sslengine_default;
+ enum xmlrpc_sslversion sslversion;
+ const char * cainfo;
+ const char * capath;
+ const char * randomfile;
+ const char * egdsocket;
+ const char * ssl_cipher_list;
+};
+
+
+#define XMLRPC_CXPSIZE(mbrname) \
+ XMLRPC_STRUCTSIZE(struct xmlrpc_curl_xportparms, mbrname)
+
+/* XMLRPC_CXPSIZE(xyz) is analogous to XMLRPC_CPSIZE, below */
+
+struct xmlrpc_wininet_xportparms {
+ int allowInvalidSSLCerts;
+};
+
+#define XMLRPC_WXPSIZE(mbrname) \
+ XMLRPC_STRUCTSIZE(struct xmlrpc_wininet_xportparms, mbrname)
+
+/* XMLRPC_WXPSIZE(xyz) is analogous to XMLRPC_CPSIZE, below */
+
+struct xmlrpc_clientparms {
+ const char * transport;
+ struct xmlrpc_xportparms * transportparmsP;
+ /* Cast a "struct ..._xportparms *" to fit here */
+ size_t transportparm_size;
+};
+
+#define XMLRPC_CPSIZE(mbrname) \
+ XMLRPC_STRUCTSIZE(struct xmlrpc_clientparms, mbrname)
+
+/* XMLRPC_CPSIZE(xyz) is the minimum size a struct xmlrpc_clientparms
+ must be to include the 'xyz' member. This is essential to forward and
+ backward compatbility, as new members will be added to the end of the
+ struct in future releases. This is how the callee knows whether or
+ not the caller is new enough to have supplied a certain parameter.
+*/
+
+const char *
+xmlrpc_client_get_default_transport(xmlrpc_env * const env);
+
+/* A callback function to handle the response to an asynchronous call.
+** If 'fault->fault_occurred' is true, then response will be NULL. All
+** arguments except 'user_data' will be deallocated internally; please do
+** not free any of them yourself.
+** WARNING: param_array may (or may not) be NULL if fault->fault_occurred
+** is true, and you set up the call using xmlrpc_client_call_asynch.
+** WARNING: If asynchronous calls are still pending when the library is
+** shut down, your handler may (or may not) be called with a fault. */
+typedef void (*xmlrpc_response_handler) (const char *server_url,
+ const char *method_name,
+ xmlrpc_value *param_array,
+ void *user_data,
+ xmlrpc_env *fault,
+ xmlrpc_value *result);
+
+
+/*=========================================================================
+** xmlrpc_server_info
+**=========================================================================
+** We normally refer to servers by URL. But sometimes we need to do extra
+** setup for particular servers. In that case, we can create an
+** xmlrpc_server_info object, configure it in various ways, and call the
+** remote server.
+**
+** (This interface is also designed to discourage further multiplication
+** of xmlrpc_client_call APIs. We have enough of those already. Please
+** add future options and flags using xmlrpc_server_info.)
+*/
+
+typedef struct _xmlrpc_server_info xmlrpc_server_info;
+
+/* Create a new server info record, pointing to the specified server. */
+xmlrpc_server_info *
+xmlrpc_server_info_new(xmlrpc_env * const env,
+ const char * const server_url);
+
+/* Create a new server info record, with a copy of the old server. */
+extern xmlrpc_server_info *
+xmlrpc_server_info_copy(xmlrpc_env *env, xmlrpc_server_info *src_server);
+
+/* Delete a server info record. */
+extern void
+xmlrpc_server_info_free (xmlrpc_server_info *server);
+
+void
+xmlrpc_server_info_set_basic_auth(xmlrpc_env * const envP,
+ xmlrpc_server_info * const serverP,
+ const char * const username,
+ const char * const password);
+
+
+void
+xmlrpc_client_setup_global_const(xmlrpc_env * const envP);
+
+void
+xmlrpc_client_teardown_global_const(void);
+
+void
+xmlrpc_client_create(xmlrpc_env * const envP,
+ int const flags,
+ const char * const appname,
+ const char * const appversion,
+ const struct xmlrpc_clientparms * const clientparmsP,
+ unsigned int const parmSize,
+ xmlrpc_client ** const clientPP);
+
+void
+xmlrpc_client_destroy(xmlrpc_client * const clientP);
+
+void
+xmlrpc_client_transport_call2(
+ xmlrpc_env * const envP,
+ xmlrpc_client * const clientP,
+ const xmlrpc_server_info * const serverP,
+ xmlrpc_mem_block * const callXmlP,
+ xmlrpc_mem_block ** const respXmlPP);
+
+void
+xmlrpc_client_call2(xmlrpc_env * const envP,
+ struct xmlrpc_client * const clientP,
+ const xmlrpc_server_info * const serverInfoP,
+ const char * const methodName,
+ xmlrpc_value * const paramArrayP,
+ xmlrpc_value ** const resultPP);
+
+void
+xmlrpc_client_call2f(xmlrpc_env * const envP,
+ xmlrpc_client * const clientP,
+ const char * const serverUrl,
+ const char * const methodName,
+ xmlrpc_value ** const resultPP,
+ const char * const format,
+ ...);
+
+void
+xmlrpc_client_event_loop_finish(xmlrpc_client * const clientP);
+
+void
+xmlrpc_client_event_loop_finish_timeout(xmlrpc_client * const clientP,
+ unsigned long const milliseconds);
+
+void
+xmlrpc_client_start_rpc(xmlrpc_env * const envP,
+ struct xmlrpc_client * const clientP,
+ xmlrpc_server_info * const serverInfoP,
+ const char * const methodName,
+ xmlrpc_value * const argP,
+ xmlrpc_response_handler responseHandler,
+ void * const userData);
+
+void
+xmlrpc_client_start_rpcf(xmlrpc_env * const envP,
+ xmlrpc_client * const clientP,
+ const char * const serverUrl,
+ const char * const methodName,
+ xmlrpc_response_handler callback,
+ void * const userData,
+ const char * const format,
+ ...);
+
+#include <xmlrpc-c/client_global.h>
+
+/* 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. */
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _XMLRPC_CLIENT_H_ */