#include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include <sys/types.h> #include <signal.h> #include <time.h> #include <string.h> #include <unistd.h> #include <dlfcn.h> #include <stdarg.h> #define MAX_CONFIG_STRING_SIZE 1024 #define BUFFER_SIZE 1024 #define VERSION "0.1" int numUsers; struct conf; struct ChanList; struct UsersList; struct Socket; struct ChannelUsers; struct Chans; struct ModInfo; typedef struct ChannelUsers { struct ChannelUsers *next; int joined; char nick[32]; char mode[10]; } ChannelUsersNode; typedef ChannelUsersNode *ChanUsers; typedef struct Chans { struct Chans *next; char name[64]; char topic[256]; ChanUsers chanusers; } ChansNode; typedef ChansNode *Channels; typedef struct conf { int port; char servername[256]; char version[32]; char network[32]; char *ip; } ConfNode; typedef ConfNode *Conf; typedef struct ChanList { struct ChanList *next; Channels chan; } ChanListNode; typedef ChanListNode *UserChanList; typedef struct UsersList { struct UserList *next; UserChanList chans; char nick[32]; char ident[32]; char host[64]; char name[128]; char server[128]; int sid; int socket; int idle; int idlet; int signon; }; typedef struct Socket { struct Socket *next; struct UsersList *userinfo; int socket; int b; int type; int idle; int id; time_t tm; int stat; char data[1024]; } SocketNode; typedef SocketNode *Sock; typedef struct ModInfo { struct Mods *next; void *handle; void (*void_ptr)(); char *(*char_ptr)(); int (*int_ptr)(); char ModuleName[128]; char ModuleDescription[512]; } ModNode; typedef ModNode *Mods; struct slist { int lid; Conf cf; Sock sockets; Mods modules; Users users; Channels channels; }; Users AddUser(int sid,int socket,char *nick,Users *head); Users FindNick(Users head,char *nick); int NickList(Users head); int Parse(struct slist *lhead,Sock shead); int DoIdle(Sock *head); void DeleteUser(Users *head,int val); int SendLogon(struct slist head,char *nick,int s); int SendMotd(struct slist head,Sock shead); int GetHost(char *host, char *ip); Channels FindChannel(Channels head,char *channel); Channels AddChannel(struct slist *tmp,char *chan); int AddChannelUser(ChanUsers *head,char *nick,char *mode); int PrintUsers(ChanUsers head); char *CNList(ChanUsers head); int ShowChanPrivmsg(Channels head,Sock shead,struct slist sdata,char *prvmsg); int ShowChanJoin(Channels head,Sock shead,struct slist sdata); int ShowChanPart(Channels head,Sock shead,struct slist sdata,char *msg);