OpenTTD Source 15.0-beta2
network_content.cpp File Reference

Content sending/receiving part of the network protocol. More...

#include "../stdafx.h"
#include "../rev.h"
#include "../ai/ai.hpp"
#include "../game/game.hpp"
#include "../window_func.h"
#include "../error.h"
#include "../fileio_func.h"
#include "../base_media_base.h"
#include "../base_media_graphics.h"
#include "../base_media_music.h"
#include "../base_media_sounds.h"
#include "../settings_type.h"
#include "../strings_func.h"
#include "../timer/timer.h"
#include "../timer/timer_window.h"
#include "network_content.h"
#include "table/strings.h"
#include <zlib.h>
#include "../safeguards.h"

Go to the source code of this file.

Data Structures

class  NetworkContentConnecter
 Connect to the content server. More...
 

Macros

#define check_not_null(p)   { if ((p) == nullptr) { this->OnFailure(); return; } }
 
#define check_and_terminate(p)   { check_not_null(p); *(p) = '\0'; }
 

Typedefs

using HasContentProc = bool(const ContentInfo &ci, bool md5sum)
 Check whether a function piece of content is locally known.
 

Functions

bool HasScenario (const ContentInfo &ci, bool md5sum)
 Check whether we've got a given scenario based on its unique ID.
 
static bool HasGRFConfig (const ContentInfo &ci, bool md5sum)
 Wrapper function for the HasProc.
 
static HasContentProc * GetHasContentProcforContentType (ContentType type)
 Get the has-content check function for the given content type.
 
static std::string GetFullFilename (const ContentInfo &ci, bool compressed)
 Determine the full filename of a piece of content information.
 
static bool GunzipFile (const ContentInfo &ci)
 Gunzip a given file and remove the .gz if successful.
 
static ssize_t TransferOutFWrite (std::optional< FileHandle > &file, const char *buffer, size_t amount)
 Simple wrapper around fwrite to be able to pass it to Packet's TransferOut.
 

Variables

ClientNetworkContentSocketHandler _network_content_client
 The client we use to connect to the server.
 
static constexpr auto CONTENT_QUEUE_TIMEOUT = std::chrono::milliseconds(100)
 Timeout after queueing content for it to try to be requested.
 
static TimeoutTimer< TimerWindow > _request_queue_timeout
 

Detailed Description

Content sending/receiving part of the network protocol.

Definition in file network_content.cpp.

Typedef Documentation

◆ HasContentProc

using HasContentProc = bool(const ContentInfo &ci, bool md5sum)

Check whether a function piece of content is locally known.

Matches on the unique ID and possibly the MD5 checksum.

Parameters
cithe content info to search for
md5sumalso match the MD5 checksum?
Returns
true iff it's known

Definition at line 61 of file network_content.cpp.

Function Documentation

◆ GetFullFilename()

static std::string GetFullFilename ( const ContentInfo &  ci,
bool  compressed 
)
static

Determine the full filename of a piece of content information.

Parameters
cithe information to get the filename from
compressedshould the filename end with .gz?
Returns
a statically allocated buffer with the filename or nullptr when no filename could be made.

Definition at line 370 of file network_content.cpp.

References ContentInfo::filename, GetContentInfoSubDir(), NO_DIRECTORY, SP_AUTODOWNLOAD_DIR, and ContentInfo::type.

Referenced by ClientNetworkContentSocketHandler::AfterDownload(), ClientNetworkContentSocketHandler::BeforeDownload(), and GunzipFile().

◆ GetHasContentProcforContentType()

◆ GunzipFile()

static bool GunzipFile ( const ContentInfo &  ci)
static

Gunzip a given file and remove the .gz if successful.

Parameters
cicontainer with filename
Returns
true if the gunzip completed

Definition at line 387 of file network_content.cpp.

References GetFullFilename(), and FileHandle::Open().

Referenced by ClientNetworkContentSocketHandler::AfterDownload().

◆ HasGRFConfig()

static bool HasGRFConfig ( const ContentInfo &  ci,
bool  md5sum 
)
static

Wrapper function for the HasProc.

Definition at line 49 of file network_content.cpp.

References FGCM_ANY, FGCM_EXACT, FindGRFConfig(), ContentInfo::md5sum, and ContentInfo::unique_id.

Referenced by GetHasContentProcforContentType().

◆ HasScenario()

bool HasScenario ( const ContentInfo &  ci,
bool  md5sum 
)
extern

Check whether we've got a given scenario based on its unique ID.

Parameters
ciThe content info to compare it to.
md5sumWhether to look at the md5sum or the id.
Returns
True iff we've got the scenario.

Definition at line 703 of file fios.cpp.

References FindScenario().

Referenced by GetHasContentProcforContentType().

◆ TransferOutFWrite()

static ssize_t TransferOutFWrite ( std::optional< FileHandle > &  file,
const char *  buffer,
size_t  amount 
)
inlinestatic

Simple wrapper around fwrite to be able to pass it to Packet's TransferOut.

Parameters
fileThe file to write data to.
bufferThe buffer to write to the file.
amountThe number of bytes to write.
Returns
The number of bytes that were written.

Definition at line 456 of file network_content.cpp.

Referenced by ClientNetworkContentSocketHandler::Receive_SERVER_CONTENT().

Variable Documentation

◆ _network_content_client

◆ _request_queue_timeout

TimeoutTimer<TimerWindow> _request_queue_timeout
static
Initial value:
}}
void RequestQueuedContentInfo()
Send a content request for queued content info download.
ClientNetworkContentSocketHandler _network_content_client
The client we use to connect to the server.
static constexpr auto CONTENT_QUEUE_TIMEOUT
Timeout after queueing content for it to try to be requested.

Definition at line 804 of file network_content.cpp.

◆ CONTENT_QUEUE_TIMEOUT

constexpr auto CONTENT_QUEUE_TIMEOUT = std::chrono::milliseconds(100)
staticconstexpr

Timeout after queueing content for it to try to be requested.

Definition at line 802 of file network_content.cpp.

Referenced by ClientNetworkContentSocketHandler::RequestQueuedContentInfo().