From 0f71347d583d126359687061b2f0016bfd40eb57 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 23 Jul 2010 11:27:04 +0200 Subject: [PATCH] Fixed windows project files - added SOAP Added project file for SOAP Applied Trinity coding standards to TCSoap files --HG-- branch : trunk --- externals/gsoap/VC90/gsoap.vcproj | 331 +++++++++++++++++++++++ src/server/worldserver/TCSoap/TCSoap.cpp | 164 ++++++----- src/server/worldserver/TCSoap/TCSoap.h | 124 ++++----- win/TrinityCore&Script VC90.sln | 11 + win/VC90/worldserver.vcproj | 44 +-- 5 files changed, 513 insertions(+), 161 deletions(-) create mode 100644 externals/gsoap/VC90/gsoap.vcproj diff --git a/externals/gsoap/VC90/gsoap.vcproj b/externals/gsoap/VC90/gsoap.vcproj new file mode 100644 index 0000000000..2d52f32bfd --- /dev/null +++ b/externals/gsoap/VC90/gsoap.vcproj @@ -0,0 +1,331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/server/worldserver/TCSoap/TCSoap.cpp b/src/server/worldserver/TCSoap/TCSoap.cpp index cf2c55146a..de95c57479 100644 --- a/src/server/worldserver/TCSoap/TCSoap.cpp +++ b/src/server/worldserver/TCSoap/TCSoap.cpp @@ -24,66 +24,64 @@ void TCSoapRunnable::run() { - // create pool - SOAPWorkingThread pool; - pool.activate (THR_NEW_LWP | THR_JOINABLE, POOL_SIZE); + // create pool + SOAPWorkingThread pool; + pool.activate (THR_NEW_LWP | THR_JOINABLE, POOL_SIZE); - struct soap soap; - int m, s; - soap_init(&soap); - soap_set_imode(&soap, SOAP_C_UTFSTRING); - soap_set_omode(&soap, SOAP_C_UTFSTRING); - m = soap_bind(&soap, m_host.c_str(), m_port, 100); + struct soap soap; + int m, s; + soap_init(&soap); + soap_set_imode(&soap, SOAP_C_UTFSTRING); + soap_set_omode(&soap, SOAP_C_UTFSTRING); + m = soap_bind(&soap, m_host.c_str(), m_port, 100); - // check every 3 seconds if world ended - soap.accept_timeout = 3; + // check every 3 seconds if world ended + soap.accept_timeout = 3; - soap.recv_timeout = 5; - soap.send_timeout = 5; - if (m < 0) + soap.recv_timeout = 5; + soap.send_timeout = 5; + if (m < 0) { - sLog.outError("TCSoap: couldn't bind to %s:%d", m_host.c_str(), m_port); - exit(-1); + sLog.outError("TCSoap: couldn't bind to %s:%d", m_host.c_str(), m_port); + exit(-1); } - sLog.outString("TCSoap: bound to http://%s:%d", m_host.c_str(), m_port); + sLog.outString("TCSoap: bound to http://%s:%d", m_host.c_str(), m_port); - while(!World::IsStopped()) + while(!World::IsStopped()) { - s = soap_accept(&soap); + s = soap_accept(&soap); - if (s < 0) - { - // ran into an accept timeout - continue; - } + if (s < 0) + continue; // ran into an accept timeout - sLog.outDebug("TCSoap: accepted connection from IP=%d.%d.%d.%d", (int)(soap.ip>>24)&0xFF, (int)(soap.ip>>16)&0xFF, (int)(soap.ip>>8)&0xFF, (int)soap.ip&0xFF); - struct soap* thread_soap = soap_copy(&soap);// make a safe copy + sLog.outDebug("TCSoap: accepted connection from IP=%d.%d.%d.%d", (int)(soap.ip>>24)&0xFF, (int)(soap.ip>>16)&0xFF, (int)(soap.ip>>8)&0xFF, (int)soap.ip&0xFF); + struct soap* thread_soap = soap_copy(&soap);// make a safe copy - ACE_Message_Block *mb = new ACE_Message_Block(sizeof(struct soap*)); - ACE_OS::memcpy (mb->wr_ptr (), &thread_soap, sizeof(struct soap*)); - pool.putq(mb); + ACE_Message_Block *mb = new ACE_Message_Block(sizeof(struct soap*)); + ACE_OS::memcpy (mb->wr_ptr(), &thread_soap, sizeof(struct soap*)); + pool.putq(mb); } - pool.msg_queue ()->deactivate (); - pool.wait (); - soap_done(&soap); + pool.msg_queue()->deactivate(); + pool.wait(); + + soap_done(&soap); } void SOAPWorkingThread::process_message (ACE_Message_Block *mb) { - ACE_TRACE (ACE_TEXT ("SOAPWorkingThread::process_message")); + ACE_TRACE (ACE_TEXT ("SOAPWorkingThread::process_message")); - struct soap* soap; - ACE_OS::memcpy (&soap, mb->rd_ptr (), sizeof(struct soap*)); - mb->release (); + struct soap* soap; + ACE_OS::memcpy (&soap, mb->rd_ptr (), sizeof(struct soap*)); + mb->release(); - soap_serve(soap); - soap_destroy(soap); // dealloc C++ data - soap_end(soap); // dealloc data and clean up - soap_done(soap); // detach soap struct - free(soap); + soap_serve(soap); + soap_destroy(soap); // dealloc C++ data + soap_end(soap); // dealloc data and clean up + soap_done(soap); // detach soap struct + free(soap); } /* Code used for generating stubs: @@ -92,71 +90,71 @@ int ns1__executeCommand(char* command, char** result); */ int ns1__executeCommand(soap* soap, char* command, char** result) { - // security check - if (!soap->userid || !soap->passwd) + // security check + if (!soap->userid || !soap->passwd) { - sLog.outDebug("TCSoap: Client didn't provide login information"); - return 401; + sLog.outDebug("TCSoap: Client didn't provide login information"); + return 401; } - uint32 accountId = accmgr.GetId(soap->userid); - if(!accountId) + uint32 accountId = accmgr.GetId(soap->userid); + if(!accountId) { - sLog.outDebug("TCSoap: Client used invalid username '%s'", soap->userid); - return 401; + sLog.outDebug("TCSoap: Client used invalid username '%s'", soap->userid); + return 401; } - if(!accmgr.CheckPassword(accountId, soap->passwd)) + if(!accmgr.CheckPassword(accountId, soap->passwd)) { - sLog.outDebug("TCSoap: invalid password for account '%s'", soap->userid); - return 401; + sLog.outDebug("TCSoap: invalid password for account '%s'", soap->userid); + return 401; } - if(accmgr.GetSecurity(accountId) < SEC_ADMINISTRATOR) + if(accmgr.GetSecurity(accountId) < SEC_ADMINISTRATOR) { - sLog.outDebug("TCSoap: %s's gmlevel is too low", soap->userid); - return 403; + sLog.outDebug("TCSoap: %s's gmlevel is too low", soap->userid); + return 403; } - if(!command || !*command) - return soap_sender_fault(soap, "Command mustn't be empty", "The supplied command was an empty string"); + if(!command || !*command) + return soap_sender_fault(soap, "Command mustn't be empty", "The supplied command was an empty string"); - sLog.outDebug("TCSoap: got command '%s'", command); - SOAPCommand connection; + sLog.outDebug("TCSoap: got command '%s'", command); + SOAPCommand connection; - // commands are executed in the world thread. We have to wait for them to be completed - { - // CliCommandHolder will be deleted from world, accessing after queueing is NOT save - CliCommandHolder* cmd = new CliCommandHolder(&connection, command, &SOAPCommand::print, &SOAPCommand::commandFinished); - sWorld.QueueCliCommand(cmd); - } - - // wait for callback to complete command - - int acc = connection.pendingCommands.acquire(); - if(acc) + // commands are executed in the world thread. We have to wait for them to be completed { - sLog.outError("TCSoap: Error while acquiring lock, acc = %i, errno = %u", acc, errno); + // CliCommandHolder will be deleted from world, accessing after queueing is NOT save + CliCommandHolder* cmd = new CliCommandHolder(&connection, command, &SOAPCommand::print, &SOAPCommand::commandFinished); + sWorld.QueueCliCommand(cmd); } - // alright, command finished + // wait for callback to complete command - char* printBuffer = soap_strdup(soap, connection.m_printBuffer.c_str()); - if(connection.hasCommandSucceeded()) + int acc = connection.pendingCommands.acquire(); + if(acc) { - *result = printBuffer; - return SOAP_OK; + sLog.outError("TCSoap: Error while acquiring lock, acc = %i, errno = %u", acc, errno); } - else - return soap_sender_fault(soap, printBuffer, printBuffer); + + // alright, command finished + + char* printBuffer = soap_strdup(soap, connection.m_printBuffer.c_str()); + if(connection.hasCommandSucceeded()) + { + *result = printBuffer; + return SOAP_OK; + } + else + return soap_sender_fault(soap, printBuffer, printBuffer); } void SOAPCommand::commandFinished(void* soapconnection, bool success) { - SOAPCommand* con = (SOAPCommand*)soapconnection; - con->setCommandSuccess(success); - con->pendingCommands.release(); + SOAPCommand* con = (SOAPCommand*)soapconnection; + con->setCommandSuccess(success); + con->pendingCommands.release(); } //////////////////////////////////////////////////////////////////////////////// @@ -166,10 +164,10 @@ void SOAPCommand::commandFinished(void* soapconnection, bool success) //////////////////////////////////////////////////////////////////////////////// struct Namespace namespaces[] = - { { "SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/" }, // must be first +{ { "SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/" }, // must be first { "SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/" }, // must be second { "xsi", "http://www.w3.org/1999/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance" }, { "xsd", "http://www.w3.org/1999/XMLSchema", "http://www.w3.org/*/XMLSchema" }, { "ns1", "urn:TC" }, // "ns1" namespace prefix { NULL, NULL } - }; +}; diff --git a/src/server/worldserver/TCSoap/TCSoap.h b/src/server/worldserver/TCSoap/TCSoap.h index 87e80e69a3..a306f0da3f 100644 --- a/src/server/worldserver/TCSoap/TCSoap.h +++ b/src/server/worldserver/TCSoap/TCSoap.h @@ -34,87 +34,87 @@ class TCSoapRunnable: public ACE_Based::Runnable { - public: - TCSoapRunnable() { } - void run(); - void setListenArguments(std::string host, uint16 port) - { - m_host = host; - m_port = port; - } - private: - std::string m_host; - uint16 m_port; + public: + TCSoapRunnable() { } + void run(); + void setListenArguments(std::string host, uint16 port) + { + m_host = host; + m_port = port; + } + private: + std::string m_host; + uint16 m_port; }; class SOAPWorkingThread : public ACE_Task { - public: - SOAPWorkingThread () - { } + public: + SOAPWorkingThread() { } - virtual int svc (void) - { - while (1) - { - ACE_Message_Block *mb = 0; - if (this->getq (mb) == -1) - { - ACE_DEBUG ((LM_INFO, - ACE_TEXT ("(%t) Shutting down\n"))); - break; - } + virtual int svc(void) + { + while(1) + { + ACE_Message_Block *mb = 0; + if (this->getq(mb) == -1) + { + ACE_DEBUG((LM_INFO, + ACE_TEXT("(%t) Shutting down\n"))); + break; + } - // Process the message. - process_message (mb); - } + // Process the message. + process_message(mb); + } - return 0; - } - private: - void process_message (ACE_Message_Block *mb); + return 0; + } + private: + void process_message(ACE_Message_Block *mb); }; class SOAPCommand { - public: - SOAPCommand() - { - ACE_ASSERT (pendingCommands.open("pendingCommands", - ACE_SV_Semaphore_Simple::ACE_CREATE, - 0) != -1); + public: + SOAPCommand() + { + ACE_ASSERT(pendingCommands.open("pendingCommands", + ACE_SV_Semaphore_Simple::ACE_CREATE, + 0) != -1); + } - } - ~SOAPCommand() - { - } + ~SOAPCommand() + { + } - void appendToPrintBuffer(const char* msg) - { - m_printBuffer += msg; - } + void appendToPrintBuffer(const char* msg) + { + m_printBuffer += msg; + } - ACE_SV_Semaphore_Simple pendingCommands; + ACE_SV_Semaphore_Simple pendingCommands; - void setCommandSuccess(bool val) - { - m_success = val; - } - bool hasCommandSucceeded() - { - return m_success; - } + void setCommandSuccess(bool val) + { + m_success = val; + } - static void print(void* callbackArg, const char* msg) - { - ((SOAPCommand*)callbackArg)->appendToPrintBuffer(msg); - } + bool hasCommandSucceeded() + { + return m_success; + } - static void commandFinished(void* callbackArg, bool success); + static void print(void* callbackArg, const char* msg) + { + ((SOAPCommand*)callbackArg)->appendToPrintBuffer(msg); + } - bool m_success; - std::string m_printBuffer; + static void commandFinished(void* callbackArg, bool success); + + bool m_success; + std::string m_printBuffer; }; #endif diff --git a/win/TrinityCore&Script VC90.sln b/win/TrinityCore&Script VC90.sln index 4e82f96bae..103cf48cc5 100644 --- a/win/TrinityCore&Script VC90.sln +++ b/win/TrinityCore&Script VC90.sln @@ -38,8 +38,11 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "worldserver", "VC90\worldserver.vcproj", "{A3A04E47-43A2-4C08-90B3-029CEF558594}" ProjectSection(ProjectDependencies) = postProject {1DC6C4DA-A028-41F3-877D-D5400C594F88} = {1DC6C4DA-A028-41F3-877D-D5400C594F88} + {014331FB-7472-4465-9844-EEED2A79FE97} = {014331FB-7472-4465-9844-EEED2A79FE97} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gsoap", "..\externals\gsoap\VC90\gsoap.vcproj", "{014331FB-7472-4465-9844-EEED2A79FE97}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -128,6 +131,14 @@ Global {A3A04E47-43A2-4C08-90B3-029CEF558594}.Release|Win32.Build.0 = Release|Win32 {A3A04E47-43A2-4C08-90B3-029CEF558594}.Release|x64.ActiveCfg = Release|x64 {A3A04E47-43A2-4C08-90B3-029CEF558594}.Release|x64.Build.0 = Release|x64 + {014331FB-7472-4465-9844-EEED2A79FE97}.Debug|Win32.ActiveCfg = Debug|Win32 + {014331FB-7472-4465-9844-EEED2A79FE97}.Debug|Win32.Build.0 = Debug|Win32 + {014331FB-7472-4465-9844-EEED2A79FE97}.Debug|x64.ActiveCfg = Debug|x64 + {014331FB-7472-4465-9844-EEED2A79FE97}.Debug|x64.Build.0 = Debug|x64 + {014331FB-7472-4465-9844-EEED2A79FE97}.Release|Win32.ActiveCfg = Release|Win32 + {014331FB-7472-4465-9844-EEED2A79FE97}.Release|Win32.Build.0 = Release|Win32 + {014331FB-7472-4465-9844-EEED2A79FE97}.Release|x64.ActiveCfg = Release|x64 + {014331FB-7472-4465-9844-EEED2A79FE97}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/win/VC90/worldserver.vcproj b/win/VC90/worldserver.vcproj index 40b5966a7a..8eff272640 100644 --- a/win/VC90/worldserver.vcproj +++ b/win/VC90/worldserver.vcproj @@ -48,7 +48,7 @@ Name="VCCLCompilerTool" AdditionalOptions="/MP" InlineFunctionExpansion="1" - AdditionalIncludeDirectories="..\..\externals;..\..\externals\mersennetwister;..\..\externals\sockets\include;..\..\src\server\game\Accounts;..\..\src\server\game\Achievements;..\..\src\server\game\Addons;..\..\src\server\game\BattleGrounds;..\..\src\server\game\Chat;..\..\src\server\game\Combat;..\..\src\server\game\Conditions;..\..\src\server\game\DataStores;..\..\src\server\game\DungeonFinding;..\..\src\server\game\Entities\Corpse;..\..\src\server\game\Entities\Creature;..\..\src\server\game\Entities\DynamicObject;..\..\src\server\game\Entities\GameObject;..\..\src\server\game\Entities\Item;..\..\src\server\game\Entities\Item\Container;..\..\src\server\game\Entities\Object;..\..\src\server\game\Entities\Object\Updates;..\..\src\server\game\Entities\Pet;..\..\src\server\game\Entities\Player;..\..\src\server\game\Entities\Unit;..\..\src\server\game\Entities\Vehicle;..\..\src\server\game\Globals;..\..\src\server\game\Grids;..\..\src\server\game\Grids\Cells;..\..\src\server\game\Groups;..\..\src\server\game\Loot;..\..\src\server\game\Mails;..\..\src\server\game\Maps;..\..\src\server\game\Miscellaneous;..\..\src\server\game\Movement;..\..\src\server\game\Movement\Waypoints;..\..\src\server\game\Quests;..\..\src\server\game\Reputation;..\..\src\server\game\Server;..\..\src\server\game\Server\Protocol;..\..\src\server\game\Server\Protocol\Handlers;..\..\src\server\game\Spells\Auras;..\..\src\server\game\World;..\..\src\server\shared;..\..\src\server\shared\Cryptography;..\..\src\server\shared\Cryptography\Authentication;..\..\src\server\shared\Database;..\..\src\server\shared\DataStores;..\..\src\server\shared\Dynamic;..\..\src\server\shared\Dynamic\LinkedReference;..\..\src\server\shared\Logging;..\..\src\server\shared\Packets;..\..\src\server\shared\Policies;..\..\src\server\shared\Threading;..\..\src\server\shared\Utilities;..\..\src\server\worldserver;..\..\src\server\worldserver\CommandLine;..\..\src\server\worldserver\RemoteAccess;..\..\src\server\worldserver\WorldThread" + AdditionalIncludeDirectories="..\..\externals;..\..\externals\gsoap;..\..\externals\mersennetwister;..\..\externals\sockets\include;..\..\src\server\game\Accounts;..\..\src\server\game\Achievements;..\..\src\server\game\Addons;..\..\src\server\game\BattleGrounds;..\..\src\server\game\Chat;..\..\src\server\game\Combat;..\..\src\server\game\Conditions;..\..\src\server\game\DataStores;..\..\src\server\game\DungeonFinding;..\..\src\server\game\Entities\Corpse;..\..\src\server\game\Entities\Creature;..\..\src\server\game\Entities\DynamicObject;..\..\src\server\game\Entities\GameObject;..\..\src\server\game\Entities\Item;..\..\src\server\game\Entities\Item\Container;..\..\src\server\game\Entities\Object;..\..\src\server\game\Entities\Object\Updates;..\..\src\server\game\Entities\Pet;..\..\src\server\game\Entities\Player;..\..\src\server\game\Entities\Unit;..\..\src\server\game\Entities\Vehicle;..\..\src\server\game\Globals;..\..\src\server\game\Grids;..\..\src\server\game\Grids\Cells;..\..\src\server\game\Groups;..\..\src\server\game\Loot;..\..\src\server\game\Mails;..\..\src\server\game\Maps;..\..\src\server\game\Miscellaneous;..\..\src\server\game\Movement;..\..\src\server\game\Movement\Waypoints;..\..\src\server\game\Quests;..\..\src\server\game\Reputation;..\..\src\server\game\Server;..\..\src\server\game\Server\Protocol;..\..\src\server\game\Server\Protocol\Handlers;..\..\src\server\game\Spells\Auras;..\..\src\server\game\World;..\..\src\server\shared;..\..\src\server\shared\Cryptography;..\..\src\server\shared\Cryptography\Authentication;..\..\src\server\shared\Database;..\..\src\server\shared\DataStores;..\..\src\server\shared\Dynamic;..\..\src\server\shared\Dynamic\LinkedReference;..\..\src\server\shared\Logging;..\..\src\server\shared\Packets;..\..\src\server\shared\Policies;..\..\src\server\shared\Threading;..\..\src\server\shared\Utilities;..\..\src\server\worldserver;..\..\src\server\worldserver\CommandLine;..\..\src\server\worldserver\RemoteAccess;..\..\src\server\worldserver\TCSoap;..\..\src\server\worldserver\WorldThread" PreprocessorDefinitions="WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE" StringPooling="true" RuntimeLibrary="2" @@ -81,11 +81,11 @@ Name="VCLinkerTool" LinkLibraryDependencies="true" AdditionalOptions="/MACHINE:I386" - AdditionalDependencies="libmysql.lib ssleay32.lib libeay32.lib ws2_32.lib dbghelp.lib" + AdditionalDependencies="libmysql.lib ssleay32.lib libeay32.lib ws2_32.lib dbghelp.lib gsoap.lib" OutputFile="..\..\bin\$(PlatformName)_$(ConfigurationName)\$(ProjectName).exe" LinkIncremental="1" SuppressStartupBanner="true" - AdditionalLibraryDirectories=""..\..\externals\mysql\bin\$(PlatformName)_$(ConfigurationName)";"..\..\externals\lib\$(PlatformName)_$(ConfigurationName)"" + AdditionalLibraryDirectories=""..\..\externals\mysql\bin\$(PlatformName)_$(ConfigurationName)";"..\..\externals\gsoap\bin\$(PlatformName)_$(ConfigurationName)"" GenerateDebugInformation="true" ProgramDatabaseFile="..\..\bin\$(PlatformName)_$(ConfigurationName)\$(ProjectName).pdb" GenerateMapFile="true" @@ -117,7 +117,7 @@ /> @@ -448,6 +448,18 @@ > + + + + + +