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