コード例 #1
0
// 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;
	}
}
コード例 #2
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()));
}
コード例 #3
0
ファイル: MMsgCommGetNetStat.cpp プロジェクト: vgck/opendr2
// 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());
}
コード例 #4
0
ファイル: MMsgRoutingPeerData.cpp プロジェクト: vgck/opendr2
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());
}
コード例 #5
0
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());
}
コード例 #6
0
// 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();
	}
}
コード例 #7
0
ファイル: TMsgCommPing.cpp プロジェクト: vgck/opendr2
// 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);
}
コード例 #8
0
// 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();
	}
}