Exemple #1
0
bool RemotePlugin::processMessage( const message & _m )
{
	lock();
	message replyMessage( _m.id );
	bool reply = false;
	switch( _m.id )
	{
		case IdUndefined:
			return false;

		case IdInitDone:
			reply = true;
			break;

		case IdSampleRateInformation:
			reply = true;
			replyMessage.addInt( engine::getMixer()->processingSampleRate() );
			break;

		case IdBufferSizeInformation:
			reply = true;
			replyMessage.addInt( engine::getMixer()->framesPerPeriod() );
			break;

		case IdChangeInputCount:
			m_inputCount = _m.getInt( 0 );
			resizeSharedProcessingMemory();
			break;

		case IdChangeOutputCount:
			m_outputCount = _m.getInt( 0 );
			resizeSharedProcessingMemory();
			break;

		case IdDebugMessage:
			fprintf( stderr, "RemotePlugin::DebugMessage: %s",
						_m.getString( 0 ).c_str() );
			break;

		case IdProcessingDone:
		case IdQuit:
		default:
			break;
	}
	if( reply )
	{
		sendMessage( replyMessage );
	}
	unlock();

	return true;
}
Exemple #2
0
MessageHandlerAsyncResult Handler::doHandle(Message &message)
{
	if (!m_enabled || message.property("service", false)) {
		return makeAsyncResult(Accept, QString());
    }

	Contact *contact = qobject_cast<Contact*>(message.chatUnit()->buddy());
	if (!contact || contact->isInList()) {
		return makeAsyncResult(Accept, QString());
    }
	
	Info::Ptr info = contact->property(ANTISPAM_PROPERTY).value<Info::Ptr>();
	if (info.isNull()) {
		info = Info::Ptr::create();
		contact->setProperty(ANTISPAM_PROPERTY, qVariantFromValue(info));
	}
	
	if (info->trusted) {
		return makeAsyncResult(Accept, QString());
    }
	
	if (!message.isIncoming()) {
		if (!message.property("autoreply", false))
			info->trusted = true;
		return makeAsyncResult(Accept, QString());
	}

	//check message body
	foreach (const QString &answer, m_answers) {
		if (message.text().compare(answer, Qt::CaseInsensitive) == 0) {
			Message message(m_success);
			message.setChatUnit(contact);
			contact->sendMessage(message);
			info->trusted = true;
			return makeAsyncResult(Accept, QString());
		}
	}

	if (info->lastQuestionTime.isValid()
	        && qAbs(info->lastQuestionTime.secsTo(QDateTime::currentDateTime())) < 5 * 60) {
		return makeAsyncResult(Reject, QString());
	}
	Message replyMessage(m_question);
	replyMessage.setChatUnit(contact);
	replyMessage.setProperty("autoreply", true);
	contact->sendMessage(replyMessage);
	info->lastQuestionTime = QDateTime::currentDateTime();
	QString reason = tr("Message from %1 blocked on suspicion of spam.").
				   arg(contact->title());

	return makeAsyncResult(Error, reason);
}
/**
@brief 连接可读事件,返回-1,close()会被调用
@return -1:处理失败,会调用close(); 0:处理成功
*/
int CwxEchoChannelEventHandler::onInput()
{
    int ret = CwxAppHandler4Channel::recvPackage(getHandle(),
        m_uiRecvHeadLen,
        m_uiRecvDataLen,
        m_szHeadBuf,
        m_header,
        m_recvMsgData);
    if (1 != ret) return ret;
    replyMessage();
    if (m_recvMsgData) CwxMsgBlockAlloc::free(m_recvMsgData);
    this->m_recvMsgData = NULL;
    this->m_uiRecvHeadLen = 0;
    this->m_uiRecvDataLen = 0;
    return 0;
}