summaryrefslogtreecommitdiffstats
path: root/source/cWebPlugin_Lua.cpp
diff options
context:
space:
mode:
authorfaketruth <faketruth@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-08-22 16:22:21 +0200
committerfaketruth <faketruth@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-08-22 16:22:21 +0200
commit7c84349990f21f783f4b24c113fb372a3c00164b (patch)
tree41cb29e214b98fc5b9c105bdf722a5c236c2318e /source/cWebPlugin_Lua.cpp
parentFixed cWebPlugin_Lua being not thread safe. And I don't know why, but it still crashes in Lua sometimes o_O (diff)
downloadcuberite-7c84349990f21f783f4b24c113fb372a3c00164b.tar
cuberite-7c84349990f21f783f4b24c113fb372a3c00164b.tar.gz
cuberite-7c84349990f21f783f4b24c113fb372a3c00164b.tar.bz2
cuberite-7c84349990f21f783f4b24c113fb372a3c00164b.tar.lz
cuberite-7c84349990f21f783f4b24c113fb372a3c00164b.tar.xz
cuberite-7c84349990f21f783f4b24c113fb372a3c00164b.tar.zst
cuberite-7c84349990f21f783f4b24c113fb372a3c00164b.zip
Diffstat (limited to '')
-rw-r--r--source/cWebPlugin_Lua.cpp186
1 files changed, 0 insertions, 186 deletions
diff --git a/source/cWebPlugin_Lua.cpp b/source/cWebPlugin_Lua.cpp
deleted file mode 100644
index 7d17378f9..000000000
--- a/source/cWebPlugin_Lua.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-
-#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules
-
-#include "cWebPlugin_Lua.h"
-#include "cPlugin_NewLua.h"
-
-#include "tolua++.h"
-#include "cWebAdmin.h"
-
-
-
-
-
-extern bool report_errors(lua_State* lua, int status);
-
-
-
-
-
-static std::string SafeString( const std::string& a_String )
-{
- std::string RetVal;
- for( unsigned int i = 0; i < a_String.size(); ++i )
- {
- char c = a_String[i];
- if( c == ' ' )
- {
- c = '_';
- }
- RetVal.push_back( c );
- }
- return RetVal;
-}
-
-
-
-
-
-struct cWebPlugin_Lua::sWebPluginTab
-{
- std::string Title;
- std::string SafeTitle;
-
- int Reference;
-};
-
-cWebPlugin_Lua::cWebPlugin_Lua( cPlugin_NewLua* a_Plugin )
- : cWebPlugin( a_Plugin->GetLuaState() )
- , m_Plugin( a_Plugin )
-{
-
-}
-
-cWebPlugin_Lua::~cWebPlugin_Lua()
-{
- for( TabList::iterator itr = m_Tabs.begin(); itr != m_Tabs.end(); ++itr )
- {
- delete *itr;
- }
- m_Tabs.clear();
-}
-
-bool cWebPlugin_Lua::AddTab( const char* a_Title, lua_State * a_LuaState, int a_FunctionReference )
-{
- if( a_LuaState != m_Plugin->GetLuaState() )
- {
- LOGERROR("Only allowed to add a tab to a WebPlugin of your own Plugin!");
- return false;
- }
- sWebPluginTab* Tab = new sWebPluginTab();
- Tab->Title = a_Title;
- Tab->SafeTitle = SafeString( a_Title );
-
- Tab->Reference = a_FunctionReference;
-
- m_Tabs.push_back( Tab );
- return true;
-}
-
-std::string cWebPlugin_Lua::HandleRequest( HTTPRequest* a_Request )
-{
- cCSLock( m_Plugin->GetCriticalSection() );
- lua_State* LuaState = m_Plugin->GetLuaState();
- std::string RetVal = "";
-
- std::pair< std::string, std::string > TabName = GetTabNameForRequest(a_Request);
- std::string SafeTabName = TabName.second;
- if( SafeTabName.empty() )
- return "";
-
- sWebPluginTab* Tab = 0;
- for( TabList::iterator itr = m_Tabs.begin(); itr != m_Tabs.end(); ++itr )
- {
- if( (*itr)->SafeTitle.compare( SafeTabName ) == 0 ) // This is the one! Rawr
- {
- Tab = *itr;
- break;
- }
- }
-
- if( Tab )
- {
- //LOGINFO("1. Stack size: %i", lua_gettop(LuaState) );
- lua_rawgeti( LuaState, LUA_REGISTRYINDEX, Tab->Reference); // same as lua_getref()
-
- //LOGINFO("2. Stack size: %i", lua_gettop(LuaState) );
- // Push HTTPRequest
- tolua_pushusertype( LuaState, a_Request, "HTTPRequest" );
- //LOGINFO("Calling bound function! :D");
- int s = lua_pcall( LuaState, 1, 1, 0);
-
- if ( s != 0 )
- {
- std::string err = lua_tostring(LuaState, -1);
- LOGERROR("-- %s", err.c_str() );
- lua_pop(LuaState, 1);
- LOGINFO("error. Stack size: %i", lua_gettop(LuaState) );
- return err; // Show the error message in the web page, looks cool
- }
-
- if( !lua_isstring( LuaState, -1 ) )
- {
- LOGWARN("WARNING: WebPlugin tab '%s' did not return a string!", Tab->Title.c_str() );
- lua_pop(LuaState, 1); // Pop return value
- return std::string("WARNING: WebPlugin tab '") + Tab->Title + std::string("' did not return a string!");
- }
-
- RetVal += tolua_tostring(LuaState, -1, 0);
- lua_pop(LuaState, 1); // Pop return value
- //LOGINFO("ok. Stack size: %i", lua_gettop(LuaState) );
- }
-
- return RetVal;
-}
-
-void cWebPlugin_Lua::Initialize()
-{
-}
-
-std::pair< std::string, std::string > cWebPlugin_Lua::GetTabNameForRequest( HTTPRequest* a_Request )
-{
- std::pair< std::string, std::string > Names;
- AStringVector Split = StringSplit(a_Request->Path, "/");
-
- if( Split.size() > 1 )
- {
- sWebPluginTab* Tab = 0;
- if( Split.size() > 2 ) // If we got the tab name, show that page
- {
- for( TabList::iterator itr = m_Tabs.begin(); itr != m_Tabs.end(); ++itr )
- {
- if( (*itr)->SafeTitle.compare( Split[2] ) == 0 ) // This is the one! Rawr
- {
- Tab = *itr;
- break;
- }
- }
- }
- else // Otherwise show the first tab
- {
- if( m_Tabs.size() > 0 )
- Tab = *m_Tabs.begin();
- }
-
- if( Tab )
- {
- Names.first = Tab->Title;
- Names.second = Tab->SafeTitle;
- }
- }
-
- return Names;
-}
-
-std::list< std::pair<std::string, std::string> > cWebPlugin_Lua::GetTabNames()
-{
- std::list< std::pair< std::string, std::string > > NameList;
- for( TabList::iterator itr = m_Tabs.begin(); itr != m_Tabs.end(); ++itr )
- {
- std::pair< std::string, std::string > StringPair;
- StringPair.first = (*itr)->Title;
- StringPair.second = (*itr)->SafeTitle;
- NameList.push_back( StringPair );
- }
- return NameList;
-} \ No newline at end of file