tron@2186: /* $Id$ */ tron@2186: Darkvater@4826: #ifdef ENABLE_NETWORK Darkvater@4826: truelight@543: #include "stdafx.h" tron@1299: #include "debug.h" truelight@543: #include "network_data.h" rubidium@5339: #include "newgrf_config.h" truelight@543: truelight@543: // This file handles the GameList truelight@543: // Also, it handles the request to a server for data about the server truelight@543: Darkvater@2885: /** Add a new item to the linked gamelist. If the IP and Port match Darkvater@2885: * return the existing item instead of adding it again Darkvater@2885: * @param ip the IP-address (inet_addr) of the to-be added item Darkvater@2885: * @param port the port the server is running on Darkvater@2885: * @return a point to the newly added or already existing item */ truelight@543: NetworkGameList *NetworkGameListAddItem(uint32 ip, uint16 port) truelight@543: { Darkvater@2881: NetworkGameList *item, *prev_item; truelight@543: Darkvater@2881: prev_item = NULL; Darkvater@2881: for (item = _network_game_list; item != NULL; item = item->next) { Darkvater@2881: if (item->ip == ip && item->port == port) return item; Darkvater@2881: prev_item = item; truelight@543: } truelight@543: Darkvater@2881: item = malloc(sizeof(*item)); truelight@543: memset(item, 0, sizeof(*item)); truelight@543: item->next = NULL; truelight@543: item->ip = ip; truelight@543: item->port = port; Darkvater@2881: tron@4077: if (prev_item == NULL) { tron@4077: _network_game_list = item; tron@4077: } else { tron@4077: prev_item->next = item; tron@4077: } Darkvater@5568: DEBUG(net, 4, "[gamelist] added server to list"); truelight@543: truelight@543: UpdateNetworkGameWindow(false); truelight@543: truelight@543: return item; truelight@543: } truelight@543: Darkvater@2885: /** Remove an item from the gamelist linked list Darkvater@2885: * @param remove pointer to the item to be removed */ dominik@738: void NetworkGameListRemoveItem(NetworkGameList *remove) dominik@738: { Darkvater@2881: NetworkGameList *item, *prev_item; dominik@738: Darkvater@2881: prev_item = NULL; Darkvater@2881: for (item = _network_game_list; item != NULL; item = item->next) { Darkvater@2881: if (remove == item) { tron@4077: if (prev_item == NULL) { tron@4077: _network_game_list = remove->next; tron@4077: } else { tron@4077: prev_item->next = remove->next; tron@4077: } dominik@738: rubidium@5339: /* Remove GRFConfig information */ Darkvater@5347: ClearGRFConfigList(&remove->info.grfconfig); Darkvater@5347: free(remove); Darkvater@5347: remove = NULL; rubidium@5339: Darkvater@5568: DEBUG(net, 4, "[gamelist] removed server from list"); Darkvater@2881: UpdateNetworkGameWindow(false); dominik@738: return; dominik@738: } Darkvater@2881: prev_item = item; dominik@738: } dominik@738: } dominik@738: truelight@543: #endif /* ENABLE_NETWORK */