Merge branch 'master' into jgrpp-beta
# Conflicts: # src/lang/spanish.txt # src/network/core/tcp_content_type.h # src/network/network_content.cpp # src/saveload/cheat_sl.cpp # src/saveload/saveload.cpp # src/saveload/saveload.h # src/saveload/station_sl.cpp # src/saveload/vehicle_sl.cpp # src/settings.cpp # src/settings_internal.h # src/table/settings.h.preamble # src/table/settings/company_settings.ini # src/table/settings/currency_settings.ini # src/table/settings/gameopt_settings.ini # src/table/settings/misc_settings.ini # src/table/settings/settings.ini # src/table/settings/win32_settings.ini # src/table/settings/window_settings.ini
This commit is contained in:
		@@ -67,6 +67,12 @@ static const uint NETWORK_CLIENT_NAME_LENGTH      =   25;         ///< The maxim
 | 
			
		||||
static const uint NETWORK_RCONCOMMAND_LENGTH      =  500;         ///< The maximum length of a rconsole command, in bytes including '\0'
 | 
			
		||||
static const uint NETWORK_GAMESCRIPT_JSON_LENGTH  = COMPAT_MTU-3; ///< The maximum length of a gamescript json string, in bytes including '\0'. Must not be longer than COMPAT_MTU including header (3 bytes)
 | 
			
		||||
static const uint NETWORK_CHAT_LENGTH             =  900;         ///< The maximum length of a chat message, in bytes including '\0'
 | 
			
		||||
static const uint NETWORK_CONTENT_FILENAME_LENGTH =   48;         ///< The maximum length of a content's filename, in bytes including '\0'.
 | 
			
		||||
static const uint NETWORK_CONTENT_NAME_LENGTH     =   64;         ///< The maximum length of a content's name, in bytes including '\0'.
 | 
			
		||||
static const uint NETWORK_CONTENT_VERSION_LENGTH  =   16;         ///< The maximum length of a content's version, in bytes including '\0'.
 | 
			
		||||
static const uint NETWORK_CONTENT_URL_LENGTH      =   96;         ///< The maximum length of a content's url, in bytes including '\0'.
 | 
			
		||||
static const uint NETWORK_CONTENT_DESC_LENGTH     =  512;         ///< The maximum length of a content's description, in bytes including '\0'.
 | 
			
		||||
static const uint NETWORK_CONTENT_TAG_LENGTH      =   32;         ///< The maximum length of a content's tag, in bytes including '\0'.
 | 
			
		||||
 | 
			
		||||
static const uint NETWORK_GRF_NAME_LENGTH         =   80;         ///< Maximum length of the name of a GRF
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -373,37 +373,6 @@ uint64 Packet::Recv_uint64()
 | 
			
		||||
	return n;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Reads a string till it finds a '\0' in the stream.
 | 
			
		||||
 * @param buffer The buffer to put the data into.
 | 
			
		||||
 * @param size   The size of the buffer.
 | 
			
		||||
 * @param settings The string validation settings.
 | 
			
		||||
 */
 | 
			
		||||
void Packet::Recv_string(char *buffer, size_t size, StringValidationSettings settings)
 | 
			
		||||
{
 | 
			
		||||
	char *bufp = buffer;
 | 
			
		||||
	const char *last = buffer + size - 1;
 | 
			
		||||
 | 
			
		||||
	/* Don't allow reading from a closed socket */
 | 
			
		||||
	if (cs->HasClientQuit()) return;
 | 
			
		||||
 | 
			
		||||
	size_t pos = this->pos;
 | 
			
		||||
	while (--size > 0 && pos < this->Size() && (*buffer++ = this->buffer[pos++]) != '\0') {}
 | 
			
		||||
 | 
			
		||||
	if (size == 0 || pos == this->Size()) {
 | 
			
		||||
		*buffer = '\0';
 | 
			
		||||
		/* If size was sooner to zero then the string in the stream
 | 
			
		||||
		 *  skip till the \0, so than packet can be read out correctly for the rest */
 | 
			
		||||
		while (pos < this->Size() && this->buffer[pos] != '\0') pos++;
 | 
			
		||||
		pos++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	assert(pos <= std::numeric_limits<PacketSize>::max());
 | 
			
		||||
	this->pos = static_cast<PacketSize>(pos);
 | 
			
		||||
 | 
			
		||||
	StrMakeValidInPlace(bufp, last, settings);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Reads characters (bytes) from the packet until it finds a '\0', or reaches a
 | 
			
		||||
 * maximum of \c length characters.
 | 
			
		||||
 
 | 
			
		||||
@@ -87,7 +87,6 @@ public:
 | 
			
		||||
	uint16 Recv_uint16();
 | 
			
		||||
	uint32 Recv_uint32();
 | 
			
		||||
	uint64 Recv_uint64();
 | 
			
		||||
	void   Recv_string(char *buffer, size_t size, StringValidationSettings settings = SVS_REPLACE_WITH_QUESTION_MARK);
 | 
			
		||||
	std::string Recv_string(size_t length, StringValidationSettings settings = SVS_REPLACE_WITH_QUESTION_MARK);
 | 
			
		||||
	void   Recv_string(std::string &buffer, StringValidationSettings settings = SVS_REPLACE_WITH_QUESTION_MARK);
 | 
			
		||||
	void   Recv_binary(char *buffer, size_t size);
 | 
			
		||||
 
 | 
			
		||||
@@ -20,50 +20,6 @@
 | 
			
		||||
 | 
			
		||||
#include "../../safeguards.h"
 | 
			
		||||
 | 
			
		||||
/** Clear everything in the struct */
 | 
			
		||||
ContentInfo::ContentInfo()
 | 
			
		||||
{
 | 
			
		||||
	memset(this, 0, sizeof(*this));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Free everything allocated */
 | 
			
		||||
ContentInfo::~ContentInfo()
 | 
			
		||||
{
 | 
			
		||||
	free(this->dependencies);
 | 
			
		||||
	free(this->tags);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Copy data from other #ContentInfo and take ownership of allocated stuff.
 | 
			
		||||
 * @param other Source to copy from. #dependencies and #tags will be NULLed.
 | 
			
		||||
 */
 | 
			
		||||
void ContentInfo::TransferFrom(ContentInfo *other)
 | 
			
		||||
{
 | 
			
		||||
	if (other != this) {
 | 
			
		||||
		free(this->dependencies);
 | 
			
		||||
		free(this->tags);
 | 
			
		||||
		memcpy(this, other, sizeof(ContentInfo));
 | 
			
		||||
		other->dependencies = nullptr;
 | 
			
		||||
		other->tags = nullptr;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get the size of the data as send over the network.
 | 
			
		||||
 * @return the size.
 | 
			
		||||
 */
 | 
			
		||||
size_t ContentInfo::Size() const
 | 
			
		||||
{
 | 
			
		||||
	size_t len = 0;
 | 
			
		||||
	for (uint i = 0; i < this->tag_count; i++) len += strlen(this->tags[i]) + 1;
 | 
			
		||||
 | 
			
		||||
	/* The size is never larger than the content info size plus the size of the
 | 
			
		||||
	 * tags and dependencies */
 | 
			
		||||
	return sizeof(*this) +
 | 
			
		||||
			sizeof(this->dependency_count) +
 | 
			
		||||
			sizeof(*this->dependencies) * this->dependency_count;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Is the state either selected or autoselected?
 | 
			
		||||
 * @return true iff that's the case
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,7 @@ enum ContentType {
 | 
			
		||||
	CONTENT_TYPE_GAME          = 9, ///< The content consists of a game script
 | 
			
		||||
	CONTENT_TYPE_GAME_LIBRARY  = 10, ///< The content consists of a GS library
 | 
			
		||||
	CONTENT_TYPE_END,               ///< Helper to mark the end of the types
 | 
			
		||||
	INVALID_CONTENT_TYPE       = 0xFF, ///< Invalid/uninitialized content
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/** Enum with all types of TCP content packets. The order MUST not be changed **/
 | 
			
		||||
@@ -57,29 +58,21 @@ struct ContentInfo {
 | 
			
		||||
		INVALID,        ///< The content's invalid
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	ContentType type;        ///< Type of content
 | 
			
		||||
	ContentID id;            ///< Unique (server side) ID for the content
 | 
			
		||||
	uint32 filesize;         ///< Size of the file
 | 
			
		||||
	char filename[48];       ///< Filename (for the .tar.gz; only valid on download)
 | 
			
		||||
	char name[64];           ///< Name of the content
 | 
			
		||||
	char version[16];        ///< Version of the content
 | 
			
		||||
	char url[96];            ///< URL related to the content
 | 
			
		||||
	char description[512];   ///< Description of the content
 | 
			
		||||
	uint32 unique_id;        ///< Unique ID; either GRF ID or shortname
 | 
			
		||||
	byte md5sum[16];         ///< The MD5 checksum
 | 
			
		||||
	uint8 dependency_count;  ///< Number of dependencies
 | 
			
		||||
	ContentID *dependencies; ///< Malloced array of dependencies (unique server side ids)
 | 
			
		||||
	uint8 tag_count;         ///< Number of tags
 | 
			
		||||
	char (*tags)[32];        ///< Malloced array of tags (strings)
 | 
			
		||||
	State state;             ///< Whether the content info is selected (for download)
 | 
			
		||||
	bool upgrade;            ///< This item is an upgrade
 | 
			
		||||
	ContentType type = INVALID_CONTENT_TYPE; ///< Type of content
 | 
			
		||||
	ContentID id = INVALID_CONTENT_ID;       ///< Unique (server side) ID for the content
 | 
			
		||||
	uint32 filesize = 0;                     ///< Size of the file
 | 
			
		||||
	std::string filename;                    ///< Filename (for the .tar.gz; only valid on download)
 | 
			
		||||
	std::string name;                        ///< Name of the content
 | 
			
		||||
	std::string version;                     ///< Version of the content
 | 
			
		||||
	std::string url;                         ///< URL related to the content
 | 
			
		||||
	std::string description;                 ///< Description of the content
 | 
			
		||||
	uint32 unique_id = 0;                    ///< Unique ID; either GRF ID or shortname
 | 
			
		||||
	byte md5sum[16] = {0};                   ///< The MD5 checksum
 | 
			
		||||
	std::vector<ContentID> dependencies;     ///< The dependencies (unique server side ids)
 | 
			
		||||
	StringList tags;                         ///< Tags associated with the content
 | 
			
		||||
	State state = State::UNSELECTED;         ///< Whether the content info is selected (for download)
 | 
			
		||||
	bool upgrade = false;                    ///< This item is an upgrade
 | 
			
		||||
 | 
			
		||||
	ContentInfo();
 | 
			
		||||
	~ContentInfo();
 | 
			
		||||
 | 
			
		||||
	void TransferFrom(ContentInfo *other);
 | 
			
		||||
 | 
			
		||||
	size_t Size() const;
 | 
			
		||||
	bool IsSelected() const;
 | 
			
		||||
	bool IsValid() const;
 | 
			
		||||
	const char *GetTextfile(TextfileType type) const;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user