00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef lint
00021 static const char rcsid[] = "$Id: serverlist.c,v 1.7 2004-06-30 21:07:02 stdarg Exp $";
00022 #endif
00023
00024 #include "server.h"
00025
00026
00027
00028
00029
00030
00031 server_t *server_list = NULL;
00032 int server_list_index = -1;
00033 int server_list_len = 0;
00034
00035
00036 server_t *server_get_next()
00037 {
00038 server_t *serv;
00039 int i;
00040
00041 if (server_list_len <= 0) return(NULL);
00042 server_list_index++;
00043 if (server_list_index >= server_list_len) server_list_index = 0;
00044
00045 serv = server_list;
00046 for (i = 0; i < server_list_index && serv; i++) {
00047 serv = serv->next;
00048 }
00049 return(serv);
00050 }
00051
00052 void server_set_next(int next)
00053 {
00054 server_list_index = next-1;
00055 }
00056
00057
00058 int server_add(char *host, int port, char *pass)
00059 {
00060 server_t *serv, *ptr;
00061
00062
00063 serv = calloc(1, sizeof(*serv));
00064 serv->host = strdup(host);
00065 serv->port = port;
00066 if (pass) serv->pass = strdup(pass);
00067
00068
00069 for (ptr = server_list; ptr && ptr->next; ptr = ptr->next) {
00070 ;
00071 }
00072 if (ptr) ptr->next = serv;
00073 else server_list = serv;
00074
00075 server_list_len++;
00076
00077 return(server_list_len-1);
00078 }
00079
00080 static void server_free(server_t *serv)
00081 {
00082 free(serv->host);
00083 if (serv->pass) free(serv->pass);
00084 free(serv);
00085 }
00086
00087
00088 int server_del(int num)
00089 {
00090 server_t *cur, *prev;
00091 int i;
00092
00093 prev = NULL;
00094 i = 0;
00095 for (cur = server_list; cur; cur = cur->next) {
00096 if (i == num) break;
00097 prev = cur;
00098 i++;
00099 }
00100 if (!cur) return(-1);
00101
00102 if (prev) prev->next = cur->next;
00103 else server_list = cur->next;
00104
00105 server_free(cur);
00106
00107
00108
00109 if (num < server_list_index) server_list_index--;
00110 server_list_len--;
00111
00112 return(0);
00113 }
00114
00115
00116 int server_find(const char *host, int port, const char *pass)
00117 {
00118 server_t *serv;
00119 int i, found;
00120
00121 i = 0;
00122 for (serv = server_list; serv; serv = serv->next) {
00123 found = 0;
00124 if (!host) found++;
00125 else if (!strcasecmp(serv->host, host)) found++;
00126
00127 if (!port) found++;
00128 else if (serv->port == port) found++;
00129
00130 if (!pass) found++;
00131 else if (!strcasecmp(serv->pass, pass)) found++;
00132
00133 if (found == 3) return(i);
00134 i++;
00135 }
00136 return(-1);
00137 }
00138
00139
00140 int server_clear()
00141 {
00142 server_t *cur, *next;
00143
00144 for (cur = server_list; cur; cur = next) {
00145 next = cur->next;
00146 server_free(cur);
00147 }
00148 server_list = NULL;
00149 server_list_len = 0;
00150 server_list_index = -1;
00151 return(0);
00152 }