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; }
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; }