static bool is_topic_valid(t_message *msg, t_client *client, t_chan *chans) { t_chan *tmp; if (msg == NULL || client == NULL) return (false); if (get_nb_params(msg->params) != 1 && get_nb_params(msg->params) != 2) { dprintf(client->client, ERR_NEEDMOREPARAMS, S_NAME, S_ADDR, client->nick, msg->command); return (false); } if ((tmp = find_chan(chans, msg->params[0])) == NULL) { dprintf(client->client, ERR_NOTONCHANNEL, S_NAME, S_ADDR, client->nick, msg->params[0]); return (false); } if (is_in_chan(tmp->name, client) == false) { dprintf(client->client, ERR_NOTONCHANNEL, S_NAME, S_ADDR, client->nick, msg->params[0]); return (false); } return (true); }
static int event_rename(struct ast_mansession *s, struct message *m) { struct ast_chan *chan; chan = find_chan(get_header(m, "Oldname")); strncpy(chan->name, get_header(m, "Newname"), sizeof(chan->name) - 1); return 0; }
static int event_newstate(struct ast_mansession *s, struct message *m) { struct ast_chan *chan; chan = find_chan(get_header(m, "Channel")); strncpy(chan->state, get_header(m, "State"), sizeof(chan->state) - 1); return 0; }
static void send_privmsg(t_message *msg, char *dest, t_client *client, t_chan *chans) { t_client *tmpclient; if (strcmp(dest, "#*") == 0) send_all_chan(msg, client, first_node(&chans->node)); else if (strcmp(dest, "*") == 0) send_all(msg, client, first_node(&client->node)); else { if (strncmp(dest, "#", 1) == 0) send_chan(msg, client, find_chan(chans, dest)); else { tmpclient = first_node(&client->node); while (tmpclient != NULL && strcmp(tmpclient->nick, dest) != 0) tmpclient = tmpclient->node.next; if (tmpclient == NULL) dprintf(client->client, ERR_NOSUCHNICK, S_NAME, S_ADDR, client->nick, dest); else dprintf(tmpclient->client, ":%s!%s PRIVMSG %s :%s\r\n", client->nick, client->user, tmpclient->nick, msg->params[1]); } } }
static int event_newexten(struct ast_mansession *s, struct message *m) { struct ast_chan *chan; chan = find_chan(get_header(m, "Channel")); strncpy(chan->exten, get_header(m, "Extension"), sizeof(chan->exten) - 1); strncpy(chan->context, get_header(m, "Context"), sizeof(chan->context) - 1); strncpy(chan->priority, get_header(m, "Priority"), sizeof(chan->priority) - 1); return 0; }
void func_join(char *name_chan, t_listc *listc, t_listh *firsth, t_listm *firstm) { t_listh *listh; char str[BUF_SIZE]; listh = find_chan(name_chan, firsth); if (listh == NULL) listh = add_listh(firsth, name_chan); listc->channel = listh->num_chan; if (sprintf(str, "*** %s has joined channel #%s\n", listc->name, listh->name) < 0) { perror("sprintf()"); return ; } add_all_listm(firstm, listc, str); }
void cmd_topic(t_message *msg, t_client *client, t_chan *chans) { t_chan *channel; if (is_topic_valid(msg, client, chans) == true) { channel = find_chan(chans, msg->params[0]); if (is_chan_op(client, channel) == false) dprintf(client->client, ERR_CHANOPRIVSNEEDED, S_NAME, S_ADDR, client->nick, msg->params[0]); else { if (get_nb_params(msg->params) == 1) display_topic(client, channel); else set_topic(msg, client, channel); } } }
void sv_who_chan(char **cmds, t_fd *cl, t_env *e) { t_chan *chan; t_listin *list; t_fd *fd; if (!(chan = find_chan(cmds[0], e->chans)) || ((chan->cmode & CHFL_SECRET || chan->cmode & CHFL_PRIV) && !is_chan_member(chan, cl))) return ; list = chan->users; while (list) { fd = (t_fd *)list->is; if ((!(chan->cmode & CHFL_ANON) || fd->i.fd == cl->i.fd) && (!(fd->inf->umode & USR_INVISIBL) || have_common_chan(fd, cl)) && (!cmds[1] || ft_strcmp(cmds[1], "o") || list->mode & CHFL_CHANOP)) sv_who_info(fd, cl, e); list = list->next; } }