#include "ircd.h"
#include "socket.h"
Channels FindChannel(Channels head,char *channel) {
Channels t;
t = head;
while (t) {
if (!strcasecmp(t->name,channel)) {
return(t);
}
(Channels)t = t->next;
}
return(NULL);
}
ChanUsers FindChannelUser(ChanUsers head,char *nick) {
ChanUsers t;
t = head;
while (t) {
if (!strcasecmp(t->nick,nick)) {
return(t);
}
(ChanUsers)t = t->next;
}
return(NULL);
}
Channels AddChannel(struct slist *tmp,char *chan) {
struct slist head;
Channels node;
head = *tmp;
if ((node=(Channels)calloc(1,sizeof(ChansNode)))!=NULL) {
sprintf(node->name,"%s",chan);
sprintf(node->topic,"");
(Channels)node->next=head.channels;
head.channels = node;
}
else {
printf("Val: %s not inserted - not enough mem!\n",chan);
}
*tmp = head;
return(node);
}
int AddUserChannel(UserChanList *head,Channels *channel) {
UserChanList node;
if ((node=(UserChanList)calloc(1,sizeof(UserChanList)))!=NULL) {
node->chan = channel;
(UserChanList)node->next=*head;
*head = node;
}
return(0);
}
void DeleteUserChannel(UserChanList *head,char *chan) {
UserChanList temp,previous,current;
printf("Test TesT Test: [%s]\n",chan);
if (!strcasecmp((*head)->chan->name,chan)) {
temp=*head;
(UserChanList *)*head=(*head)->next;
free(temp);
return;
}
else {
previous=*head;
(UserChanList)current=(*head)->next;
while((current!=NULL)&(strcasecmp(current->chan->name,chan))) {
previous=current;
(UserChanList)current=current->next;
}
if (current!=NULL) {
temp=current;
previous->next=current->next;
free(temp);
return;
}
}
return;
}
void DeleteChannelUser(ChanUsers *head,char *nick) {
ChanUsers temp,previous,current;
if (!strcasecmp((*head)->nick,nick)) {
temp=*head;
(ChanUsers *)*head=(*head)->next;
free(temp);
return;
}
else {
previous=*head;
(ChanUsers)current=(*head)->next;
while((current!=NULL)&(strcasecmp(current->nick,nick))) {
previous=current;
(ChanUsers)current=current->next;
}
if (current!=NULL) {
temp=current;
previous->next=current->next;
free(temp);
return;
}
}
return;
}
int AddChannelUser(ChanUsers *head,char *nick,char *mode) {
ChanUsers node;
if ((node=(ChanUsers)calloc(1,sizeof(ChannelUsersNode)))!=NULL) {
node->joined=time(NULL);
sprintf(node->nick,"%s",nick);
sprintf(node->mode,mode);
(ChanUsers)node->next=*head;
*head = node;
}
else {
printf("Val: %s not inserted - not enough mem!\n",nick);
return(1);
}
return(0);
}
int ListChannels(Channels head) {
Channels t;
t = head;
printf("All Channel List:\n");
while (t) {
printf("Channel Name: [%s]\n",t->name);
(Channels)t = t->next;
}
return(0);
}
int DoListChannels(Channels head,int s) {
Channels t;
t = head;
SendSock(s,":home.domainatlantic.com 321 Mofo Channel :Users Name\n");
while (t) {
SendSock(s,":home.domainatlantic.com 322 Mofo %s 1 :\n",t->name);
(Channels)t = t->next;
}
SendSock(s,":home.domainatlantic.com 323 Mofo :End of /LIST\n");
return(0);
}
int PrintUsers(ChanUsers head) {
ChanUsers t;
t = head;
printf("Channel Users List:\n");
while (t) {
printf("Channel Nick: [%s][%s]\n",t->nick,t->mode);
(ChanUsers)t = t->next;
}
return(0);
}
int PrintChannels(UserChanList head) {
UserChanList t;
t = head;
printf("User Channel List:\n");
while (t) {
printf("Channel: [%s]\n",t->chan->name);
(UserChanList)t = t->next;
}
return(0);
}
int ShowChanPrivmsg(Channels head,Sock shead,struct slist sdata,char *prvmsg) {
ChanUsers t;
Users tuser;
char data[1024];
t = head->chanusers;
while (t) {
tuser = FindNick(sdata.users,t->nick);
if (strcasecmp(tuser->nick,shead->userinfo->nick)) {
sprintf(data,":%s!%s@%s PRIVMSG %s %s\n",shead->userinfo->nick,shead->userinfo->ident,shead->userinfo->host,head->name,prvmsg);
SendSock(tuser->socket,data);
}
(ChanUsers)t = t->next;
}
return(1);
}
int ShowChanPart(Channels head,Sock shead,struct slist sdata,char *msg) {
ChanUsers t;
Users tuser;
char data[1024];
t = head->chanusers;
while (t) {
tuser = FindNick(sdata.users,t->nick);
SendSock(tuser->socket,":%s!%s@%s PART %s %s\n",shead->userinfo->nick,shead->userinfo->ident,shead->userinfo->host,head->name,msg);
(ChanUsers)t = t->next;
}
return(1);
}
int ShowChanJoin(Channels head,Sock shead,struct slist sdata) {
ChanUsers t;
Users tuser;
char data[1024];
t = head->chanusers;
while (t) {
tuser = FindNick(sdata.users,t->nick);
if (strcasecmp(tuser->nick,shead->userinfo->nick)) {
sprintf(data,":%s!%s@%s JOIN :%s\n",shead->userinfo->nick,shead->userinfo->ident,shead->userinfo->host,head->name);
SendSock(tuser->socket,data);
}
(ChanUsers)t = t->next;
}
return(1);
}
char *CNList(ChanUsers head) {
ChanUsers t;
char data[1024] = "";
t = head;
while (t) {
if (strstr(t->mode,"@")) {
if (data[0]) {
sprintf(data,"%s @%s",data,t->nick);
}
else {
sprintf(data,"@%s",t->nick);
}
}
else {
if (data[0]) {
sprintf(data,"%s %s",data,t->nick);
}
else {
sprintf(data,"%s",t->nick);
}
}
(ChanUsers)t = t->next;
}
return((char *)data);
}