1
0

Fixed RCONClient compilation.

This commit is contained in:
Mattes D 2015-01-24 13:32:13 +01:00
parent 9e61ad8c74
commit b93903db23
3 changed files with 55 additions and 14 deletions

View File

@ -22,6 +22,18 @@
#define ALIGN_8 #define ALIGN_8
#define ALIGN_16 #define ALIGN_16
#define FORMATSTRING(formatIndex, va_argsIndex)
// MSVC has its own custom version of zu format
#define SIZE_T_FMT "%Iu"
#define SIZE_T_FMT_PRECISION(x) "%" #x "Iu"
#define SIZE_T_FMT_HEX "%Ix"
#define NORETURN __declspec(noreturn)
// Use non-standard defines in <cmath>
#define _USE_MATH_DEFINES
#elif defined(__GNUC__) #elif defined(__GNUC__)
// TODO: Can GCC explicitly mark classes as abstract (no instances can be created)? // TODO: Can GCC explicitly mark classes as abstract (no instances can be created)?
@ -38,6 +50,29 @@
// Some portability macros :) // Some portability macros :)
#define stricmp strcasecmp #define stricmp strcasecmp
#define FORMATSTRING(formatIndex, va_argsIndex) __attribute__((format (printf, formatIndex, va_argsIndex)))
#if defined(_WIN32)
// We're compiling on MinGW, which uses an old MSVCRT library that has no support for size_t printfing.
// We need direct size formats:
#if defined(_WIN64)
#define SIZE_T_FMT "%I64u"
#define SIZE_T_FMT_PRECISION(x) "%" #x "I64u"
#define SIZE_T_FMT_HEX "%I64x"
#else
#define SIZE_T_FMT "%u"
#define SIZE_T_FMT_PRECISION(x) "%" #x "u"
#define SIZE_T_FMT_HEX "%x"
#endif
#else
// We're compiling on Linux, so we can use libc's size_t printf format:
#define SIZE_T_FMT "%zu"
#define SIZE_T_FMT_PRECISION(x) "%" #x "zu"
#define SIZE_T_FMT_HEX "%zx"
#endif
#define NORETURN __attribute((__noreturn__))
#else #else
#error "You are using an unsupported compiler, you might need to #define some stuff here for your compiler" #error "You are using an unsupported compiler, you might need to #define some stuff here for your compiler"
@ -74,6 +109,8 @@ typedef unsigned long long UInt64;
typedef unsigned int UInt32; typedef unsigned int UInt32;
typedef unsigned short UInt16; typedef unsigned short UInt16;
typedef unsigned char Byte;
@ -94,7 +131,7 @@ typedef unsigned short UInt16;
#ifdef _WIN32 #ifdef _WIN32
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#define _WIN32_WINNT 0x501 // We want to target WinXP and higher #define _WIN32_WINNT 0x502 // We want to target WinXP SP2 and higher
#include <Windows.h> #include <Windows.h>
#include <winsock2.h> #include <winsock2.h>
@ -175,7 +212,8 @@ typedef unsigned short UInt16;
#include "StringUtils.h" #include "StringUtils.h"
#include "OSSupport/CriticalSection.h" #include "OSSupport/CriticalSection.h"
#include "OSSupport/File.h" #include "OSSupport/File.h"
#include "MCLogger.h" #include "OSSupport/Event.h"
#include "Logger.h"

View File

@ -80,14 +80,14 @@ bool cRCONPacketizer::SendPacket(int a_PacketType, const AString & a_PacketPaylo
size_t Length = Packet.size(); size_t Length = Packet.size();
if (!m_Socket.Send((const char *)&Length, 4)) if (!m_Socket.Send((const char *)&Length, 4))
{ {
fprintf(stderr, "Network error while sending packet: %d (%s). Aborting.", fprintf(stderr, "Network error while sending packet: %d (%s). Aborting.\n",
cSocket::GetLastError(), cSocket::GetLastErrorString().c_str() cSocket::GetLastError(), cSocket::GetLastErrorString().c_str()
); );
return false; return false;
} }
if (!m_Socket.Send(Packet.data(), Packet.size())) if (!m_Socket.Send(Packet.data(), Packet.size()))
{ {
fprintf(stderr, "Network error while sending packet: %d (%s). Aborting.", fprintf(stderr, "Network error while sending packet: %d (%s). Aborting.\n",
cSocket::GetLastError(), cSocket::GetLastErrorString().c_str() cSocket::GetLastError(), cSocket::GetLastErrorString().c_str()
); );
return false; return false;
@ -110,12 +110,12 @@ bool cRCONPacketizer::ReceiveResponse(void)
int NumReceived = m_Socket.Receive(buf, sizeof(buf), 0); int NumReceived = m_Socket.Receive(buf, sizeof(buf), 0);
if (NumReceived == 0) if (NumReceived == 0)
{ {
fprintf(stderr, "The remote end closed the connection. Aborting."); fprintf(stderr, "The remote end closed the connection. Aborting.\n");
return false; return false;
} }
if (NumReceived < 0) if (NumReceived < 0)
{ {
fprintf(stderr, "Network error while receiving response: %d, %d (%s). Aborting.", fprintf(stderr, "Network error while receiving response: %d, %d (%s). Aborting.\n",
NumReceived, cSocket::GetLastError(), cSocket::GetLastErrorString().c_str() NumReceived, cSocket::GetLastError(), cSocket::GetLastErrorString().c_str()
); );
return false; return false;
@ -156,13 +156,13 @@ bool cRCONPacketizer::ParsePacket(cByteBuffer & a_Buffer, int a_PacketLength)
{ {
if ((RequestID == -1) && (m_RequestID == 0)) if ((RequestID == -1) && (m_RequestID == 0))
{ {
fprintf(stderr, "Login failed. Aborting."); fprintf(stderr, "Login failed. Aborting.\n");
IsValid = false; IsValid = false;
// Continue, so that the payload is printed before the program aborts. // Continue, so that the payload is printed before the program aborts.
} }
else else
{ {
fprintf(stderr, "The server returned an invalid request ID, got %d, exp. %d. Aborting.", RequestID, m_RequestID); fprintf(stderr, "The server returned an invalid request ID, got %d, exp. %d. Aborting.\n", RequestID, m_RequestID);
return false; return false;
} }
} }
@ -172,7 +172,7 @@ bool cRCONPacketizer::ParsePacket(cByteBuffer & a_Buffer, int a_PacketLength)
VERIFY(a_Buffer.ReadLEInt(PacketType)); VERIFY(a_Buffer.ReadLEInt(PacketType));
if (PacketType != ptCommand) if (PacketType != ptCommand)
{ {
fprintf(stderr, "The server returned an unknown packet type: %d. Aborting.", PacketType); fprintf(stderr, "The server returned an unknown packet type: %d. Aborting.\n", PacketType);
IsValid = false; IsValid = false;
// Continue, so that the payload is printed before the program aborts. // Continue, so that the payload is printed before the program aborts.
} }
@ -200,8 +200,8 @@ bool cRCONPacketizer::ParsePacket(cByteBuffer & a_Buffer, int a_PacketLength)
int RealMain(int argc, char * argv[]) int RealMain(int argc, char * argv[])
{ {
new cMCLogger; // Create a new logger cLogger::InitiateMultithreading();
// Parse the cmdline params for server IP, port, password and the commands to send: // Parse the cmdline params for server IP, port, password and the commands to send:
AString ServerAddress, Password; AString ServerAddress, Password;
int ServerPort = -1; int ServerPort = -1;
@ -301,6 +301,7 @@ int RealMain(int argc, char * argv[])
} }
} }
// Send each command:
for (AStringVector::const_iterator itr = Commands.begin(), end = Commands.end(); itr != end; ++itr) for (AStringVector::const_iterator itr = Commands.begin(), end = Commands.end(); itr != end; ++itr)
{ {
if (g_IsVerbose) if (g_IsVerbose)

View File

@ -1,7 +1,9 @@
 
Microsoft Visual Studio Solution File, Format Version 10.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual C++ Express 2008 # Visual Studio Express 2013 for Windows Desktop
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RCONClient", "RCONClient.vcproj", "{1A48B032-07D0-4DDD-8362-66C0FC7F7849}" VisualStudioVersion = 12.0.31101.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RCONClient", "RCONClient.vcxproj", "{1A48B032-07D0-4DDD-8362-66C0FC7F7849}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution