void CreateChannelConcrete() {
     CreateChannel();
 }
Example #2
0
ChatChannel *ChatChannelList::AddClientToChannel(std::string ChannelName, Client *c) {

	if(!c) return nullptr;

	if((ChannelName.length() > 0) && (isdigit(ChannelName[0]))) {

		c->GeneralChannelMessage("The channel name can not begin with a number.");

		return nullptr;
	}

	std::string NormalisedName, Password;

	std::string::size_type Colon = ChannelName.find_first_of(":");

	if(Colon == std::string::npos)
		NormalisedName = CapitaliseName(ChannelName);
	else {
		NormalisedName = CapitaliseName(ChannelName.substr(0, Colon));

		Password = ChannelName.substr(Colon + 1);
	}

	if((NormalisedName.length() > 64) || (Password.length() > 64)) {

		c->GeneralChannelMessage("The channel name or password cannot exceed 64 characters.");

		return nullptr;
	}

	_log(UCS__TRACE, "AddClient to channel [%s] with password [%s]", NormalisedName.c_str(), Password.c_str());

	ChatChannel *RequiredChannel = FindChannel(NormalisedName);

	if(!RequiredChannel)
		RequiredChannel = CreateChannel(NormalisedName, c->GetName(), Password, false, 0);

	if(RequiredChannel->GetMinStatus() > c->GetAccountStatus()) {

		std::string Message = "You do not have the required account status to join channel " + NormalisedName;

		c->GeneralChannelMessage(Message);

		return nullptr;
	}

	if(RequiredChannel->IsClientInChannel(c))
		return nullptr;

	if(RequiredChannel->IsInvitee(c->GetName())) {

		RequiredChannel->AddClient(c);

		RequiredChannel->RemoveInvitee(c->GetName());

		return RequiredChannel;
	}

	if(RequiredChannel->CheckPassword(Password) || RequiredChannel->IsOwner(c->GetName()) || RequiredChannel->IsModerator(c->GetName()) ||
			c->IsChannelAdmin()) {

		RequiredChannel->AddClient(c);

		return RequiredChannel;
	}

	c->GeneralChannelMessage("Incorrect password for channel " + (NormalisedName));

	return nullptr;
}
Example #3
0
IChannel* DNP3Manager::AddSerial(const std::string& arName, FilterLevel aLevel, millis_t aOpenRetry, SerialSettings aSettings)
{
	auto pLogger = mpLog->GetLogger(aLevel, arName);
	auto pPhys = new PhysicalLayerAsyncSerial(pLogger, mpThreadPool->GetIOService(), aSettings);
	return CreateChannel(pLogger, aOpenRetry, pPhys);
}
Example #4
0
void CChat::Action(CClient *pClient, const NCHAR *pszText, int len, CLanguageID lang)
{
	ADDTOCALLSTACK("CChat::Action");
	// ARGS:
	//  len = length of the pszText string in NCHAR's.

	if ( !(g_Cfg.m_iFeatureT2A & FEATURE_T2A_CHAT) )
		return;

	CChatMember *pMe = static_cast<CChatMember *>(pClient);
	CChatChannel *pChannel = pMe->GetChannel();

	TCHAR szFullText[MAX_TALK_BUFFER];
	CvtNUNICODEToSystem(szFullText, sizeof(szFullText), pszText, len);

	TCHAR *pszMsg = szFullText + 1;
	switch ( szFullText[0] )	// the 1st character is a command byte (join channel, leave channel, etc)
	{
		case CHATACT_ChangeChannelPassword:		// client shortcut: /pw
		{
			if ( !pChannel )
				goto NoConference;

			pChannel->ChangePassword(pMe, pszMsg);
			break;
		}
		case CHATACT_LeaveChannel:
		{
			if ( !pChannel )
				goto NoConference;

			pChannel->RemoveMember(pMe);
			break;
		}
		case CHATACT_LeaveChat:
		{
			if ( pChannel )
				pChannel->RemoveMember(pMe);
			break;
		}
		case CHATACT_ChannelMessage:
		{
			if ( pChannel )
			{
				pChannel->MemberTalk(pMe, pClient->m_UseNewChatSystem ? szFullText : pszMsg, lang);
				break;
			}
		NoConference:
			pMe->SendChatMsg(CHATMSG_MustBeInAConference);
			return;
		}
		case CHATACT_JoinChannel:				// client shortcut: /conf
		{
			// Look for second double quote to separate channel from password
			size_t i = 1;
			for ( ; pszMsg[i] != '\0'; i++ )
			{
				if ( pszMsg[i] == '"' )
					break;
			}
			pszMsg[i] = '\0';
			TCHAR *pszPassword = pszMsg + i + 1;
			if ( pszPassword[0] == ' ' )	// skip whitespaces
				pszPassword++;
			JoinChannel(pszMsg + 1, pszPassword, pMe);
			break;
		}
		case CHATACT_CreateChannel:				// client shortcut: /newconf
		{
			TCHAR *pszPassword = NULL;
			size_t iMsgLength = strlen(pszMsg);
			for ( size_t i = 0; i < iMsgLength; i++ )
			{
				if ( pszMsg[i] == '{' )	// there's a password here
				{
					pszMsg[i] = 0;
					pszPassword = pszMsg + i + 1;
					size_t iPasswordLength = strlen(pszPassword);
					for ( i = 0; i < iPasswordLength; i++ )
					{
						if ( pszPassword[i] == '}' )
						{
							pszPassword[i] = '\0';
							break;
						}
					}
					break;
				}
			}
			if ( CreateChannel(pszMsg, pszPassword, pMe) )
				JoinChannel(pszMsg, pszPassword, pMe);
			break;
		}
		case CHATACT_RenameChannel:				// client shortcut: /rename
		{
			if ( !pChannel )
				goto NoConference;

			pMe->RenameChannel(pszMsg);
			break;
		}
		case CHATACT_PrivateMessage:			// client shortcut: /msg
		{
			if ( !pChannel )
				goto NoConference;

			// Split the recipient from the message (look for a space)
			TCHAR buffer[2048];
			strcpy(buffer, pszMsg);
			size_t bufferLength = strlen(buffer);
			size_t i = 0;
			for ( ; i < bufferLength; i++ )
			{
				if ( buffer[i] == ' ' )
				{
					buffer[i] = '\0';
					break;
				}
			}
			pChannel->PrivateMessage(pMe, buffer, buffer + i + 1, lang);
			break;
		}
		case CHATACT_AddIgnore:					// client shortcut: +ignore
		{
			pMe->AddIgnore(pszMsg);
			break;
		}
		case CHATACT_RemoveIgnore:				// client shortcut: -ignore
		{
			pMe->RemoveIgnore(pszMsg);
			break;
		}
		case CHATACT_ToggleIgnore:				// client shortcut: /ignore
		{
			pMe->ToggleIgnore(pszMsg);
			break;
		}
		case CHATACT_AddVoice:					// client shortcut: +voice
		{
			if ( !pChannel )
				goto NoConference;

			pChannel->AddVoice(pMe, pszMsg);
			break;
		}
		case CHATACT_RemoveVoice:				// client shortcut: -voice
		{
			if ( !pChannel )
				goto NoConference;

			pChannel->RemoveVoice(pMe, pszMsg);
			break;
		}
		case CHATACT_ToggleVoice:				// client shortcut: /voice
		{
			if ( !pChannel )
				goto NoConference;

			pChannel->ToggleVoice(pMe, pszMsg);
			break;
		}
		case CHATACT_AddModerator:				// client shortcut: +ops
		{
			if ( !pChannel )
				goto NoConference;

			pChannel->AddModerator(pMe, pszMsg);
			break;
		}
		case CHATACT_RemoveModerator:			// client shortcut: -ops
		{
			if ( !pChannel )
				goto NoConference;

			pChannel->RemoveModerator(pMe, pszMsg);
			break;
		}
		case CHATACT_ToggleModerator:			// client shortcut: /ops
		{
			if ( !pChannel )
				goto NoConference;

			pChannel->ToggleModerator(pMe, pszMsg);
			break;
		}
		case CHATACT_EnablePrivateMessages:		// client shortcut: +receive
		{
			pMe->SetReceiving(true);
			break;
		}
		case CHATACT_DisablePrivateMessages:	// client shortcut: -receive
		{
			pMe->SetReceiving(false);
			break;
		}
		case CHATACT_TogglePrivateMessages:		// client shortcut: /receive
		{
			pMe->ToggleReceiving();
			break;
		}
		case CHATACT_ShowCharacterName:			// client shortcut: +showname
		{
			pMe->ShowCharacterName();
			break;
		}
		case CHATACT_HideCharacterName:			// client shortcut: -showname
		{
			pMe->HideCharacterName();
			break;
		}
		case CHATACT_ToggleCharacterName:		// client shortcut: /showname
		{
			pMe->ToggleCharacterName();
			break;
		}
		case CHATACT_WhoIs:						// client shortcut: /whois
		{
			if ( !pChannel )
				goto NoConference;

			pChannel->WhoIs(pMe->GetChatName(), pszMsg);
			break;
		}
		case CHATACT_Kick:						// client shortcut: /kick
		{
			if ( !pChannel )
				goto NoConference;

			CChatMember *pMember = pChannel->FindMember(pszMsg);
			if ( pMember )
				pChannel->KickMember(pMe, pMember);
			else
				pMe->SendChatMsg(CHATMSG_NoPlayer, pszMsg);
			break;
		}
		case CHATACT_EnableDefaultVoice:		// client shortcut: +defaultvoice
		{
			if ( !pChannel )
				goto NoConference;

			pChannel->EnableDefaultVoice(pMe->GetChatName());
			break;
		}
		case CHATACT_DisableDefaultVoice:		// client shortcut: -defaultvoice
		{
			if ( !pChannel )
				goto NoConference;

			pChannel->DisableDefaultVoice(pMe->GetChatName());
			break;
		}
		case CHATACT_ToggleDefaultVoice:		// client shortcut: /defaultvoice
		{
			if ( !pChannel )
				goto NoConference;

			pChannel->ToggleDefaultVoice(pMe->GetChatName());
			break;
		}
		case CHATACT_EmoteMessage:				// client shortcut: /emote or /em
		{
			if ( !pChannel )
				goto NoConference;

			pChannel->Emote(pMe->GetChatName(), pszMsg, lang);
			break;
		}
	}
}
Example #5
0
IChannel* DNP3Manager::AddTCPServer(const std::string& arName, FilterLevel aLevel, millis_t aOpenRetry, const std::string& arEndpoint, uint16_t aPort)
{
	auto pLogger = mpLog->GetLogger(aLevel, arName);
	auto pPhys = new PhysicalLayerAsyncTCPServer(pLogger, mpThreadPool->GetIOService(), arEndpoint, aPort);
	return CreateChannel(pLogger, aOpenRetry, pPhys);
}