|
|
|
@ -13,63 +13,57 @@
|
|
|
|
|
|
|
|
|
|
namespace csoap {
|
|
|
|
|
|
|
|
|
|
bool SoapClient::Call(const std::string& operation,
|
|
|
|
|
const csoap::Parameter* parameters,
|
|
|
|
|
size_t count,
|
|
|
|
|
std::string* result) {
|
|
|
|
|
Error SoapClient::Call(const std::string& operation,
|
|
|
|
|
const Parameter* parameters,
|
|
|
|
|
std::size_t count,
|
|
|
|
|
std::string* result) {
|
|
|
|
|
assert(!url_.empty() &&
|
|
|
|
|
!host_.empty() &&
|
|
|
|
|
!result_name_.empty() &&
|
|
|
|
|
service_ns_.IsValid());
|
|
|
|
|
|
|
|
|
|
csoap::SoapRequest soap_request;
|
|
|
|
|
SoapRequest soap_request;
|
|
|
|
|
|
|
|
|
|
soap_request.set_soapenv_ns(kSoapEnvNamespace);
|
|
|
|
|
soap_request.set_soapenv_ns(kSoapEnvNamespace); // TODO: Configurable
|
|
|
|
|
soap_request.set_service_ns(service_ns_);
|
|
|
|
|
|
|
|
|
|
soap_request.set_operation(operation);
|
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < count; ++i) {
|
|
|
|
|
for (std::size_t i = 0; i < count; ++i) {
|
|
|
|
|
soap_request.AddParameter(parameters[i]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::string http_request_body;
|
|
|
|
|
soap_request.ToXml(&http_request_body);
|
|
|
|
|
|
|
|
|
|
csoap::HttpRequest http_request;
|
|
|
|
|
HttpRequest http_request;
|
|
|
|
|
|
|
|
|
|
http_request.set_version(csoap::kHttpV11);
|
|
|
|
|
http_request.set_version(kHttpV11); // TODO
|
|
|
|
|
http_request.set_url(url_);
|
|
|
|
|
http_request.set_content_length(http_request_body.size());
|
|
|
|
|
http_request.set_content(http_request_body); // TODO: move
|
|
|
|
|
http_request.set_host(host_, port_);
|
|
|
|
|
http_request.set_soap_action(operation);
|
|
|
|
|
|
|
|
|
|
csoap::HttpResponse http_response;
|
|
|
|
|
HttpResponse http_response;
|
|
|
|
|
|
|
|
|
|
csoap::HttpClient http_client;
|
|
|
|
|
csoap::ErrorCode ec = http_client.SendRequest(http_request, &http_response);
|
|
|
|
|
if (ec != csoap::kNoError) {
|
|
|
|
|
std::cerr << csoap::GetErrorMessage(ec) << std::endl;
|
|
|
|
|
HttpClient http_client;
|
|
|
|
|
Error error = http_client.SendRequest(http_request, &http_response);
|
|
|
|
|
|
|
|
|
|
if (ec == csoap::kHttpStatusError) {
|
|
|
|
|
//std::cerr << "\t"
|
|
|
|
|
// << http_response.status() << ", "
|
|
|
|
|
// << http_response.reason() << std::endl;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
if (error != kNoError) {
|
|
|
|
|
return error;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
csoap::SoapResponse soap_response;
|
|
|
|
|
SoapResponse soap_response;
|
|
|
|
|
soap_response.set_result_name(result_name_);
|
|
|
|
|
|
|
|
|
|
if (soap_response.FromXml(http_response.content())) {
|
|
|
|
|
*result = soap_response.result();
|
|
|
|
|
return true;
|
|
|
|
|
if (!soap_response.FromXml(http_response.content())) {
|
|
|
|
|
return kXmlError; // TODO: Some SOAP error?
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
*result = soap_response.result();
|
|
|
|
|
|
|
|
|
|
return kNoError;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} // namespace csoap
|
|
|
|
|