1// TestBase64Server.cpp : Simple XMLRPC server example. Usage: TestBase64Server serverPort
2//
3#if defined(_MSC_VER)
4# pragma warning(disable:4786)    // identifier was truncated in debug info
5#endif
6
7
8#include <iostream>
9#include <fstream>
10#include <algorithm>
11#include <stdlib.h>
12
13
14#include "XmlRpc.h"
15using namespace XmlRpc;
16
17
18// The server
19XmlRpcServer s;
20
21// No arguments, result is Base64-encoded pngnow.png data.
22class TestBase64 : public XmlRpcServerMethod
23{
24public:
25  TestBase64(XmlRpcServer* s) : XmlRpcServerMethod("TestBase64", s) {}
26
27  void execute(XmlRpcValue& params, XmlRpcValue& result)
28  {
29    std::ifstream infile("pngnow.png", std::ios::binary);
30    if (infile.fail())
31      infile.open("../pngnow.png", std::ios::binary);
32    if (infile.fail())
33      result = "Could not open file pngnow.png";
34    else {
35
36      XmlRpcValue::BinaryData& data = result;
37      int n = 0;
38      for (;; ++n) {
39        char c = infile.get();
40        if (infile.eof()) break;
41        data.push_back(c);
42      }
43      std::cerr << "Read " << n << " bytes from pngnow.png\n";
44    }
45  }
46} TestBase64(&s);    // This constructor registers the method with the server
47
48
49
50int main(int argc, char* argv[])
51{
52  if (argc != 2) {
53    std::cerr << "Usage: TestBase64Server serverPort\n";
54    return -1;
55  }
56  int port = atoi(argv[1]);
57
58  //XmlRpc::setVerbosity(5);
59
60  // Create the server socket on the specified port
61  s.bindAndListen(port);
62
63  // Wait for requests indefinitely
64  s.work(-1.0);
65
66  return 0;
67}
68
69