|
OpenTTD Source
14.0-beta3
|
Socket handler for the content server connection. More...
#include <network_content.h>
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 | 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. | |
Socket handler for the content server connection.
Definition at line 67 of file network_content.h.
|
protected |
Handle the opening of the file before downloading.
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().
| void ClientNetworkContentSocketHandler::CheckDependencyState | ( | ContentInfo * | ci | ) |
Check the dependencies (recursively) of this content info.
| ci | the content info to check the dependencies of |
Definition at line 978 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().
|
protected |
Download information of a given Content ID if not already tried.
| cid | the ID to try |
Definition at line 840 of file network_content.cpp.
References RequestContentList(), and requested.
Referenced by CheckDependencyState().
| void ClientNetworkContentSocketHandler::DownloadSelectedContent | ( | uint & | files, |
| uint & | bytes, | ||
| bool | fallback = false |
||
| ) |
Actually begin downloading the content we selected.
| [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().
|
protected |
Initiate downloading the content over the fallback protocol.
| content | The content to download. |
Definition at line 355 of file network_content.cpp.
|
protected |
Initiate downloading the content over HTTP.
| content | The content to download. |
Definition at line 339 of file network_content.cpp.
References NetworkHTTPSocketHandler::Connect(), http_response_index, and NetworkContentMirrorUriString().
|
protected |
Get the content info based on a ContentID.
| cid | the ContentID to search for |
Definition at line 854 of file network_content.cpp.
References infos.
Referenced by CheckDependencyState(), ReverseLookupDependency(), Select(), and Unselect().
|
overrideprotectedvirtual |
Check if there is a request to cancel the transfer.
Implements HTTPCallback.
Definition at line 578 of file network_content.cpp.
References isCancelled.
|
overrideprotectedvirtual |
An error has occurred and the connection has been closed.
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().
|
overrideprotectedvirtual |
We're receiving data.
| data | the received data, nullptr when all data has been received. |
| length | the amount of received data, 0 when all data has been received. |
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, lastActivity, and OnFailure().
|
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.
| p | The packet that was just received. |
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.
|
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)
| p | The packet that was just received. |
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.
| void ClientNetworkContentSocketHandler::RequestContentList | ( | ContentType | type | ) |
Request the content list for the given type.
| 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().
| void ClientNetworkContentSocketHandler::RequestContentList | ( | ContentVector * | cv, |
| bool | send_md5sum = true |
||
| ) |
Request the content list for a list of content.
| 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.
| void ClientNetworkContentSocketHandler::RequestContentList | ( | uint | count, |
| const ContentID * | content_ids | ||
| ) |
Request the content list for a given number of content IDs.
| 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.
| void ClientNetworkContentSocketHandler::ReverseLookupDependency | ( | ConstContentVector & | parents, |
| const ContentInfo * | child | ||
| ) | const |
Reverse lookup the dependencies of (direct) parents over a given child.
| parents | list to store all parents in (is not cleared) |
| child | the child to search the parents' dependencies for |
Definition at line 942 of file network_content.cpp.
References GetContent(), ContentInfo::id, and reverse_dependency_map.
Referenced by CheckDependencyState(), and ReverseLookupTreeDependency().
| void ClientNetworkContentSocketHandler::ReverseLookupTreeDependency | ( | ConstContentVector & | tree, |
| const ContentInfo * | child | ||
| ) | const |
Reverse lookup the dependencies of all parents over a given child.
| tree | list to store all parents in (is not cleared) |
| child | the child to search the parents' dependencies for |
Definition at line 956 of file network_content.cpp.
References include(), and ReverseLookupDependency().
Referenced by CheckDependencyState(), and Receive_SERVER_INFO().
| void ClientNetworkContentSocketHandler::Select | ( | ContentID | cid | ) |
Select a specific content id.
| cid | the content ID to select |
Definition at line 867 of file network_content.cpp.
References CheckDependencyState(), GetContent(), ContentInfo::SELECTED, ContentInfo::state, and ContentInfo::UNSELECTED.
Referenced by ToggleSelectedState().
| void ClientNetworkContentSocketHandler::Unselect | ( | ContentID | cid | ) |
Unselect a specific content id.
| cid | the content ID to deselect |
Definition at line 880 of file network_content.cpp.
References CheckDependencyState(), GetContent(), ContentInfo::IsSelected(), ContentInfo::state, and ContentInfo::UNSELECTED.
Referenced by CheckDependencyState(), and ToggleSelectedState().