123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- #ifndef CURLTRANSACTION_H_INCLUDED
- #define CURLTRANSACTION_H_INCLUDED
- #include "bool.h"
- #include "xmlrpc-c/util.h"
- #include "xmlrpc-c/client.h"
- #include <curl/curl.h>
- typedef struct curlTransaction curlTransaction;
- typedef void curlt_finishFn(xmlrpc_env * const, void * const);
- typedef void curlt_progressFn(
- void * const, double const, double const, double const, double const,
- bool * const);
- struct curlSetup {
- /* This is all client transport properties that are implemented as
- simple Curl session properties (i.e. the transport basically just
- passes them through to Curl without looking at them).
- People occasionally want to replace all this with something where
- the Xmlrpc-c user simply does the curl_easy_setopt() call and this
- code need not know about all these options. Unfortunately, that's
- a significant modularity violation. Either the Xmlrpc-c user
- controls the Curl object or he doesn't. If he does, then he
- shouldn't use libxmlrpc_client -- he should just copy some of this
- code into his own program. If he doesn't, then he should never see
- the Curl library.
- Speaking of modularity: the only reason this is a separate struct
- is to make the code easier to manage. Ideally, the fact that these
- particular properties of the transport are implemented by simple
- Curl session setup would be known only at the lowest level code
- that does that setup.
- */
- const char * networkInterface;
- /* This identifies the network interface on the local side to
- use for the session. It is an ASCIIZ string in the form
- that the Curl recognizes for setting its CURLOPT_INTERFACE
- option (also the --interface option of the Curl program).
- E.g. "9.1.72.189" or "giraffe-data.com" or "eth0".
- It isn't necessarily valid, but it does have a terminating NUL.
- NULL means we have no preference.
- */
- bool sslVerifyPeer;
- /* In an SSL connection, we should authenticate the server's SSL
- certificate -- refuse to talk to him if it isn't authentic.
- This is equivalent to Curl's CURLOPT_SSL_VERIFY_PEER option.
- */
- bool sslVerifyHost;
- /* In an SSL connection, we should verify that the server's
- certificate (independently of whether the certificate is
- authentic) indicates the host name that is in the URL we
- are using for the server.
- */
- const char * sslCert;
- const char * sslCertType;
- const char * sslCertPasswd;
- const char * sslKey;
- const char * sslKeyType;
- const char * sslKeyPasswd;
- const char * sslEngine;
- bool sslEngineDefault;
- unsigned int sslVersion;
- const char * caInfo;
- const char * caPath;
- const char * randomFile;
- const char * egdSocket;
- const char * sslCipherList;
- const char * proxy;
- unsigned int proxyPort;
- unsigned int proxyAuth;
- /* e.g. CURLAUTH_BASIC, CURLAUTH_NTLM, ... */
- const char * proxyUserPwd;
- unsigned int proxyType;
- /* see enum curl_proxytype: CURLPROXY_HTTP, CURLPROXY_SOCKS4, ... */
- unsigned int timeout;
- /* 0 = no Curl timeout. This is in milliseconds. */
- bool verbose;
- };
- void
- curlTransaction_create(xmlrpc_env * const envP,
- CURL * const curlSessionP,
- const xmlrpc_server_info * const serverP,
- xmlrpc_mem_block * const callXmlP,
- xmlrpc_mem_block * const responseXmlP,
- bool const dontAdvertise,
- const char * const userAgent,
- const struct curlSetup * const curlSetupStuffP,
- void * const userContextP,
- curlt_finishFn * const finish,
- curlt_progressFn * const progress,
- curlTransaction ** const curlTransactionPP);
- void
- curlTransaction_destroy(curlTransaction * const curlTransactionP);
- void
- curlTransaction_finish(xmlrpc_env * const envP,
- curlTransaction * const curlTransactionP,
- CURLcode const result);
- void
- curlTransaction_getError(curlTransaction * const curlTransactionP,
- xmlrpc_env * const envP);
- CURL *
- curlTransaction_curlSession(curlTransaction * const curlTransactionP);
- #endif
|