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