// SMsgDirG2PeerDataBase::UnpackPeerData // Hook to unpack the peer data if needed. Only reads peer data if peer // data is present. Note that mPeerUser was added later and may or may not be // present. void SMsgDirG2PeerDataBase::UnpackPeerData(void) { WTRACE("SMsgDirG2PeerDataBase::UnpackPeerData"); if (BytesLeftToRead() > 0) { WDBG_LL("SMsgDirG2PeerDataBase::UnpackPeerData Reading peer data."); ReadString(mPeerKey); mPeerIndex = ReadLong(); if (BytesLeftToRead() > 0) { WDBG_LL("SMsgDirG2PeerDataBase::UnpackPeerData Reading user id."); mPeerUser = ReadLong(); } else mPeerUser = 0; } else { WDBG_LL("SMsgDirG2PeerDataBase::UnpackPeerData No peer data to read."); mPeerKey = string(); mPeerIndex = 0; mPeerUser = 0; } }
// TMsgCommPingReply::unpack // Virtual method from TMessage. Extracts data from message buffer. void TMsgCommQueryOptReply::Unpack(void) { WTRACE("TMsgCommQueryOptReply::Unpack"); mOptionMap.clear(); TMessage::Unpack(); if ((GetServiceType() != WONMsg::CommonService) || (GetMessageType() != WONMsg::CommQueryOptionsReply)) { WDBG_AH("TMsgCommQueryOptReply::Unpack Not a CommQueryOptionsReply message!"); throw WONMsg::BadMsgException(*this, __LINE__, __FILE__, "Not a CommQueryOptionsReply message."); } unsigned short aCt = ReadShort(); WDBG_LL("TMsgCommQueryOptReply::Unpack reading " << aCt << " entries"); for (int i=0; i < aCt; i++) { OptionDef aDef; string anOpt; ReadString(anOpt); aDef.first = static_cast<OptionStatus>(ReadByte()); ReadWString(aDef.second); mOptionMap[anOpt] = aDef; } if (BytesLeftToRead() >= 2) mStatus = static_cast<WONMsg::ServerStatus>(static_cast<short>(ReadShort())); }
// MMsgCommGetNetStatReply::Unpack // Virtual method from MiniMessage. Extracts data from message buffer. void MMsgCommGetNetStatReply::Unpack(void) { WTRACE("MMsgCommGetNetStatReply::Unpack"); MiniMessage::Unpack(); if ((GetServiceType() != WONMsg::MiniCommonService) || (GetMessageType() != WONMsg::MiniCommGetNetStatReply)) { WDBG_AH("TMsgCommRehupOptions::Unpack Not a MiniCommGetNetStatReply message!"); throw WONMsg::BadMsgException(*this, __LINE__, __FILE__, "Not a MiniCommGetNetStatReply message."); } // Read startTick and determine lag WDBG_LL("MMsgCommGetNetStatReply::Unpack Reading message data"); mNumSockets = ReadLong(); int aNum = ReadShort(); int i; mTCPListenSockets.clear(); for(i=0; i<aNum; i++) mTCPListenSockets.push_back(ReadShort()); aNum = ReadShort(); mUDPListenSockets.clear(); for(i=0; i<aNum; i++) mUDPListenSockets.push_back(ReadShort()); if(BytesLeftToRead()<=0) return; mConnectToListenSocketCount = ReadLong(); aNum = ReadShort(); mLastAcceptTimes.clear(); for(i=0; i<aNum; i++) mLastAcceptTimes.push_back(ReadLong()); if(BytesLeftToRead()<=0) return; aNum = ReadShort(); mPendingAccepts.clear(); for(i=0; i<aNum; i++) mPendingAccepts.push_back(ReadLong()); }
void MMsgRoutingPeerData::Unpack(void) { WTRACE("MMsgRoutingPeerData::Unpack"); RoutingServerMessage::Unpack(); if (GetServiceType() != WONMsg::MiniRoutingServer || GetMessageType() != WONMsg::RoutingPeerData) { WDBG_AH("MMsgRoutingPeerData::Unpack Not a RoutingPeerData message!"); throw WONMsg::BadMsgException(*this, __LINE__, __FILE__, "Not a RoutingPeerData message."); } WDBG_LL("MMsgRoutingPeerData::Unpack Reading message data"); // read in the client id mClientId = ReadClientId(); // read in the data (the whole message minus the header and client id field) mData.assign(reinterpret_cast<const unsigned char*>(ReadBytes(BytesLeftToRead())), BytesLeftToRead()); }
void MMsgRoutingSendDataBroadcast::Unpack(void) { WTRACE("MMsgRoutingSendDataBroadcast::Unpack"); RoutingServerMessage::Unpack(); if (GetServiceType() != WONMsg::MiniRoutingServer || GetMessageType() != WONMsg::RoutingSendDataBroadcast) { WDBG_AH("MMsgRoutingSendDataBroadcast::Unpack Not a RoutingSendDataBroadcast message!"); throw WONMsg::BadMsgException(*this, __LINE__, __FILE__, "Not a RoutingSendDataBroadcast message."); } WDBG_LL("MMsgRoutingSendDataBroadcast::Unpack Reading message data"); // read in the flags unsigned char aFlags = ReadByte(); mShouldSendReply = ((aFlags & 0x01) != 0); // read in the data mData.assign(reinterpret_cast<const unsigned char*>(ReadBytes(BytesLeftToRead())), BytesLeftToRead()); }
// TMsgAuthRawBufferBase::UnpackRawBuf // Unpacks raw buffer as 2 byte length followed by raw data. void TMsgAuthLastRawBufferBase::UnpackRawBuf(bool copyBuf) { WTRACE("TMsgAuthLastRawBufferBase::UnpackRawBuf"); WDBG_LL("TMsgAuthLastRawBufferBase::UnpackRawBuf Unpack raw buffer"); mRawLen = BytesLeftToRead(); if (mRawLen == 0) mRawP = NULL; else if (! copyBuf) mRawP = static_cast<const unsigned char*>(ReadBytes(mRawLen)); else { mRawBuf.assign(static_cast<const unsigned char*>(ReadBytes(mRawLen)), mRawLen); mRawP = mRawBuf.data(); } }
// TMsgCommPingReply::unpack // Virtual method from TMessage. Extracts data from message buffer. void TMsgCommPingReply::Unpack(void) { WTRACE("TMsgCommPingReply::Unpack"); TMessage::Unpack(); if ((GetServiceType() != WONMsg::CommonService) || (GetMessageType() != WONMsg::CommPingReply)) { WDBG_AH("TMsgCommRehupOptions::Unpack Not a CommPingReply message!"); throw WONMsg::BadMsgException(*this, __LINE__, __FILE__, "Not a CommPingReply message."); } WDBG_LL("TMsgCommPingReply::Unpack Reading message data"); ReadString(mAppName); ReadString(mLogicalName); mStartTick = ReadLong(); mVersion = ReadLong(); // If there's more to read, get extended info if (BytesLeftToRead() > 0) { WDBG_LL("TMsgCommPingReply::Unpack Reading extended info"); ReadString(mImage); mPID = ReadLong(); ReadString(mPorts); } else { WDBG_LL("TMsgCommPingReply::Unpack Extended info not present"); mImage.erase(); mPID = 0; mPorts.erase(); } // Determine the lag unsigned long aTick = GetTickCount(); mLag = (aTick < mStartTick ? ULONG_MAX - mStartTick + aTick : aTick - mStartTick); }
// TMsgAuth1Complete::Unpack // Virtual method from TMessage. Extracts data from message buffer. void TMsgAuth1Complete::Unpack(void) { WTRACE("TMsgAuth1Complete::Unpack"); TMsgAuthRawBufferBase::Unpack(); if ((GetServiceType() != WONMsg::Auth1PeerToPeer) || (GetMessageType() != WONMsg::Auth1Complete)) { WDBG_AH("TMsgAuth1Complete::Unpack Not a Auth1Complete message!"); throw WONMsg::BadMsgException(*this, __LINE__, __FILE__, "Not a Auth1Complete message."); } WDBG_LL("TMsgAuth1Complete::Unpack Reading message data"); mStatus = static_cast<ServerStatus>((short)ReadShort()); // If status implies failure, read error info if (mStatus < 0) { WDBG_LL("TMsgAuth1Complete::Unpack Failure status, read error info"); unsigned short aNumErrs = ReadShort(); for (int i=0; i < aNumErrs; i++) mErrList.push_back(Read_PA_STRING()); SetRawBuf(NULL, 0); mSessionId = 0; } // Otherwise, read secret and optional sessionId else { WDBG_LL("TMsgAuth1Complete::Unpack Success status, read secret and optional session"); UnpackRawBuf(); mSessionId = (BytesLeftToRead() > 0 ? ReadShort() : 0); mErrList.clear(); } }