示例#1
0
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;
}
示例#4
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;
}
示例#6
0
文件: serv_func.c 项目: Sun42/my_irc
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);
}
示例#7
0
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);
	}
    }
}
示例#8
0
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;
	}
}