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
This commit is contained in:
parent
1d4f4e3267
commit
46c525e0d9
BIN
server/connect.ico
Executable file
BIN
server/connect.ico
Executable file
Binary file not shown.
After Width: | Height: | Size: 766 B |
185
server/diction.cpp
Executable file
185
server/diction.cpp
Executable file
@ -0,0 +1,185 @@
|
||||
#include "wx/wx.h"
|
||||
#include "wx/wfstream.h"
|
||||
#include "wx/protocol/http.h"
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
#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 << "<xml><dictionary>\n";
|
||||
BeginFind();
|
||||
for (wxNode* pNode = Next(); pNode != NULL; pNode = Next())
|
||||
{
|
||||
outf << " <entry>\n";
|
||||
outf << " <ita>" << pNode->GetKeyString() << "</ita>\n";
|
||||
outf << " <eng>" << ((TDictionaryEntry*)pNode->GetData())->m_str << "</eng>\n";
|
||||
outf << " </entry>\n";
|
||||
}
|
||||
outf << "</dictionary></xml>\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;
|
||||
}
|
||||
|
3
server/diction.h
Executable file
3
server/diction.h
Executable file
@ -0,0 +1,3 @@
|
||||
bool DoTranslate(const TXmlItem& xmlMethod, TXmlItem& xmlAnswer);
|
||||
|
||||
|
BIN
server/mondrian.ico
Executable file
BIN
server/mondrian.ico
Executable file
Binary file not shown.
After Width: | Height: | Size: 766 B |
320
server/server.cpp
Executable file
320
server/server.cpp
Executable file
@ -0,0 +1,320 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: server.cpp
|
||||
// Purpose: Simple Soap Server
|
||||
// Author: Guy
|
||||
// Modified by:
|
||||
// Created: 21/08/2002
|
||||
// Copyright: (c) 2002 Guy
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// ==========================================================================
|
||||
// declarations
|
||||
// ==========================================================================
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// headers
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
// For compilers that support precompilation, includes "wx/wx.h".
|
||||
#include "wx/wx.h"
|
||||
#include "wx/socket.h"
|
||||
|
||||
#include "soap.h"
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// classes
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
// Define a new application type
|
||||
class SoapServerApp : public wxApp
|
||||
{
|
||||
public:
|
||||
virtual bool OnInit();
|
||||
};
|
||||
|
||||
// Define a new frame type: this is going to be our main frame
|
||||
class SoapFrame : public wxFrame
|
||||
{
|
||||
public:
|
||||
SoapFrame();
|
||||
~SoapFrame();
|
||||
|
||||
// event handlers (these functions should _not_ be virtual)
|
||||
void OnQuit(wxCommandEvent& event);
|
||||
void OnAbout(wxCommandEvent& event);
|
||||
void OnServerEvent(wxSocketEvent& event);
|
||||
void OnSocketEvent(wxSocketEvent& event);
|
||||
|
||||
void ProcessSoapCommand(wxSocketBase *sock);
|
||||
|
||||
// convenience functions
|
||||
void UpdateStatusBar();
|
||||
|
||||
private:
|
||||
wxSocketServer *m_server;
|
||||
wxTextCtrl *m_text;
|
||||
wxMenu *m_menuFile;
|
||||
wxMenuBar *m_menuBar;
|
||||
bool m_busy;
|
||||
int m_numClients;
|
||||
|
||||
// any class wishing to process wxWindows events must use this macro
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// constants
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
// IDs for the controls and the menu commands
|
||||
enum
|
||||
{
|
||||
// menu items
|
||||
SERVER_QUIT = 1000,
|
||||
SERVER_ABOUT,
|
||||
|
||||
// id for sockets
|
||||
SERVER_ID,
|
||||
SOCKET_ID
|
||||
};
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// event tables and other macros for wxWindows
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
BEGIN_EVENT_TABLE(SoapFrame, wxFrame)
|
||||
EVT_MENU(SERVER_QUIT, SoapFrame::OnQuit)
|
||||
EVT_MENU(SERVER_ABOUT, SoapFrame::OnAbout)
|
||||
EVT_SOCKET(SERVER_ID, SoapFrame::OnServerEvent)
|
||||
EVT_SOCKET(SOCKET_ID, SoapFrame::OnSocketEvent)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
IMPLEMENT_APP(SoapServerApp)
|
||||
|
||||
|
||||
// ==========================================================================
|
||||
// implementation
|
||||
// ==========================================================================
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// the application class
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
bool SoapServerApp::OnInit()
|
||||
{
|
||||
// Create the main application window
|
||||
SoapFrame *frame = new SoapFrame();
|
||||
|
||||
// Show it and tell the application that it's our main window
|
||||
frame->Show(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);
|
||||
}
|
3
server/server.rc
Executable file
3
server/server.rc
Executable file
@ -0,0 +1,3 @@
|
||||
mondrian ICON "soap.ico"
|
||||
#include "wx/msw/wx.rc"
|
||||
|
445
server/soap.cpp
Executable file
445
server/soap.cpp
Executable file
@ -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 </SOAP-ENV>
|
||||
{
|
||||
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 << "</" << GetTag() << ">";
|
||||
}
|
||||
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 << "<?xml Version=\"1.0\" ?>"; // 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, "<SOAP-ENV:");
|
||||
if (soapstart != NULL)
|
||||
{
|
||||
const int soaplen = len - (soapstart - buf);
|
||||
wxMemoryInputStream input(soapstart, soaplen);
|
||||
TXmlItem query;
|
||||
if (query.Read(input))
|
||||
{
|
||||
const TXmlItem* pxmlBody = query.FindFirst("SOAP-ENV:Body");
|
||||
if (pxmlBody != NULL) for (int m = 0; ; m++)
|
||||
{
|
||||
const TXmlItem* pxmlMethod = pxmlBody->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;
|
||||
}
|
||||
|
58
server/soap.h
Executable file
58
server/soap.h
Executable file
@ -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
|
BIN
server/soap.ico
Executable file
BIN
server/soap.ico
Executable file
Binary file not shown.
After Width: | Height: | Size: 766 B |
213
server/soapserv.dsp
Executable file
213
server/soapserv.dsp
Executable file
@ -0,0 +1,213 @@
|
||||
# Microsoft Developer Studio Project File - Name="SoapServ" - Package Owner=<4>
|
||||
# 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
|
29
server/soapserv.dsw
Executable file
29
server/soapserv.dsw
Executable file
@ -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>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
1
server/soapserv.ncb
Executable file
1
server/soapserv.ncb
Executable file
@ -0,0 +1 @@
|
||||
Microsoft C/C++ program database 2.00
|
BIN
server/soapserv.opt
Executable file
BIN
server/soapserv.opt
Executable file
Binary file not shown.
38
server/soapserv.plg
Executable file
38
server/soapserv.plg
Executable file
@ -0,0 +1,38 @@
|
||||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: SoapServ - Win32 Debug--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
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"
|
||||
<h3>Output Window</h3>
|
||||
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...
|
||||
<h3>Output Window</h3>
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
server.exe - 0 error(s), 0 warning(s)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
Loading…
x
Reference in New Issue
Block a user