From 6920a41791b2428ea4144d1a9d01323066843c33 Mon Sep 17 00:00:00 2001 From: luca Date: Wed, 5 Dec 2007 15:21:03 +0000 Subject: [PATCH] Patch level :10.0 Files correlati : Ricompilazione Demo : [ ] Commento :servers in corso d'opera git-svn-id: svn://10.65.10.50/trunk@15839 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- server/diction.cpp | 74 +++--- server/lerch.cpp | 452 ------------------------------------ server/lerchd | 51 ---- server/{lerch.h => lurch.h} | 0 server/servers.ini | 6 +- 5 files changed, 39 insertions(+), 544 deletions(-) delete mode 100755 server/lerch.cpp delete mode 100755 server/lerchd rename server/{lerch.h => lurch.h} (100%) diff --git a/server/diction.cpp b/server/diction.cpp index bd761740f..d70d11fad 100755 --- a/server/diction.cpp +++ b/server/diction.cpp @@ -1,8 +1,6 @@ #include "baseserv.h" #include -#include - -#include +#include ////////////////////////////////////////////////////////// // Conversion utilities @@ -214,42 +212,43 @@ bool TDictionary::Load() { clear(); m_sorted.Clear(); - wxFileInputStream scan(GetFileName()); - - wxString ita, eng, src, line; - int max; - while (!scan.Eof()) + wxTextFile scan; + if (scan.Open(GetFileName())) { - scan >> line; - line.Trim(false); - if (line.StartsWith("")) + wxString ita, eng, src, line; + int max; + for (line = scan.GetFirstLine(); !scan.Eof(); line = scan.GetNextLine()) { - ita = eng = src = ""; - max = 0; - } else - if (line.StartsWith("")) - { - const int eoi = line.Find(""); - ita = xml2txt(line.Mid(5, eoi-5)); - } else - if (line.StartsWith("") && !ita.IsEmpty()) - { - const int eoe = line.Find(""); - eng = xml2txt(line.Mid(5, eoe-5)); - } else - if (line.StartsWith("")) - { - const int eom = line.Find(""); - max = atoi(line.Mid(5, eom-5)); - } else - if (line.StartsWith("")) - { - const int eos = line.Find(""); - src = xml2txt(line.Mid(5, eos-5)); - } else - if (line.StartsWith("")) - { - AddEntry(ita, eng, src, max); + line.Trim(false); + if (line.StartsWith("")) + { + ita = eng = src = ""; + max = 0; + } else + if (line.StartsWith("")) + { + const int eoi = line.Find(""); + ita = xml2txt(line.Mid(5, eoi-5)); + } else + if (line.StartsWith("") && !ita.IsEmpty()) + { + const int eoe = line.Find(""); + eng = xml2txt(line.Mid(5, eoe-5)); + } else + if (line.StartsWith("")) + { + const int eom = line.Find(""); + max = atoi(line.Mid(5, eom-5)); + } else + if (line.StartsWith("")) + { + const int eos = line.Find(""); + src = xml2txt(line.Mid(5, eos-5)); + } else + if (line.StartsWith("")) + { + AddEntry(ita, eng, src, max); + } } } m_bDirty = false; @@ -331,7 +330,6 @@ class TDictionaryServer : public TBaseServerApp protected: virtual const wxChar* GetAppName() const; - virtual void ProcessCommand(wxString cmd, wxSocketBase& outs); virtual void SoapProcessMethod(const TXmlItem& xmlMethod, TXmlItem& xmlAnswer); size_t FindIndex(const wxString& strKey); diff --git a/server/lerch.cpp b/server/lerch.cpp deleted file mode 100755 index f8e26c600..000000000 --- a/server/lerch.cpp +++ /dev/null @@ -1,452 +0,0 @@ -#include "baseserv.h" - -#include -#ifdef WIN32 -#include -#endif - -#include - -class TLerchServer : public TBaseServerApp -{ -protected: - virtual const wxChar* GetAppName() const; - virtual void ProcessCommand(wxString cmd, wxSocketBase& outs); - virtual bool Initialization(); - - void AddMiniForm(TXmlItem& tr, const wxChar* action, const wxChar* app, const wxChar* prompt) const; - void EnumerateVariables(const wxString& strApp, wxArrayString& arr) const; - - void CreateServersList(wxArrayString& arr) const; - void KillProcess(const wxString& strApp); - -public: - void GenerateFile(wxString& strFilename); - bool IsMagicName(wxString& strFilename) const; - bool IsCgiName(wxString strFilename) const; - - void ProcessHttpGet(wxString cmd, wxSocketBase& outs); - void ProcessHttpPost(wxString cmd, wxSocketBase& outs); - - void ProcessFormStart(const THashTable& args, wxSocketBase& sock); - void ProcessFormKill(const THashTable& args, wxSocketBase& sock); - void ProcessFormConfig(const THashTable& args, wxSocketBase& sock); - void ProcessFormUpdate(THashTable& args, wxSocketBase& sock); - void CallCgi(wxString& strFileName, wxSocketBase& sock); -}; - -const wxChar* TLerchServer::GetAppName() const -{ - return "Lerch"; -} - -void TLerchServer::CreateServersList(wxArrayString& arr) const -{ - wxFileInputStream ini(GetConfigName()); - const size_t size = ini.GetSize(); - wxChar* buff = new wxChar[size]; - ini.Read(buff, size); - - const char* aperta = strchr(buff, '['); - while (aperta != NULL) - { - char* chiusa = (char*)strchr(aperta+1, ']'); - if (chiusa != NULL) - { - *chiusa = '\0'; - wxString str = aperta+1; - arr.Add(str); - aperta = strchr(chiusa+1, '['); - } - else - break; - } - - delete buff; -} - -void TLerchServer::AddMiniForm(TXmlItem& tr, const wxChar* action, const wxChar* app, const wxChar* prompt) const -{ - TXmlItem& td = tr.AddChild("td").SetAttr("width", "15%"); - TXmlItem& form = td.AddChild("center").AddChild("form"); - form.SetAttr("action", action); - - TXmlItem& name = form.AddChild("input"); - name.SetAttr("type", "hidden"); name.SetAttr("name", "App"); - name.SetAttr("value", app); - - TXmlItem& submit = form.AddChild("input"); - submit.SetAttr("type", "submit"); - submit.SetAttr("value", prompt); -} - -void TLerchServer::GenerateFile(wxString& strFilename) -{ - TXmlItem html; - TXmlItem& body = CreatePageBody(html); - - if (strFilename == "index") - { - TXmlItem& table = body.AddChild("table"); - table.SetAttr("border", "1"); table.SetAttr("width", "100%"); - strFilename = GetTempFilename(); - const wxString LerchName = GetAppName(); - - wxArrayString arr; CreateServersList(arr); - for (size_t i = 0; i < arr.GetCount(); i++) - { - const bool lerch = arr[i] == LerchName; - wxFileConfig ini("", "", GetConfigName(), "", wxCONFIG_USE_LOCAL_FILE | wxCONFIG_USE_RELATIVE_PATH); - wxString str; - str << '/' << arr[i]; - ini.SetPath(str); - - wxString strHost; - ini.Read("Host", &strHost, wxGetFullHostName()); - - int nPort; - ini.Read("Port", &nPort, 3883); - - wxString strIcon; - ini.Read("Icon", &strIcon, "euro.gif"); - - const wxSingleInstanceChecker sic(arr[i]); - const bool bRunning = sic.IsAnotherRunning(); - - TXmlItem& tr = table.AddChild("tr"); - TXmlItem& td0 = tr.AddChild("td"); - td0.SetAttr("width", "15%"); td0.SetAttr("align", "center"); - TXmlItem& a = td0.AddChild("a"); - if (!lerch && bRunning) - { - a.SetAttr("href", wxString::Format("http://%s:%d/index.htm", strHost.c_str(), nPort)); - a.SetAttr("target", "_blank"); - } - TXmlItem& img = a.AddChild("img"); - img.SetAttr("src", strIcon); img.SetAttr("border", 0L); img.SetAttr("alt", arr[i]); - - AddMiniForm(tr, (bRunning || lerch) ? "kill.cgi" : "start.cgi", arr[i], (bRunning || lerch) ? "Stop" : "Start"); - AddMiniForm(tr, "config.cgi", arr[i], "Configure"); - - TXmlItem& a3 = tr.AddChild("td").AddChild("a"); - if (!lerch && bRunning) - { - a3.SetAttr("href", wxString::Format("http://%s:%d/index.htm", strHost.c_str(), nPort)); - a3.SetAttr("target", "_blank"); - } - a3 << arr[i] << " Server"; - } - - html.Save(strFilename); - } -} - -bool TLerchServer::IsMagicName(wxString& strFilename) const -{ - wxString strName; - wxSplitPath(strFilename, NULL, &strName, NULL); - strName.MakeLower(); - if (strName == "index") - { - strFilename = strName; - return true; - } - if (strName == "log") - { - strFilename = GetLogFileName(); - } - - return false; -} - -bool TLerchServer::IsCgiName(wxString strFilename) const -{ - const int q = strFilename.Find('?'); - if (q > 0) - strFilename.Truncate(q); - - wxString strExt; - wxSplitPath(strFilename, NULL, NULL, &strExt); - strExt.MakeLower(); - return strExt == "cgi" || strExt == "exe"; -} - -void TLerchServer::ProcessFormStart(const THashTable& args, wxSocketBase& sock) -{ - bool ok = false; - - const wxString strApp = args.Get("App"); - if (!strApp.IsEmpty()) // Dummy test - { - const wxSingleInstanceChecker sic(strApp); - ok = !sic.IsAnotherRunning(); - } - - if (ok) - { - wxString strRun = GetConfigString("Run", "", strApp); - if (wxFileExists(strRun)) - { -#ifdef LINUX - if (strRun[ 0u] != '/' && strRun[ 0u] != '.') - strRun = "./" + strRun; -#endif - const long nProc = wxExecute(strRun); - if (nProc == 0 || nProc == -1) - MessageBox("ERROR", wxString::Format("Can't run %s executable (%s)", strApp.c_str(), - strRun.c_str()), sock); - else - MessageBox("Server Started", strApp, sock); - } - else - MessageBox("ERROR", wxString::Format("Can't find %s executable (%s)", strApp.c_str(), - strRun.c_str()), sock); - } - else - MessageBox("ERROR", wxString::Format("%s il already running", strApp.c_str()), sock); -} - -void TLerchServer::KillProcess(const wxString& strApp) -{ - const wxString strHost = GetConfigString("Host", "localhost", strApp); - const int nPort = GetConfigInt("Port", 0, strApp); - if (nPort > 0) - { - wxIPV4address addr; - addr.Hostname(strHost); - addr.Service(nPort); - - wxSocketClient sock; - if (sock.Connect(addr)) - { - const wxString str = "GET /stop.cgi HTTP/1.1\r\n\r\n"; - sock.Write(str, str.Length()); - if (strHost == "localhost") - { - const wxSingleInstanceChecker sic(strApp); - for (int i = 0; i < 5 && sic.IsAnotherRunning(); i++) - wxSleep(1); - } - } - } -} - -void TLerchServer::ProcessFormKill(const THashTable& args, wxSocketBase& sock) -{ - const wxString strApp = args.Get("App"); - if (strApp == GetAppName()) // Stop myself! - { - wxArrayString app; CreateServersList(app); - for (size_t i = 0; i < app.GetCount(); i++) - { - if (app[i] != GetAppName()) // Stop Children only! - { - const wxSingleInstanceChecker sic(app[i]); - if (sic.IsAnotherRunning()) - KillProcess(app[i]); - } - } - } - KillProcess(strApp); - MessageBox("Server stopped", strApp, sock); -} - -void TLerchServer::EnumerateVariables(const wxString& strApp, wxArrayString& arr) const -{ - wxFileInputStream inf(GetConfigName()); - wxString strParagraph = wxString::Format("[%s]", strApp.c_str()); - wxString str; - - bool bFound = false; - while (inf.Ok()) - { - inf >> str; - if (str == strParagraph) - { - bFound = true; - break; - } - } - - if (bFound) - { - while (inf.Ok()) - { - inf >> str; - if (str.IsEmpty() || str[0u] == '[') - break; - const int nEqual = str.Find('='); - if (nEqual > 0) - { - str.Truncate(nEqual); - str.Trim(false); - str.Trim(true); - arr.Add(str); - } - } - arr.Sort(); - } -} - -void TLerchServer::ProcessFormConfig(const THashTable& args, wxSocketBase& sock) -{ - const wxString strApp = args.Get("App"); - wxArrayString arr; - EnumerateVariables(strApp, arr); - - TXmlItem html; - TXmlItem& body = CreatePageBody(html); - - TXmlItem& form = body.AddChild("form"); - form.SetAttr("action", "update.cgi").SetAttr("method", "post"); - - TXmlItem& table = form.AddChild("table").SetAttr("width", "100%").SetAttr("border", "1"); - table.AddChild("caption").AddChild("h2") << strApp; - TXmlItem& thead = table.AddChild("thead"); - thead.AddChild("th").SetAttr("width", "15%") << "Property"; - thead.AddChild("th").SetAttr("width", "85%") << "Value"; - - for (size_t v = 0; v < arr.GetCount(); v++) - { - TXmlItem& tr = table.AddChild("tr"); - tr.AddChild("td") << arr[v]; - TXmlItem& input = tr.AddChild("td").AddChild("input"); - input.SetAttr("type", "text"); input.SetAttr("name", arr[v]); - input.SetAttr("size", "80"); input.SetAttr("maxlength", "256"); - input.SetAttr("value", GetConfigString(arr[v], "", strApp)); - } - - TXmlItem& app = form.AddChild("input").SetAttr("type", "hidden"); - app.SetAttr("name", "App"); app.SetAttr("value", strApp); - - TXmlItem& submit = form.AddChild("br").AddChild("center").AddChild("input"); - submit.SetAttr("type", "submit"); submit.SetAttr("value", "Update Parameters"); - - body.AddChild("br"); - AddLinkButton(body.AddChild("center"), "Return to main page", "/"); - - const wxString strFilename = GetTempFilename(); - html.Save(strFilename); - SendFile(strFilename, sock); -} - -void TLerchServer::ProcessFormUpdate(THashTable& args, wxSocketBase& sock) -{ - const wxString strApp = args.Get("App"); - args.BeginFind(); - for (wxHashTable::Node* pNode = args.Next(); pNode; pNode = args.Next()) - { - const wxString strKey = pNode->GetKeyString(); - if (strKey != "App") - { - const wxString strVal = args.Get(strKey); - SetConfigString(strKey, strVal, strApp); - } - } - const wxString msg = wxString::Format("%s parameters updated", strApp.c_str()); - MessageBox("Success!", msg, sock); -} - -void TLerchServer::CallCgi(wxString& strFileName, wxSocketBase& sock) -{ - wxString strName, strExt, strArgs; - const int q = strFileName.Find('?'); - if (q > 0) - { - strArgs = strFileName.Mid(q+1); - strFileName.Truncate(q); - } - wxSplitPath(strFileName, NULL, &strName, &strExt); - - THashTable hashArgs(13); - ParseArguments(strArgs, hashArgs); - - if (strExt == "cgi") - { - if (strName == "start") - ProcessFormStart(hashArgs, sock); else - if (strName == "kill") - ProcessFormKill(hashArgs, sock); else - if (strName == "config") - ProcessFormConfig(hashArgs, sock); else - if (strName == "update") - ProcessFormUpdate(hashArgs, sock); - } -} - -void TLerchServer::ProcessHttpGet(wxString cmd, wxSocketBase& outs) -{ - const int stop = cmd.Find(" HTTP"); - wxString str = cmd.Mid(4, stop-4).Trim(); - - if (str == "/") - str += "index.htm"; - wxString strFilename = GetDocumentRoot() + str; - - if (IsCgiName(strFilename)) - CallCgi(strFilename, outs); - else - { - if (IsMagicName(strFilename)) - GenerateFile(strFilename); - SendFile(strFilename, outs); - } -} - -void TLerchServer::ProcessHttpPost(wxString cmd, wxSocketBase& outs) -{ - const int stop = cmd.Find(" HTTP"); - wxString strFileName = cmd.Mid(5, stop-5).Trim(); - - wxString strName, args; - wxSplitPath(strFileName, NULL, &strName, NULL); - - const int pos = cmd.Find("\r\n\r\n"); - if (pos > 0) - args = cmd.Mid(pos+4); - - THashTable hashArgs(17); - ParseArguments(args, hashArgs); - - if (strName == "update") - ProcessFormUpdate(hashArgs, outs); -} - -void TLerchServer::ProcessCommand(wxString cmd, wxSocketBase& outs) -{ - if (cmd.StartsWith("GET ")) - ProcessHttpGet(cmd, outs); else - if (cmd.StartsWith("POST ")) - ProcessHttpPost(cmd, outs); -} - -bool TLerchServer::Initialization() -{ - wxArrayString arr; CreateServersList(arr); - for (size_t i = 0; i < arr.GetCount(); i++) - { - const wxString& strApp = arr[i]; - const bool bAutorun = GetConfigBool("Autorun", false, strApp); - if (bAutorun) - { - const wxSingleInstanceChecker sic(strApp); - if (!sic.IsAnotherRunning()) - { - wxString strRun = GetConfigString("Run", "", strApp); - if (wxFileExists(strRun)) - { -#ifdef LINUX - if (strRun[ 0u] != '/' && strRun[ 0u] != '.') - strRun = "./" + strRun; -#endif - wxExecute(strRun); - } - } - } - } - return true; -} - -// Istanziare l'applicazione principale - -IMPLEMENT_APP(TLerchServer) diff --git a/server/lerchd b/server/lerchd deleted file mode 100755 index 6b668942d..000000000 --- a/server/lerchd +++ /dev/null @@ -1,51 +0,0 @@ -#! /bin/sh - -. /etc/rc.status -rc_reset - -LERCH_BIN="/home/alex/a_02_00/exed/servers/lerch" -LERCH_PID="/var/run/lerch.pid" - -case "$1" in - start) - echo -n "Starting lerch " - checkproc -p ${LERCH_PID} ${LERCH_BIN} - case $? in - 0) echo -n "- Warning: lerch already running! " ;; - 1) echo -n "- Warning: ${LERCH_PID} exists! " ;; - esac - startproc -p ${LERCH_PID} ${LERCH_BIN} } - rc_status -v - ;; - stop) - echo -n "Shutting down lerch " - checkproc -p ${LERCH_PID} ${LERCH_BIN} || echo -n "- Warning: named not running! " - killproc -p ${LERCH_PID} -TERM ${LERCH_BIN} - rc_status -v - ;; - try-restart) - $0 status >/dev/null && $0 restart - rc_status - ;; - restart) - $0 stop - $0 start - rc_status - ;; - force-reload) - $0 reload - rc_status - ;; - status) - echo -n "Checking for lerch " - checkproc -p ${LERCH_PID} ${LERCH_BIN} - rc_status -v - ;; - *) - echo "Usage: $0 {start|stop|status|try-restart|force-reload|reload}" - exit 1 - ;; -esac - -rc_exit - diff --git a/server/lerch.h b/server/lurch.h similarity index 100% rename from server/lerch.h rename to server/lurch.h diff --git a/server/servers.ini b/server/servers.ini index 4f3f81cdf..d9c5e057d 100755 --- a/server/servers.ini +++ b/server/servers.ini @@ -26,9 +26,9 @@ Port=3883 Dictionary=english.xml LogFile= -[Lerch] -Run=lerch.exe +[Lurch] +Run=lurch.exe Port=10000 -Icon=Lerch.gif +Icon=lurch.gif LogFile=