parent
916020d6c2
commit
e165da946e
@ -219,17 +219,14 @@ void cRoot::Start(void)
|
|||||||
delete m_InputThread; m_InputThread = NULL;
|
delete m_InputThread; m_InputThread = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Deallocate stuffs
|
// Stop the server:
|
||||||
if
|
m_WebAdmin->Stop();
|
||||||
LOG("Shutting down server...");
|
LOG("Shutting down server...");
|
||||||
m_Server->Shutdown();
|
m_Server->Shutdown();
|
||||||
|
|
||||||
LOGD("Shutting down deadlock detector...");
|
LOGD("Shutting down deadlock detector...");
|
||||||
dd.Stop();
|
dd.Stop();
|
||||||
|
|
||||||
LOGD("Stopping world threads...");
|
LOGD("Stopping world threads...");
|
||||||
StopWorlds();
|
StopWorlds();
|
||||||
|
|
||||||
LOGD("Stopping authenticator...");
|
LOGD("Stopping authenticator...");
|
||||||
m_Authenticator.Stop();
|
m_Authenticator.Stop();
|
||||||
|
|
||||||
|
@ -42,6 +42,7 @@ public:
|
|||||||
|
|
||||||
cWebAdmin::cWebAdmin(void) :
|
cWebAdmin::cWebAdmin(void) :
|
||||||
m_IsInitialized(false),
|
m_IsInitialized(false),
|
||||||
|
m_IsRunning(false),
|
||||||
m_TemplateScript("<webadmin_template>")
|
m_TemplateScript("<webadmin_template>")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -52,29 +53,26 @@ cWebAdmin::cWebAdmin(void) :
|
|||||||
|
|
||||||
cWebAdmin::~cWebAdmin()
|
cWebAdmin::~cWebAdmin()
|
||||||
{
|
{
|
||||||
if (m_IsInitialized)
|
ASSERT(!m_IsRunning); // Was the HTTP server stopped properly?
|
||||||
{
|
|
||||||
LOGD("Stopping WebAdmin...");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cWebAdmin::AddPlugin( cWebPlugin * a_Plugin )
|
void cWebAdmin::AddPlugin(cWebPlugin * a_Plugin)
|
||||||
{
|
{
|
||||||
m_Plugins.remove( a_Plugin );
|
m_Plugins.remove(a_Plugin);
|
||||||
m_Plugins.push_back( a_Plugin );
|
m_Plugins.push_back(a_Plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cWebAdmin::RemovePlugin( cWebPlugin * a_Plugin )
|
void cWebAdmin::RemovePlugin(cWebPlugin * a_Plugin)
|
||||||
{
|
{
|
||||||
m_Plugins.remove( a_Plugin );
|
m_Plugins.remove(a_Plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -87,7 +85,8 @@ bool cWebAdmin::Init(void)
|
|||||||
{
|
{
|
||||||
LOGWARN("Regenerating webadmin.ini, all settings will be reset");
|
LOGWARN("Regenerating webadmin.ini, all settings will be reset");
|
||||||
m_IniFile.AddHeaderComment(" This file controls the webadmin feature of MCServer");
|
m_IniFile.AddHeaderComment(" This file controls the webadmin feature of MCServer");
|
||||||
m_IniFile.AddHeaderComment(" Username format: [User:*username*] | Password format: Password=*password*; for example:");
|
m_IniFile.AddHeaderComment(" Username format: [User:*username*]");
|
||||||
|
m_IniFile.AddHeaderComment(" Password format: Password=*password*; for example:");
|
||||||
m_IniFile.AddHeaderComment(" [User:admin]");
|
m_IniFile.AddHeaderComment(" [User:admin]");
|
||||||
m_IniFile.AddHeaderComment(" Password=admin");
|
m_IniFile.AddHeaderComment(" Password=admin");
|
||||||
}
|
}
|
||||||
@ -134,7 +133,24 @@ bool cWebAdmin::Start(void)
|
|||||||
m_TemplateScript.Close();
|
m_TemplateScript.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
return m_HTTPServer.Start(*this);
|
m_IsRunning = m_HTTPServer.Start(*this);
|
||||||
|
return m_IsRunning;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cWebAdmin::Stop(void)
|
||||||
|
{
|
||||||
|
if (!m_IsRunning)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOGD("Stopping WebAdmin...");
|
||||||
|
m_HTTPServer.Stop();
|
||||||
|
m_IsRunning = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,13 +56,13 @@ struct HTTPRequest
|
|||||||
AString Username;
|
AString Username;
|
||||||
// tolua_end
|
// tolua_end
|
||||||
|
|
||||||
/// Parameters given in the URL, after the questionmark
|
/** Parameters given in the URL, after the questionmark */
|
||||||
StringStringMap Params; // >> EXPORTED IN MANUALBINDINGS <<
|
StringStringMap Params; // >> EXPORTED IN MANUALBINDINGS <<
|
||||||
|
|
||||||
/// Parameters posted as a part of a form - either in the URL (GET method) or in the body (POST method)
|
/** Parameters posted as a part of a form - either in the URL (GET method) or in the body (POST method) */
|
||||||
StringStringMap PostParams; // >> EXPORTED IN MANUALBINDINGS <<
|
StringStringMap PostParams; // >> EXPORTED IN MANUALBINDINGS <<
|
||||||
|
|
||||||
/// Same as PostParams
|
/** Same as PostParams */
|
||||||
FormDataMap FormData; // >> EXPORTED IN MANUALBINDINGS <<
|
FormDataMap FormData; // >> EXPORTED IN MANUALBINDINGS <<
|
||||||
} ; // tolua_export
|
} ; // tolua_export
|
||||||
|
|
||||||
@ -107,14 +107,17 @@ public:
|
|||||||
cWebAdmin(void);
|
cWebAdmin(void);
|
||||||
virtual ~cWebAdmin();
|
virtual ~cWebAdmin();
|
||||||
|
|
||||||
/// Initializes the object. Returns true if successfully initialized and ready to start
|
/** Initializes the object. Returns true if successfully initialized and ready to start */
|
||||||
bool Init(void);
|
bool Init(void);
|
||||||
|
|
||||||
/// Starts the HTTP server taking care of the admin. Returns true if successful
|
/** Starts the HTTP server taking care of the admin. Returns true if successful */
|
||||||
bool Start(void);
|
bool Start(void);
|
||||||
|
|
||||||
void AddPlugin( cWebPlugin* a_Plugin );
|
/** Stops the HTTP server, if it was started. */
|
||||||
void RemovePlugin( cWebPlugin* a_Plugin );
|
void Stop(void);
|
||||||
|
|
||||||
|
void AddPlugin(cWebPlugin * a_Plugin);
|
||||||
|
void RemovePlugin(cWebPlugin * a_Plugin);
|
||||||
|
|
||||||
// TODO: Convert this to the auto-locking callback mechanism used for looping players in worlds and such
|
// TODO: Convert this to the auto-locking callback mechanism used for looping players in worlds and such
|
||||||
PluginList GetPlugins() const { return m_Plugins; } // >> EXPORTED IN MANUALBINDINGS <<
|
PluginList GetPlugins() const { return m_Plugins; } // >> EXPORTED IN MANUALBINDINGS <<
|
||||||
@ -123,13 +126,13 @@ public:
|
|||||||
|
|
||||||
sWebAdminPage GetPage(const HTTPRequest & a_Request);
|
sWebAdminPage GetPage(const HTTPRequest & a_Request);
|
||||||
|
|
||||||
/// Returns the contents of the default page - the list of plugins and players
|
/** Returns the contents of the default page - the list of plugins and players */
|
||||||
AString GetDefaultPage(void);
|
AString GetDefaultPage(void);
|
||||||
|
|
||||||
/// Returns the prefix needed for making a link point to the webadmin root from the given URL ("../../../webadmin"-style)
|
/** Returns the prefix needed for making a link point to the webadmin root from the given URL ("../../../webadmin"-style) */
|
||||||
AString GetBaseURL(const AString & a_URL);
|
AString GetBaseURL(const AString & a_URL);
|
||||||
|
|
||||||
/// Escapes text passed into it, so it can be embedded into html.
|
/** Escapes text passed into it, so it can be embedded into html. */
|
||||||
static AString GetHTMLEscapedString(const AString & a_Input);
|
static AString GetHTMLEscapedString(const AString & a_Input);
|
||||||
|
|
||||||
AString GetIPv4Ports(void) const { return m_PortsIPv4; }
|
AString GetIPv4Ports(void) const { return m_PortsIPv4; }
|
||||||
@ -137,21 +140,21 @@ public:
|
|||||||
|
|
||||||
// tolua_end
|
// tolua_end
|
||||||
|
|
||||||
/// Returns the prefix needed for making a link point to the webadmin root from the given URL ("../../../webadmin"-style)
|
/** Returns the prefix needed for making a link point to the webadmin root from the given URL ("../../../webadmin"-style) */
|
||||||
AString GetBaseURL(const AStringVector& a_URLSplit);
|
AString GetBaseURL(const AStringVector& a_URLSplit);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/// Common base class for request body data handlers
|
/** Common base class for request body data handlers */
|
||||||
class cRequestData
|
class cRequestData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~cRequestData() {} // Force a virtual destructor in all descendants
|
virtual ~cRequestData() {} // Force a virtual destructor in all descendants
|
||||||
|
|
||||||
/// Called when a new chunk of body data is received
|
/** Called when a new chunk of body data is received */
|
||||||
virtual void OnBody(const char * a_Data, int a_Size) = 0;
|
virtual void OnBody(const char * a_Data, int a_Size) = 0;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
/// The body handler for requests in the "/webadmin" and "/~webadmin" paths
|
/** The body handler for requests in the "/webadmin" and "/~webadmin" paths */
|
||||||
class cWebadminRequestData :
|
class cWebadminRequestData :
|
||||||
public cRequestData,
|
public cRequestData,
|
||||||
public cHTTPFormParser::cCallbacks
|
public cHTTPFormParser::cCallbacks
|
||||||
@ -182,10 +185,13 @@ protected:
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
/// Set to true if Init() succeeds and the webadmin isn't to be disabled
|
/** Set to true if Init() succeeds and the webadmin isn't to be disabled */
|
||||||
bool m_IsInitialized;
|
bool m_IsInitialized;
|
||||||
|
|
||||||
/// The webadmin.ini file, used for the settings and allowed logins
|
/** Set to true if Start() succeeds in starting the server, reset back to false in Stop(). */
|
||||||
|
bool m_IsRunning;
|
||||||
|
|
||||||
|
/** The webadmin.ini file, used for the settings and allowed logins */
|
||||||
cIniFile m_IniFile;
|
cIniFile m_IniFile;
|
||||||
|
|
||||||
PluginList m_Plugins;
|
PluginList m_Plugins;
|
||||||
@ -193,19 +199,19 @@ protected:
|
|||||||
AString m_PortsIPv4;
|
AString m_PortsIPv4;
|
||||||
AString m_PortsIPv6;
|
AString m_PortsIPv6;
|
||||||
|
|
||||||
/// The Lua template script to provide templates:
|
/** The Lua template script to provide templates: */
|
||||||
cLuaState m_TemplateScript;
|
cLuaState m_TemplateScript;
|
||||||
|
|
||||||
/// The HTTP server which provides the underlying HTTP parsing, serialization and events
|
/** The HTTP server which provides the underlying HTTP parsing, serialization and events */
|
||||||
cHTTPServer m_HTTPServer;
|
cHTTPServer m_HTTPServer;
|
||||||
|
|
||||||
|
|
||||||
AString GetTemplate(void);
|
AString GetTemplate(void);
|
||||||
|
|
||||||
/// Handles requests coming to the "/webadmin" or "/~webadmin" URLs
|
/** Handles requests coming to the "/webadmin" or "/~webadmin" URLs */
|
||||||
void HandleWebadminRequest(cHTTPConnection & a_Connection, cHTTPRequest & a_Request);
|
void HandleWebadminRequest(cHTTPConnection & a_Connection, cHTTPRequest & a_Request);
|
||||||
|
|
||||||
/// Handles requests for the root page
|
/** Handles requests for the root page */
|
||||||
void HandleRootRequest(cHTTPConnection & a_Connection, cHTTPRequest & a_Request);
|
void HandleRootRequest(cHTTPConnection & a_Connection, cHTTPRequest & a_Request);
|
||||||
|
|
||||||
// cHTTPServer::cCallbacks overrides:
|
// cHTTPServer::cCallbacks overrides:
|
||||||
|
Loading…
Reference in New Issue
Block a user