diff options
Diffstat (limited to '')
-rw-r--r-- | circle.yml | 12 | ||||
-rw-r--r-- | src/BlockEntities/CMakeLists.txt | 7 | ||||
-rw-r--r-- | src/BlockEntities/RedstonePoweredEntity.h | 21 | ||||
-rw-r--r-- | src/Blocks/BlockPlant.h | 5 | ||||
-rw-r--r-- | src/Blocks/CMakeLists.txt | 13 | ||||
-rw-r--r-- | src/CMakeLists.txt | 1 | ||||
-rwxr-xr-x | src/CheckBasicStyle.lua | 6 | ||||
-rw-r--r-- | src/Color.h | 18 | ||||
-rw-r--r-- | src/Items/CMakeLists.txt | 7 | ||||
-rw-r--r-- | src/OSSupport/Socket.cpp | 377 | ||||
-rw-r--r-- | src/OSSupport/Socket.h | 125 |
11 files changed, 69 insertions, 523 deletions
diff --git a/circle.yml b/circle.yml new file mode 100644 index 000000000..341c87a1d --- /dev/null +++ b/circle.yml @@ -0,0 +1,12 @@ +# This is the YML file that governs the CI builds at CircleCI.com +# The CI is used only for style-checking at this moment. + + +dependencies: + pre: + - sudo apt-get install lua5.1 + +test: + override: + - cd src && find . -name \*.cpp -or -name \*.h > AllFiles.lst + - cd src && lua CheckBasicStyle.lua diff --git a/src/BlockEntities/CMakeLists.txt b/src/BlockEntities/CMakeLists.txt index b0bfca5e4..0d1776eb5 100644 --- a/src/BlockEntities/CMakeLists.txt +++ b/src/BlockEntities/CMakeLists.txt @@ -20,7 +20,8 @@ SET (SRCS MobHeadEntity.cpp MobSpawnerEntity.cpp NoteEntity.cpp - SignEntity.cpp) + SignEntity.cpp +) SET (HDRS BeaconEntity.h @@ -39,7 +40,9 @@ SET (HDRS MobHeadEntity.h MobSpawnerEntity.h NoteEntity.h - SignEntity.h) + RedstonePoweredEntity.h + SignEntity.h +) if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") set_source_files_properties(BeaconEntity.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=conversion -Wno-error=switch-enum") diff --git a/src/BlockEntities/RedstonePoweredEntity.h b/src/BlockEntities/RedstonePoweredEntity.h index eac4e35d4..06856f3ea 100644 --- a/src/BlockEntities/RedstonePoweredEntity.h +++ b/src/BlockEntities/RedstonePoweredEntity.h @@ -1,13 +1,30 @@ +// RedstonePoweredEntity.h + +// Declares the cRedstonePoweredEntity class representing a mix-in for block entities that respond to redstone + + + + + #pragma once -// Interface class representing a blockEntity that responds to redstone + + + + +/** Interface class representing a mix-in for block entities that respond to redstone */ class cRedstonePoweredEntity { public: virtual ~cRedstonePoweredEntity() {} - /// Sets the internal redstone power flag to "on" or "off", depending on the parameter. Calls Activate() if appropriate + /** Sets the internal redstone power flag to "on" or "off", depending on the parameter. + Calls Activate() if appropriate */ virtual void SetRedstonePower(bool a_IsPowered) = 0; }; + + + + diff --git a/src/Blocks/BlockPlant.h b/src/Blocks/BlockPlant.h index 0e6aca7eb..0155dc466 100644 --- a/src/Blocks/BlockPlant.h +++ b/src/Blocks/BlockPlant.h @@ -49,13 +49,12 @@ protected: Light = Blocklight; } - // Return true if there is enough light - // Set m_ShouldDie if the base light amounts are not enough to sustain a plant + // Based on light levels, decide between growth, stay and death: if (Light > 8) { return paGrowth; } - else if (Blocklight < 9 && SkyLight < 9) + else if ((Blocklight < 9) && (SkyLight < 9)) { return paDeath; } diff --git a/src/Blocks/CMakeLists.txt b/src/Blocks/CMakeLists.txt index ed3e321d4..1c12d9fbc 100644 --- a/src/Blocks/CMakeLists.txt +++ b/src/Blocks/CMakeLists.txt @@ -9,7 +9,8 @@ SET (SRCS BlockDoor.cpp BlockHandler.cpp BlockPiston.cpp - ChunkInterface.cpp) + ChunkInterface.cpp +) SET (HDRS BlockAnvil.h @@ -54,12 +55,15 @@ SET (HDRS BlockLilypad.h BlockMelon.h BlockMobHead.h + BlockMobSpawner.h BlockMushroom.h BlockMycelium.h + BlockNetherrack.h BlockNetherWart.h BlockOre.h BlockPiston.h BlockPlanks.h + BlockPlant.h BlockPluginInterface.h BlockPortal.h BlockPressurePlate.h @@ -72,6 +76,7 @@ SET (HDRS BlockRedstoneTorch.h BlockSand.h BlockSapling.h + BlockSeaLantern.h BlockSideways.h BlockSignPost.h BlockSlab.h @@ -80,8 +85,8 @@ SET (HDRS BlockStems.h BlockStone.h BlockSugarcane.h - BlockTNT.h BlockTallGrass.h + BlockTNT.h BlockTorch.h BlockTrapdoor.h BlockTripwire.h @@ -92,8 +97,10 @@ SET (HDRS BroadcastInterface.h ChunkInterface.h ClearMetaOnDrop.h + GetHandlerCompileTimeTemplate.h MetaRotator.h - WorldInterface.h) + WorldInterface.h +) if(NOT MSVC) add_library(Blocks ${SRCS} ${HDRS}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 583ca4d3b..d37ba5419 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -98,6 +98,7 @@ SET (HDRS ChunkSender.h ChunkStay.h ClientHandle.h + Color.h CommandOutput.h CompositeChat.h CraftingRecipes.h diff --git a/src/CheckBasicStyle.lua b/src/CheckBasicStyle.lua index 9521534a8..f9f8f6b4d 100755 --- a/src/CheckBasicStyle.lua +++ b/src/CheckBasicStyle.lua @@ -412,6 +412,12 @@ end -- Process the files in the list: for _, fnam in ipairs(ToProcess) do + + -- Remove the optional "./" prefix: + if (fnam:sub(1, 2) == "./") then + fnam = fnam:sub(3) + end + ProcessItem(fnam) end diff --git a/src/Color.h b/src/Color.h index 57775b0dd..3680193ab 100644 --- a/src/Color.h +++ b/src/Color.h @@ -25,31 +25,31 @@ public: cColor() { m_Color = static_cast<unsigned int>(COLOR_NONE);} cColor(unsigned char a_Red, unsigned char a_Green, unsigned char a_Blue) { SetColor(a_Red, a_Green, a_Blue); } - /// Returns whether the color is a valid color + /** Returns whether the color is a valid color */ bool IsValid() const { return m_Color != COLOR_NONE; } - /// Changes the color + /** Changes the color */ void SetColor(unsigned char a_Red, unsigned char a_Green, unsigned char a_Blue); - /// Alters the red value of the color + /** Alters the red value of the color */ void SetRed(unsigned char a_Red); - /// Alters the green value of the color + /** Alters the green value of the color */ void SetGreen(unsigned char a_Red); - /// Alters the blue value of the color + /** Alters the blue value of the color */ void SetBlue(unsigned char a_Red); - /// Returns the red value of the color + /** Returns the red value of the color */ unsigned char GetRed() const; - /// Returns the green value of the color + /** Returns the green value of the color */ unsigned char GetGreen() const; - /// Returns the blue value of the color + /** Returns the blue value of the color */ unsigned char GetBlue() const; - /// Resets the color + /** Resets the color */ void Clear() { m_Color = static_cast<unsigned int>(COLOR_NONE); } // tolua_end diff --git a/src/Items/CMakeLists.txt b/src/Items/CMakeLists.txt index 46ff3b4a0..91083d31b 100644 --- a/src/Items/CMakeLists.txt +++ b/src/Items/CMakeLists.txt @@ -5,7 +5,8 @@ project (MCServer) include_directories ("${PROJECT_SOURCE_DIR}/../") SET (SRCS - ItemHandler.cpp) + ItemHandler.cpp +) SET (HDRS ItemArmor.h @@ -26,6 +27,7 @@ SET (HDRS ItemFishingRod.h ItemFlowerPot.h ItemFood.h + ItemGoldenApple.h ItemHandler.h ItemHoe.h ItemItemFrame.h @@ -36,6 +38,7 @@ SET (HDRS ItemMilk.h ItemMinecart.h ItemMobHead.h + ItemMushroomSoup.h ItemNetherWart.h ItemPainting.h ItemPickaxe.h @@ -47,8 +50,8 @@ SET (HDRS ItemSeeds.h ItemShears.h ItemShovel.h - ItemSlab.h ItemSign.h + ItemSlab.h ItemSpawnEgg.h ItemString.h ItemSugarcane.h diff --git a/src/OSSupport/Socket.cpp b/src/OSSupport/Socket.cpp deleted file mode 100644 index 5025a09ad..000000000 --- a/src/OSSupport/Socket.cpp +++ /dev/null @@ -1,377 +0,0 @@ - -#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules - -#include "Socket.h" - -#ifndef _WIN32 - #include <netdb.h> - #include <unistd.h> - #include <arpa/inet.h> // inet_ntoa() - #include <sys/ioctl.h> // ioctl() -#else - #define socklen_t int -#endif - - - - - -cSocket::cSocket(xSocket a_Socket) - : m_Socket(a_Socket) -{ -} - - - - - -cSocket::operator cSocket::xSocket() const -{ - return m_Socket; -} - - - - - -cSocket::xSocket cSocket::GetSocket() const -{ - return m_Socket; -} - - - - - -bool cSocket::IsValidSocket(cSocket::xSocket a_Socket) -{ - #ifdef _WIN32 - return (a_Socket != INVALID_SOCKET); - #else // _WIN32 - return (a_Socket >= 0); - #endif // else _WIN32 -} - - - - - -void cSocket::CloseSocket() -{ - #ifdef _WIN32 - - closesocket(m_Socket); - - #else // _WIN32 - - if (close(m_Socket) != 0) - { - LOGWARN("Error closing socket %d (%s): %s", m_Socket, m_IPString.c_str(), GetLastErrorString().c_str()); - } - - #endif // else _WIN32 - - // Invalidate the socket so that this object can be re-used for another connection - m_Socket = INVALID_SOCKET; -} - - - - - -void cSocket::ShutdownReadWrite(void) -{ - #ifdef _WIN32 - int res = shutdown(m_Socket, SD_BOTH); - #else - int res = shutdown(m_Socket, SHUT_RDWR); - #endif - if (res != 0) - { - LOGWARN("%s: Error shutting down socket %d (%s): %d (%s)", - __FUNCTION__, m_Socket, m_IPString.c_str(), this->GetLastError(), GetLastErrorString().c_str() - ); - } -} - - - - -int cSocket::GetLastError() -{ -#ifdef _WIN32 - return WSAGetLastError(); -#else - return errno; -#endif -} - - - - - -bool cSocket::SetReuseAddress(void) -{ - #if defined(_WIN32) || defined(ANDROID_NDK) - char yes = 1; - #else - int yes = 1; - #endif - return (setsockopt(m_Socket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == 0); -} - - - - - -int cSocket::WSAStartup(void) -{ -#ifdef _WIN32 - WSADATA wsaData; - memset(&wsaData, 0, sizeof(wsaData)); - return ::WSAStartup(MAKEWORD(2, 2), &wsaData); -#else - return 0; -#endif -} - - - - - -cSocket cSocket::CreateSocket(eFamily a_Family) -{ - return socket((int)a_Family, SOCK_STREAM, 0); -} - - - - - -bool cSocket::BindToAnyIPv4(unsigned short a_Port) -{ - sockaddr_in local; - memset(&local, 0, sizeof(local)); - - local.sin_family = AF_INET; - local.sin_port = htons((u_short)a_Port); - - return (bind(m_Socket, (sockaddr *)&local, sizeof(local)) == 0); -} - - - - - -bool cSocket::BindToAnyIPv6(unsigned short a_Port) -{ - sockaddr_in6 local; - memset(&local, 0, sizeof(local)); - - local.sin6_family = AF_INET6; - local.sin6_port = htons((u_short)a_Port); - - return (bind(m_Socket, (sockaddr *)&local, sizeof(local)) == 0); -} - - - - - -bool cSocket::BindToLocalhostIPv4(unsigned short a_Port) -{ - sockaddr_in local; - memset(&local, 0, sizeof(local)); - - local.sin_family = AF_INET;; - local.sin_addr.s_addr = htonl(INADDR_LOOPBACK); - local.sin_port = htons((u_short)a_Port); - - return (bind(m_Socket, (sockaddr*)&local, sizeof(local)) == 0); -} - - - - - -bool cSocket::Listen(int a_Backlog) -{ - return (listen(m_Socket, a_Backlog) == 0); -} - - - - - -cSocket cSocket::AcceptIPv4(void) -{ - sockaddr_in from; - socklen_t fromlen = sizeof(from); - - cSocket SClient = accept(m_Socket, (sockaddr *)&from, &fromlen); - - if (SClient.IsValid() && (from.sin_addr.s_addr != 0)) // Get IP in string form - { - SClient.m_IPString = inet_ntoa(from.sin_addr); - } - return SClient; -} - - - - - -cSocket cSocket::AcceptIPv6(void) -{ - sockaddr_in6 from; - socklen_t fromlen = sizeof(from); - - cSocket SClient = accept(m_Socket, (sockaddr *)&from, &fromlen); - - // Get IP in string form: - if (SClient.IsValid()) - { - #if defined(_WIN32) - // Windows XP doesn't have inet_ntop, so we need to improvise. And MSVC has different headers than GCC - #ifdef _MSC_VER - // MSVC version - Printf(SClient.m_IPString, "%x:%x:%x:%x:%x:%x:%x:%x", - from.sin6_addr.u.Word[0], - from.sin6_addr.u.Word[1], - from.sin6_addr.u.Word[2], - from.sin6_addr.u.Word[3], - from.sin6_addr.u.Word[4], - from.sin6_addr.u.Word[5], - from.sin6_addr.u.Word[6], - from.sin6_addr.u.Word[7] - ); - #else // _MSC_VER - // MinGW - Printf(SClient.m_IPString, "%x:%x:%x:%x:%x:%x:%x:%x", - from.sin6_addr.s6_addr16[0], - from.sin6_addr.s6_addr16[1], - from.sin6_addr.s6_addr16[2], - from.sin6_addr.s6_addr16[3], - from.sin6_addr.s6_addr16[4], - from.sin6_addr.s6_addr16[5], - from.sin6_addr.s6_addr16[6], - from.sin6_addr.s6_addr16[7] - ); - #endif // else _MSC_VER - #else - char buffer[INET6_ADDRSTRLEN]; - inet_ntop(AF_INET6, &(from.sin6_addr), buffer, sizeof(buffer)); - SClient.m_IPString.assign(buffer); - #endif // _WIN32 - } - return SClient; -} - - - - - -bool cSocket::ConnectToLocalhostIPv4(unsigned short a_Port) -{ - sockaddr_in server; - server.sin_family = AF_INET; - server.sin_addr.s_addr = htonl(INADDR_LOOPBACK); - server.sin_port = htons(a_Port); - return (connect(m_Socket, (sockaddr *)&server, sizeof(server)) == 0); -} - - - - - -bool cSocket::ConnectIPv4(const AString & a_HostNameOrAddr, unsigned short a_Port) -{ - // First try IP Address string to hostent conversion, because it's faster and local: - unsigned long addr = inet_addr(a_HostNameOrAddr.c_str()); - if (addr == INADDR_NONE) - { - // It is not an IP Address string, but rather a regular hostname, resolve: - hostent * hp = gethostbyname(a_HostNameOrAddr.c_str()); - if (hp == nullptr) - { - LOGWARNING("%s: Could not resolve hostname \"%s\"", __FUNCTION__, a_HostNameOrAddr.c_str()); - CloseSocket(); - return false; - } - memcpy(&addr, hp->h_addr, hp->h_length); - } - - // If the socket is not created yet, create one: - if (!IsValid()) - { - m_Socket = socket((int)IPv4, SOCK_STREAM, 0); - } - - // Connect the socket: - sockaddr_in server; - server.sin_addr.s_addr = addr; - server.sin_family = AF_INET; - server.sin_port = htons((unsigned short)a_Port); - return (connect(m_Socket, (sockaddr *)&server, sizeof(server)) == 0); -} - - - - - -int cSocket::Receive(char * a_Buffer, size_t a_Length, unsigned int a_Flags) -{ - return recv(m_Socket, a_Buffer, (int)a_Length, a_Flags); -} - - - - - -int cSocket::Send(const char * a_Buffer, size_t a_Length) -{ - return send(m_Socket, a_Buffer, (int)a_Length, MSG_NOSIGNAL); -} - - - - - -unsigned short cSocket::GetPort(void) const -{ - ASSERT(IsValid()); - - sockaddr_in Addr; - socklen_t AddrSize = sizeof(Addr); - if (getsockname(m_Socket, (sockaddr *)&Addr, &AddrSize) != 0) - { - return 0; - } - return ntohs(Addr.sin_port); -} - - - - - -void cSocket::SetNonBlocking(void) -{ - #ifdef _WIN32 - u_long NonBlocking = 1; - int res = ioctlsocket(m_Socket, FIONBIO, &NonBlocking); - #else - int NonBlocking = 1; - int res = ioctl(m_Socket, FIONBIO, (char *)&NonBlocking); - #endif - if (res != 0) - { - LOGERROR("Cannot set socket to non-blocking. This would make the server deadlock later on, aborting.\nErr: %d, %d, %s", - res, GetLastError(), GetLastErrorString().c_str() - ); - abort(); - } -} - - - - diff --git a/src/OSSupport/Socket.h b/src/OSSupport/Socket.h deleted file mode 100644 index 9ec8c1111..000000000 --- a/src/OSSupport/Socket.h +++ /dev/null @@ -1,125 +0,0 @@ - -#pragma once - - - - - -// Windows and MacOSX don't have the MSG_NOSIGNAL flag -#if ( \ - defined(_WIN32) || \ - (defined(__APPLE__) && defined(__MACH__)) \ -) - #define MSG_NOSIGNAL (0) -#endif - - -#include "Errors.h" - - -class cSocket -{ -public: - enum eFamily - { - IPv4 = AF_INET, - IPv6 = AF_INET6, - - #ifdef _WIN32 - ErrWouldBlock = WSAEWOULDBLOCK, - #else - ErrWouldBlock = EWOULDBLOCK, - #endif - } ; - -#ifdef _WIN32 - typedef SOCKET xSocket; -#else - typedef int xSocket; - static const int INVALID_SOCKET = -1; -#endif - - cSocket(void) : m_Socket(INVALID_SOCKET) {} - cSocket(xSocket a_Socket); - - bool IsValid(void) const { return IsValidSocket(m_Socket); } - void CloseSocket(void); - - /** Notifies the socket that we don't expect any more reads nor writes on it. - Most TCPIP implementations use this to send the FIN flag in a packet */ - void ShutdownReadWrite(void); - - operator xSocket(void) const; - xSocket GetSocket(void) const; - - bool operator == (const cSocket & a_Other) {return m_Socket == a_Other.m_Socket; } - - void SetSocket(xSocket a_Socket); - - /// Sets the address-reuse socket flag; returns true on success - bool SetReuseAddress(void); - - /// Initializes the network stack. Returns 0 on success, or another number as an error code. - static int WSAStartup(void); - - static int GetLastError(); - static AString GetLastErrorString(void) - { - return GetOSErrorString(GetLastError()); - } - - /// Creates a new socket of the specified address family - static cSocket CreateSocket(eFamily a_Family); - - inline static bool IsSocketError(int a_ReturnedValue) - { - #ifdef _WIN32 - return ((a_ReturnedValue == SOCKET_ERROR) || (a_ReturnedValue == 0)); - #else - return (a_ReturnedValue <= 0); - #endif - } - - static bool IsValidSocket(xSocket a_Socket); - - static const unsigned short ANY_PORT = 0; // When given to Bind() functions, they will find a free port - static const int DEFAULT_BACKLOG = 10; - - /// Binds to the specified port on "any" interface (0.0.0.0). Returns true if successful. - bool BindToAnyIPv4(unsigned short a_Port); - - /// Binds to the specified port on "any" interface (::/128). Returns true if successful. - bool BindToAnyIPv6(unsigned short a_Port); - - /// Binds to the specified port on localhost interface (127.0.0.1) through IPv4. Returns true if successful. - bool BindToLocalhostIPv4(unsigned short a_Port); - - /// Sets the socket to listen for incoming connections. Returns true if successful. - bool Listen(int a_Backlog = DEFAULT_BACKLOG); - - /// Accepts an IPv4 incoming connection. Blocks if none available. - cSocket AcceptIPv4(void); - - /// Accepts an IPv6 incoming connection. Blocks if none available. - cSocket AcceptIPv6(void); - - /// Connects to a localhost socket on the specified port using IPv4; returns true if successful. - bool ConnectToLocalhostIPv4(unsigned short a_Port); - - /// Connects to the specified host or string IP address and port, using IPv4. Returns true if successful. - bool ConnectIPv4(const AString & a_HostNameOrAddr, unsigned short a_Port); - - int Receive(char * a_Buffer, size_t a_Length, unsigned int a_Flags); - int Send (const char * a_Buffer, size_t a_Length); - - unsigned short GetPort(void) const; // Returns 0 on failure - - const AString & GetIPString(void) const { return m_IPString; } - - /** Sets the socket into non-blocking mode */ - void SetNonBlocking(void); - -private: - xSocket m_Socket; - AString m_IPString; -}; |