101 lines
2.9 KiB
C++
101 lines
2.9 KiB
C++
//----------------------------------------------------------------------------
|
|
//
|
|
// Copyright (C) Intel Corporation, 2006 - 2007.
|
|
//
|
|
// File: ProtocolBasicMessage.cpp
|
|
//
|
|
// Contents: Handles basic messages in the APF (Intel(R) AMT Port
|
|
// Forwarding protocol).
|
|
//
|
|
// Notes: Version 1.0
|
|
//----------------------------------------------------------------------------
|
|
|
|
//===================================================
|
|
// INCLUDES
|
|
//===================================================
|
|
#include "ProtocolBasicMessage.h"
|
|
#include "OptionsUtils.h"
|
|
|
|
//===================================================
|
|
// SocksSupplier Implementation
|
|
//===================================================
|
|
int Protocol_BasicMessage::read(ACE_SOCK_Stream &stream, ACE_UINT8 &byte)
|
|
{
|
|
return stream.recv_n((char*)&byte, 1, &ACE_Time_Value(*getMaxTunnelTimeout()));
|
|
}
|
|
|
|
int Protocol_BasicMessage::read(ACE_SOCK_Stream &stream, ACE_UINT16 &word)
|
|
{
|
|
int res;
|
|
ACE_UINT16 network_order_word=0;
|
|
res = stream.recv_n((char*)&network_order_word, 2,&ACE_Time_Value(*getMaxTunnelTimeout()));
|
|
word = ntohs(network_order_word);
|
|
return res;
|
|
}
|
|
|
|
int Protocol_BasicMessage::read(ACE_SOCK_Stream &stream, ACE_UINT32 &dword)
|
|
{
|
|
int res;
|
|
ACE_UINT32 network_order_dword=0;
|
|
res = stream.recv_n((char*)&network_order_dword, 4,&ACE_Time_Value(*getMaxTunnelTimeout()));
|
|
dword = ntohl(network_order_dword);
|
|
return res;
|
|
}
|
|
int Protocol_BasicMessage::read(ACE_SOCK_Stream &stream, ACE_CString &str, ACE_UINT32 len)
|
|
{
|
|
if (len < 0 || len > maxSize()) {
|
|
return -1;
|
|
}
|
|
char* tmp = new char[len+1];
|
|
int res = stream.recv_n(tmp, len, &ACE_Time_Value(*getMaxTunnelTimeout()));
|
|
tmp[len] = 0;
|
|
str.set(tmp,len+1);
|
|
delete[] tmp;
|
|
return res;
|
|
}
|
|
|
|
int Protocol_BasicMessage::read(ACE_SOCK_Stream &stream, ACE_Message_Block *&mb, ACE_UINT32 len)
|
|
{
|
|
if (len < 0 || len > maxSize()) {
|
|
return -1;
|
|
}
|
|
ACE_NEW_RETURN (mb,
|
|
ACE_Message_Block (len,
|
|
ACE_Message_Block::MB_DATA),
|
|
-1);
|
|
int res = stream.recv_n(mb->wr_ptr(), len, &ACE_Time_Value(*getMaxTunnelTimeout()));
|
|
mb->wr_ptr(len);
|
|
return res;
|
|
}
|
|
|
|
void Protocol_BasicMessage::write(ACE_Message_Block* mb, ACE_UINT8 byte)
|
|
{
|
|
ACE_OS::memcpy(mb->wr_ptr(), &byte, 1);
|
|
mb->wr_ptr(1);
|
|
}
|
|
|
|
void Protocol_BasicMessage::write(ACE_Message_Block* mb, ACE_UINT16 word)
|
|
{
|
|
ACE_UINT16 temp = htons(word);
|
|
ACE_OS::memcpy(mb->wr_ptr(), &temp, 2);
|
|
mb->wr_ptr(2);
|
|
}
|
|
|
|
void Protocol_BasicMessage::write(ACE_Message_Block* mb, ACE_UINT32 dword)
|
|
{
|
|
ACE_UINT32 temp = htonl(dword);
|
|
ACE_OS::memcpy(mb->wr_ptr(), &temp, 4);
|
|
mb->wr_ptr(4);
|
|
}
|
|
void Protocol_BasicMessage::write(ACE_Message_Block* mb, ACE_CString &str, ACE_UINT32 len)
|
|
{
|
|
ACE_OS::memcpy(mb->wr_ptr(), str.c_str(), str.length());
|
|
mb->wr_ptr(str.length());
|
|
}
|
|
|
|
void Protocol_BasicMessage::write(ACE_Message_Block* mb, ACE_Message_Block* src_mb, ACE_UINT32 len)
|
|
{
|
|
ACE_OS::memcpy(mb->wr_ptr(), src_mb->rd_ptr(), src_mb->length());
|
|
mb->wr_ptr(src_mb->length());
|
|
}
|