[Box Backup-commit] COMMIT r2171 - box/trunk/lib/server

boxbackup-dev@fluffy.co.uk boxbackup-dev@fluffy.co.uk
Wed, 28 May 2008 13:15:56 +0100 (BST)


Author: chris
Date: 2008-05-28 13:15:56 +0100 (Wed, 28 May 2008)
New Revision: 2171

Added:
   box/trunk/lib/server/ServerControl.cpp
Modified:
   box/trunk/lib/server/ServerControl.h
Log:
Move ServerControl functions out of line and into their own source file.


Copied: box/trunk/lib/server/ServerControl.cpp (from rev 2162, box/trunk/lib/server/ServerControl.h)
===================================================================
--- box/trunk/lib/server/ServerControl.cpp	                        (rev 0)
+++ box/trunk/lib/server/ServerControl.cpp	2008-05-28 12:15:56 UTC (rev 2171)
@@ -0,0 +1,198 @@
+#include "Box.h"
+
+#include <errno.h>
+
+#ifdef HAVE_SYS_TYPES_H
+	#include <sys/types.h>
+#endif
+
+#ifdef HAVE_SIGNAL_H
+	#include <signal.h>
+#endif
+
+#include "ServerControl.h"
+#include "Test.h"
+
+#ifdef WIN32
+
+#include "WinNamedPipeStream.h"
+#include "IOStreamGetLine.h"
+#include "BoxPortsAndFiles.h"
+
+static std::string sPipeName;
+
+void SetNamedPipeName(const std::string& rPipeName)
+{
+	sPipeName = rPipeName;
+}
+
+bool SendCommands(const std::string& rCmd)
+{
+	WinNamedPipeStream connection;
+
+	try
+	{
+		connection.Connect(sPipeName);
+	}
+	catch(...)
+	{
+		BOX_ERROR("Failed to connect to daemon control socket");
+		return false;
+	}
+
+	// For receiving data
+	IOStreamGetLine getLine(connection);
+	
+	// Wait for the configuration summary
+	std::string configSummary;
+	if(!getLine.GetLine(configSummary))
+	{
+		BOX_ERROR("Failed to receive configuration summary from daemon");
+		return false;
+	}
+
+	// Was the connection rejected by the server?
+	if(getLine.IsEOF())
+	{
+		BOX_ERROR("Server rejected the connection");
+		return false;
+	}
+
+	// Decode it
+	int autoBackup, updateStoreInterval, minimumFileAge, maxUploadWait;
+	if(::sscanf(configSummary.c_str(), "bbackupd: %d %d %d %d", 
+			&autoBackup, &updateStoreInterval, 
+			&minimumFileAge, &maxUploadWait) != 4)
+	{
+		BOX_ERROR("Config summary didn't decode");
+		return false;
+	}
+
+	std::string cmds;
+	bool expectResponse;
+
+	if (rCmd != "")
+	{
+		cmds = rCmd;
+		cmds += "\nquit\n";
+		expectResponse = true;
+	}
+	else
+	{
+		cmds = "quit\n";
+		expectResponse = false;
+	}
+	
+	connection.Write(cmds.c_str(), cmds.size());
+	
+	// Read the response
+	std::string line;
+	bool statusOk = !expectResponse;
+
+	while (expectResponse && !getLine.IsEOF() && getLine.GetLine(line))
+	{
+		// Is this an OK or error line?
+		if (line == "ok")
+		{
+			statusOk = true;
+		}
+		else if (line == "error")
+		{
+			BOX_ERROR(rCmd);
+			break;
+		}
+		else
+		{
+			BOX_WARNING("Unexpected response to command '" <<
+				rCmd << "': " << line)
+		}
+	}
+	
+	return statusOk;
+}
+
+bool HUPServer(int pid)
+{
+	return SendCommands("reload");
+}
+
+bool KillServerInternal(int pid)
+{
+	HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, false, pid);
+	if (hProcess == NULL)
+	{
+		BOX_ERROR("Failed to open process " << pid << ": " <<
+			GetErrorMessage(GetLastError()));
+		return false;
+	}
+
+	if (!TerminateProcess(hProcess, 1))
+	{
+		BOX_ERROR("Failed to terminate process " << pid << ": " <<
+			GetErrorMessage(GetLastError()));
+		CloseHandle(hProcess);
+		return false;
+	}
+
+	CloseHandle(hProcess);
+	return true;
+}
+
+#else // !WIN32
+
+bool HUPServer(int pid)
+{
+	if(pid == 0) return false;
+	return ::kill(pid, SIGHUP) == 0;
+}
+
+bool KillServerInternal(int pid)
+{
+	if(pid == 0 || pid == -1) return false;
+	bool killed = (::kill(pid, SIGTERM) == 0);
+	if (!killed)
+	{
+		BOX_LOG_SYS_ERROR("Failed to kill process " << pid);
+	}
+	TEST_THAT(killed);
+	return killed;
+}
+
+#endif // WIN32
+
+bool KillServer(int pid)
+{
+	if (!KillServerInternal(pid))
+	{
+		return false;
+	}
+
+	for (int i = 0; i < 30; i++)
+	{
+		if (i == 0) 
+		{
+			printf("Waiting for server to die: ");
+		}
+
+		printf(".");
+		fflush(stdout);
+
+		if (!ServerIsAlive(pid)) break;
+		::sleep(1);
+		if (!ServerIsAlive(pid)) break;
+	}
+
+	if (!ServerIsAlive(pid))
+	{
+		printf(" done.\n");
+	}
+	else
+	{
+		printf(" failed!\n");
+	}
+
+	fflush(stdout);
+
+	return !ServerIsAlive(pid);
+}
+

Modified: box/trunk/lib/server/ServerControl.h
===================================================================
--- box/trunk/lib/server/ServerControl.h	2008-05-28 12:14:38 UTC (rev 2170)
+++ box/trunk/lib/server/ServerControl.h	2008-05-28 12:15:56 UTC (rev 2171)
@@ -3,187 +3,16 @@
 
 #include "Test.h"
 
+bool HUPServer(int pid);
+bool KillServer(int pid);
+
 #ifdef WIN32
+	#include "WinNamedPipeStream.h"
+	#include "IOStreamGetLine.h"
+	#include "BoxPortsAndFiles.h"
 
-#include "WinNamedPipeStream.h"
-#include "IOStreamGetLine.h"
-#include "BoxPortsAndFiles.h"
-
-static std::string sPipeName;
-
-static void SetNamedPipeName(const std::string& rPipeName)
-{
-	sPipeName = rPipeName;
-}
-
-static bool SendCommands(const std::string& rCmd)
-{
-	WinNamedPipeStream connection;
-
-	try
-	{
-		connection.Connect(sPipeName);
-	}
-	catch(...)
-	{
-		BOX_ERROR("Failed to connect to daemon control socket");
-		return false;
-	}
-
-	// For receiving data
-	IOStreamGetLine getLine(connection);
-	
-	// Wait for the configuration summary
-	std::string configSummary;
-	if(!getLine.GetLine(configSummary))
-	{
-		BOX_ERROR("Failed to receive configuration summary from daemon");
-		return false;
-	}
-
-	// Was the connection rejected by the server?
-	if(getLine.IsEOF())
-	{
-		BOX_ERROR("Server rejected the connection");
-		return false;
-	}
-
-	// Decode it
-	int autoBackup, updateStoreInterval, minimumFileAge, maxUploadWait;
-	if(::sscanf(configSummary.c_str(), "bbackupd: %d %d %d %d", 
-			&autoBackup, &updateStoreInterval, 
-			&minimumFileAge, &maxUploadWait) != 4)
-	{
-		BOX_ERROR("Config summary didn't decode");
-		return false;
-	}
-
-	std::string cmds;
-	bool expectResponse;
-
-	if (rCmd != "")
-	{
-		cmds = rCmd;
-		cmds += "\nquit\n";
-		expectResponse = true;
-	}
-	else
-	{
-		cmds = "quit\n";
-		expectResponse = false;
-	}
-	
-	connection.Write(cmds.c_str(), cmds.size());
-	
-	// Read the response
-	std::string line;
-	bool statusOk = !expectResponse;
-
-	while (expectResponse && !getLine.IsEOF() && getLine.GetLine(line))
-	{
-		// Is this an OK or error line?
-		if (line == "ok")
-		{
-			statusOk = true;
-		}
-		else if (line == "error")
-		{
-			BOX_ERROR(rCmd);
-			break;
-		}
-		else
-		{
-			BOX_WARNING("Unexpected response to command '" <<
-				rCmd << "': " << line)
-		}
-	}
-	
-	return statusOk;
-}
-
-inline bool HUPServer(int pid)
-{
-	return SendCommands("reload");
-}
-
-inline bool KillServerInternal(int pid)
-{
-	HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, false, pid);
-	if (hProcess == NULL)
-	{
-		BOX_ERROR("Failed to open process " << pid << ": " <<
-			GetErrorMessage(GetLastError()));
-		return false;
-	}
-
-	if (!TerminateProcess(hProcess, 1))
-	{
-		BOX_ERROR("Failed to terminate process " << pid << ": " <<
-			GetErrorMessage(GetLastError()));
-		CloseHandle(hProcess);
-		return false;
-	}
-
-	CloseHandle(hProcess);
-	return true;
-}
-
-#else // !WIN32
-
-inline bool HUPServer(int pid)
-{
-	if(pid == 0) return false;
-	return ::kill(pid, SIGHUP) == 0;
-}
-
-inline bool KillServerInternal(int pid)
-{
-	if(pid == 0 || pid == -1) return false;
-	bool killed = (::kill(pid, SIGTERM) == 0);
-	if (!killed)
-	{
-		BOX_LOG_SYS_ERROR("Failed to kill process " << pid);
-	}
-	TEST_THAT(killed);
-	return killed;
-}
-
+	void SetNamedPipeName(const std::string& rPipeName);
+	// bool SendCommands(const std::string& rCmd);
 #endif // WIN32
 
-inline bool KillServer(int pid)
-{
-	if (!KillServerInternal(pid))
-	{
-		return false;
-	}
-
-	for (int i = 0; i < 30; i++)
-	{
-		if (i == 0) 
-		{
-			printf("Waiting for server to die: ");
-		}
-
-		printf(".");
-		fflush(stdout);
-
-		if (!ServerIsAlive(pid)) break;
-		::sleep(1);
-		if (!ServerIsAlive(pid)) break;
-	}
-
-	if (!ServerIsAlive(pid))
-	{
-		printf(" done.\n");
-	}
-	else
-	{
-		printf(" failed!\n");
-	}
-
-	fflush(stdout);
-
-	return !ServerIsAlive(pid);
-}
-
 #endif // SERVER_CONTROL_H