server is running, expect more bugs
This commit is contained in:
196
clients.c
Normal file
196
clients.c
Normal file
@@ -0,0 +1,196 @@
|
||||
/*
|
||||
* 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 éléments :\n"
|
||||
"nom : %d [%s]\n"
|
||||
"bière : %d [%s]\n"
|
||||
"date : %d [%s]\n"
|
||||
"hôte : %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) connecté(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) connecté(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);
|
||||
|
||||
/* bière */
|
||||
token = strtok_r (NULL, SEP, &saveptr);
|
||||
if (token) biere = xstrdup (token);
|
||||
|
||||
/* date */
|
||||
token = strtok_r (NULL, SEP, &saveptr);
|
||||
if (token) date = xstrdup (token);
|
||||
|
||||
/* hôte */
|
||||
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 ("Bière : ");
|
||||
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 ("Hôte : ");
|
||||
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"
|
||||
"Bière : %s\n"
|
||||
"Connexion : %s\n",
|
||||
nom ? nom : "-",
|
||||
biere ? biere : "-",
|
||||
date ? date : "-");
|
||||
if (admin)
|
||||
sprintf (datas, "%s"
|
||||
"Hôte : %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;
|
||||
}
|
||||
Reference in New Issue
Block a user