// TestBase64Server.cpp : Simple XMLRPC server example. Usage: TestBase64Server serverPort | |
// | |
#if defined(_MSC_VER) | |
# pragma warning(disable:4786) // identifier was truncated in debug info | |
#endif | |
#include <iostream> | |
#include <fstream> | |
#include <algorithm> | |
#include <stdlib.h> | |
#include "XmlRpc.h" | |
using namespace XmlRpc; | |
// The server | |
XmlRpcServer s; | |
// No arguments, result is Base64-encoded pngnow.png data. | |
class TestBase64 : public XmlRpcServerMethod | |
{ | |
public: | |
TestBase64(XmlRpcServer* s) : XmlRpcServerMethod("TestBase64", s) {} | |
void execute(XmlRpcValue& params, XmlRpcValue& result) | |
{ | |
std::ifstream infile("pngnow.png", std::ios::binary); | |
if (infile.fail()) | |
infile.open("../pngnow.png", std::ios::binary); | |
if (infile.fail()) | |
result = "Could not open file pngnow.png"; | |
else { | |
XmlRpcValue::BinaryData& data = result; | |
int n = 0; | |
for (;; ++n) { | |
char c = infile.get(); | |
if (infile.eof()) break; | |
data.push_back(c); | |
} | |
std::cerr << "Read " << n << " bytes from pngnow.png\n"; | |
} | |
} | |
} TestBase64(&s); // This constructor registers the method with the server | |
int main(int argc, char* argv[]) | |
{ | |
if (argc != 2) { | |
std::cerr << "Usage: TestBase64Server serverPort\n"; | |
return -1; | |
} | |
int port = atoi(argv[1]); | |
//XmlRpc::setVerbosity(5); | |
// Create the server socket on the specified port | |
s.bindAndListen(port); | |
// Wait for requests indefinitely | |
s.work(-1.0); | |
return 0; | |
} | |