Example #1
0
/**
 UserManager::handleQuit

 handle quits (ie delete the class)
*/
void UserManager::handleQuit(nstring::str &uid)
{
	nstring::str nick;
	getNickFromId(uid, nick);
	// get nickname from uid.
	
	irc::nhash::iterator i = uidMap.find(uid);
	irc::user_hash::iterator it = users.find(nick);
	if (i != uidMap.end() && it != users.end())
	{
		nstring::str server = instance->ircdProtocol->getServerFromId(it->second->server);
		instance->log(MISC, "handleQuit(): " + it->second->nick + "!" + it->second->ident + "@" + it->second->host + " has disconnected from " + server);
		//instance->log(LOGCHAN, "// TODO");
		// log things, ie LOGCHAN and NETWORK
	
		delete it->second;
		users.erase(it);
		uidMap.erase(i);
		// remove the user
		
		return;
		// we're done, bail!
	}
	// user deleted
	
	instance->log(ERROR, "handleQuit(): Cannot find the user in user map, this will possibly cause a leak!");
	// log a few things here
	
	FOREACH_MODULE(instance, &Module::onQuit, nick);
}
Example #2
0
/**
 UserManager::handleNick

 handle nick, renames our nick in users and uidMap
*/
void UserManager::handleNick(nstring::str &uid, nstring::str &nick)
{
	User* userHolder = NULL;
	nstring::str userNick;
	getNickFromId(uid, userNick);
	// get the class from users
	
	irc::user_hash::iterator it = users.find(userNick);
	irc::nhash::iterator i = uidMap.find(uid);
	// find uid maps
	
	instance->log(MISC, "handleNick(): " + it->second->nick + "!" + it->second->ident + "@" + it->second->host + " changed nick to " + nick);
	//instance->log(LOGCHAN, "// TODO");
	// log things, ie LOGCHAN and NETWORK
	
	userHolder = it->second;
	i->second = nick;
		
	userHolder->oldNick = userHolder->nick;
	userHolder->nick = nick;
		
	users.insert(std::pair<nstring::str, User*>(nick, userHolder));
	users.erase(it);
	// update some info
	
	FOREACH_MODULE(instance, &Module::onNick, userNick, nick);
}
Example #3
0
/* Get the number of available panels.
 *
 * On success, the total number of available panels is returned . */
static int
num_panels (void)
{
  size_t idx = 0, npanels = 0;

  FOREACH_MODULE (idx, module_list)
    npanels++;

  return npanels;
}
/**
 ChannelManager::handleTopic

 handle TOPIC
*/
void ChannelManager::handleTopic(nstring::str &nick, nstring::str &chan, nstring::str &topic)
{
	Channel* channel = getChannel(chan);
	// get channel
	
	channel->topic = topic;
	channel->topicSetter = nick;
	
	instance->log(MISC, "handleTopic(): " + nick + " has changed the topic for " + chan + " to (" + topic + ")");
	// log things, ie NETWORK
	
	FOREACH_MODULE(instance, &Module::onTopic, nick, chan, topic);
}
Example #5
0
/**
 UserManager::handleConnect

 handle incoming users
*/
void UserManager::handleConnect(nstring::str &nick, nstring::str &ident, nstring::str &host, nstring::str &ip, nstring::str &nickTS, nstring::str &uid, nstring::str &sid, nstring::str &gecos)
{
	users.insert(std::pair<nstring::str, User*>(nick, new User(uid, nick, ident, host, ip, gecos, sid, nickTS)));
	uidMap.insert(std::pair<nstring::str, nstring::str>(uid, nick));
	// insert user into uid map so we can find it easily
	
	nstring::str server = instance->ircdProtocol->getServerFromId(sid);
	instance->log(MISC, "handleConnect(): " + nick + "!" + ident + "@" + host + " (" + uid + ") has connected to " + server);
	//instance->log(LOGCHAN, "// TODO");
	// log things, ie LOGCHAN and NETWORK
	
	FOREACH_MODULE(instance, &Module::onConnect, nick, uid, ident, host, ip);
}
/**
 ChannelManager::handleMode

 handle TMODE changes, etc.
*/
void ChannelManager::handleMode(nstring::str &uid, nstring::str &chan, nstring::str &modes)
{
	irc::modes modeContainer;
	irc::params paramContainer;
	instance->modeParser->sortModes(modes, modeContainer, paramContainer, true);
	// parse modes

	Channel* channel = getChannel(chan);
	instance->modeParser->saveModes(channel, modeContainer, paramContainer);
	// update the modes in our channel record
	
	FOREACH_MODULE(instance, &Module::onCMode, chan, modeContainer, paramContainer);
	// TODO
}
Example #7
0
/**
 UserManager::handleOper

 handle oper ups (mode = true/false)
*/
void UserManager::handleOper(nstring::str &uid, bool mode)
{
	nstring::str nick;
	getNickFromId(uid, nick);
	User* userHolder = getUser(nick);
	userHolder->oper = mode;
	// set oper to mode
	
	//instance->log(MISC, "handleConnect(): " + nick + "!" + ident + "@" + host + " has connected to " + sid);
	//instance->log(LOGCHAN, "// TODO");
	// log things, ie LOGCHAN and NETWORK
	
	FOREACH_MODULE(instance, &Module::onOper, nick, mode);
}
/**
 ChannelManager::handleCreate

 handle SJOINS or FJOIN w/e
*/
void ChannelManager::handleCreate(nstring::str &chan, nstring::str &ts, nstring::str &modes, std::vector<nstring::str> &users)
{
	Channel* channel = NULL;
	irc::chan_hash::iterator it = chans.find(chan);
	irc::nhash parsedUsers = parseUsers(users);
	irc::nhash oldUsers;
	// parse up users
	
	if (it == chans.end())
	{
		channel = new Channel(chan, ts);
		chans.insert(std::pair<nstring::str, Channel*>(chan, channel));
		channel->users.insert(parsedUsers.begin(), parsedUsers.end());
		
		instance->log(MISC, "handleCreate(): " + chan + " has been created with a timestamp of " + ts);
		// log things, ie MISC
	}
	else
	{
		channel = getChannel(chan);
		channel->users.insert(parsedUsers.begin(), parsedUsers.end());
		// set some vars in our Channel*
	}
	
	if (!modes.empty())
	{
		irc::modes modeContainer;
		irc::params paramContainer;
		instance->modeParser->sortModes(modes, modeContainer, paramContainer, true);
		instance->modeParser->saveModes(channel, modeContainer, paramContainer);
	}
	// parse modes and save modes..
	
	User* user = NULL;
	nstring::str tempNick;
	for (irc::nhash::iterator pit = channel->users.begin(); pit != channel->users.end(); ++pit)
	{
		tempNick = pit->first;
		user = instance->userManager->getUser(tempNick);
		user->qChans.push_back(chan);
		// get the nick & channel
	}
	// for channel->users and update the user's qChan vector
	
	FOREACH_MODULE(instance, &Module::onChanCreate, chan, parsedUsers);
	// on chan create
}
/**
 ChannelManager::handleJoin

 handle JOINS
*/
void ChannelManager::handleJoin(nstring::str &uid, nstring::str &ts, nstring::str &chan)
{
	Channel* channel = getChannel(chan);
	nstring::str nick;
	
	instance->userManager->getNickFromId(uid, nick);
	User* user = instance->userManager->getUser(nick);
	// get the nick & channel
	
	user->qChans.push_back(chan);
	channel->users.insert(std::pair<nstring::str, nstring::str>(nick, ""));
	
	instance->log(MISC, "handleJoin(): " + nick + " has joined " + chan);
	// log things, ie MISC

	FOREACH_MODULE(instance, &Module::onJoin, nick, chan);
}
Example #10
0
/**
 UserManager::handleHost

 handle host changes, typically CHGHOST
*/
void UserManager::handleHost(nstring::str &uid, nstring::str &host)
{
	nstring::str userNick;
	getNickFromId(uid, userNick);
	// get the class from users
	
	irc::user_hash::iterator it = users.find(userNick);
	// find uid maps
	
	instance->log(MISC, "handleHost(): " + it->second->nick + "!" + it->second->ident + "@" + it->second->host + " changed hostname to " + host);
	//instance->log(LOGCHAN, "// TODO");
	// log things, ie LOGCHAN and NETWORK
	
	it->second->oldHost = it->second->host;
	it->second->host = host;
	// update host name
	
	FOREACH_MODULE(instance, &Module::onHostChange, userNick, host);
}
Example #11
0
/**
 ChannelManager::handleKick

 handle KICK
*/
void ChannelManager::handleKick(nstring::str &uid, nstring::str &chan, nstring::str &who)
{
	irc::chan_hash::iterator i = chans.find(chan);
	nstring::str nick, whonick;
	std::vector<nstring::str>::iterator qit;
	
	instance->userManager->getNickFromId(uid, nick);
	instance->userManager->getNickFromId(who, whonick);
	User* user = instance->userManager->getUser(whonick);
	// get the nick & channel
	
	irc::nhash::iterator it = i->second->users.find(whonick);
	if (it == i->second->users.end())
	{
		instance->log(ERROR, "handleKick(): trying to find user in channel map on part, can't find user!");
		return;
	}
	// can't find user in channel->users. major issue?
	
	i->second->users.erase(it);
	if (i->second->users.empty())
	{
		delete i->second;
		chans.erase(i);
	}
	// remove the user from our internal channel->users array, ALSO
	// check if our internal array matches 0, if it does the channel
	// is empty so delete it.
	
	qit = std::find(user->qChans.begin(), user->qChans.end(), chan);
	if (qit != user->qChans.end())
		user->qChans.erase(qit);
	// the user struct also contains a method to quickly see what channels a user is in
	// compared to searching every channel, AND every user array at the same time.
	
	instance->log(MISC, "handleKick(): " + whonick + " has been kicked from " + chan + " by " + nick);
	// log things, ie MISC
	
	FOREACH_MODULE(instance, &Module::onKick, nick, whonick, chan);
}
Example #12
0
/**
 UserManager::handleMode

 handle mode changes
*/
void UserManager::handleMode(nstring::str &uid, nstring::str &modes)
{
	irc::modes modeContainer;
	irc::params paramContainer;
	instance->modeParser->sortModes(modes, modeContainer, paramContainer, false);
	// parse modes

	nstring::str nick;
	getNickFromId(uid, nick);
	User* user = getUser(nick);
	instance->modeParser->saveModes(user, modeContainer);
	// update the modes in our user record

	if (modeContainer["plus"].find('o') != std::string::npos)
		handleOper(uid, true);
	// check if we have an "+o", if we do call handleOper()
	if (modeContainer["minus"].find('o') != std::string::npos)
		handleOper(uid, false);
	// check if we have a "-o", if we do again call handleOper()
	
	FOREACH_MODULE(instance, &Module::onUMode, nick, modeContainer);
}