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.
void | Close ()
| Disconnect from the content server.
void | RequestContentList (ContentType type)
| Request the content list for the given type.
void | RequestContentList (uint count, const ContentID *content_ids)
| Request the content list for a given number of content IDs.
void | RequestContentList (ContentVector *cv, bool send_md5sum=true)
| Request the content list for a list of content.
void | DownloadSelectedContent (uint &files, uint &bytes, bool fallback=false)
| Actually begin downloading the content we selected.
void | Select (ContentID cid)
| Select a specific content id.
void | Unselect (ContentID cid)
| Unselect a specific content id.
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.
void | ReverseLookupTreeDependency (ConstContentVector &tree, const ContentInfo *child) const
| Reverse lookup the dependencies of all parents over a given child.
void | CheckDependencyState (ContentInfo *ci)
| Check the dependencies (recursively) of this content info.
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 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.
## Static Public Attributes
static const int | IDLE_TIMEOUT = 60 * 1000
| The idle timeout; when to close the connection because it's idle.
## Protected Types
typedef SmallVector< ContentID, 4 > | ContentIDList
| List of content IDs to (possibly) select.
## Protected Member Functions
virtual bool | Receive_SERVER_INFO (Packet *p)
virtual bool | Receive_SERVER_CONTENT (Packet *p)
ContentInfo * | GetContent (ContentID cid)
| Get the content info based on a ContentID.
void | DownloadContentInfo (ContentID cid)
| Download information of a given Content ID if not already tried.
void | OnConnect (bool success)
void | OnDisconnect ()
void | OnReceiveContentInfo (const ContentInfo *ci)
void | OnDownloadProgress (const ContentInfo *ci, int bytes)
void | OnDownloadComplete (ContentID cid)
void | OnFailure ()
| An error has occurred and the connection has been closed.
void | OnReceiveData (const char *data, size_t length)
| We're receiving data.
bool | BeforeDownload ()
| Handle the opening of the file before downloading.
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.
void | DownloadSelectedContentFallback (const ContentIDList &content)
| Initiate downloading the content over the fallback protocol.
## Protected Attributes
SmallVector< ContentCallback *, 2 > | 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.
SmallVector< char, 1024 > | 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.
uint32 | lastActivity
| The last time there was network activity.
## Friends
class | NetworkContentConnecter

## Detailed Description

Socket handler for the content server connection.

Definition at line 69 of file network_content.h.

## Member Function Documentation

bool ClientNetworkContentSocketHandler::BeforeDownload | ( |  | ) | `[protected]`

Handle the opening of the file before downloading.

Returns:
  false on any error.

Definition at line 500 of file network_content.cpp.

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

Referenced by OnReceiveData().

ConstContentIterator ClientNetworkContentSocketHandler::Begin | ( |  | ) | const`[inline]`

Get the begin of the content inf iterator.

Definition at line 136 of file network_content.h.

References SmallVector< T, S >::Begin(), and infos.

Referenced by NetworkContentListWindow::BuildContentList(), and NetworkContentListWindow::DrawDetails().

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 941 of file network_content.cpp.

References ContentInfo::AUTOSELECTED, SmallVector< T, S >::Begin(), SmallVector< T, S >::Clear(), ContentInfo::dependencies, ContentInfo::dependency_count, DownloadContentInfo(), SmallVector< T, S >::End(), GetContent(), ContentInfo::id, ContentInfo::IsSelected(), ReverseLookupDependency(), ReverseLookupTreeDependency(), ContentInfo::SELECTED, ContentInfo::state, Unselect(), and ContentInfo::UNSELECTED.

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

void ClientNetworkContentSocketHandler::Clear | ( |  | ) |

Clear all downloaded content information.

Definition at line 1031 of file network_content.cpp.

References SmallVector< T, S >::Begin(), SmallVector< T, S >::Clear(), SmallVector< T, S >::End(), infos, and requested.

Referenced by ShowNetworkContentListWindow().

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 792 of file network_content.cpp.

References SmallVector< T, S >::Append(), SmallVector< T, S >::Contains(), RequestContentList(), and requested.

Referenced by CheckDependencyState().

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 295 of file network_content.cpp.

References _settings_client, SmallVector< T, S >::Append(), SmallVector< T, S >::Begin(), DownloadSelectedContentFallback(), DownloadSelectedContentHTTP(), SmallVector< T, S >::End(), ContentInfo::filesize, ContentInfo::id, infos, ContentInfo::IsSelected(), SmallVector< T, S >::Length(), ClientSettings::network, NetworkSettings::no_http_content_downloads, and ContentInfo::state.

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

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

Initiate downloading the content over the fallback protocol.

Parameters:

  | content | The content to download.

Definition at line 352 of file network_content.cpp.

References SmallVector< T, S >::Begin(), Connect(), SmallVector< T, S >::Length(), min(), PACKET_CONTENT_CLIENT_CONTENT, SEND_MTU, Packet::Send_uint16(), Packet::Send_uint32(), and NetworkTCPSocketHandler::SendPacket().

Referenced by DownloadSelectedContent().

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

Initiate downloading the content over HTTP.

Parameters:

  | content | The content to download.

Definition at line 324 of file network_content.cpp.

References SmallVector< T, S >::Begin(), SmallVector< T, S >::End(), http_response_index, lastof, SmallVector< T, S >::Length(), NETWORK_CONTENT_MIRROR_HOST, NETWORK_CONTENT_MIRROR_PORT, NETWORK_CONTENT_MIRROR_URL, and seprintf().

Referenced by DownloadSelectedContent().

ConstContentIterator ClientNetworkContentSocketHandler::End | ( |  | ) | const`[inline]`

Get the end of the content inf iterator.

Definition at line 140 of file network_content.h.

References SmallVector< T, S >::End(), and infos.

Referenced by NetworkContentListWindow::BuildContentList(), and NetworkContentListWindow::DrawDetails().

ConstContentIterator ClientNetworkContentSocketHandler::Get | ( | uint32 | index | ) | const`[inline]`

Get the nth position of the content inf iterator.

Definition at line 138 of file network_content.h.

References SmallVector< T, S >::Get(), and infos.

ContentInfo * ClientNetworkContentSocketHandler::GetContent | ( | ContentID | cid | ) | `[protected]`

Get the content info based on a ContentID.

Parameters:

  | cid | the ContentID to search for

Returns:
  the ContentInfo or NULL if not found

Definition at line 807 of file network_content.cpp.

References SmallVector< T, S >::Begin(), SmallVector< T, S >::End(), ContentInfo::id, and infos.

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

uint ClientNetworkContentSocketHandler::Length | ( |  | ) | const`[inline]`

Get the number of content items we know locally.

Definition at line 134 of file network_content.h.

References infos, and SmallVector< T, S >::Length().

void ClientNetworkContentSocketHandler::OnFailure | ( |  | ) | `[protected, virtual]`

An error has occurred and the connection has been closed.

Note:
  HTTP socket handler is closed/freed.

Implements HTTPCallback.

Definition at line 554 of file network_content.cpp.

References curFile, curInfo, DownloadSelectedContent(), http_response, http_response_index, and SmallVector< T, S >::Reset().

Referenced by OnReceiveData().

void ClientNetworkContentSocketHandler::OnReceiveData | ( | const char * | data,
|  | size_t | length |
| ) |  |  | `[protected, virtual]`

We're receiving data.

Parameters:

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

Note:
  When NULL 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 573 of file network_content.cpp.

References AfterDownload(), SmallVector< T, S >::Append(), BeforeDownload(), SmallVector< T, S >::Begin(), Connect(), curFile, curInfo, ContentInfo::filename, ContentInfo::filesize, http_response, http_response_index, ContentInfo::id, lastof, SmallVector< T, S >::Length(), OnFailure(), strecpy(), and ContentInfo::type.

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 244 of file network_content.cpp.

References SmallVector< T, S >::Append(), SmallVector< T, S >::Begin(), Connect(), SmallVector< T, S >::End(), infos, SmallVector< T, S >::Length(), ContentInfo::md5sum, PACKET_CONTENT_CLIENT_INFO_EXTID, PACKET_CONTENT_CLIENT_INFO_EXTID_MD5, SEND_MTU, NetworkTCPSocketHandler::SendPacket(), ContentInfo::type, and ContentInfo::unique_id.

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 214 of file network_content.cpp.

References Connect(), min(), PACKET_CONTENT_CLIENT_INFO_ID, SEND_MTU, Packet::Send_uint16(), Packet::Send_uint32(), and NetworkTCPSocketHandler::SendPacket().

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 184 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, PACKET_CONTENT_CLIENT_INFO_LIST, Packet::Send_uint32(), Packet::Send_uint8(), and NetworkTCPSocketHandler::SendPacket().

Referenced by DownloadContentInfo(), AIConfigWindow::OnClick(), BootstrapAskForDownloadWindow::OnConnect(), and ShowNetworkContentListWindow().

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 899 of file network_content.cpp.

References SmallVector< T, S >::Append(), SmallVector< T, S >::Begin(), ContentInfo::dependencies, ContentInfo::dependency_count, SmallVector< T, S >::End(), ContentInfo::id, and infos.

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.

Parameters:

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

Definition at line 919 of file network_content.cpp.

References SmallVector< T, S >::Append(), SmallVector< T, S >::Begin(), SmallVector< T, S >::End(), SmallVector< T, S >::Include(), SmallVector< T, S >::Length(), and ReverseLookupDependency().

Referenced by CheckDependencyState(), and NetworkContentListWindow::DrawDetails().

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

Select a specific content id.

Parameters:

  | cid | the content ID to select

Definition at line 821 of file network_content.cpp.

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

Referenced by BootstrapAskForDownloadWindow::OnReceiveContentInfo(), and ToggleSelectedState().

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

Unselect a specific content id.

Parameters:

  | cid | the content ID to deselect

Definition at line 834 of file network_content.cpp.

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

Referenced by CheckDependencyState(), and ToggleSelectedState().

void ClientNetworkContentSocketHandler::UnselectAll | ( |  | ) |

Unselect everything that we've not downloaded so far.

Definition at line 868 of file network_content.cpp.

References SmallVector< T, S >::Begin(), SmallVector< T, S >::End(), infos, ContentInfo::IsSelected(), ContentInfo::state, and ContentInfo::UNSELECTED.

## Field Documentation

const int ClientNetworkContentSocketHandler::IDLE_TIMEOUT = 60 * 1000`[static]`

The idle timeout; when to close the connection because it's idle.

Definition at line 107 of file network_content.h.

Referenced by SendReceive().

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

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