1 /*=============================================================================
3 ===============================================================================
4 This is the Wininet XML transport of the C++ XML-RPC client library for
6 =============================================================================*/
12 #include "xmlrpc-c/girerr.hpp"
15 #include "xmlrpc-c/girmem.hpp"
16 using girmem::autoObjectPtr;
17 using girmem::autoObject;
18 #include "env_wrap.hpp"
19 #include "xmlrpc-c/base.h"
20 #include "xmlrpc-c/client.h"
21 #include "xmlrpc-c/transport.h"
22 #include "xmlrpc-c/base_int.h"
24 #include "xmlrpc_wininet_transport.h"
26 /* transport_config.h defines MUST_BUILD_WININET_CLIENT */
27 #include "transport_config.h"
29 #include "xmlrpc-c/client_transport.hpp"
33 using namespace xmlrpc_c;
38 class globalConstant {
46 globalConstant::globalConstant() {
50 xmlrpc_transport_setup setupFn;
52 #if MUST_BUILD_WININET_CLIENT
53 setupFn = xmlrpc_wininet_transport_ops.setup_global_const;
60 setupFn(&env.env_c); // Not thread safe
62 if (env.env_c.fault_occurred)
63 throwf("Failed to do global initialization "
64 "of Wininet transport code. %s", env.env_c.fault_string);
70 globalConstant::~globalConstant() {
74 xmlrpc_transport_teardown teardownFn;
76 #if MUST_BUILD_WININET_CLIENT
77 teardownFn = xmlrpc_wininet_transport_ops.teardown_global_const;
82 teardownFn(); // not thread safe
87 globalConstant globalConst;
88 // This object is never accessed. Its whole purpose to to be born and
89 // to die, which it does automatically as part of C++ program
90 // program initialization and termination.
97 carriageParm_wininet0::carriageParm_wininet0(
98 string const serverUrl
101 this->instantiate(serverUrl);
106 carriageParm_wininet0Ptr::carriageParm_wininet0Ptr() {
107 // Base class constructor will construct pointer that points to nothing
112 carriageParm_wininet0Ptr::carriageParm_wininet0Ptr(
113 carriageParm_wininet0 * const carriageParmP) {
114 this->point(carriageParmP);
119 carriageParm_wininet0 *
120 carriageParm_wininet0Ptr::operator->() const {
122 autoObject * const p(this->objectP);
123 return dynamic_cast<carriageParm_wininet0 *>(p);
128 #if MUST_BUILD_WININET_CLIENT
130 clientXmlTransport_wininet::clientXmlTransport_wininet(
131 bool const allowInvalidSslCerts
134 struct xmlrpc_wininet_xportparms transportParms;
136 transportParms.allowInvalidSSLCerts = allowInvalidSslCerts;
138 this->c_transportOpsP = &xmlrpc_wininet_transport_ops;
142 xmlrpc_wininet_transport_ops.create(
143 &env.env_c, 0, "", "",
144 &transportParms, XMLRPC_WXPSIZE(allowInvalidSSLCerts),
145 &this->c_transportP);
147 if (env.env_c.fault_occurred)
148 throw(error(env.env_c.fault_string));
151 #else // MUST_BUILD_WININET_CLIENT
153 clientXmlTransport_wininet::clientXmlTransport_wininet(bool const) {
155 throw(error("There is no Wininet client XML transport "
156 "in this XML-RPC client library"));
163 clientXmlTransport_wininet::~clientXmlTransport_wininet() {
165 this->c_transportOpsP->destroy(this->c_transportP);