Example #1
0
static int channelmode_hook(int argc, char *argv[])
{
	char *nick = grab_nick(argv[0]);
	channel_t *ch = find_channel(argv[2], irc_pick_server());
	if (!ch)
		return -1;
	cwio_out(ch->win, "%s sets %s %s in %s [%s]\n",
		 nick, argv[4], argv[3], ch->name, ch->server);
	free(nick);
	return 0;
}
Example #2
0
void supla_device_channels::add_channel(int Id, int Number, int Type, int Func, int Param1, int Param2, int Param3) {

	safe_array_lock(arr);

	if ( find_channel(Id) == 0 ) {
		safe_array_add(arr, new supla_device_channel(Id, Number, Type, Func, Param1, Param2, Param3));
	}

	safe_array_unlock(arr);

}
Example #3
0
void
inbound_kick (server * serv, char *chan, char *user, char *kicker,
              char *reason)
{
    session *sess = find_channel (serv, chan);
    if (sess)
    {
        EMIT_SIGNAL (XP_TE_KICK, sess, kicker, user, chan, reason, 0);
        userlist_remove (sess, user);
    }
}
Example #4
0
/*
 * part_one_client
 *
 * inputs	- pointer to server
 * 		- pointer to source client to remove
 *		- char pointer of name of channel to remove from
 * output	- none
 * side effects	- remove ONE client given the channel name
 */
static void
part_one_client(struct Client *client_p, struct Client *source_p, char *name, char *reason)
{
    struct Channel *chptr;
    struct membership *msptr;
    char reason2[BUFSIZE];

    if((chptr = find_channel(name)) == NULL)
    {
        sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL, form_str(ERR_NOSUCHCHANNEL), name);
        return;
    }

    msptr = find_channel_membership(chptr, source_p);
    if(msptr == NULL)
    {
        sendto_one_numeric(source_p, ERR_NOTONCHANNEL, form_str(ERR_NOTONCHANNEL), name);
        return;
    }

    if(MyConnect(source_p) && !IsOper(source_p) && !IsExemptSpambot(source_p))
        check_spambot_warning(source_p, NULL);

    /*
     *  Remove user from the old channel (if any)
     *  only allow /part reasons in -m chans
     */
    if(reason[0] && (is_chanop(msptr) || !MyConnect(source_p) ||
                     ((can_send(chptr, source_p, msptr) > 0 &&
                       (source_p->localClient->firsttime +
                        ConfigFileEntry.anti_spam_exit_message_time) < rb_current_time()))))
    {
        if(chptr->mode.mode & MODE_NOCOLOR)
        {
            rb_strlcpy(reason2, reason, BUFSIZE);
            strip_colour(reason2);
            reason = reason2;
        }
        sendto_server(client_p, chptr, CAP_TS6, NOCAPS,
                      ":%s PART %s :%s", use_id(source_p), chptr->chname, reason);
        sendto_channel_local(ALL_MEMBERS, chptr, ":%s!%s@%s PART %s :%s",
                             source_p->name, source_p->username,
                             source_p->host, chptr->chname, reason);
    }
    else
    {
        sendto_server(client_p, chptr, CAP_TS6, NOCAPS,
                      ":%s PART %s", use_id(source_p), chptr->chname);
        sendto_channel_local(ALL_MEMBERS, chptr, ":%s!%s@%s PART %s",
                             source_p->name, source_p->username,
                             source_p->host, chptr->chname);
    }
    remove_user_from_channel(msptr);
}
Example #5
0
void			poller_epoll::assert_channel( evt_channel* channel,bool need_exist)
{
	//LOG_INFO.stream()<< "check channel :"<<channel->get_name();
	evt_channel* ptr=find_channel(channel->fd());
	if(need_exist && !ptr){
		LOG_EROR.stream()<< channel->get_name()<<" not exists";
	}
	if(!need_exist && ptr){
		LOG_EROR.stream()<< channel->get_name()<<" alreay exists";
	}
}
Example #6
0
 OpenSLAudioChannel* OpenSLAudioEngine::GetChannel(int freq,int channels,int bits) {
     SLDataFormat_PCM formatPCM = {0};
     formatPCM.formatType = SL_DATAFORMAT_PCM;
     formatPCM.numChannels = channels;
     formatPCM.samplesPerSec = freq*1000;
     formatPCM.bitsPerSample = bits ;//header.bitsPerSample;
     formatPCM.containerSize = bits;// header.fmtSize;
     formatPCM.channelMask = channels == 2 ? (SL_SPEAKER_FRONT_LEFT|SL_SPEAKER_FRONT_RIGHT) : SL_SPEAKER_FRONT_CENTER;
     formatPCM.endianness = SL_BYTEORDER_LITTLEENDIAN;
     return find_channel(formatPCM);
 }
Example #7
0
void
inbound_join (server *serv, char *chan, char *user, char *ip)
{
	session *sess = find_channel (serv, chan);
	if (sess)
	{
		if (!sess->hide_join_part)
			EMIT_SIGNAL (XP_TE_JOIN, sess, user, chan, ip, NULL, 0);
		add_name (sess, user, ip);
	}
}
Example #8
0
void
inbound_join (server *serv, char *chan, char *user, char *ip, char *account,
				  char *realname, const message_tags_data *tags_data)
{
	session *sess = find_channel (serv, chan);
	if (sess)
	{
		EMIT_SIGNAL_TIMESTAMP (XP_TE_JOIN, sess, tags_data->timestamp, user, chan, ip, account);
		userlist_add (sess, user, ip, account, realname, tags_data);
	}
}
Example #9
0
int Server::msg_channel(const char *msg, const uint16_t len, const uint32_t sender, const uint16_t channel) {
	Channel *chan = find_channel(channel);
	if (chan) {
		int success = 0;
		for (int x = 0; x < chan->n_members; ++x) {
			success += chan->members[x].ptr->msg(msg, len, sender, channel);
		}
		return success;
	}
	return 0;
}
Example #10
0
/*
  get a pointer to first auxillary channel for a channel function
*/
SRV_Channel *SRV_Channels::get_channel_for(SRV_Channel::Aux_servo_function_t function, int8_t default_chan)
{
    uint8_t chan;
    if (default_chan >= 0) {
        set_aux_channel_default(function, default_chan);
    }
    if (!find_channel(function, chan)) {
        return nullptr;
    }
    return &channels[chan];
}
Example #11
0
/* m_tb()
 *
 * parv[1] - channel
 * parv[2] - topic ts
 * parv[3] - optional topicwho/topic
 * parv[4] - topic
 */
static int
ms_tb(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
    struct Channel *chptr;
    const char *newtopic;
    const char *newtopicwho;
    time_t newtopicts;
    struct Client *fakesource_p;

    chptr = find_channel(parv[1]);

    if(chptr == NULL)
        return 0;

    newtopicts = atol(parv[2]);

    /* Hide connecting server on netburst -- jilles */
    if (ConfigServerHide.flatten_links && !HasSentEob(source_p))
        fakesource_p = &me;
    else
        fakesource_p = source_p;

    if(parc == 5) {
        newtopic = parv[4];
        newtopicwho = parv[3];
    } else {
        newtopic = parv[3];
        newtopicwho = fakesource_p->name;
    }

    if (EmptyString(newtopic))
        return 0;

    if(chptr->topic == NULL || chptr->topic_time > newtopicts) {
        /* its possible the topicts is a few seconds out on some
         * servers, due to lag when propagating it, so if theyre the
         * same topic just drop the message --fl
         */
        if(chptr->topic != NULL && strcmp(chptr->topic, newtopic) == 0)
            return 0;

        set_channel_topic(chptr, newtopic, newtopicwho, newtopicts);
        sendto_channel_local(ALL_MEMBERS, chptr, ":%s TOPIC %s :%s",
                             fakesource_p->name, chptr->chname, newtopic);
        sendto_server(client_p, chptr, CAP_TB|CAP_TS6, NOCAPS,
                      ":%s TB %s %ld %s%s:%s",
                      use_id(source_p), chptr->chname, (long) chptr->topic_time,
                      ConfigChannel.burst_topicwho ? chptr->topic_info : "",
                      ConfigChannel.burst_topicwho ? " " : "", chptr->topic);
    }

    return 0;
}
Example #12
0
void
inbound_topictime (server *serv, char *chan, char *nick, time_t stamp)
{
	char *tim = ctime (&stamp);
	session *sess = find_channel (serv, chan);

	if (!sess)
		sess = serv->server_session;

	tim[24] = 0;	/* get rid of the \n */
	EMIT_SIGNAL (XP_TE_TOPICDATE, sess, chan, nick, tim, NULL, 0);
}
Example #13
0
void
inbound_kick (server *serv, char *chan, char *user, char *kicker, char *reason,
				  const message_tags_data *tags_data)
{
	session *sess = find_channel (serv, chan);
	if (sess)
	{
		EMIT_SIGNAL_TIMESTAMP (XP_TE_KICK, sess, kicker, user, chan, reason, 0,
									  tags_data->timestamp);
		userlist_remove (sess, user);
	}
}
Example #14
0
/* This function stops all transfers on the given channel with the given
 * direction. This function is required to stop any video transfers, or any
 * non-blocking transfers. */
void axidma_stop_transfer(axidma_dev_t dev, int channel)
{
    struct axidma_chan chan;
    dma_channel_t *dma_chan;

    assert(find_channel(dev, channel) != NULL);

    // Setup the argument structure for the IOCTL
    dma_chan = find_channel(dev, channel);
    chan.channel_id = channel;
    chan.dir = dma_chan->dir;
    chan.type = dma_chan->type;

    // Stop all transfers on the given DMA channel
    if (ioctl(dev->fd, AXIDMA_STOP_DMA_CHANNEL, &chan) < 0) {
        perror("Failed to stop the DMA channel");
        assert(false);
    }

    return;
}
Example #15
0
bool supla_client_channels::channel_exists(int ChannelID) {
	bool result = false;

	safe_array_lock(arr);

	if ( find_channel(ChannelID) != NULL )
		result = true;

	safe_array_unlock(arr);

	return result;
}
Example #16
0
static int
mo_forcepart(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
	struct Client *target_p;
	struct Channel *chptr;
	struct membership *msptr;

	if(!IsOperAdmin(source_p))
	{
		sendto_one(source_p, form_str(ERR_NOPRIVS), me.name, source_p->name, "forcepart");
		return 0;
	}

	if((hunt_server(client_p, source_p, ":%s FORCEPART %s %s", 1, parc, parv)) != HUNTED_ISME)
		return 0;

	/* if target_p == NULL then let the oper know */
	if((target_p = find_client(parv[1])) == NULL)
	{
		sendto_one(source_p, form_str(ERR_NOSUCHNICK), me.name, source_p->name, parv[1]);
		return 0;
	}

	if(!IsClient(target_p))
		return 0;


	if((chptr = find_channel(parv[2])) == NULL)
	{
		sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL,
				   form_str(ERR_NOSUCHCHANNEL), parv[1]);
		return 0;
	}

	if((msptr = find_channel_membership(chptr, target_p)) == NULL)
	{
		sendto_one(source_p, form_str(ERR_USERNOTINCHANNEL),
			   me.name, source_p->name, parv[1], parv[2]);
		return 0;
	}

	sendto_server(target_p, chptr, NOCAPS, NOCAPS,
		      ":%s PART %s :%s", target_p->name, chptr->chname, target_p->name);

	sendto_channel_local(ALL_MEMBERS, chptr, ":%s!%s@%s PART %s :%s",
			     target_p->name, target_p->username,
			     target_p->host, chptr->chname, target_p->name);


	remove_user_from_channel(msptr);

	return 0;
}
Example #17
0
/* Sets up a callback function to be called whenever the transaction completes
 * on the given channel for asynchronous transfers. */
void axidma_set_callback(axidma_dev_t dev, int channel, axidma_cb_t callback,
                        void *data)
{
    dma_channel_t *chan;

    assert(find_channel(dev, channel) != NULL);

    chan = &dev->channels[channel];
    chan->callback = callback;
    chan->user_data = data;

    return;
}
Example #18
0
void
inbound_topictime (server *serv, char *chan, char *nick, time_t stamp,
						 const message_tags_data *tags_data)
{
	char *tim = ctime (&stamp);
	session *sess = find_channel (serv, chan);

	if (!sess)
		sess = serv->server_session;

	tim[24] = 0;	/* get rid of the \n */
	EMIT_SIGNAL_TIMESTAMP (XP_TE_TOPICDATE, sess, tags_data->timestamp, chan, nick, tim);
}
Example #19
0
static int
me_roleplay(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
    struct Channel *chptr;

    /* Don't segfault if we get ROLEPLAY with an invalid channel.
     * This shouldn't happen but it's best to be on the safe side. */
    if((chptr = find_channel(parv[1])) == NULL)
        return 0;

    sendto_channel_local(ALL_MEMBERS, chptr, ":%s!%[email protected] PRIVMSG %s :%s (%s)", parv[2], source_p->name, parv[1], parv[3], source_p->name);
    return 0;
}
Example #20
0
static int kick_hook(int argc, char *argv[])
{
	channel_t *ch = find_channel(argv[2], irc_pick_server());
	if (!ch)
		return -1;
	user_t *u = find_user(argv[3], irc_pick_server());
	char *nick = grab_nick(argv[0]);
	cwio_out(ch->win, "%s %s was kicked from %s by %s [%s]\n", timestamp(),
		 argv[3], argv[2], nick, argv[4]);
	u->rm_channel(u, ch->name);
	free(nick);
	return 0;
}
Example #21
0
void
inbound_part (server *serv, char *chan, char *user, char *ip, char *reason)
{
	session *sess = find_channel (serv, chan);
	if (sess)
	{
		if (*reason)
			EMIT_SIGNAL (XP_TE_PARTREASON, sess, user, ip, chan, reason, 0);
		else
			EMIT_SIGNAL (XP_TE_PART, sess, user, ip, chan, NULL, 0);
		userlist_remove (sess, user);
	}
}
Example #22
0
void recv_text_handler( string & str )
{
   mud_channel *channel = nullptr;
   char_data *ch = nullptr;
   string arg1, arg2, arg3, arg4, arg5, chname;
   int ilevel = -1, clevel = -1;
   bool isnpc, isinvis;

   str = one_argument( str, arg1 );
   str = one_argument( str, arg2 );
   str = one_argument( str, arg3 );
   str = one_argument( str, arg4 );
   str = one_argument( str, arg5 );
   str = one_argument( str, chname );
   ilevel = atoi( arg2.c_str(  ) );
   clevel = atoi( arg3.c_str(  ) );
   isnpc = atoi( arg4.c_str(  ) );
   isinvis = atoi( arg5.c_str(  ) );

   if( !( channel = find_channel( arg1 ) ) )
   {
      bug( "%s: channel %s doesn't exist!", __func__, arg1.c_str(  ) );
      return;
   }

   /*
    * Massive punt here 
    */
   ch = new char_data;

   if( !isnpc )
   {
      ch->name = STRALLOC( capitalize( chname.c_str(  ) ) );
      ch->pcdata = new pc_data;
      ch->pcdata->wizinvis = ilevel;
      if( isinvis )
         ch->set_pcflag( PCFLAG_WIZINVIS );
   }
   else
   {
      ch->set_actflag( ACT_IS_NPC );
      ch->short_descr = STRALLOC( capitalize( chname.c_str(  ) ) );
      ch->mobinvis = ilevel;
   }
   ch->level = clevel;
   ch->to_room( get_room_index( ROOM_VNUM_LIMBO ) );
   send_tochannel( ch, channel, str );

   ch->from_room(  );
   deleteptr( ch );
}
Example #23
0
void
inbound_upart (server *serv, char *chan, char *ip, char *reason)
{
	session *sess = find_channel (serv, chan);
	if (sess)
	{
		if (*reason)
			EMIT_SIGNAL (XP_TE_UPARTREASON, sess, serv->nick, ip, chan, reason,
							 0);
		else
			EMIT_SIGNAL (XP_TE_UPART, sess, serv->nick, ip, chan, NULL, 0);
		clear_channel (sess);
	}
}
Example #24
0
int
_gpgme_io_read (int fd, void *buffer, size_t count)
{
  int saved_errno = 0;
  gsize nread;
  GIOChannel *chan;
  GIOStatus status;
  TRACE_BEG2 (DEBUG_SYSIO, "_gpgme_io_read", fd,
	      "buffer=%p, count=%u", buffer, count);

  chan = find_channel (fd);
  if (!chan)
    {
      TRACE_LOG ("no channel registered");
      errno = EINVAL;
      return TRACE_SYSRES (-1);
    }
  TRACE_LOG1 ("channel %p", chan);

  {
    GError *err = NULL;
    status = g_io_channel_read_chars (chan, (gchar *) buffer,
				      count, &nread, &err);
    if (err)
      {
	TRACE_LOG2 ("status %i, err %s", status, err->message);
	g_error_free (err);
      }
  }

  if (status == G_IO_STATUS_EOF)
    nread = 0;
  else if (status == G_IO_STATUS_AGAIN)
    {
      nread = -1;
      saved_errno = EAGAIN;
    }
  else if (status != G_IO_STATUS_NORMAL)
    {
      TRACE_LOG1 ("status %d", status);
      nread = -1;
      saved_errno = EIO;
    }
  
  if (nread != 0 && nread != -1)
    TRACE_LOGBUF (buffer, nread);

  errno = saved_errno;
  return TRACE_SYSRES (nread);
}
Example #25
0
void
inbound_part (server *serv, char *chan, char *user, char *ip, char *reason,
				  const message_tags_data *tags_data)
{
	session *sess = find_channel (serv, chan);
	if (sess)
	{
		if (*reason)
			EMIT_SIGNAL_TIMESTAMP (XP_TE_PARTREASON, sess, tags_data->timestamp, user, ip, chan, reason);
		else
			EMIT_SIGNAL_TIMESTAMP (XP_TE_PART, sess, tags_data->timestamp, user, ip, chan);
		userlist_remove (sess, user);
	}
}
Example #26
0
void
inbound_upart (server *serv, char *chan, char *ip, char *reason,
					const message_tags_data *tags_data)
{
	session *sess = find_channel (serv, chan);
	if (sess)
	{
		if (*reason)
			EMIT_SIGNAL_TIMESTAMP (XP_TE_UPARTREASON, sess, tags_data->timestamp, serv->nick, ip, chan, reason);
		else
			EMIT_SIGNAL_TIMESTAMP (XP_TE_UPART, sess, tags_data->timestamp, serv->nick, ip, chan);
		clear_channel (sess);
	}
}
Example #27
0
void
inbound_ujoin (server *serv, char *chan, char *nick, char *ip,
					const message_tags_data *tags_data)
{
	session *sess;

	/* already joined? probably a bnc */
	sess = find_channel (serv, chan);
	if (!sess)
	{
		/* see if a window is waiting to join this channel */
		sess = find_session_from_waitchannel (chan, serv);
		if (!sess)
		{
			/* find a "<none>" tab and use that */
			sess = find_unused_session (serv);
			if (!sess)
				/* last resort, open a new tab/window */
				sess = new_ircwindow (serv, chan, SESS_CHANNEL, 1);
		}
	}

	safe_strcpy (sess->channel, chan, CHANLEN);

	fe_set_channel (sess);
	fe_set_title (sess);
	fe_set_nonchannel (sess, TRUE);
	userlist_clear (sess);

	log_open_or_close (sess);

	sess->waitchannel[0] = 0;
	sess->ignore_date = TRUE;
	sess->ignore_mode = TRUE;
	sess->ignore_names = TRUE;
	sess->end_of_names = FALSE;

	/* sends a MODE */
	serv->p_join_info (sess->server, chan);

	EMIT_SIGNAL_TIMESTAMP (XP_TE_UJOIN, sess, nick, chan, ip, NULL, 0,
								  tags_data->timestamp);

	if (prefs.hex_irc_who_join)
	{
		/* sends WHO #channel */
		serv->p_user_list (sess->server, chan);
		sess->doing_who = TRUE;
	}
}
Example #28
0
void
inbound_topic (server * serv, char *chan, char *topic_text)
{
    session *sess = find_channel (serv, chan);

    if (sess)
    {
        set_topic (sess, topic_text, topic_text);
    }
    else
        sess = serv->server_session;

    EMIT_SIGNAL (XP_TE_TOPIC, sess, chan, topic_text, NULL, NULL, 0);
}
static
void authenticate_tcp_channel(struct bufferevent *bev, void *_)
{
    debug("tcp channel: authentication reading data");
    struct evbuffer *input  = bufferevent_get_input(bev);
    size_t len      = evbuffer_get_length(input);
    size_t wanted   = sizeof(struct MessageResponse);
    if(len < wanted)
        return;

    debug("tcp channel: authentication checking message");
    struct MessageResponse *res =
        (struct MessageResponse *) evbuffer_pullup(input, wanted);

    if(res->type != RESPONSE)
    {
        debug(  "tcp channel: invalid authentication message %s",
                message_get_type_string((struct Message *) res));

        bufferevent_free(bev);
        return;
    }

    union Channel *current = find_channel(&res->response);
    if(!current)
    {
        debug("tcp channel: authentication failed");
        bufferevent_free(bev);
        return;
    }

    evbuffer_drain(input, wanted);
    debug("tcp channel: authenticated");
    assert(current->base.proto == IPPROTO_TCP);
    current->tcp.channel_buffers = bev;
    bufferevent_setcb(  current->tcp.peer_buffers,
                        read_tcp_peer,
                        NULL,
                        error_on_tcp_peer,
                        current);

    bufferevent_enable(current->tcp.peer_buffers, EV_READ | EV_WRITE);
    bufferevent_setcb(  bev,
                        read_tcp_channel,
                        NULL,
                        error_on_tcp_channel,
                        current);

    read_tcp_channel(bev, current);
}
Example #30
0
void
inbound_ujoin (server *serv, char *chan, char *nick, char *ip)
{
	session *sess;

	/* already joined? probably a bnc */
	sess = find_channel (serv, chan);
	if (!sess)
	{
		/* see if a window is waiting to join this channel */
		sess = find_session_from_waitchannel (chan, serv);
		if (!sess)
		{
			/* find a "<none>" tab and use that */
			sess = find_unused_session (serv);
			if (!sess)
				/* last resort, open a new tab/window */
				sess = new_ircwindow (serv, chan, SESS_CHANNEL);
		}
	}

	safe_strcpy (sess->channel, chan, CHANLEN);

	fe_set_channel (sess);
	fe_set_title (sess);
	fe_set_nonchannel (sess, TRUE);
	clear_user_list (sess);

	if (prefs.logging)
		log_open (sess);

	sess->waitchannel[0] = 0;
	sess->ignore_date = TRUE;
	sess->ignore_mode = TRUE;
	sess->ignore_names = TRUE;
	sess->end_of_names = FALSE;

	/* sends a MODE */
	serv->p_join_info (sess->server, chan);

	EMIT_SIGNAL (XP_TE_UJOIN, sess, nick, chan, ip, NULL, 0);

	if (prefs.userhost)
	{
		/* sends WHO #channel */
		serv->p_user_list (sess->server, chan);
		sess->doing_who = TRUE;
	}
}