#include #include #include extern int sevsck; struct aBan { struct aBan *next; char channel[255]; char mask[150]; char who[10]; time_t timeout; }; struct *banlist=NULL; int addban(char *who,char *mask,char *channel,time_t timeout) { struct aBan *tmpban; char outputbuf[512]; tmpban=(struct aBan *) malloc(sizeof(struct aBan)); strcpy(tmpban->mask,mask); strcpy(tmpban->who,who); strcpy(tmpban->channel,channel); tmpban->timeout = timeout; tmpban->next=bansist; banlist=tmpban; sprintf(outputbuf,":chansvr MODE %s +b %s\n",tmpban->channel,tmpban->mask); writeln(sevsck,outputbuf); return 1; } int remove_ban(char *mask) { struct aBan *tmpban,*tmp2ban; char outputbuf[512]; tmp2ban=banlist; if(tmp2ban == NULL) return; if(!strcasecmp(banlist->mask,mask)) { banlist=banlist->next; free(tmp2ban); return 1; } tmpban = banlist->next; while(tmpban != NULL) { if( !strcasecmp(tmpban->mask,mask)) { tmp2ban->next=tmpban->next; sprintf(outputbuf,":Chansvr MODE %s -b %s\n",tmpban->channel, tmpban->mask); writeln(sevsck,outputbuf); free(tmpban); return 1; } tmp2ban=tmpban; tmpban=tmpban->next; } } int timeout_ban() { struct aBan *tmpban,*tmp2ban; char outputbuf[512]; tmp2ban=banlist; if((tmp2ban == NULL) || (tmp2ban->next == NULL)) return; /* if((banlist->timeout > 0) && (banlist->timeout < NOWTIME)) ** { banlist=banlist->next; ** free(tmp2ban); ** return 1; ** } */ tmpban = banlist->next; while(tmpban != NULL) { if((tmpban->timeout > 0) && (tmpban->timeout < NOWTIME)) { tmp2ban->next=tmpban->next; sprintf(outputbuf,":Chansvr MODE %s -b %s\n",tmpban->channel, tmpban->mask); writeln(sevsck,outputbuf); free(tmpban); tmpban=tmp2ban->next; continue; /* return 1; */ } tmp2ban=tmpban; tmpban=tmpban->next; } }