tron@2186: /* $Id$ */ tron@2186: truelight@543: #include "stdafx.h" tron@1299: #include "debug.h" truelight@543: #include "network_data.h" truelight@543: truelight@543: #ifdef ENABLE_NETWORK truelight@543: 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: truelight@543: extern void UpdateNetworkGameWindow(bool unselect); 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: Darkvater@2881: if (prev_item == NULL) {_network_game_list = item;} Darkvater@2881: else {prev_item->next = item;} Darkvater@2881: DEBUG(net, 4) ("[NET][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) { Darkvater@2881: if (prev_item == NULL) {_network_game_list = remove->next;} Darkvater@2881: else {prev_item->next = remove->next;} dominik@738: dominik@738: free(remove); dominik@738: DEBUG(net, 4) ("[NET][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 */