From 46c525e0d926e5e608e89a09034bf8daf8c42a51 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 9 Sep 2002 14:18:21 +0000 Subject: [PATCH] Patch level : Files correlati : Ricompilazione Demo : [ ] Commento : nuovo modulo server git-svn-id: svn://10.65.10.50/trunk@10476 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- server/connect.ico | Bin 0 -> 766 bytes server/diction.cpp | 185 ++++++++++++++++++ server/diction.h | 3 + server/mondrian.ico | Bin 0 -> 766 bytes server/server.cpp | 320 +++++++++++++++++++++++++++++++ server/server.rc | 3 + server/soap.cpp | 445 ++++++++++++++++++++++++++++++++++++++++++++ server/soap.h | 58 ++++++ server/soap.ico | Bin 0 -> 766 bytes server/soapserv.dsp | 213 +++++++++++++++++++++ server/soapserv.dsw | 29 +++ server/soapserv.ncb | 1 + server/soapserv.opt | Bin 0 -> 50688 bytes server/soapserv.plg | 38 ++++ 14 files changed, 1295 insertions(+) create mode 100755 server/connect.ico create mode 100755 server/diction.cpp create mode 100755 server/diction.h create mode 100755 server/mondrian.ico create mode 100755 server/server.cpp create mode 100755 server/server.rc create mode 100755 server/soap.cpp create mode 100755 server/soap.h create mode 100755 server/soap.ico create mode 100755 server/soapserv.dsp create mode 100755 server/soapserv.dsw create mode 100755 server/soapserv.ncb create mode 100755 server/soapserv.opt create mode 100755 server/soapserv.plg diff --git a/server/connect.ico b/server/connect.ico new file mode 100755 index 0000000000000000000000000000000000000000..74f006f82a3440425c3074f976c52a3405cf9427 GIT binary patch literal 766 zcmc&wF%E+;3^Y}xveBtCW1rC{v32#>FCZcD6&`@pZ*(fGND=AT7eK8#b*Y0LU(Rvx ziDX!1c@(q9PUM9B3@_mqcqV&95e4_%6eJi`ZiqV zYUUL2&Fruiuzthi2hWC8s-GhHrQg(!iVivHsjll$hau)g==(kr&&_?ot<{I&>Gj}S z^jq&6j;X)(Bj)?|>j_)x_8aEBTmMZT_RH7#iCJ&@5O4aV_r0Jh!W%C@;9U + +#include "Soap.h" +#include "Diction.h" + +class TDictionaryEntry : public wxObject +{ +public: + wxString m_str; + TDictionaryEntry(const wxChar* str) : m_str(str) { } +}; + +class TDictionary : public wxHashTable +{ + bool m_bDirty; + +protected: + wxString Accentuate(const wxString& str) const; + const TDictionaryEntry* AddEntry(const wxString& ita, const wxChar* eng); + + static bool FillCallback(TXmlItem& item, long jolly); + bool Load(); + +public: + wxString Translate(const wxString& ita); + TDictionary(); + ~TDictionary(); +}; + +static TDictionary DevotoOli; + +wxString TDictionary::Accentuate(const wxString& str) const +{ + const int pos = str.Find('\''); + if (pos <= 0) + return str; + + wxString bello = str.Left(pos); + for (size_t a = pos; str[a]; a++) + { + if (str[a] == '\'') + { + if ((isspace(str[a+1]) || str[a+1] == '\0') && + strchr("aeiou", str[a-1])) + { + switch(str[a-1]) + { + case 'a': + bello[a-1] = 'à'; break; + case 'e': + if (a >= 2 && (isspace(str[a-2]) || str[a-2] == '\'')) + bello[a-1] = 'è'; + else + bello[a-1] = 'é'; + break; + case 'i': + bello[a-1] = 'ì'; break; + case 'o': + bello[a-1] = 'ò'; break; + case 'u': + bello[a-1] = 'ù'; break; + default: + break; + } + } + else + bello << str[a]; + } + else + bello << str[a]; + } + return bello; +} + +const TDictionaryEntry* TDictionary::AddEntry(const wxString& ita, const wxChar* eng) +{ + const wxString key = Accentuate(ita); + TDictionaryEntry* entry = new TDictionaryEntry(eng); + Put(key, entry); + m_bDirty = true; + return entry; +} + +wxSocketClient& operator<<(wxSocketClient& sock, const wxChar* str) +{ + if (str && *str) + sock.Write(str, wxStrlen(str)); + return sock; +} + +bool TDictionary::FillCallback(TXmlItem& item, long jolly) +{ + if (item.GetTag() == "entry") + { + const TXmlItem* ita = item.GetChild(0); + const TXmlItem* eng = item.GetChild(1); + if (ita != NULL && eng != NULL) + { + ita = ita->GetChild(0); + eng = eng->GetChild(0); + if (ita != NULL && eng != NULL) + { + TDictionary* d = (TDictionary*)jolly; + d->AddEntry(ita->GetText(), eng->GetText()); + } + } + } + return false; +} + +bool TDictionary::Load() +{ + wxFileInputStream inf("Campo.dic"); + if (inf.Ok()) + { + TXmlItem item; + item.Read(inf); + item.ForEach(FillCallback, (long)this); + } + m_bDirty = false; // No last minute additions :-) + + return GetCount() > 0; +} + +wxString TDictionary::Translate(const wxString& ita) +{ + if (GetCount() == 0) + Load(); + + const wxString key = Accentuate(ita); + TDictionaryEntry* eng = (TDictionaryEntry*)Get(key); + if (eng != NULL) + { + if (eng->m_str != "???") + return eng->m_str; + } + else + AddEntry(ita, "???"); + + return key; +} + +TDictionary::TDictionary() : wxHashTable(wxKEY_STRING, 883), m_bDirty(false) +{ } + +TDictionary::~TDictionary() +{ + DeleteContents(true); + + if (m_bDirty) + { + wxFileOutputStream outf("Campo.dic"); + outf << "\n"; + BeginFind(); + for (wxNode* pNode = Next(); pNode != NULL; pNode = Next()) + { + outf << " \n"; + outf << " " << pNode->GetKeyString() << "\n"; + outf << " " << ((TDictionaryEntry*)pNode->GetData())->m_str << "\n"; + outf << " \n"; + } + outf << "\n"; + } +} + +bool DoTranslate(const TXmlItem& xmlMethod, TXmlItem& xmlAnswer) +{ + const TXmlItem* xmlSentence = xmlMethod.FindFirst("sentence"); + if (xmlSentence != NULL) + { + const TXmlItem* xmlItalian = xmlSentence->GetChild(0); + if (xmlItalian != NULL) + { + wxString result = DevotoOli.Translate(xmlItalian->GetText()); + xmlAnswer.AddSoapString("sentence", result); + return true; + } + } + return false; +} + diff --git a/server/diction.h b/server/diction.h new file mode 100755 index 000000000..9ebdc5176 --- /dev/null +++ b/server/diction.h @@ -0,0 +1,3 @@ +bool DoTranslate(const TXmlItem& xmlMethod, TXmlItem& xmlAnswer); + + diff --git a/server/mondrian.ico b/server/mondrian.ico new file mode 100755 index 0000000000000000000000000000000000000000..2310c5d275a87af295d5ea8dc79ea417a5e74c53 GIT binary patch literal 766 zcmZQzU<5)11px*Sc)`TLAO@s0fLH;D9e|jTfdxnc0ZShow(TRUE); + SetTopWindow(frame); + + // Success + return TRUE; +} + +// -------------------------------------------------------------------------- +// main frame +// -------------------------------------------------------------------------- + +// frame constructor + +SoapFrame::SoapFrame() : wxFrame((wxFrame *)NULL, -1, + _("Soap Server"), + wxDefaultPosition, wxSize(300, 200)) +{ + // Give the frame an icon + SetIcon(wxICON(mondrian)); + + // Make menus + m_menuFile = new wxMenu(); + m_menuFile->Append(SERVER_ABOUT, _("&About...\tCtrl-A"), _("Show about dialog")); + m_menuFile->AppendSeparator(); + m_menuFile->Append(SERVER_QUIT, _("E&xit\tAlt-X"), _("Quit server")); + + // Append menus to the menubar + m_menuBar = new wxMenuBar(); + m_menuBar->Append(m_menuFile, _("&File")); + SetMenuBar(m_menuBar); + + // Status bar + CreateStatusBar(2); + + // Make a textctrl for logging + m_text = new wxTextCtrl(this, -1, + _("Welcome to SOAP Server\n"), + wxDefaultPosition, wxDefaultSize, + wxTE_MULTILINE | wxTE_READONLY); + + // Create the address - defaults to localhost:0 initially + wxIPV4address addr; + addr.Service(3000); + + // Create the socket + m_server = new wxSocketServer(addr); + + // We use Ok() here to see if the server is really listening + if (! m_server->Ok()) + { + m_text->AppendText(_("Could not listen at the specified port !\n\n")); + return; + } + else + { + m_text->AppendText(_("Server listening.\n\n")); + } + + // Setup the event handler and subscribe to connection events + m_server->SetEventHandler(*this, SERVER_ID); + m_server->SetNotify(wxSOCKET_CONNECTION_FLAG); + m_server->Notify(TRUE); + + m_busy = FALSE; + m_numClients = 0; + UpdateStatusBar(); +} + +SoapFrame::~SoapFrame() +{ + // No delayed deletion here, as the frame is dying anyway + delete m_server; +} + +// event handlers + +void SoapFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) +{ + // TRUE is to force the frame to close + Close(TRUE); +} + +void SoapFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) +{ + wxMessageBox(_("Soap Server\n(c) 2002 by Aga\n"), + _("About Soap Server"), + wxOK | wxICON_INFORMATION, this); +} + +void SoapFrame::ProcessSoapCommand(wxSocketBase *sock) +{ + m_text->SetValue(_("Processing begins\n\n")); + + sock->SetFlags(wxSOCKET_NOWAIT); + + // Read the data + char buf[4096]; memset(buf, 0, sizeof(buf)); + unsigned int len = sock->Read(buf, sizeof(buf)).LastCount(); + m_text->AppendText(_(buf)); + + wxString strAnswer = SoapProcessMessage(buf, len); + + m_text->AppendText(_("\nSending response\n\n")); + m_text->AppendText(_(strAnswer)); + + // Write it back + sock->Write(strAnswer, strAnswer.Length()); + + m_text->AppendText(_("\n\nProcessing ends\n\n")); +} + +void SoapFrame::OnServerEvent(wxSocketEvent& event) +{ + wxString s = _("OnServerEvent: "); + wxSocketBase *sock; + + switch(event.GetSocketEvent()) + { + case wxSOCKET_CONNECTION : s.Append(_("wxSOCKET_CONNECTION\n")); break; + default : s.Append(_("Unexpected event !\n")); break; + } + + m_text->AppendText(s); + + // Accept new connection if there is one in the pending + // connections queue, else exit. We use Accept(FALSE) for + // non-blocking accept (although if we got here, there + // should ALWAYS be a pending connection). + + sock = m_server->Accept(FALSE); + + if (sock) + { + m_text->AppendText(_("New client connection accepted\n\n")); + } + else + { + m_text->AppendText(_("Error: couldn't accept a new connection\n\n")); + sock->Destroy(); + return; + } + + sock->SetEventHandler(*this, SOCKET_ID); + sock->SetNotify(wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG); + sock->Notify(TRUE); + + m_numClients++; + UpdateStatusBar(); +} + +void SoapFrame::OnSocketEvent(wxSocketEvent& event) +{ + wxString s = _("OnSocketEvent: "); + wxSocketBase *sock = event.GetSocket(); + + // First, print a message + switch(event.GetSocketEvent()) + { + case wxSOCKET_INPUT : s.Append(_("wxSOCKET_INPUT\n")); break; + case wxSOCKET_LOST : s.Append(_("wxSOCKET_LOST\n")); break; + default : s.Append(_("Unexpected event !\n")); break; + } + + m_text->AppendText(s); + + // Now we process the event + switch(event.GetSocketEvent()) + { + case wxSOCKET_INPUT: + { + // We disable input events, so that the test doesn't trigger + // wxSocketEvent again. + sock->SetNotify(wxSOCKET_LOST_FLAG); + + ProcessSoapCommand(sock); + + // Enable input events again. + sock->SetNotify(wxSOCKET_LOST_FLAG | wxSOCKET_INPUT_FLAG); + break; + } + case wxSOCKET_LOST: + { + m_numClients--; + + // Destroy() should be used instead of delete wherever possible, + // due to the fact that wxSocket uses 'delayed events' (see the + // documentation for wxPostEvent) and we don't want an event to + // arrive to the event handler (the frame, here) after the socket + // has been deleted. Also, we might be doing some other thing with + // the socket at the same time; for example, we might be in the + // middle of a test or something. Destroy() takes care of all + // this for us. + + m_text->AppendText(_("Deleting socket.\n\n")); + sock->Destroy(); + break; + } + default: ; + } + + UpdateStatusBar(); +} + +// convenience functions + +void SoapFrame::UpdateStatusBar() +{ + wxString s; + s.Printf(_("%d clients connected"), m_numClients); + SetStatusText(s, 1); +} diff --git a/server/server.rc b/server/server.rc new file mode 100755 index 000000000..58e1f88b4 --- /dev/null +++ b/server/server.rc @@ -0,0 +1,3 @@ +mondrian ICON "soap.ico" +#include "wx/msw/wx.rc" + diff --git a/server/soap.cpp b/server/soap.cpp new file mode 100755 index 000000000..9a814a45a --- /dev/null +++ b/server/soap.cpp @@ -0,0 +1,445 @@ +#include "wx/wx.h" +#include "wx/time.h" + +#include "soap.h" + +/////////////////////////////////////////////////////////// +// Utility +/////////////////////////////////////////////////////////// + +wxOutputStream& operator<<(wxOutputStream& outf, const wxChar* str) +{ + if (str && *str) + outf.Write(str, wxStrlen(str)); + return outf; +} + +wxOutputStream& operator<<(wxOutputStream& outf, const wxString str) +{ + if (!str.IsEmpty()) + outf.Write(str, str.Length()); + return outf; +} + +void Spaces(wxOutputStream& outf, int nSpaces) +{ + outf << "\n"; + if (nSpaces > 0) + { + wxString str; + str.Append(' ', nSpaces); + outf << str; + } +} + +/////////////////////////////////////////////////////////// +// TXmlAttr +/////////////////////////////////////////////////////////// + +class TXmlAttr : public wxObject +{ +public: + wxString m_str; + + void Write(wxOutputStream& outf) const; + + TXmlAttr(const wxChar* str) : m_str(str) { } +}; + +void TXmlAttr::Write(wxOutputStream& outf) const +{ + if (m_str.IsNumber()) + outf << m_str; + else + outf << "\"" << m_str << "\""; +} + +/////////////////////////////////////////////////////////// +// TXmlItem +/////////////////////////////////////////////////////////// + +void TXmlItem::SetAttr(const wxChar* strAttr, const wxChar* strVal) +{ + if (m_Attributes == NULL) + { + m_Attributes = new wxHashTable(wxKEY_STRING, 17); + m_Attributes->DeleteContents(true); + } + m_Attributes->Delete(strAttr); + m_Attributes->Put(strAttr, new TXmlAttr(strVal)); +} + +wxString TXmlItem::GetAttr(const wxChar* strAttr) const +{ + wxString strResult; + if (m_Attributes != NULL) + { + const TXmlAttr* str = (const TXmlAttr*)m_Attributes->Get(strAttr); + if (str != NULL) + strResult = str->m_str; + } + return strResult; +} + +int TXmlItem::GetChildren() const +{ + int n = 0; + if (m_Children != NULL) + n = m_Children->GetCount(); + return n; +} + +TXmlItem* TXmlItem::GetChild(size_t n) const +{ + TXmlItem* i = NULL; + if (m_Children != NULL && n < m_Children->GetCount()) + { + wxNode* pNode = m_Children->Item(n); + if (pNode != NULL) + i = (TXmlItem*)pNode->GetData(); + } + return i; +} + + +wxString TXmlItem::GetWord(wxInputStream& inf) const +{ + wxString str; + + int cFirstChar = EOF; + while (!inf.Eof()) + { + cFirstChar = inf.GetC(); + if (cFirstChar <= 0 || cFirstChar > ' ') + break; + } + if (cFirstChar == EOF) + return str; + + const bool bIsString = cFirstChar == '"' || cFirstChar == '\''; + if (bIsString) + str = ""; + else + { + str = char(cFirstChar); + if (strchr("<=/>", cFirstChar)) + return str; // Simboli terminali + } + + while (!inf.Eof()) + { + int c = inf.GetC(); + if (bIsString) + { + if (c == cFirstChar) + break; + if (c >= '\0' && c <= ' ') + c = ' '; + str += char(c); + } + else + { + if (c >= '\0' && c <= ' ') + break; + if (strchr("<=/>", c)) + { + inf.Ungetch(char(c)); + break; + } + str += char(c); + } + + } + return str; +} + +int TXmlItem::ReadTag(wxInputStream& inf) +{ + wxString str = GetWord(inf); + if (str.IsEmpty()) + return -1; + + if (str[0] != '<') // No tag = sequence of words + { + bool bFirstChar = true; + while (!inf.Eof()) + { + const wxChar c = inf.GetC(); + if (c == '<') + { + inf.Ungetch(c); + break; + } + if (bFirstChar) + { + str << ' '; + bFirstChar = false; + } + str << c; + } + SetTag(""); + SetText(str); + return 0; + } + + bool bChildrenFollow = true; + + m_strTag = GetWord(inf); + if (m_strTag == "/") // Sto leggendo un tag di chiusura del tipo + { + bChildrenFollow = false; + m_strTag += GetWord(inf); + } + + wxString name = GetWord(inf); + while (!name.IsEmpty()) + { + if (name[0] == '>') + return bChildrenFollow ? +1 : 0; + + if (name[0] == '/') + { + bChildrenFollow = false; + continue; + } + + // Ho letto un nome di attributo + wxString str = GetWord(inf); + if (str.IsEmpty() || str[0] != '=') + break; + // Leggo il valore dell'attributo + str = GetWord(inf); + SetAttr(name, str); + + name = GetWord(inf); + } + return -1; +} + +TXmlItem& TXmlItem::AddChild(TXmlItem* pItem) +{ + if (m_Children == NULL) + { + m_Children = new wxList; + m_Children->DeleteContents(true); + } + if (pItem == NULL) + pItem = new TXmlItem; + m_Children->Append(pItem); + return *pItem; +} + +TXmlItem& TXmlItem::AddChild(const wxChar* strTagName) +{ + TXmlItem& i = AddChild((TXmlItem*)NULL); + i.SetTag(strTagName); + return i; +} + +TXmlItem& TXmlItem::AddSoapString(const wxChar* name, const wxChar* value) +{ + TXmlItem& xmlVar = AddChild(name); + xmlVar.SetAttr("xsi:type", "xsd:string"); + xmlVar.AddChild("").SetText(value); + return xmlVar; +} + +TXmlItem& TXmlItem::AddSoapInt(const wxChar* name, int value) +{ + TXmlItem& xmlVar = AddChild(name); + xmlVar.SetAttr("xsi:type", "xsd:int"); + wxString str; str += value; + xmlVar.AddChild("").SetText(str); + return xmlVar; +} + +void TXmlItem::RemoveLastChild() +{ + if (m_Children != NULL) + { + wxNode* n = m_Children->GetLast(); + if (n != NULL) + m_Children->DeleteNode(n); + } +} + +bool TXmlItem::Read(wxInputStream& inf) +{ + const int res = ReadTag(inf); + if (res > 0) // There are children ahead + { + while (!inf.Eof()) + { + TXmlItem& item = AddChild("/"); // Add dummy child + if (item.Read(inf)) + { + if (item.m_strTag[0] == '/') + break; + } + else + break; + } + RemoveLastChild(); // Remove dummy child + } + return res >= 0; +} + +TXmlItem* TXmlItem::ForEach(XmlItemCallback cb, long jolly) +{ + if (cb(*this, jolly)) + return this; + + for (int n = 0; ; n++) + { + TXmlItem* c = GetChild(n); + if (c == NULL) + break; + c = c->ForEach(cb, jolly); + if (c) + return c; + } + + return NULL; +} + +void TXmlItem::Write(wxOutputStream& outf, int tab) const +{ + if (!GetTag().IsEmpty()) + { + Spaces(outf, tab); + outf << "<" << GetTag(); + if (m_Attributes != NULL) + { + m_Attributes->BeginFind(); + for (wxNode* pNode = m_Attributes->Next(); pNode; pNode = m_Attributes->Next()) + { + outf << " " << pNode->GetKeyString() << "="; + const TXmlAttr* attr = (const TXmlAttr*)pNode->GetData(); + attr->Write(outf); + } + } + if (GetChildren() > 0) + { + outf << ">"; + for (int n = 0; ; n++) + { + TXmlItem* c = GetChild(n); + if (c == NULL) + break; + c->Write(outf, tab+1); + } + if (GetChild(n-1)->GetText().IsEmpty()) + Spaces(outf, tab); + outf << ""; + } + else + outf << " />"; + } + else + outf << GetText(); +} + +wxString TXmlItem::AsString() const +{ + wxString str; + for (size_t nSize = 8192; ; nSize *= 2) + { + char* buf = str.GetWriteBuf(nSize); + memset(buf, 0, nSize); + wxMemoryOutputStream outf(buf, nSize); +// outf << ""; // Non dovrebbe servire a nulla + Write(outf); + str.UngetWriteBuf(); + if (buf[nSize-1] == '\0') + break; + } + + return str; +} + +bool FindFirstCallback(TXmlItem& item, long jolly) +{ + const wxChar* strTag = (const wxChar*)jolly; + return item.GetTag() == strTag; +} + +TXmlItem* TXmlItem::FindFirst(const wxChar* strTag) const +{ + return ((TXmlItem*)this)->ForEach(FindFirstCallback, (long)strTag); +} + +TXmlItem::TXmlItem() + : m_Attributes(NULL), m_Children(NULL) +{ } + +TXmlItem::~TXmlItem() +{ + if (m_Attributes) + delete m_Attributes; + if (m_Children) + delete m_Children; +} + +/////////////////////////////////////////////////////////// +// SoapProcess* +/////////////////////////////////////////////////////////// + +#include "Diction.h" + +bool SoapProcessMethod(const TXmlItem& xmlMethod, TXmlItem& xmlAnswer) +{ + const wxString& strMethod = xmlMethod.GetTag(); + if (strMethod == "m:Translate") + return DoTranslate(xmlMethod, xmlAnswer); + + return false; +} + +wxString SoapProcessMessage(const char* buf, unsigned int len) +{ + TXmlItem xmlEnvelope; + xmlEnvelope.SetTag("SOAP-ENV:Envelope"); + TXmlItem& xmlBody = xmlEnvelope.AddChild("SOAP-ENV:Body"); + + const char* soapstart = strstr(buf, "GetChild(m); + if (pxmlMethod == NULL) + break; + if (pxmlMethod->GetTag().StartsWith("m:")) + { + wxString str; + str = pxmlMethod->GetTag(); str += "Result"; + TXmlItem& xmlAnswer = xmlBody.AddChild(str); + SoapProcessMethod(*pxmlMethod, xmlAnswer); + } + } + } + } + const wxString strResult = xmlEnvelope.AsString(); + wxChar strLength[16]; sprintf(strLength, "%d", strResult.Length()); + + wxString strAnswer; + strAnswer += "HTTP/1.1 200 OK\n"; + strAnswer += "Connection: close\n"; + strAnswer += "Content-Length: "; strAnswer += strLength; + strAnswer += "\nContent-Type: text/xml; charset=utf-8\n"; + strAnswer += "Date: "; + strAnswer += wxDateTime::Now().Format("%#c"); + strAnswer += "\nServer: "; + strAnswer += wxGetHostName(); + strAnswer += "\r\n\r\n"; + strAnswer += strResult; + + return strAnswer; +} + diff --git a/server/soap.h b/server/soap.h new file mode 100755 index 000000000..15f1e523c --- /dev/null +++ b/server/soap.h @@ -0,0 +1,58 @@ +#ifndef __SOAP_H +#define __SOAP_H + +#ifndef _WX_WXMMSTREAM_H__ +#include "wx/mstream.h" +#endif + +class TXmlItem; + +typedef bool (*XmlItemCallback)(TXmlItem& item, long jolly); + +class TXmlItem : public wxObject +{ + wxString m_strTag, m_strText; + wxHashTable* m_Attributes; + wxList* m_Children; + +protected: + wxString GetWord(wxInputStream& input) const; + int ReadTag(wxInputStream& input); + + TXmlItem& AddChild(TXmlItem* pItem); + void RemoveLastChild(); + +public: + const wxString& GetTag() const { return m_strTag; } + void SetTag(const wxChar* strTag) { m_strTag = strTag; } + + const wxString& GetText() const { return m_strText; } + void SetText(const wxChar* str) { m_strText = str; } + + void SetAttr(const wxChar* strAttr, const wxChar* strVal); + wxString GetAttr(const wxChar* strAttr) const; + + TXmlItem& AddChild(const wxChar* strTag); + TXmlItem& AddSoapString(const wxChar* name, const wxChar* value); + TXmlItem& AddSoapInt(const wxChar* name, int value); + + int GetChildren() const; + TXmlItem* GetChild(size_t n) const; + + bool Read(wxInputStream& input); + void Write(wxOutputStream& output, int nTab = 0) const; + wxString AsString() const; + + TXmlItem* ForEach(XmlItemCallback cb, long jolly = 0); + TXmlItem* FindFirst(const wxChar* strTag) const; + + TXmlItem(); + ~TXmlItem(); +}; + +wxOutputStream& operator<<(wxOutputStream& outf, const wxChar* str); +wxOutputStream& operator<<(wxOutputStream& outf, const wxString str); + +wxString SoapProcessMessage(const char* buf, const unsigned int len); + +#endif diff --git a/server/soap.ico b/server/soap.ico new file mode 100755 index 0000000000000000000000000000000000000000..24a7a01a21570f636e414ffb317007b2da181976 GIT binary patch literal 766 zcmcIiIS#@w5S$RCR47!mq~sZVgg>}*Wyw$T6Vka_iIS3%0?Ewga72g@2r>4ocf9NM zAp-?l(`=!*tbiTI1KE&AvcQ^_U~Cy4V2AhpKuZ@P1dbX=T}Mjlk!(7p=I?MK)|$M{ zMieKBBGFo)li8S8%`9u(kYOqob2_7N(yC^qt{7*i$5dT0*V6Xe57p#rZD#9vo+seF zj +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=SoapServ - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "SoapServ.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "SoapServ.mak" CFG="SoapServ - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "SoapServ - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "SoapServ - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE "SoapServ - Win32 Debug DLL" (based on "Win32 (x86) Application") +!MESSAGE "SoapServ - Win32 Release DLL" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "SoapServ - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /MD /W3 /GX /O1 /Ob2 /I "../../include" /I "../../contrib/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /FD /c +# SUBTRACT CPP /YX +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wx.lib xpm.lib png.lib zlib.lib jpeg.lib tiff.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libci.lib" /nodefaultlib:"msvcrtd.lib" /out:"Release/server.exe" /libpath:"../../lib" /libpath:"../../contrib/lib" + +!ELSEIF "$(CFG)" == "SoapServ - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "\wx229\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D DEBUG=1 /D "__WXDEBUG__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /FR /FD /c +# SUBTRACT CPP /YX /Yc /Yu +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wxd.lib xpmd.lib pngd.lib zlibd.lib jpegd.lib tiffd.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"libcid.lib" /nodefaultlib:"msvcrt.lib" /out:"Debug/server.exe" /pdbtype:sept /libpath:"/wx229/lib" + +!ELSEIF "$(CFG)" == "SoapServ - Win32 Debug DLL" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "DebugDLL" +# PROP BASE Intermediate_Dir "DebugDLL" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "DebugDLL" +# PROP Intermediate_Dir "DebugDLL" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../include" /I "../../contrib/include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D DEBUG=1 /D "__WXDEBUG__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D WXUSINGDLL=1 /Yu"wx/wxprec.h" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wx22_9d.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"libcid.lib" /out:"DebugDLL/server.exe" /pdbtype:sept /libpath:"../../lib" /libpath:"../../contrib/lib" + +!ELSEIF "$(CFG)" == "SoapServ - Win32 Release DLL" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "ReleaseDLL" +# PROP BASE Intermediate_Dir "ReleaseDLL" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "ReleaseDLL" +# PROP Intermediate_Dir "ReleaseDLL" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /MD /W3 /GX /O1 /Ob2 /I "../../include" /I "../../contrib/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D WXUSINGDLL=1 /FD /c +# SUBTRACT CPP /YX +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wx22_9.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libci.lib" /out:"ReleaseDLL/server.exe" /libpath:"../../lib" /libpath:"../../contrib/lib" + +!ENDIF + +# Begin Target + +# Name "SoapServ - Win32 Release" +# Name "SoapServ - Win32 Debug" +# Name "SoapServ - Win32 Debug DLL" +# Name "SoapServ - Win32 Release DLL" +# Begin Source File + +SOURCE=.\Diction.cpp +# End Source File +# Begin Source File + +SOURCE=.\Diction.h +# End Source File +# Begin Source File + +SOURCE=.\server.cpp + +!IF "$(CFG)" == "SoapServ - Win32 Release" + +!ELSEIF "$(CFG)" == "SoapServ - Win32 Debug" + +# SUBTRACT CPP /YX /Yc /Yu + +!ELSEIF "$(CFG)" == "SoapServ - Win32 Debug DLL" + +# SUBTRACT BASE CPP /YX /Yc /Yu +# SUBTRACT CPP /YX /Yc /Yu + +!ELSEIF "$(CFG)" == "SoapServ - Win32 Release DLL" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\server.rc + +!IF "$(CFG)" == "SoapServ - Win32 Release" + +# ADD BASE RSC /l 0x809 +# ADD RSC /l 0x809 /i "../../include" /i "../../contrib/include" + +!ELSEIF "$(CFG)" == "SoapServ - Win32 Debug" + +# ADD BASE RSC /l 0x809 +# ADD RSC /l 0x809 /i /wx229/include" " + +!ELSEIF "$(CFG)" == "SoapServ - Win32 Debug DLL" + +# ADD BASE RSC /l 0x809 +# ADD RSC /l 0x809 /i "../../include" /i "../../contrib/include" + +!ELSEIF "$(CFG)" == "SoapServ - Win32 Release DLL" + +# ADD BASE RSC /l 0x809 +# ADD RSC /l 0x809 /i "../../include" /i "../../contrib/include" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\soap.cpp +# End Source File +# Begin Source File + +SOURCE=.\soap.h +# End Source File +# End Target +# End Project diff --git a/server/soapserv.dsw b/server/soapserv.dsw new file mode 100755 index 000000000..f31352abe --- /dev/null +++ b/server/soapserv.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 5.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "SoapServ"=.\SoapServ.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/server/soapserv.ncb b/server/soapserv.ncb new file mode 100755 index 000000000..954d0534b --- /dev/null +++ b/server/soapserv.ncb @@ -0,0 +1 @@ +Microsoft C/C++ program database 2.00 diff --git a/server/soapserv.opt b/server/soapserv.opt new file mode 100755 index 0000000000000000000000000000000000000000..b468f115b2407e541139b87c52ef4db4d7e76155 GIT binary patch literal 50688 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 AKmY&$ literal 0 HcmV?d00001 diff --git a/server/soapserv.plg b/server/soapserv.plg new file mode 100755 index 000000000..b2c8154e3 --- /dev/null +++ b/server/soapserv.plg @@ -0,0 +1,38 @@ + + +
+

Build Log

+

+--------------------Configuration: SoapServ - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "c:\temp\RSPA1C2.TMP" with contents +[ +/nologo /MTd /W3 /Gm /GX /ZI /Od /I "\wx229\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D DEBUG=1 /D "__WXDEBUG__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /FR"Debug/" /Fo"Debug/" /Fd"Debug/" /FD /c +"C:\U\GUY\R020200\SOAP\server.cpp" +] +Creating command line "cl.exe @c:\temp\RSPA1C2.TMP" +Creating temporary file "c:\temp\RSPA1C3.TMP" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wxd.lib xpmd.lib pngd.lib zlibd.lib jpegd.lib tiffd.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/server.pdb" /debug /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"libcid.lib" /nodefaultlib:"msvcrt.lib" /out:"Debug/server.exe" /pdbtype:sept /libpath:"/wx229/lib" +.\Debug\Diction.obj +.\Debug\server.obj +.\Debug\soap.obj +.\Debug\server.res +] +Creating command line "link.exe @c:\temp\RSPA1C3.TMP" +

Output Window

+Compiling... +server.cpp +Linking... +Creating command line "bscmake.exe /nologo /o"Debug/SoapServ.bsc" .\Debug\Diction.sbr .\Debug\server.sbr .\Debug\soap.sbr" +Creating browse info file... +

Output Window

+ + + +

Results

+server.exe - 0 error(s), 0 warning(s) +
+ +