1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
#ifndef SERVER_ABYSS_HPP_INCLUDED
#define SERVER_ABYSS_HPP_INCLUDED
#ifdef WIN32
#include <winsock.h> // For XMLRPC_SOCKET (= SOCKET)
#endif
#include "xmlrpc-c/config.h" // For XMLRPC_SOCKET
#include "xmlrpc-c/base.hpp"
#include "abyss.h"
namespace xmlrpc_c {
class serverAbyss {
public:
class constrOpt {
public:
constrOpt();
constrOpt & registryPtr (xmlrpc_c::registryPtr const& arg);
constrOpt & registryP (const xmlrpc_c::registry * const& arg);
constrOpt & socketFd (XMLRPC_SOCKET const& arg);
constrOpt & portNumber (unsigned int const& arg);
constrOpt & logFileName (std::string const& arg);
constrOpt & keepaliveTimeout (unsigned int const& arg);
constrOpt & keepaliveMaxConn (unsigned int const& arg);
constrOpt & timeout (unsigned int const& arg);
constrOpt & dontAdvertise (bool const& arg);
constrOpt & uriPath (std::string const& arg);
constrOpt & chunkResponse (bool const& arg);
struct value {
xmlrpc_c::registryPtr registryPtr;
const xmlrpc_c::registry * registryP;
XMLRPC_SOCKET socketFd;
unsigned int portNumber;
std::string logFileName;
unsigned int keepaliveTimeout;
unsigned int keepaliveMaxConn;
unsigned int timeout;
bool dontAdvertise;
std::string uriPath;
bool chunkResponse;
} value;
struct {
bool registryPtr;
bool registryP;
bool socketFd;
bool portNumber;
bool logFileName;
bool keepaliveTimeout;
bool keepaliveMaxConn;
bool timeout;
bool dontAdvertise;
bool uriPath;
bool chunkResponse;
} present;
};
serverAbyss(constrOpt const& opt);
serverAbyss(
xmlrpc_c::registry const& registry,
unsigned int const portNumber = 8080,
std::string const& logFileName = "",
unsigned int const keepaliveTimeout = 0,
unsigned int const keepaliveMaxConn = 0,
unsigned int const timeout = 0,
bool const dontAdvertise = false,
bool const socketBound = false,
XMLRPC_SOCKET const socketFd = 0
);
~serverAbyss();
void
run();
void
runOnce();
void
runConn(int const socketFd);
void
terminate();
class shutdown : public xmlrpc_c::registry::shutdown {
public:
shutdown(xmlrpc_c::serverAbyss * const severAbyssP);
virtual ~shutdown();
void doit(std::string const& comment, void * const callInfo) const;
private:
xmlrpc_c::serverAbyss * const serverAbyssP;
};
private:
// The user has the choice of supplying the registry by plain pointer
// (and managing the object's existence himself) or by autoObjectPtr
// (with automatic management). 'registryPtr' exists here only to
// maintain a reference count in the case that the user supplied an
// autoObjectPtr. The object doesn't reference the C++ registry
// object except during construction, because the C registry is the
// real registry.
xmlrpc_c::registryPtr registryPtr;
TServer cServer;
void
setAdditionalServerParms(constrOpt const& opt);
void
initialize(constrOpt const& opt);
};
void
server_abyss_set_handlers(TServer * const srvP,
xmlrpc_c::registry const& registry,
std::string const& uriPath = "/RPC2");
void
server_abyss_set_handlers(TServer * const srvP,
const xmlrpc_c::registry * const registryP,
std::string const& uriPath = "/RPC2");
void
server_abyss_set_handlers(TServer * const srvP,
xmlrpc_c::registryPtr const registryPtr,
std::string const& uriPath = "/RPC2");
} // namespace
#endif
|