#ifndef IRCBOUNCER_H #define IRCBOUNCER_H #include /* malloc */ #include /* printf */ #include /* perror */ #include /* signal */ #include /* resolv */ #include /* strcat */ #include /* close */ #include /* heure */ #include /* net */ #include /* net */ #include /* net */ #include /* net */ #include #include #include #include #include #include #include "config.h" #undef max #define max(x,y) ((x) > (y) ? (x) : (y)) /* longueur des buffers d'entrée-sortie */ #define BLEN 8196 /* longueur du buffer contenant la derniere phrase recue dans cette socket */ #define PHLEN 513 /* strlen du nick maximum */ #define NICKLEN 31 /* liste doublement chainee de char * */ struct liste_phrases { struct liste_phrases *suivante; struct liste_phrases *precedente; char *phrase; }; /* buffer de BLEN caracteres */ struct raw_buff { int buff_start; int buff_end; char buff[BLEN]; }; /* descripteur de socket, 2 raw_buff et 2 liste_phrases avec mutexes */ struct endstruct { int socketdesc; /* le descripteur de socket pour les read/write/select */ pthread_mutex_t i_phrase_mutex; pthread_mutex_t o_phrase_mutex; pthread_mutex_t i_buff_mutex; /* unused */ pthread_mutex_t o_buff_mutex; /* unused */ struct liste_phrases *i_phrase_tete; /* tete = plus récente */ struct liste_phrases *i_phrase_queue; struct liste_phrases *o_phrase_tete; struct liste_phrases *o_phrase_queue; struct raw_buff i_buff; struct raw_buff o_buff; }; /* liste chainee de logs circulaires avec nom du chan loggé */ struct chanlog_list { struct chanlog_list *suivant; /* constitue une liste chainée */ int lognextfree; /* indice de la prochaine phrase dans log[] */ int loglastsend; /* derniere phrase envoyée avec succes */ char name[32]; /* nom du chan loggé ici */ char *log[LOGLEN]; /* tableau circulaire contenant les phrases */ }; #define LOGNEXT(i) (i)+1 >= LOGLEN ? 0 : (i)+1 extern int listenedsocket; /* le port qui accepte les connections entrantes */ extern int iorunning; /* controle des boucles principales */ extern int masterrunning; /* controle des boucles principales */ extern int newclient; /* indique quand un nouveau client arrive */ void *io_thread(void *); void endstruct_reinit(struct endstruct *lpes); void endstruct_init(struct endstruct *lpes); #endif