#include <netinet/in.h>
#include <string>
#include <unistd.h>
+#include <vector>
#define SERVERS_TO_CREATE 5
+struct server_st;
+
+typedef pid_t (test_server_getpid)(server_st &);
+typedef bool (test_server_ping)(server_st &);
+
struct server_st {
private:
bool _used;
pid_t _pid;
in_port_t _port;
char pid_file[FILENAME_MAX]; // Did we start it, or was it just sitting there?
+ std::string _command;
+ test_server_getpid *__get_pid;
+ test_server_ping *__ping;
+ std::string _hostname;
+
public:
+ server_st(in_port_t port_arg, test_server_getpid *, test_server_ping *);
+
+ server_st(const std::string &socket_file, test_server_getpid *, test_server_ping *);
+
+ void set_methods(test_server_getpid *get_pid_arg, test_server_ping *ping_arg)
+ {
+ __get_pid= get_pid_arg;
+ __ping= ping_arg;
+ }
+
+ const char *hostname() const
+ {
+ if (_hostname.empty())
+ return "";
+
+ return _hostname.c_str();
+ }
+
+ bool ping()
+ {
+ if (__ping)
+ return __ping(*this);
- char hostname[NI_MAXHOST];
+ return false;
+ }
- server_st() :
- _used(false),
- _pid(-1),
- _port(0)
+ pid_t get_pid()
{
- pid_file[0]= 0;
- strncpy(hostname, "localhost", sizeof(hostname));
+ if (__get_pid)
+ return _pid= __get_pid(*this);
+
+ return -1;
}
void set_port(in_port_t arg)
bool has_port() const
{
- return not _port == 0;
+ return (_port != 0);
}
- void set_used()
+ void set_command(const char *arg)
{
- _used= true;
+ _command= arg;
}
- void set_pid(pid_t arg)
+ void set_used()
{
- _pid= arg;
+ _used= true;
}
- pid_t pid() const
- {
- return _pid;
- }
+ pid_t pid();
bool is_used() const
{
bool has_pid()
{
- return _pid > 0;
+ return (_pid > 1);
}
bool is_socket() const
{
- return hostname[0] == '/';
- }
-
- void set_hostname(const char *arg)
- {
- strncpy(hostname, arg, sizeof(hostname));
+ return _hostname[0] == '/';
}
bool kill();
+ bool start();
private:
void reset_pid();
struct server_startup_st
{
- uint8_t count;
+ uint32_t count;
uint8_t udp;
std::string server_list;
- server_st server[SERVERS_TO_CREATE];
+ std::vector<server_st *> servers;
server_startup_st() :
count(SERVERS_TO_CREATE),
udp(0)
{ }
- ~server_startup_st()
- { }
+ void shutdown();
+ void push_server(server_st *);
+
+ ~server_startup_st();
};
#ifdef __cplusplus