3
* Author: Brent Hendricks
6
* $Id: server.c,v 1.12 2002/11/04 05:38:41 jdorje Exp $
8
* This file contains functions for handling server client profiles
10
* Copyright (C) 1998 Brent Hendricks.
12
* This program is free software; you can redistribute it and/or modify
13
* it under the terms of the GNU General Public License as published by
14
* the Free Software Foundation; either version 2 of the License, or
15
* (at your option) any later version.
17
* This program is distributed in the hope that it will be useful,
18
* but WITHOUT ANY WARRANTY; without even the implied warranty of
19
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
* GNU General Public License for more details.
22
* You should have received a copy of the GNU General Public License
23
* along with this program; if not, write to the Free Software
24
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
28
# include <config.h> /* Site-specific config */
40
/* List of server profiles */
41
static GList* servers;
42
static GList* deleted;
44
/* Local functions for manipulating server profile list */
45
static void server_list_print(void);
46
static void server_print(gpointer server, gpointer data);
47
static void server_free_node(gpointer server, gpointer data);
48
static gint server_match_name(gconstpointer, gconstpointer);
50
GGZServer *server = NULL;
52
void server_profiles_cleanup(void)
55
g_list_foreach(servers, server_free_node, NULL);
62
void server_profiles_load(void)
68
/* Clear any previous list */
70
g_list_foreach(servers, server_free_node, NULL);
75
/* Clear list of deleted servers */
77
g_list_foreach(deleted, server_free_node, NULL);
82
ggzcore_conf_read_list("Servers", "ProfileList", &count, &profiles);
84
for (i = 0; i < count; i++) {
85
server = ggz_malloc(sizeof(Server));
86
server->name = profiles[i];
87
server->host = ggzcore_conf_read_string(server->name, "Host", NULL);
88
server->port = ggzcore_conf_read_int(server->name, "Port", 5688);
89
server->type = ggzcore_conf_read_int(server->name, "Type",
91
server->login = ggzcore_conf_read_string(server->name, "Login", NULL);
92
if (server->type == GGZ_LOGIN)
93
server->password = ggzcore_conf_read_string(server->name,
95
server_list_add(server);
103
void server_profiles_save(void)
110
count = g_list_length(servers);
111
profiles = server_get_names();
113
ggzcore_conf_write_list("Servers", "ProfileList", count, profiles);
116
for (node = servers; node != NULL; node = node->next) {
117
server = (Server*)(node->data);
119
ggzcore_conf_write_string(server->name, "Host", server->host);
120
ggzcore_conf_write_int(server->name, "Port", server->port);
121
ggzcore_conf_write_int(server->name, "Type", server->type);
122
ggzcore_conf_write_string(server->name, "Login", server->login);
123
if (server->type == GGZ_LOGIN)
124
ggzcore_conf_write_string(server->name, "Password",
128
for (node = deleted; node != NULL; node = node->next) {
129
server = (Server*)(node->data);
130
ggzcore_conf_remove_section(server->name);
133
/* Clear list of deleted servers */
135
g_list_foreach(deleted, server_free_node, NULL);
136
g_list_free(deleted);
142
void server_list_add(Server* server)
144
servers = g_list_append(servers, (gpointer)server);
148
GList* server_get_name_list(void)
153
/* Iterate through list, grabbing names */
154
for (current = servers; current != NULL; current = current->next)
155
list = g_list_append(list, ((Server*)(current->data))->name);
161
char** server_get_names(void)
167
profiles = ggz_malloc(sizeof(char*) * g_list_length(servers));
170
profiles[i++] = ((Server*)(node->data))->name;
178
Server* server_get(const gchar* name)
182
node = g_list_find_custom(servers, (gpointer)name, server_match_name);
187
return (Server*)(node->data);
191
void server_list_remove(const gchar* name)
197
node = g_list_find_custom(servers, (gpointer)name, server_match_name);
202
server = (Server*)(node->data);
203
servers = g_list_remove_link(servers, node);
206
deleted = g_list_append(deleted, (gpointer)server);
211
static void server_list_print(void)
213
g_list_foreach(servers, server_print, NULL);
217
static void server_print(gpointer server, gpointer data)
219
ggz_debug("servers", "Profile name: %s\n", ((Server*)server)->name);
220
ggz_debug("servers", " Host %s:%d\n", ((Server*)server)->host,
221
((Server*)server)->port);
222
ggz_debug("servers", " Login type: %d\n", ((Server*)server)->type);
223
ggz_debug("servers", " Login: %s\n", ((Server*)server)->login);
224
if (((Server*)server)->type == GGZ_LOGIN)
226
" Password: %s\n", ((Server*)server)->password);
230
static void server_free_node(gpointer server, gpointer data)
232
if (((Server*)server)->name)
233
ggz_free(((Server*)server)->name);
235
if (((Server*)server)->host)
236
ggz_free(((Server*)server)->host);
238
if (((Server*)server)->login)
239
ggz_free(((Server*)server)->login);
241
if (((Server*)server)->password)
242
ggz_free(((Server*)server)->password);
248
static gint server_match_name(gconstpointer server, gconstpointer name)
250
return strcmp(((Server*)server)->name, name);