############################################################################
Programma della conferenza distribuita

Copyright (C) 19aa  
Autori: Andrea Lanzi, Giampaolo Fresi Roglia

Questo programma e' software  libero; e' lecito ridistribuirlo e/o
modificarlo secondo i  termini della Licenza Pubblica Generica GNU
come pubblicata  dalla Free Software Foundation;   o la versione 2
della licenza o (a scelta) una versione successiva.

Questo programma e' distribuito  nella speranza che sia utile,  ma
SENZA  ALCUNA GARANZIA;  senza  neppure la  garanzia  implicita di
COMMERCIABILITA' o di APPLICABILITA' PER UN PARTICOLARE SCOPO.  Si
veda la Licenza Pubblica Generica GNU per avere maggiori dettagli.
Ognuno dovrebbe avere  ricevuto una copia  della Licenza Pubblica
Generica GNU insieme a questo programma; in  caso contrario, la si
puo' ottenere dalla Free Software  Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, Stati Uniti.
Gli autori possono essere contattati ai seguenti indirizzi:

Andrea Lanzi           : shadow.net@tiscalinet.it
Giampaolo Fresi Roglia : gian_fresi@iol.it

##########################################################################

#include <termio.h>
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>    
#include <errno.h>
#include <sys/time.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/tcp.h>

#define NMAX 20

// STRUTTURA PER LA GESTIONE DELLA COMUNICAZIONE TRA ORATORE E
// PARTECIPANTI
struct lista_ind {
        int fd;
        unsigned long indirizzo;
        int porta;
        struct lista_ind *next;
        struct lista_ind *prec;
        };
typedef struct lista_ind partecipanti;


struct lista_ind; 

// DEFINIZIONE DEI PROTOTIPI DELLE FUNZIONI

int iscrizione (char HOST_ADDR[], int coord_port, int *coord_sock, int *serv_sock);

int iscr_parl(int sockfd);

int rinuncia (int sockfd);

int disconnetti(int sockfd);

void menu();

int gest_conv(int coord_sock);

int mk_list (struct lista_ind **lista);

int init_conv (int sockfd, struct lista_ind **lista);

int rm_cli(partecipanti **, int , int) ;

int add_cli (struct lista_ind **lista, int sockfd, unsigned long indirizzo, int porta);

int passive_socket(int port, int backlog);

int active_socket(int port, char *host );

void set_term_unbuf(struct termios *old_term_options);

void set_term_buf(struct termios term_options);