OpenTTD Source: ClientNetworkContentSocketHandler Class Reference

OpenTTD Source 14.0-RC3

Public Member Functions | Static Public Attributes | Protected Types | Protected Member Functions | Protected Attributes | Friends
ClientNetworkContentSocketHandler Class Reference

Socket handler for the content server connection. More...

`#include <network_content.h>`

Inheritance diagram for ClientNetworkContentSocketHandler:

## Public Member Functions
| ClientNetworkContentSocketHandler ()
| Create a socket handler to handle the connection.
| ~ClientNetworkContentSocketHandler ()
| Clear up the mess ;)
void | Connect ()
| Connect with the content server.
void | SendReceive ()
| Check whether we received/can send some data from/to the content server and when that's the case handle it appropriately.
NetworkRecvStatus | CloseConnection (bool error=true) override
| Disconnect from the content server.
void | Cancel ()
| Cancel the current download.
void | RequestContentList (ContentType type)
| Request the content list for the given type. More...
void | RequestContentList (uint count, const ContentID *content_ids)
| Request the content list for a given number of content IDs. More...
void | RequestContentList (ContentVector *cv, bool send_md5sum=true)
| Request the content list for a list of content. More...
void | DownloadSelectedContent (uint &files, uint &bytes, bool fallback=false)
| Actually begin downloading the content we selected. More...
void | Select (ContentID cid)
| Select a specific content id. More...
void | Unselect (ContentID cid)
| Unselect a specific content id. More...
void | SelectAll ()
| Select everything we can select.
void | SelectUpgrade ()
| Select everything that's an update for something we've got.
void | UnselectAll ()
| Unselect everything that we've not downloaded so far.
void | ToggleSelectedState (const ContentInfo *ci)
| Toggle the state of a content info and check its dependencies.
void | ReverseLookupDependency (ConstContentVector &parents, const ContentInfo *child) const
| Reverse lookup the dependencies of (direct) parents over a given child. More...
void | ReverseLookupTreeDependency (ConstContentVector &tree, const ContentInfo *child) const
| Reverse lookup the dependencies of all parents over a given child. More...
void | CheckDependencyState (ContentInfo *ci)
| Check the dependencies (recursively) of this content info. More...
uint | Length () const
| Get the number of content items we know locally.
ConstContentIterator | Begin () const
| Get the begin of the content inf iterator.
ConstContentIterator | Get (uint32_t index) const
| Get the nth position of the content inf iterator.
ConstContentIterator | End () const
| Get the end of the content inf iterator.
void | Clear ()
| Clear all downloaded content information.
void | AddCallback (ContentCallback *cb)
| Add a callback to this class.
void | RemoveCallback (ContentCallback *cb)
| Remove a callback.
Public Member Functions inherited from NetworkContentSocketHandler
| NetworkContentSocketHandler (SOCKET s=INVALID_SOCKET)
| Create a new cs socket handler for a given cs. More...
virtual | ~NetworkContentSocketHandler ()
| On destructing of this class, the socket needs to be closed.
bool | ReceivePackets ()
| Receive a packet at TCP level. More...
Public Member Functions inherited from NetworkTCPSocketHandler
bool | IsConnected () const
| Whether this socket is currently bound to a socket. More...
void | CloseSocket ()
| Close the actual socket of the connection. More...
virtual void | SendPacket (std::unique_ptr< Packet > &&packet)
| This function puts the packet in the send-queue and it is send as soon as possible. More...
SendPacketsState | SendPackets (bool closing_down=false)
| Sends all the buffered packets out for this client. More...
virtual std::unique_ptr< Packet > | ReceivePacket ()
| Receives a packet for the given client. More...
bool | CanSendReceive ()
| Check whether this socket can send or receive something. More...
bool | HasSendQueue ()
| Whether there is something pending in the send queue. More...
| NetworkTCPSocketHandler (SOCKET s=INVALID_SOCKET)
| Construct a socket handler for a TCP connection. More...
Public Member Functions inherited from NetworkSocketHandler
| NetworkSocketHandler ()
| Create a new unbound socket.
virtual | ~NetworkSocketHandler ()=default
| Close the socket when destructing the socket handler.
void | MarkClosed ()
| Mark the connection as closed. More...
bool | HasClientQuit () const
| Whether the current client connected to the socket has quit. More...
void | Reopen ()
| Reopen the socket so we can send/receive stuff again.

## Static Public Attributes
static constexpr std::chrono::seconds | IDLE_TIMEOUT = std::chrono::seconds(60)
| The idle timeout; when to close the connection because it's idle.

## Protected Types
typedef std::vector< ContentID > | ContentIDList
| List of content IDs to (possibly) select.

## Protected Member Functions
bool | Receive_SERVER_INFO (Packet &p) override
| Server sending list of content info: byte type (invalid ID == does not exist) uint32_t id uint32_t file_size string name (max 32 characters) string version (max 16 characters) uint32_t unique id uint8_t md5sum (16 bytes) uint8_t dependency count uint32_t unique id of dependency (dependency count times) uint8_t tag count string tag (max 32 characters for tag count times) More...
bool | Receive_SERVER_CONTENT (Packet &p) override
| Server sending list of content info: uint32_t unique id uint32_t file size (0 == does not exist) string file name (max 48 characters) After this initial packet, packets with the actual data are send using the same packet type. More...
ContentInfo * | GetContent (ContentID cid) const
| Get the content info based on a ContentID. More...
void | DownloadContentInfo (ContentID cid)
| Download information of a given Content ID if not already tried. More...
void | OnConnect (bool success) override
void | OnDisconnect () override
| Callback for when the connection got disconnected.
void | OnReceiveContentInfo (const ContentInfo *ci) override
void | OnDownloadProgress (const ContentInfo *ci, int bytes) override
void | OnDownloadComplete (ContentID cid) override
void | OnFailure () override
| An error has occurred and the connection has been closed. More...
void | OnReceiveData (std::unique_ptr< char[]> data, size_t length) override
| We're receiving data. More...
bool | IsCancelled () const override
| Check if there is a request to cancel the transfer. More...
bool | BeforeDownload ()
| Handle the opening of the file before downloading. More...
void | AfterDownload ()
| Handle the closing and extracting of a file after downloading it has been done.
void | DownloadSelectedContentHTTP (const ContentIDList &content)
| Initiate downloading the content over HTTP. More...
void | DownloadSelectedContentFallback (const ContentIDList &content)
| Initiate downloading the content over the fallback protocol. More...
Protected Member Functions inherited from NetworkContentSocketHandler
bool | ReceiveInvalidPacket (PacketContentType type)
| Helper for logging receiving invalid packets. More...
virtual bool | Receive_CLIENT_INFO_LIST (Packet &p)
| Client requesting a list of content info: byte type uint32_t openttd version (or 0xFFFFFFFF if using a list) Only if the above value is 0xFFFFFFFF: uint8_t count string branch-name ("vanilla" for upstream OpenTTD) string release version (like "12.0") More...
virtual bool | Receive_CLIENT_INFO_ID (Packet &p)
| Client requesting a list of content info: uint16_t count of ids uint32_t id (count times) More...
virtual bool | Receive_CLIENT_INFO_EXTID (Packet &p)
| Client requesting a list of content info based on an external 'unique' id; GRF ID for NewGRFS, shortname and for base graphics and AIs. More...
virtual bool | Receive_CLIENT_INFO_EXTID_MD5 (Packet &p)
| Client requesting a list of content info based on an external 'unique' id; GRF ID + MD5 checksum for NewGRFS, shortname and xor-ed MD5 checksums for base graphics and AIs. More...
virtual bool | Receive_CLIENT_CONTENT (Packet &p)
| Client requesting the actual content: uint16_t count of unique ids uint32_t unique id (count times) More...
bool | HandlePacket (Packet &p)
| Handle the given packet, i.e. More...

## Protected Attributes
std::vector< ContentCallback * > | callbacks
| Callbacks to notify "the world".
ContentIDList | requested
| ContentIDs we already requested (so we don't do it again)
ContentVector | infos
| All content info we received.
std::unordered_multimap< ContentID, ContentID > | reverse_dependency_map
| Content reverse dependency map.
std::vector< char > | http_response
| The HTTP response to the requests we've been doing.
int | http_response_index
| Where we are, in the response, with handling it.
FILE * | curFile
| Currently downloaded file.
ContentInfo * | curInfo
| Information about the currently downloaded file.
bool | isConnecting
| Whether we're connecting.
bool | isCancelled
| Whether the download has been cancelled.
std::chrono::steady_clock::time_point | lastActivity
| The last time there was network activity.

## Friends
class | NetworkContentConnecter

## Additional Inherited Members
Data Fields inherited from NetworkTCPSocketHandler
SOCKET | sock
| The socket currently connected to.
bool | writable
| Can we write to this socket?
Private Member Functions inherited from ContentCallback
virtual void | OnConnect ([[maybe_unused]] bool success)
| Callback for when the connection has finished. More...
virtual void | OnReceiveContentInfo ([[maybe_unused]] const ContentInfo *ci)
| We received a content info. More...
virtual void | OnDownloadProgress ([[maybe_unused]] const ContentInfo *ci, [[maybe_unused]] int bytes)
| We have progress in the download of a file. More...
virtual void | OnDownloadComplete ([[maybe_unused]] ContentID cid)
| We have finished downloading a file. More...
virtual | ~ContentCallback ()=default
| Silentium.
Private Member Functions inherited from HTTPCallback
virtual | ~HTTPCallback ()=default
| Silentium.

## Detailed Description

Socket handler for the content server connection.

Definition at line 67 of file network_content.h.

## Member Function Documentation

## ◆ BeforeDownload()

bool ClientNetworkContentSocketHandler::BeforeDownload | ( |  | ) |
| protected

Handle the opening of the file before downloading.

Returns
  false on any error.

Definition at line 520 of file network_content.cpp.

References CloseWindowById(), curInfo, ContentInfo::filesize, GetFullFilename(), ContentInfo::IsValid(), ShowErrorMessage(), WC_NETWORK_STATUS_WINDOW, WL_ERROR, and WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD.

Referenced by Receive_SERVER_CONTENT().

## ◆ CheckDependencyState()

void ClientNetworkContentSocketHandler::CheckDependencyState | ( | ContentInfo * | ci | ) |

Check the dependencies (recursively) of this content info.

Parameters

  ci | the content info to check the dependencies of

Definition at line 985 of file network_content.cpp.

References ContentInfo::ALREADY_HERE, ContentInfo::AUTOSELECTED, ContentInfo::dependencies, DownloadContentInfo(), GetContent(), ContentInfo::id, ContentInfo::IsSelected(), ReverseLookupDependency(), ReverseLookupTreeDependency(), ContentInfo::SELECTED, ContentInfo::state, Unselect(), and ContentInfo::UNSELECTED.

Referenced by Receive_SERVER_INFO(), Select(), SelectAll(), SelectUpgrade(), and Unselect().

## ◆ DownloadContentInfo()

void ClientNetworkContentSocketHandler::DownloadContentInfo | ( | ContentID | cid | ) |
| protected

Download information of a given Content ID if not already tried.

Parameters

  cid | the ID to try

Definition at line 847 of file network_content.cpp.

References RequestContentList(), and requested.

Referenced by CheckDependencyState().

## ◆ DownloadSelectedContent()

void ClientNetworkContentSocketHandler::DownloadSelectedContent | ( | uint & | files,
|  | uint & | bytes,
|  | bool | fallback = `false`
| ) |  |

Actually begin downloading the content we selected.

Parameters

  [out] | files | The number of files we are going to download.
  [out] | bytes | The number of bytes we are going to download.
  | fallback | Whether to use the fallback or not.

Definition at line 309 of file network_content.cpp.

References ContentInfo::ALREADY_HERE, and infos.

Referenced by BaseNetworkContentDownloadStatusWindow::BaseNetworkContentDownloadStatusWindow(), and OnFailure().

## ◆ DownloadSelectedContentFallback()

void ClientNetworkContentSocketHandler::DownloadSelectedContentFallback | ( | const ContentIDList & | content | ) |
| protected

Initiate downloading the content over the fallback protocol.

Parameters

  content | The content to download.

Definition at line 355 of file network_content.cpp.

## ◆ DownloadSelectedContentHTTP()

void ClientNetworkContentSocketHandler::DownloadSelectedContentHTTP | ( | const ContentIDList & | content | ) |
| protected

Initiate downloading the content over HTTP.

Parameters

  content | The content to download.

Definition at line 339 of file network_content.cpp.

References NetworkHTTPSocketHandler::Connect(), http_response_index, and NetworkContentMirrorUriString().

## ◆ GetContent()

ContentInfo * ClientNetworkContentSocketHandler::GetContent | ( | ContentID | cid | ) | const
| protected

Get the content info based on a ContentID.

Parameters

  cid | the ContentID to search for

Returns
  the ContentInfo or nullptr if not found

Definition at line 861 of file network_content.cpp.

References infos.

Referenced by CheckDependencyState(), ReverseLookupDependency(), Select(), and Unselect().

## ◆ IsCancelled()

bool ClientNetworkContentSocketHandler::IsCancelled | ( |  | ) | const
| overrideprotectedvirtual

Check if there is a request to cancel the transfer.

Returns
  true iff the connection is cancelled.

Note
  Cancellations are never instant, and can take a bit of time to be processed. The object needs to remain valid until the OnFailure() callback is called.

Implements HTTPCallback.

Definition at line 578 of file network_content.cpp.

References isCancelled.

## ◆ OnFailure()

void ClientNetworkContentSocketHandler::OnFailure | ( |  | ) |
| overrideprotectedvirtual

An error has occurred and the connection has been closed.

Note
  HTTP socket handler is closed/freed.

Implements HTTPCallback.

Definition at line 584 of file network_content.cpp.

References curFile, curInfo, DownloadSelectedContent(), http_response, http_response_index, and isCancelled.

Referenced by OnReceiveData().

## ◆ OnReceiveData()

void ClientNetworkContentSocketHandler::OnReceiveData | ( | std::unique_ptr< char[]> | data,
|  | size_t | length
| ) |  |
| overrideprotectedvirtual

We're receiving data.

Parameters

  data | the received data, nullptr when all data has been received.
  length | the amount of received data, 0 when all data has been received.

Note
  When nullptr is sent the HTTP socket handler is closed/freed.

Check p for not being null and return calling OnFailure if that's not the case.

Check p for not being null and then terminate, or return calling OnFailure.

Implements HTTPCallback.

Definition at line 605 of file network_content.cpp.

References AfterDownload(), curFile, curInfo, http_response, http_response_index, and OnFailure().

## ◆ Receive_SERVER_CONTENT()

bool ClientNetworkContentSocketHandler::Receive_SERVER_CONTENT | ( | Packet & | p | ) |
| overrideprotectedvirtual

Server sending list of content info: uint32_t unique id uint32_t file size (0 == does not exist) string file name (max 48 characters) After this initial packet, packets with the actual data are send using the same packet type.

Parameters

  p | The packet that was just received.

Returns
  True upon success, otherwise false.

Reimplemented from NetworkContentSocketHandler.

Definition at line 480 of file network_content.cpp.

References AfterDownload(), BeforeDownload(), CloseConnection(), CloseWindowById(), curFile, curInfo, ContentInfo::filename, ContentInfo::filesize, ContentInfo::id, NETWORK_CONTENT_FILENAME_LENGTH, Packet::Recv_string(), Packet::Recv_uint32(), Packet::Recv_uint8(), Packet::RemainingBytesToTransfer(), ShowErrorMessage(), Packet::TransferOut(), TransferOutFWrite(), ContentInfo::type, WC_NETWORK_STATUS_WINDOW, WL_ERROR, and WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD.

## ◆ Receive_SERVER_INFO()

bool ClientNetworkContentSocketHandler::Receive_SERVER_INFO | ( | Packet & | p | ) |
| overrideprotectedvirtual

Server sending list of content info: byte type (invalid ID == does not exist) uint32_t id uint32_t file_size string name (max 32 characters) string version (max 16 characters) uint32_t unique id uint8_t md5sum (16 bytes) uint8_t dependency count uint32_t unique id of dependency (dependency count times) uint8_t tag count string tag (max 32 characters for tag count times)

Parameters

  p | The packet that was just received.

Returns
  True upon success, otherwise false.

Reimplemented from NetworkContentSocketHandler.

Definition at line 52 of file network_content.cpp.

References ContentInfo::ALREADY_HERE, CheckDependencyState(), CloseConnection(), CONTENT_TYPE_AI, CONTENT_TYPE_AI_LIBRARY, CONTENT_TYPE_BASE_GRAPHICS, CONTENT_TYPE_BASE_MUSIC, CONTENT_TYPE_BASE_SOUNDS, CONTENT_TYPE_GAME, CONTENT_TYPE_GAME_LIBRARY, CONTENT_TYPE_HEIGHTMAP, CONTENT_TYPE_NEWGRF, CONTENT_TYPE_SCENARIO, ContentInfo::dependencies, ContentInfo::description, ContentInfo::DOES_NOT_EXIST, ContentInfo::filesize, AI::HasAI(), Game::HasGame(), HasGRFConfig(), HasScenario(), BaseMedia< SoundsSet >::HasSet(), BaseMedia< GraphicsSet >::HasSet(), BaseMedia< MusicSet >::HasSet(), ContentInfo::id, infos, ContentInfo::IsValid(), ContentInfo::md5sum, ContentInfo::name, NETWORK_CONTENT_DESC_LENGTH, NETWORK_CONTENT_NAME_LENGTH, NETWORK_CONTENT_TAG_LENGTH, NETWORK_CONTENT_URL_LENGTH, NETWORK_CONTENT_VERSION_LENGTH, Packet::Recv_string(), Packet::Recv_uint32(), Packet::Recv_uint8(), reverse_dependency_map, ReverseLookupTreeDependency(), ContentInfo::state, SVS_ALLOW_NEWLINE, SVS_REPLACE_WITH_QUESTION_MARK, ContentInfo::tags, ContentInfo::type, ContentInfo::unique_id, ContentInfo::UNSELECTED, ContentInfo::upgrade, ContentInfo::url, and ContentInfo::version.

## ◆ RequestContentList() [1/3]

void ClientNetworkContentSocketHandler::RequestContentList | ( | ContentType | type | ) |

Request the content list for the given type.

Parameters

  type | The content type to request the list for.

Definition at line 189 of file network_content.cpp.

References Connect(), CONTENT_TYPE_AI, CONTENT_TYPE_AI_LIBRARY, CONTENT_TYPE_BASE_GRAPHICS, CONTENT_TYPE_BASE_MUSIC, CONTENT_TYPE_BASE_SOUNDS, CONTENT_TYPE_END, CONTENT_TYPE_GAME, CONTENT_TYPE_GAME_LIBRARY, CONTENT_TYPE_HEIGHTMAP, CONTENT_TYPE_NEWGRF, CONTENT_TYPE_SCENARIO, and PACKET_CONTENT_CLIENT_INFO_LIST.

Referenced by DownloadContentInfo(), and ShowNetworkContentListWindow().

## ◆ RequestContentList() [2/3]

void ClientNetworkContentSocketHandler::RequestContentList | ( | ContentVector * | cv,
|  | bool | send_md5sum = `true`
| ) |  |

Request the content list for a list of content.

Parameters

  cv | List with unique IDs and MD5 checksums.
  send_md5sum | Whether we want a MD5 checksum matched set of files or not.

Definition at line 261 of file network_content.cpp.

References Connect(), infos, PACKET_CONTENT_CLIENT_INFO_EXTID, PACKET_CONTENT_CLIENT_INFO_EXTID_MD5, NetworkTCPSocketHandler::SendPacket(), and TCP_MTU.

## ◆ RequestContentList() [3/3]

void ClientNetworkContentSocketHandler::RequestContentList | ( | uint | count,
|  | const ContentID * | content_ids
| ) |  |

Request the content list for a given number of content IDs.

Parameters

  count | The number of IDs to request.
  content_ids | The unique identifiers of the content to request information about.

Definition at line 232 of file network_content.cpp.

References Connect(), and TCP_MTU.

## ◆ ReverseLookupDependency()

void ClientNetworkContentSocketHandler::ReverseLookupDependency | ( | ConstContentVector & | parents,
|  | const ContentInfo * | child
| ) |  | const

Reverse lookup the dependencies of (direct) parents over a given child.

Parameters

  parents | list to store all parents in (is not cleared)
  child | the child to search the parents' dependencies for

Definition at line 949 of file network_content.cpp.

References GetContent(), ContentInfo::id, and reverse_dependency_map.

Referenced by CheckDependencyState(), and ReverseLookupTreeDependency().

## ◆ ReverseLookupTreeDependency()

void ClientNetworkContentSocketHandler::ReverseLookupTreeDependency | ( | ConstContentVector & | tree,
|  | const ContentInfo * | child
| ) |  | const

Reverse lookup the dependencies of all parents over a given child.

Parameters

  tree | list to store all parents in (is not cleared)
  child | the child to search the parents' dependencies for

Definition at line 963 of file network_content.cpp.

References include(), and ReverseLookupDependency().

Referenced by CheckDependencyState(), and Receive_SERVER_INFO().

## ◆ Select()

void ClientNetworkContentSocketHandler::Select | ( | ContentID | cid | ) |

Select a specific content id.

Parameters

  cid | the content ID to select

Definition at line 874 of file network_content.cpp.

References CheckDependencyState(), GetContent(), ContentInfo::SELECTED, ContentInfo::state, and ContentInfo::UNSELECTED.

Referenced by ToggleSelectedState().

## ◆ Unselect()

void ClientNetworkContentSocketHandler::Unselect | ( | ContentID | cid | ) |

Unselect a specific content id.

Parameters

  cid | the content ID to deselect

Definition at line 887 of file network_content.cpp.

References CheckDependencyState(), GetContent(), ContentInfo::IsSelected(), ContentInfo::state, and ContentInfo::UNSELECTED.

Referenced by CheckDependencyState(), and ToggleSelectedState().

The documentation for this class was generated from the following files:

- src/network/network_content.h
- src/network/network_content.cpp