bool 
ObservationClientBase::FillMsgFromResult(BaseMessage& theMsg, const TMsgSocket::RecvBaseMsgResult& result)
{
	bool aReturn = true;

	theMsg.AppendBytes(result.msg->GetDataLen(), result.msg->GetDataPtr());
	try
	{ 
		theMsg.Unpack(); 
	}
	catch (WONMsg::BadMsgException&)
	{ 
		// Might want to log a message here..
		aReturn = false; 
	}
	return aReturn;
}
Exemplo n.º 2
0
BaseMessage* TMsgSocket::ExtractMessage(unsigned char* msg, unsigned long msgLength)
{
	BaseMessage* theMsg = NULL;

	if (msgLength)
	{
		unsigned char headerType = *(msg);
		switch (headerType)
		{
		case 2:	// Encrypted TMessage
		case 4:	// Encrypted MiniMessage
		case 6:	// Encrypted SmallMessage
		case 8:	// Encrypted LargeMessage
			// Disallowed on non-AuthSocket
			break;
		case 3:	// MiniMessage
			theMsg = new MiniMessage(msgLength, msg);
			break;
		case 5:	// SmallMessage
			theMsg = new SmallMessage(msgLength, msg);
			break;
		case 7:	// LargeMessage
			theMsg = new LargeMessage(msgLength, msg);
			break;
		default:	// old TMessage
			theMsg = new TMessage(msgLength, msg);
			break;
		}
		if (theMsg)
		{
			try {
				theMsg->Unpack();
			}
			catch (...)
			{
				delete theMsg;
				theMsg = NULL;
			}
		}
	}
	return theMsg;
}