197 lines
4.9 KiB
C
197 lines
4.9 KiB
C
/*
|
|
* clients
|
|
* architecture clients/serveur guinness : clients list
|
|
* Thomas Nemeth -- le 15 juin 2001
|
|
*
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <string.h>
|
|
#include <strings.h>
|
|
#include "defines.h"
|
|
#include "printlog.h"
|
|
#include "xmem.h"
|
|
#include "guinnessd.h"
|
|
#include "lists.h"
|
|
#include "tools.h"
|
|
#include "clients.h"
|
|
|
|
|
|
extern Elt *clients_list;
|
|
|
|
void add_client (userinfos *infos) {
|
|
char *datas;
|
|
int size;
|
|
|
|
size = strlen (infos->nom);
|
|
size += strlen (infos->prefb);
|
|
size += strlen (infos->cxdate);
|
|
size += strlen (infos->host);
|
|
size += strlen (infos->ip);
|
|
size += 5 * strlen (SEP) + 10;
|
|
|
|
datas = xmalloc (size + 1);
|
|
|
|
sprintf (datas, "%s%s%s%s%s%s%s%s%s%s%d",
|
|
infos->nom, SEP,
|
|
infos->prefb, SEP,
|
|
infos->cxdate, SEP,
|
|
infos->host, SEP,
|
|
infos->ip, SEP,
|
|
infos->port);
|
|
|
|
add_elt (&clients_list, datas);
|
|
|
|
#ifdef DEBUG
|
|
printf ("Taille des elements :\n"
|
|
"nom : %d [%s]\n"
|
|
"biere : %d [%s]\n"
|
|
"date : %d [%s]\n"
|
|
"hote : %d [%s]\n"
|
|
"ip : %d [%s]\n",
|
|
strlen (infos->nom), infos->nom,
|
|
strlen (infos->prefb), infos->prefb,
|
|
strlen (infos->cxdate), infos->cxdate,
|
|
strlen (infos->host), infos->host,
|
|
strlen (infos->ip), infos->ip);
|
|
|
|
printf ("Ajout des infos : size = %d -- [%s]\n", size, datas);
|
|
#endif
|
|
|
|
free (datas);
|
|
}
|
|
|
|
|
|
void remove_client (userinfos *infos) {
|
|
remove_elt (&clients_list, infos->nom);
|
|
}
|
|
|
|
|
|
int rename_client (userinfos *infos, const char *new_nick) {
|
|
if (exist_elt (clients_list, new_nick)) return FALSE;
|
|
remove_elt (&clients_list, infos->nom);
|
|
snprintf (infos->nom, MAXSTRLEN, "%s", new_nick);
|
|
add_client (infos);
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
char *list_clients () {
|
|
char *list;
|
|
char *lstelt;
|
|
char *rt;
|
|
char text[MAXSTRLEN + 1];
|
|
int size;
|
|
int i;
|
|
|
|
size = strlen ("Client(s) connecte(s) :\n");
|
|
for (i = 0 ; i < get_nb_elts (clients_list) ; i++) {
|
|
lstelt = elt_number (clients_list, i);
|
|
rt = strstr (lstelt, SEP);
|
|
strncpy (text, lstelt, rt - lstelt);
|
|
text[rt - lstelt] = 0;
|
|
size += 1 + strlen (text);
|
|
}
|
|
|
|
list = xmalloc ((size + 1) * sizeof (char));
|
|
|
|
strcpy (list, "Client(s) connecte(s) :\n");
|
|
for (i = 0 ; i < get_nb_elts (clients_list) ; i++) {
|
|
lstelt = elt_number (clients_list, i);
|
|
rt = strstr (lstelt, SEP);
|
|
strncpy (text, lstelt, rt - lstelt);
|
|
text[rt - lstelt] = 0;
|
|
strcat (list, text);
|
|
strcat (list, "\n");
|
|
}
|
|
|
|
return list;
|
|
}
|
|
|
|
char *infos_client (int admin, const char *nick) {
|
|
char *datas;
|
|
char *infos;
|
|
char *token, *use, *saveptr;
|
|
char *nom = NULL, *biere = NULL, *date = NULL;
|
|
char *host = NULL, *ip = NULL, *port = NULL;
|
|
int size = 0;
|
|
|
|
infos = get_elt (clients_list, nick);
|
|
if (! infos) {
|
|
datas = xmalloc (strlen (nick) + strlen (" : pseudo inconnu !\n"));
|
|
sprintf (datas, "%s : pseudo inconnu !\n", nick);
|
|
return datas;
|
|
}
|
|
|
|
use = xstrdup (infos);
|
|
|
|
/* nom */
|
|
token = strtok_r (use, SEP, &saveptr);
|
|
if (token) nom = xstrdup (token);
|
|
|
|
/* biere */
|
|
token = strtok_r (NULL, SEP, &saveptr);
|
|
if (token) biere = xstrdup (token);
|
|
|
|
/* date */
|
|
token = strtok_r (NULL, SEP, &saveptr);
|
|
if (token) date = xstrdup (token);
|
|
|
|
/* hote */
|
|
token = strtok_r (NULL, SEP, &saveptr);
|
|
if (token) host = xstrdup (token);
|
|
|
|
/* ip */
|
|
token = strtok_r (NULL, SEP, &saveptr);
|
|
if (token) ip = xstrdup (token);
|
|
|
|
/* port */
|
|
token = strtok_r (NULL, SEP, &saveptr);
|
|
if (token) port = xstrdup (token);
|
|
|
|
size += strlen ("Pseudo : ");
|
|
size += strlen ("Biere : ");
|
|
size += strlen ("Connexion : ");
|
|
size += 1 + (nom ? strlen (nom) : 1);
|
|
size += 1 + (biere ? strlen (biere) : 1);
|
|
size += 1 + (date ? strlen (date) : 1);
|
|
if (admin) {
|
|
size += strlen ("Hote : ");
|
|
size += strlen ("IP : ");
|
|
size += strlen ("Port : ");
|
|
size += 1 + (host ? strlen (host) : 1);
|
|
size += 1 + (ip ? strlen (ip) : 1);
|
|
size += 1 + (port ? strlen (port) : 1);
|
|
}
|
|
|
|
datas = xmalloc (size + 1);
|
|
|
|
sprintf (datas,
|
|
"Pseudo : %s\n"
|
|
"Biere : %s\n"
|
|
"Connexion : %s\n",
|
|
nom ? nom : "-",
|
|
biere ? biere : "-",
|
|
date ? date : "-");
|
|
if (admin)
|
|
sprintf (datas, "%s"
|
|
"Hote : %s\n"
|
|
"IP : %s\n"
|
|
"Port : %s\n",
|
|
datas,
|
|
host ? host : "-",
|
|
ip ? ip : "-",
|
|
port ? port : "-");
|
|
|
|
if (nom) free (nom);
|
|
if (biere) free (biere);
|
|
if (date) free (date);
|
|
if (host) free (host);
|
|
if (ip) free (ip);
|
|
if (port) free (port);
|
|
|
|
return datas;
|
|
}
|