// TestBase64Client.cpp : A simple xmlrpc client that returns a png file
// encoded as base64 data to the client.
//
// Usage: TestBase64Client serverHost serverPort outputfile
// Requests a png file from the specified server and saves it in outputfile.
// Link against xmlrpc lib and whatever socket libs your system needs (ws2_32.lib on windows)

#include "XmlRpc.h"
#include <iostream>
#include <fstream>
#include <stdlib.h>

using namespace XmlRpc;

int main(int argc, char* argv[])
{
  if (argc != 4) {
    std::cerr << "Usage: TestBase64Client serverHost serverPort outputFile\n";
    return -1;
  }
  int port = atoi(argv[2]);

  //XmlRpc::setVerbosity(5);
  XmlRpcClient c(argv[1], port);

  XmlRpcValue noArgs, result;
  if (c.execute("TestBase64", noArgs, result))
  {
    const XmlRpcValue::BinaryData& data = result;
    std::ofstream outfile(argv[3], std::ios::binary | std::ios::trunc);
    if (outfile.fail())
      std::cerr << "Error opening " << argv[3] << " for output.\n";
    else
    {
      int n = int(data.size());
      for (int i=0; i<n; ++i)
        outfile << data[i];
    }
  }
  else
    std::cout << "Error calling 'TestBase64'\n\n";

  return 0;
}

