BOSS 7.0.2
BESIII Offline Software System
Loading...
Searching...
No Matches
XmlRpc::XmlRpcClient Class Reference

A class to send XML RPC requests to a server and return the results. More...

#include <XmlRpcClient.h>

+ Inheritance diagram for XmlRpc::XmlRpcClient:

Public Member Functions

 XmlRpcClient (const char *host, int port, const char *uri=0)
 
virtual ~XmlRpcClient ()
 Destructor.
 
bool execute (const char *method, XmlRpcValue const &params, XmlRpcValue &result)
 
bool isFault () const
 Returns true if the result of the last execute() was a fault response.
 
virtual void close ()
 Close the connection.
 
virtual unsigned handleEvent (unsigned eventType)
 
- Public Member Functions inherited from XmlRpc::XmlRpcSource
 XmlRpcSource (int fd=-1, bool deleteOnClose=false)
 
virtual ~XmlRpcSource ()
 Destructor.
 
int getfd () const
 Return the file descriptor being monitored.
 
void setfd (int fd)
 Specify the file descriptor to monitor.
 
bool getKeepOpen () const
 Return whether the file descriptor should be kept open if it is no longer monitored.
 
void setKeepOpen (bool b=true)
 Specify whether the file descriptor should be kept open if it is no longer monitored.
 
virtual void close ()
 Close the owned fd. If deleteOnClose was specified at construction, the object is deleted.
 
virtual unsigned handleEvent (unsigned eventType)=0
 Return true to continue monitoring this source.
 

Static Public Attributes

static const char REQUEST_BEGIN []
 
static const char REQUEST_END_METHODNAME [] = "</methodName>\r\n"
 
static const char PARAMS_TAG [] = "<params>"
 
static const char PARAMS_ETAG [] = "</params>"
 
static const char PARAM_TAG [] = "<param>"
 
static const char PARAM_ETAG [] = "</param>"
 
static const char REQUEST_END [] = "</methodCall>\r\n"
 
static const char METHODRESPONSE_TAG [] = "<methodResponse>"
 
static const char FAULT_TAG [] = "<fault>"
 

Protected Types

enum  ClientConnectionState {
  NO_CONNECTION , CONNECTING , WRITE_REQUEST , READ_HEADER ,
  READ_RESPONSE , IDLE
}
 

Protected Member Functions

virtual bool doConnect ()
 
virtual bool setupConnection ()
 
virtual bool generateRequest (const char *method, XmlRpcValue const &params)
 
virtual std::string generateHeader (std::string const &body)
 
virtual bool writeRequest ()
 
virtual bool readHeader ()
 
virtual bool readResponse ()
 
virtual bool parseResponse (XmlRpcValue &result)
 

Protected Attributes

ClientConnectionState _connectionState
 
std::string _host
 
std::string _uri
 
int _port
 
std::string _request
 
std::string _header
 
std::string _response
 
int _sendAttempts
 
int _bytesWritten
 
bool _executing
 
bool _eof
 
bool _isFault
 
int _contentLength
 
XmlRpcDispatch _disp
 

Detailed Description

A class to send XML RPC requests to a server and return the results.

Definition at line 25 of file XmlRpcClient.h.

Member Enumeration Documentation

◆ ClientConnectionState

Enumerator
NO_CONNECTION 
CONNECTING 
WRITE_REQUEST 
READ_HEADER 
READ_RESPONSE 
IDLE 

Definition at line 86 of file XmlRpcClient.h.

Constructor & Destructor Documentation

◆ XmlRpcClient()

XmlRpcClient::XmlRpcClient ( const char *  host,
int  port,
const char *  uri = 0 
)

Construct a client to connect to the server at the specified host:port address

Parameters
hostThe name of the remote machine hosting the server
portThe port on the remote machine where the server is listening
uriAn optional string to be sent as the URI in the HTTP GET header

Definition at line 30 of file XmlRpcClient.cpp.

31{
32 XmlRpcUtil::log(1, "XmlRpcClient new client: host %s, port %d.", host, port);
33
34 _host = host;
35 _port = port;
36 if (uri)
37 _uri = uri;
38 else
39 _uri = "/RPC2";
41 _executing = false;
42 _eof = false;
43
44 // Default to keeping the connection open until an explicit close is done
46}
ClientConnectionState _connectionState
Definition: XmlRpcClient.h:87
void setKeepOpen(bool b=true)
Specify whether the file descriptor should be kept open if it is no longer monitored.
Definition: XmlRpcSource.h:32
static void log(int level, const char *fmt,...)
Dump messages somewhere.
Definition: XmlRpcUtil.cpp:71

◆ ~XmlRpcClient()

XmlRpcClient::~XmlRpcClient ( )
virtual

Destructor.

Definition at line 49 of file XmlRpcClient.cpp.

50{
51}

Member Function Documentation

◆ close()

void XmlRpcClient::close ( )
virtual

Close the connection.

Reimplemented from XmlRpc::XmlRpcSource.

Definition at line 55 of file XmlRpcClient.cpp.

56{
57 XmlRpcUtil::log(4, "XmlRpcClient::close: fd %d.", getfd());
59 _disp.exit();
60 _disp.removeSource(this);
62}
XmlRpcDispatch _disp
Definition: XmlRpcClient.h:119
void removeSource(XmlRpcSource *source)
void exit()
Exit from work routine.
virtual void close()
Close the owned fd. If deleteOnClose was specified at construction, the object is deleted.
int getfd() const
Return the file descriptor being monitored.
Definition: XmlRpcSource.h:25

Referenced by doConnect(), and setupConnection().

◆ doConnect()

bool XmlRpcClient::doConnect ( )
protectedvirtual

Definition at line 170 of file XmlRpcClient.cpp.

171{
172 int fd = XmlRpcSocket::socket();
173 if (fd < 0)
174 {
175 XmlRpcUtil::error("Error in XmlRpcClient::doConnect: Could not create socket (%s).", XmlRpcSocket::getErrorMsg().c_str());
176 return false;
177 }
178
179 XmlRpcUtil::log(3, "XmlRpcClient::doConnect: fd %d.", fd);
180 this->setfd(fd);
181
182 // Don't block on connect/reads/writes
184 {
185 this->close();
186 XmlRpcUtil::error("Error in XmlRpcClient::doConnect: Could not set socket to non-blocking IO mode (%s).", XmlRpcSocket::getErrorMsg().c_str());
187 return false;
188 }
189
190 if ( ! XmlRpcSocket::connect(fd, _host, _port))
191 {
192 this->close();
193 XmlRpcUtil::error("Error in XmlRpcClient::doConnect: Could not connect to server (%s).", XmlRpcSocket::getErrorMsg().c_str());
194 return false;
195 }
196
197 return true;
198}
virtual void close()
Close the connection.
static int socket()
Creates a stream (TCP) socket. Returns -1 on failure.
static bool connect(int socket, std::string &host, int port)
Connect a socket to a server (from a client)
static bool setNonBlocking(int socket)
Sets a stream (TCP) socket to perform non-blocking IO. Returns false on failure.
static std::string getErrorMsg()
Returns message corresponding to last error.
void setfd(int fd)
Specify the file descriptor to monitor.
Definition: XmlRpcSource.h:27
static void error(const char *fmt,...)
Dump error messages somewhere.
Definition: XmlRpcUtil.cpp:85
char * c_str(Index i)
Definition: EvtCyclic3.cc:252

Referenced by setupConnection().

◆ execute()

bool XmlRpcClient::execute ( const char *  method,
XmlRpcValue const &  params,
XmlRpcValue result 
)

Execute the named procedure on the remote server.

Parameters
methodThe name of the remote procedure to execute
paramsAn array of the arguments for the method
resultThe result value to be returned to the client
Returns
true if the request was sent and a result received (although the result might be a fault).

Currently this is a synchronous (blocking) implementation (execute does not return until it receives a response or an error). Use isFault() to determine whether the result is a fault response.

Definition at line 77 of file XmlRpcClient.cpp.

78{
79 XmlRpcUtil::log(1, "XmlRpcClient::execute: method %s (_connectionState %d).", method, _connectionState);
80 //std::cout<< "_connectionState "<<_connectionState << std::endl;//yzhang debug
81 // This is not a thread-safe operation, if you want to do multithreading, use separate
82 // clients for each thread. If you want to protect yourself from multiple threads
83 // accessing the same client, replace this code with a real mutex.
84 if (_executing)
85 return false;
86
87 _executing = true;
89
90 _sendAttempts = 0;
91 _isFault = false;
92
93 if ( ! setupConnection())
94 return false;
95
96 if ( ! generateRequest(method, params))
97 return false;
98 result.clear();
99 double msTime = 5.; // Process until exit is called //yzhang change
100 //double msTime = -1.0; // Process until exit is called //yzhang delete
101 _disp.work(msTime);
102
103 if (_connectionState != IDLE )//yzhang add
104 //if (_connectionState != IDLE || ! parseResponse(result))//yzhang delete
105 return false; //yzhang delete
106
107 XmlRpcUtil::log(1, "XmlRpcClient::execute: method %s completed.", method);
108 _response = "";
109 return true;
110}
virtual bool setupConnection()
virtual bool generateRequest(const char *method, XmlRpcValue const &params)
std::string _response
Definition: XmlRpcClient.h:97
void work(double msTime)
void clear()
Erase the current value.
Definition: XmlRpcValue.h:76

Referenced by main(), and JobInfoSvc::xmlrpc().

◆ generateHeader()

std::string XmlRpcClient::generateHeader ( std::string const &  body)
protectedvirtual

Definition at line 240 of file XmlRpcClient.cpp.

241{
242 std::string header =
243 "POST " + _uri + " HTTP/1.1\r\n"
244 "User-Agent: ";
245 header += XMLRPC_VERSION;
246 header += "\r\nHost: ";
247 header += _host;
248
249 char buff[40];
250 sprintf(buff,":%d\r\n", _port);
251
252 header += buff;
253 header += "Content-Type: text/xml\r\nContent-length: ";
254
255 sprintf(buff,"%d\r\n\r\n", body.size());
256
257 return header + buff;
258}
const char XMLRPC_VERSION[]
Version identifier.
Definition: XmlRpcUtil.cpp:24

Referenced by generateRequest().

◆ generateRequest()

bool XmlRpcClient::generateRequest ( const char *  method,
XmlRpcValue const &  params 
)
protectedvirtual

Definition at line 202 of file XmlRpcClient.cpp.

203{
204 std::string body = REQUEST_BEGIN;
205 body += methodName;
207
208 // If params is an array, each element is a separate parameter
209 if (params.valid()) {
210 body += PARAMS_TAG;
211 if (params.getType() == XmlRpcValue::TypeArray)
212 {
213 for (int i=0; i<params.size(); ++i) {
214 body += PARAM_TAG;
215 body += params[i].toXml();
216 body += PARAM_ETAG;
217 }
218 }
219 else
220 {
221 body += PARAM_TAG;
222 body += params.toXml();
223 body += PARAM_ETAG;
224 }
225
226 body += PARAMS_ETAG;
227 }
228 body += REQUEST_END;
229
230 std::string header = generateHeader(body);
231 XmlRpcUtil::log(4, "XmlRpcClient::generateRequest: header is %d bytes, content-length is %d.",
232 header.length(), body.length());
233
234 _request = header + body;
235 return true;
236}
static const char PARAM_ETAG[]
Definition: XmlRpcClient.h:33
static const char PARAMS_ETAG[]
Definition: XmlRpcClient.h:31
static const char REQUEST_END[]
Definition: XmlRpcClient.h:34
std::string _request
Definition: XmlRpcClient.h:95
virtual std::string generateHeader(std::string const &body)
static const char REQUEST_END_METHODNAME[]
Definition: XmlRpcClient.h:29
static const char REQUEST_BEGIN[]
Definition: XmlRpcClient.h:28
static const char PARAM_TAG[]
Definition: XmlRpcClient.h:32
static const char PARAMS_TAG[]
Definition: XmlRpcClient.h:30

Referenced by execute().

◆ handleEvent()

unsigned XmlRpcClient::handleEvent ( unsigned  eventType)
virtual

Handle server responses. Called by the event dispatcher during execute.

Parameters
eventTypeThe type of event that occurred.
See also
XmlRpcDispatch::EventType

Implements XmlRpc::XmlRpcSource.

Definition at line 115 of file XmlRpcClient.cpp.

116{
117 if (eventType == XmlRpcDispatch::Exception)
118 {
120 XmlRpcUtil::error("Error in XmlRpcClient::handleEvent: could not connect to server (%s).",
122 else
123 XmlRpcUtil::error("Error in XmlRpcClient::handleEvent (state %d): %s.",
125 return 0;
126 }
127
129 if ( ! writeRequest()) return 0;
130
132 if ( ! readHeader()) return 0;
133
135 if ( ! readResponse()) return 0;
136
137 // This should probably always ask for Exception events too
140}
virtual bool writeRequest()
virtual bool readResponse()
virtual bool readHeader()
@ ReadableEvent
data available to read
@ WritableEvent
connected/data can be written without blocking

◆ isFault()

bool XmlRpc::XmlRpcClient::isFault ( ) const
inline

Returns true if the result of the last execute() was a fault response.

Definition at line 61 of file XmlRpcClient.h.

61{ return _isFault; }

Referenced by main().

◆ parseResponse()

bool XmlRpcClient::parseResponse ( XmlRpcValue result)
protectedvirtual

Definition at line 388 of file XmlRpcClient.cpp.

389{
390 // Parse response xml into result
391 int offset = 0;
393 XmlRpcUtil::error("Error in XmlRpcClient::parseResponse: Invalid response - no methodResponse. Response:\n%s", _response.c_str());
394 return false;
395 }
396
397
398 // Expect either <params><param>... or <fault>...
401 // || XmlRpcUtil::nextTagIs(FAULT_TAG,_response,&offset) //yzhang delete
402 && (_isFault = true))
403 {
404 if ( ! result.fromXml(_response, &offset)) {
405 XmlRpcUtil::error("Error in XmlRpcClient::parseResponse: Invalid response value. Response:\n%s", _response.c_str());
406 _response = "";
407 return false;
408 }
409 } else {
410 XmlRpcUtil::error("Error in XmlRpcClient::parseResponse: Invalid response - no param or fault tag. Response:\n%s", _response.c_str());
411 _response = "";
412 return false;
413 }
414
415 _response = "";
416 return result.valid();
417}
static const char METHODRESPONSE_TAG[]
Definition: XmlRpcClient.h:36
static bool nextTagIs(const char *tag, std::string const &xml, int *offset)
Definition: XmlRpcUtil.cpp:131
static bool findTag(const char *tag, std::string const &xml, int *offset)
Returns true if the tag is found and updates offset to the char after the tag.
Definition: XmlRpcUtil.cpp:116
bool fromXml(std::string const &valueXml, int *offset)
Decode xml. Destroys any existing value.
bool valid() const
Return true if the value has been set to something.
Definition: XmlRpcValue.h:102

◆ readHeader()

bool XmlRpcClient::readHeader ( )
protectedvirtual

Definition at line 286 of file XmlRpcClient.cpp.

287{
288 // Read available data
289 if ( ! XmlRpcSocket::nbRead(this->getfd(), _header, &_eof) ||
290 (_eof && _header.length() == 0)) {
291
292 // If we haven't read any data yet and this is a keep-alive connection, the server may
293 // have timed out, so we try one more time.
294 if (getKeepOpen() && _header.length() == 0 && _sendAttempts++ == 0) {
295 XmlRpcUtil::log(4, "XmlRpcClient::readHeader: re-trying connection");
298 _eof = false;
299 return setupConnection();
300 }
301
302 XmlRpcUtil::error("Error in XmlRpcClient::readHeader: error while reading header (%s) on fd %d.",
304 return false;
305 }
306
307 XmlRpcUtil::log(4, "XmlRpcClient::readHeader: client has read %d bytes", _header.length());
308
309 char *hp = (char*)_header.c_str(); // Start of header
310 char *ep = hp + _header.length(); // End of string
311 char *bp = 0; // Start of body
312 char *lp = 0; // Start of content-length value
313
314 for (char *cp = hp; (bp == 0) && (cp < ep); ++cp) {
315 if ((ep - cp > 16) && (strncasecmp(cp, "Content-length: ", 16) == 0))
316 lp = cp + 16;
317 else if ((ep - cp > 4) && (strncmp(cp, "\r\n\r\n", 4) == 0))
318 bp = cp + 4;
319 else if ((ep - cp > 2) && (strncmp(cp, "\n\n", 2) == 0))
320 bp = cp + 2;
321 }
322
323 // If we haven't gotten the entire header yet, return (keep reading)
324 if (bp == 0) {
325 if (_eof) // EOF in the middle of a response is an error
326 {
327 XmlRpcUtil::error("Error in XmlRpcClient::readHeader: EOF while reading header");
328 return false; // Close the connection
329 }
330
331 return true; // Keep reading
332 }
333
334 // Decode content length
335 if (lp == 0) {
336 XmlRpcUtil::error("Error XmlRpcClient::readHeader: No Content-length specified");
337 return false; // We could try to figure it out by parsing as we read, but for now...
338 }
339
340 _contentLength = atoi(lp);
341 if (_contentLength <= 0) {
342 XmlRpcUtil::error("Error in XmlRpcClient::readHeader: Invalid Content-length specified (%d).", _contentLength);
343 return false;
344 }
345
346 XmlRpcUtil::log(4, "client read content length: %d", _contentLength);
347
348 // Otherwise copy non-header data to response buffer and set state to read response.
349 _response = bp;
350 _header = ""; // should parse out any interesting bits from the header (connection, etc)...
352 return true; // Continue monitoring this source
353}
std::string _header
Definition: XmlRpcClient.h:96
static bool nbRead(int socket, std::string &s, bool *eof)
Read text from the specified socket. Returns false on error.
bool getKeepOpen() const
Return whether the file descriptor should be kept open if it is no longer monitored.
Definition: XmlRpcSource.h:30

Referenced by handleEvent().

◆ readResponse()

bool XmlRpcClient::readResponse ( )
protectedvirtual

Definition at line 357 of file XmlRpcClient.cpp.

358{
359 // If we dont have the entire response yet, read available data
360 if (int(_response.length()) < _contentLength) {
361 if ( ! XmlRpcSocket::nbRead(this->getfd(), _response, &_eof)) {
362 XmlRpcUtil::error("Error in XmlRpcClient::readResponse: read error (%s).",XmlRpcSocket::getErrorMsg().c_str());
363 return false;
364 }
365
366 // If we haven't gotten the entire _response yet, return (keep reading)
367 if (int(_response.length()) < _contentLength) {
368 if (_eof) {
369 XmlRpcUtil::error("Error in XmlRpcClient::readResponse: EOF while reading response");
370 return false;
371 }
372 return true;
373 }
374 }
375
376 // Otherwise, parse and return the result
377 XmlRpcUtil::log(3, "XmlRpcClient::readResponse (read %d bytes)", _response.length());
378 XmlRpcUtil::log(5, "response:\n%s", _response.c_str());
379
381
382 return false; // Stop monitoring this source (causes return from work)
383}

Referenced by handleEvent().

◆ setupConnection()

bool XmlRpcClient::setupConnection ( )
protectedvirtual

Definition at line 145 of file XmlRpcClient.cpp.

146{
147 // If an error occurred last time through, or if the server closed the connection, close our end
149 close();
150
151 _eof = false;
153 if (! doConnect())
154 return false;
155
156 // Prepare to write the request
158 _bytesWritten = 0;
159
160 // Notify the dispatcher to listen on this source (calls handleEvent when the socket is writable)
161 _disp.removeSource(this); // Make sure nothing is left over
163
164 return true;
165}
virtual bool doConnect()
void addSource(XmlRpcSource *source, unsigned eventMask)

Referenced by execute(), and readHeader().

◆ writeRequest()

bool XmlRpcClient::writeRequest ( )
protectedvirtual

Definition at line 261 of file XmlRpcClient.cpp.

262{
263 if (_bytesWritten == 0)
264 XmlRpcUtil::log(5, "XmlRpcClient::writeRequest (attempt %d):\n%s\n", _sendAttempts+1, _request.c_str());
265
266 // Try to write the request
268 XmlRpcUtil::error("Error in XmlRpcClient::writeRequest: write error (%s).",XmlRpcSocket::getErrorMsg().c_str());
269 return false;
270 }
271
272 XmlRpcUtil::log(3, "XmlRpcClient::writeRequest: wrote %d of %d bytes.", _bytesWritten, _request.length());
273
274 // Wait for the result
275 if (_bytesWritten == int(_request.length())) {
276 _header = "";
277 _response = "";
279 }
280 return true;
281}
static bool nbWrite(int socket, std::string &s, int *bytesSoFar)
Write text to the specified socket. Returns false on error.

Referenced by handleEvent().

Member Data Documentation

◆ _bytesWritten

int XmlRpc::XmlRpcClient::_bytesWritten
protected

Definition at line 103 of file XmlRpcClient.h.

Referenced by handleEvent(), setupConnection(), and writeRequest().

◆ _connectionState

ClientConnectionState XmlRpc::XmlRpcClient::_connectionState
protected

◆ _contentLength

int XmlRpc::XmlRpcClient::_contentLength
protected

Definition at line 116 of file XmlRpcClient.h.

Referenced by readHeader(), and readResponse().

◆ _disp

XmlRpcDispatch XmlRpc::XmlRpcClient::_disp
protected

Definition at line 119 of file XmlRpcClient.h.

Referenced by close(), execute(), and setupConnection().

◆ _eof

bool XmlRpc::XmlRpcClient::_eof
protected

Definition at line 110 of file XmlRpcClient.h.

Referenced by readHeader(), readResponse(), setupConnection(), and XmlRpcClient().

◆ _executing

bool XmlRpc::XmlRpcClient::_executing
protected

Definition at line 107 of file XmlRpcClient.h.

Referenced by execute(), and XmlRpcClient().

◆ _header

std::string XmlRpc::XmlRpcClient::_header
protected

Definition at line 96 of file XmlRpcClient.h.

Referenced by readHeader(), and writeRequest().

◆ _host

std::string XmlRpc::XmlRpcClient::_host
protected

Definition at line 90 of file XmlRpcClient.h.

Referenced by doConnect(), generateHeader(), and XmlRpcClient().

◆ _isFault

bool XmlRpc::XmlRpcClient::_isFault
protected

Definition at line 113 of file XmlRpcClient.h.

Referenced by execute(), isFault(), and parseResponse().

◆ _port

int XmlRpc::XmlRpcClient::_port
protected

Definition at line 92 of file XmlRpcClient.h.

Referenced by doConnect(), generateHeader(), and XmlRpcClient().

◆ _request

std::string XmlRpc::XmlRpcClient::_request
protected

Definition at line 95 of file XmlRpcClient.h.

Referenced by generateRequest(), and writeRequest().

◆ _response

std::string XmlRpc::XmlRpcClient::_response
protected

Definition at line 97 of file XmlRpcClient.h.

Referenced by execute(), parseResponse(), readHeader(), readResponse(), and writeRequest().

◆ _sendAttempts

int XmlRpc::XmlRpcClient::_sendAttempts
protected

Definition at line 100 of file XmlRpcClient.h.

Referenced by execute(), readHeader(), and writeRequest().

◆ _uri

std::string XmlRpc::XmlRpcClient::_uri
protected

Definition at line 91 of file XmlRpcClient.h.

Referenced by generateHeader(), and XmlRpcClient().

◆ FAULT_TAG

const char XmlRpcClient::FAULT_TAG = "<fault>"
static

Definition at line 37 of file XmlRpcClient.h.

◆ METHODRESPONSE_TAG

const char XmlRpcClient::METHODRESPONSE_TAG = "<methodResponse>"
static

Definition at line 36 of file XmlRpcClient.h.

Referenced by parseResponse().

◆ PARAM_ETAG

const char XmlRpcClient::PARAM_ETAG = "</param>"
static

Definition at line 33 of file XmlRpcClient.h.

Referenced by generateRequest().

◆ PARAM_TAG

const char XmlRpcClient::PARAM_TAG = "<param>"
static

Definition at line 32 of file XmlRpcClient.h.

Referenced by generateRequest(), and parseResponse().

◆ PARAMS_ETAG

const char XmlRpcClient::PARAMS_ETAG = "</params>"
static

Definition at line 31 of file XmlRpcClient.h.

Referenced by generateRequest().

◆ PARAMS_TAG

const char XmlRpcClient::PARAMS_TAG = "<params>"
static

Definition at line 30 of file XmlRpcClient.h.

Referenced by generateRequest(), and parseResponse().

◆ REQUEST_BEGIN

const char XmlRpcClient::REQUEST_BEGIN
static
Initial value:
=
"<?xml version=\"1.0\"?>\r\n"
"<methodCall><methodName>"

Definition at line 28 of file XmlRpcClient.h.

Referenced by generateRequest().

◆ REQUEST_END

const char XmlRpcClient::REQUEST_END = "</methodCall>\r\n"
static

Definition at line 34 of file XmlRpcClient.h.

Referenced by generateRequest().

◆ REQUEST_END_METHODNAME

const char XmlRpcClient::REQUEST_END_METHODNAME = "</methodName>\r\n"
static

Definition at line 29 of file XmlRpcClient.h.

Referenced by generateRequest().


The documentation for this class was generated from the following files: