1 #ifndef CLIENT_TRANSPORT_HPP_INCLUDED
2 #define CLIENT_TRANSPORT_HPP_INCLUDED
6 #include <xmlrpc-c/util.h>
7 #include <xmlrpc-c/client.h>
8 #include <xmlrpc-c/girerr.hpp>
9 #include <xmlrpc-c/girmem.hpp>
10 #include <xmlrpc-c/timeout.hpp>
14 class carriageParmPtr;
16 class carriageParm : public girmem::autoObject {
17 /*----------------------------------------------------------------------------
18 The parameter to a client for an individual RPC. It tells specifics
19 of how to carry the call to the server and the response back. For
20 example, it may identify the server. It may identify communication
21 protocols to use. It may indicate permission and accounting
24 This is a base class; the carriage parameter is specific to the
25 class of client. For example, an HTTP-based client would have a
26 URL and HTTP basic authentication info as parameter.
27 -----------------------------------------------------------------------------*/
29 virtual ~carriageParm();
33 class carriageParmPtr : public girmem::autoObjectPtr {
38 explicit carriageParmPtr(xmlrpc_c::carriageParm * const carriageParmP);
40 xmlrpc_c::carriageParm *
43 xmlrpc_c::carriageParm *
47 class carriageParm_http0 : public xmlrpc_c::carriageParm {
50 carriageParm_http0(std::string const serverUrl);
52 ~carriageParm_http0();
55 setBasicAuth(std::string const userid,
56 std::string const password);
58 xmlrpc_server_info * c_serverInfoP;
61 // Only a derived class is allowed to create an object with no
62 // server URL, and the derived class is expected to follow it up
63 // with an instantiate() to establish the server URL.
68 instantiate(std::string const serverUrl);
71 class carriageParm_http0Ptr : public xmlrpc_c::carriageParmPtr {
74 carriageParm_http0Ptr();
75 carriageParm_http0Ptr(xmlrpc_c::carriageParm_http0 * const carriageParmP);
77 xmlrpc_c::carriageParm_http0 *
81 class carriageParm_curl0 : public xmlrpc_c::carriageParm_http0 {
84 carriageParm_curl0(std::string const serverUrl);
88 class carriageParm_curl0Ptr : public xmlrpc_c::carriageParm_http0Ptr {
91 carriageParm_curl0Ptr();
92 carriageParm_curl0Ptr(xmlrpc_c::carriageParm_curl0 * const carriageParmP);
94 xmlrpc_c::carriageParm_curl0 *
98 class carriageParm_libwww0 : public xmlrpc_c::carriageParm_http0 {
101 carriageParm_libwww0(std::string const serverUrl);
105 class carriageParm_libwww0Ptr : public xmlrpc_c::carriageParm_http0Ptr {
108 carriageParm_libwww0Ptr();
109 carriageParm_libwww0Ptr(xmlrpc_c::carriageParm_libwww0 * const);
111 xmlrpc_c::carriageParm_libwww0 *
115 class carriageParm_wininet0 : public xmlrpc_c::carriageParm_http0 {
118 carriageParm_wininet0(std::string const serverUrl);
122 class carriageParm_wininet0Ptr : public xmlrpc_c::carriageParm_http0Ptr {
125 carriageParm_wininet0Ptr();
126 carriageParm_wininet0Ptr(xmlrpc_c::carriageParm_wininet0 * const);
128 xmlrpc_c::carriageParm_wininet0 *
132 //----------------------------------------------------------------------------
134 class xmlTransactionPtr;
136 class xmlTransaction : public girmem::autoObject {
138 friend class xmlTransactionPtr;
142 finish(std::string const& responseXml) const;
145 finishErr(girerr::error const& error) const;
151 class xmlTransactionPtr : public girmem::autoObjectPtr {
155 xmlrpc_c::xmlTransaction *
159 //----------------------------------------------------------------------------
161 class clientXmlTransport : public girmem::autoObject {
162 /*----------------------------------------------------------------------------
163 An object which transports XML to and from an XML-RPC server for an
166 This is a base class. Derived classes define methods to perform the
167 transportation in particular ways.
168 -----------------------------------------------------------------------------*/
170 virtual ~clientXmlTransport();
173 call(xmlrpc_c::carriageParm * const carriageParmP,
174 std::string const& callXml,
175 std::string * const responseXmlP) = 0;
178 start(xmlrpc_c::carriageParm * const carriageParmP,
179 std::string const& callXml,
180 xmlrpc_c::xmlTransactionPtr const& xmlTranP);
183 finishAsync(xmlrpc_c::timeout const timeout);
187 struct xmlrpc_call_info * const callInfoP,
188 xmlrpc_mem_block * const responseXmlMP,
189 xmlrpc_env const transportEnv);
192 class clientXmlTransportPtr : public girmem::autoObjectPtr {
195 clientXmlTransportPtr();
197 clientXmlTransportPtr(xmlrpc_c::clientXmlTransport * const transportP);
199 xmlrpc_c::clientXmlTransport *
202 xmlrpc_c::clientXmlTransport *
206 class clientXmlTransport_http : public xmlrpc_c::clientXmlTransport {
207 /*----------------------------------------------------------------------------
208 A base class for client XML transports that use the simple, classic
210 -----------------------------------------------------------------------------*/
212 virtual ~clientXmlTransport_http();
215 call(xmlrpc_c::carriageParm * const carriageParmP,
216 std::string const& callXml,
217 std::string * const responseXmlP);
220 start(xmlrpc_c::carriageParm * const carriageParmP,
221 std::string const& callXml,
222 xmlrpc_c::xmlTransactionPtr const& xmlTranP);
225 finishAsync(xmlrpc_c::timeout const timeout);
227 static std::vector<std::string>
230 static clientXmlTransportPtr
234 clientXmlTransport_http() {} // ensure no one can create
235 struct xmlrpc_client_transport * c_transportP;
236 const struct xmlrpc_client_transport_ops * c_transportOpsP;
240 class clientXmlTransport_curl : public xmlrpc_c::clientXmlTransport_http {
247 constrOpt & network_interface (std::string const& arg);
248 constrOpt & no_ssl_verifypeer (bool const& arg);
249 constrOpt & no_ssl_verifyhost (bool const& arg);
250 constrOpt & user_agent (std::string const& arg);
251 constrOpt & ssl_cert (std::string const& arg);
252 constrOpt & sslcerttype (std::string const& arg);
253 constrOpt & sslcertpasswd (std::string const& arg);
254 constrOpt & sslkey (std::string const& arg);
255 constrOpt & sslkeytype (std::string const& arg);
256 constrOpt & sslkeypasswd (std::string const& arg);
257 constrOpt & sslengine (std::string const& arg);
258 constrOpt & sslengine_default (bool const& arg);
259 constrOpt & sslversion (xmlrpc_sslversion const& arg);
260 constrOpt & cainfo (std::string const& arg);
261 constrOpt & capath (std::string const& arg);
262 constrOpt & randomfile (std::string const& arg);
263 constrOpt & egdsocket (std::string const& arg);
264 constrOpt & ssl_cipher_list (std::string const& arg);
267 std::string network_interface;
268 bool no_ssl_verifypeer;
269 bool no_ssl_verifyhost;
270 std::string user_agent;
271 std::string ssl_cert;
272 std::string sslcerttype;
273 std::string sslcertpasswd;
275 std::string sslkeytype;
276 std::string sslkeypasswd;
277 std::string sslengine;
278 bool sslengine_default;
279 xmlrpc_sslversion sslversion;
282 std::string randomfile;
283 std::string egdsocket;
284 std::string ssl_cipher_list;
287 bool network_interface;
288 bool no_ssl_verifypeer;
289 bool no_ssl_verifyhost;
298 bool sslengine_default;
304 bool ssl_cipher_list;
308 clientXmlTransport_curl(constrOpt const& opt);
310 clientXmlTransport_curl(std::string const networkInterface = "",
311 bool const noSslVerifyPeer = false,
312 bool const noSslVerifyHost = false,
313 std::string const userAgent = "");
315 ~clientXmlTransport_curl();
319 initialize(constrOpt const& opt);
322 class clientXmlTransport_libwww : public xmlrpc_c::clientXmlTransport_http {
325 clientXmlTransport_libwww(std::string const appname = "",
326 std::string const appversion = "");
328 ~clientXmlTransport_libwww();
331 class clientXmlTransport_wininet : public xmlrpc_c::clientXmlTransport_http {
334 clientXmlTransport_wininet(bool const allowInvalidSslCerts = false);
336 ~clientXmlTransport_wininet();