cluster::Header Class Reference

Cluster packet header block. More...

#include <cluster/Packets/Header.h>

List of all members.

Public Member Functions

 Header ()
 Directly read the needed header data from socket(blocking), and parse the header.
void readData (vpr::SocketStream *stream) throw ( cluster::ClusterException )
 Header (vpr::Uint16 RIM_code, vpr::Uint16 packet_type, vpr::Uint32 packet_length, vpr::Uint32 frame)
virtual ~Header ()
void serializeHeader ()
void parseHeader ()
vpr::ReturnStatus send (vpr::SocketStream *socket)
void dump ()
vpr::Uint16 getRIMCode ()
vpr::Uint16 getPacketType ()
vpr::Uint32 getPacketLength ()
void setPacketLength (const vpr::Uint32 length)
vpr::Uint32 getFrame ()
virtual void printData (const int debug_level)

Static Public Attributes

static const unsigned short RIM_PACKET = 400
static const unsigned short RIM_DATA_PACKET = 401
static const unsigned short RIM_DEVICE_REQ = 402
static const unsigned short RIM_DEVICE_ACK = 403
static const unsigned short RIM_CONNECTION_REQ = 404
static const unsigned short RIM_CONNECTION_ACK = 405
static const unsigned short RIM_SYNC_REQ = 406
static const unsigned short RIM_SYNC_ACK = 407
static const unsigned short RIM_APPDATA_REQ = 408
static const unsigned short RIM_APPDATA_ACK = 409
static const unsigned short RIM_END_BLOCK = 410
static const unsigned short RIM_START_BLOCK = 411
static const unsigned short RIM_PACKET_HEAD_SIZE = 12

Protected Attributes

vpr::BufferObjectReader * mPacketReader
vpr::BufferObjectWriter * mPacketWriter
std::vector< vpr::Uint8 > mData
vpr::Uint16 mRIMCode
vpr::Uint16 mPacketType
vpr::Uint32 mPacketLength
vpr::Uint32 mFrame


Detailed Description

Cluster packet header block.

Definition at line 53 of file Header.h.


Constructor & Destructor Documentation

cluster::Header::Header (  )  [inline]

Directly read the needed header data from socket(blocking), and parse the header.

Definition at line 75 of file Header.h.

00075             : mPacketReader(NULL), mPacketWriter(NULL)
00076    {;}

cluster::Header::Header ( vpr::Uint16  RIM_code,
vpr::Uint16  packet_type,
vpr::Uint32  packet_length,
vpr::Uint32  frame 
)

Definition at line 41 of file Header.cpp.

References mFrame, mPacketLength, mPacketType, and mRIMCode.

00042                                                               : mPacketReader(NULL), mPacketWriter(NULL)
00043    {
00044       mRIMCode = RIM_code;
00045       mPacketType = packet_type;
00046       mPacketLength = packet_length;
00047       mFrame = frame;
00048    }

virtual cluster::Header::~Header (  )  [inline, virtual]

Definition at line 83 of file Header.h.

00084    {
00085       if ( NULL != mPacketReader )
00086       {
00087          delete mPacketReader;
00088          mPacketReader = NULL;
00089       }
00090       if ( NULL != mPacketWriter )
00091       {
00092          delete mPacketWriter;
00093          mPacketWriter = NULL;
00094       }
00095    }


Member Function Documentation

void cluster::Header::readData ( vpr::SocketStream *  stream  )  throw ( cluster::ClusterException )

Definition at line 50 of file Header.cpp.

References gadgetDBG_RIM(), and RIM_PACKET_HEAD_SIZE.

Referenced by gadget::Node::recvPacket().

00051    {
00052       vprASSERT( NULL != stream && "Can not create a Header using a NULL SocketStream" );
00053 
00054       // - Is stream is a valid SocketStream?
00055       //   - Read in the packet from the socket
00056       //   - Set the BufferObjectReader and BufferObjectWriter to use mData  <====We only need BufferObjectReader
00057       if (NULL == stream)
00058       {
00059          vprDEBUG( gadgetDBG_RIM, vprDBG_CONFIG_LVL )
00060             << clrOutBOLD( clrRED, "ERROR:" )
00061             << " SocketSteam is NULL"
00062             << std::endl << vprDEBUG_FLUSH;
00063 
00064          throw cluster::ClusterException("Header::Header() - SocketStream is NULL");
00065       }
00066       else
00067       {
00068          vpr::Uint32 bytes_read;   
00069          
00070          vpr::ReturnStatus status =
00071             stream->readn( mData, Header::RIM_PACKET_HEAD_SIZE, bytes_read );
00072 
00073          if ( status != vpr::ReturnStatus::Succeed ||
00074               bytes_read != RIM_PACKET_HEAD_SIZE )
00075          {
00076             vprDEBUG( gadgetDBG_RIM, vprDBG_CONFIG_LVL )
00077                << clrOutBOLD( clrRED, "ERROR:" )
00078                << "Header::readData() - Could not read the header!"
00079                << std::endl << vprDEBUG_FLUSH;
00080             
00081             stream->close();
00082             delete stream;
00083             stream = NULL;
00084             
00085             if ( status != vpr::ReturnStatus::Succeed )
00086             {
00087                throw cluster::ClusterException( "Header::Header() - Could not read the header!" );
00088             }
00089             else
00090             {
00091                throw cluster::ClusterException( "Header::Header() - Bytes Read was lower than RIM_PACKET_HEAD_SIZE" );
00092             }            
00093          }
00094          
00095          if ( bytes_read != RIM_PACKET_HEAD_SIZE )
00096          {
00097             vprDEBUG( gadgetDBG_RIM, vprDBG_CONFIG_LVL )
00098                << clrOutBOLD( clrRED, "ERROR:" )
00099                << "Header::Header Something is seriously wrong here!\n" 
00100                << "We only read: " << bytes_read << " bytes for the header\n"
00101                << "When we need " << RIM_PACKET_HEAD_SIZE << " bytes!" << std::endl
00102                << vprDEBUG_FLUSH;
00103                exit(0);
00104          }
00105          
00106          mPacketReader = new vpr::BufferObjectReader( &mData );
00107          parseHeader();
00108       }
00109 
00110    }

void cluster::Header::serializeHeader (  ) 

Definition at line 112 of file Header.cpp.

References mData, mFrame, mPacketLength, mPacketType, mPacketWriter, and mRIMCode.

Referenced by cluster::SyncRequest::serialize(), cluster::SyncAck::serialize(), cluster::StartBlock::serialize(), cluster::EndBlock::serialize(), cluster::DeviceRequest::serialize(), cluster::DeviceAck::serialize(), cluster::DataPacket::serialize(), cluster::ConnectionRequest::serialize(), cluster::ConnectionAck::serialize(), cluster::ApplicationDataRequest::serialize(), cluster::ApplicationDataAck::serialize(), and cluster::ApplicationDataServer::serializeAndSend().

00113    {  
00114       mPacketWriter = new vpr::BufferObjectWriter(&mData);
00115       mPacketWriter->getData()->clear();
00116       mPacketWriter->setCurPos( 0 );
00117 
00118       // -Write all packet header information to the base Header class
00119 
00120          
00121 //         std::cout << "Head Starting at Position: " << mPacketWriter->getCurPos() << std::endl;
00122       mPacketWriter->writeUint16( mRIMCode );
00123 //         std::cout << "Write RIMCode: " << mRIMCode << std::endl;
00124 //         std::cout << "Current Position: " << mPacketWriter->getCurPos() << std::endl;
00125 
00126       mPacketWriter->writeUint16( mPacketType );
00127 //         std::cout << "Write PacketType: " << mPacketType << std::endl;
00128 //         std::cout << "Current Position: " << mPacketWriter->getCurPos() << std::endl;
00129 
00130       mPacketWriter->writeUint32( mFrame );
00131 //         std::cout << "Write Frame: " << mFrame << std::endl;
00132 //         std::cout << "Current Position: " << mPacketWriter->getCurPos() << std::endl;
00133 
00134       mPacketWriter->writeUint32( mPacketLength );
00135 //         std::cout << "Write Packet Length: " << mPacketLength << std::endl;
00136 //         std::cout << "Current Position: " << mPacketWriter->getCurPos() << std::endl;
00137    }

void cluster::Header::parseHeader (  ) 

Definition at line 139 of file Header.cpp.

References gadgetDBG_RIM(), mFrame, mPacketLength, mPacketReader, mPacketType, mRIMCode, and RIM_PACKET.

00140    {
00141       // *Now that we have recieved the correct number 
00142       //  of bytes from the socket(RIM_PACKET_HEAD_SIZE)
00143       
00144       // -Parse the new data using a BufferObjectReader
00145       // -Is this a valid RIM packet?
00146       //  -If not exit immediately
00147          
00148          //std::cout << "Head Starting at Position: " << mPacketReader->getCurPos() << std::endl;
00149       
00150       mRIMCode = mPacketReader->readUint16();
00151 //         std::cout << "Read RIMCode: " << mRIMCode << std::endl;
00152 //         std::cout << "Current Position: " << mPacketReader->getCurPos() << std::endl;
00153       mPacketType = mPacketReader->readUint16();
00154 //         std::cout << "Read PacketType: " << mPacketType << std::endl;
00155 //         std::cout << "Current Position: " << mPacketReader->getCurPos() << std::endl;
00156       mFrame = mPacketReader->readUint32();
00157 //         std::cout << "Read Frame#: " << mFrame << std::endl;
00158 //         std::cout << "Current Position: " << mPacketReader->getCurPos() << std::endl;
00159       mPacketLength = mPacketReader->readUint32();
00160 //         std::cout << "Read Packet Length: " << mPacketLength << std::endl;
00161 //         std::cout << "Current Position: " << mPacketReader->getCurPos() << std::endl;
00162 
00163       if ( RIM_PACKET != mRIMCode )
00164       {
00165          vprDEBUG( gadgetDBG_RIM, vprDBG_CONFIG_LVL )
00166             << clrOutBOLD( clrRED, "ERROR:" )
00167             << " This Packet is not a valid RIM Packet!!"
00168             << " RIMCode: " << mRIMCode << " is not valid!"
00169             << std::endl << vprDEBUG_FLUSH;
00170             
00171             throw cluster::ClusterException( "Header::parseHeader() - Invalid packet header!" );
00172       }
00173    }

vpr::ReturnStatus cluster::Header::send ( vpr::SocketStream *  socket  ) 

Definition at line 175 of file Header.cpp.

References mData, and RIM_PACKET_HEAD_SIZE.

Referenced by gadget::Node::send().

00176    {
00177       vprASSERT( NULL != socket && "Socket is NULL" );
00178 
00179       // -Send the data in this packet
00180       vpr::Uint32 bytes_written;
00181       
00182       vpr::ReturnStatus status = socket->send( mData, RIM_PACKET_HEAD_SIZE, bytes_written );
00183       return status;
00184 
00185    }

void cluster::Header::dump (  ) 

Definition at line 187 of file Header.cpp.

References mData.

Referenced by cluster::Packet::dump().

00188    {
00189       std::cout << "Dumping Header(" << mData.size() << " bytes): ";
00190       for ( std::vector<vpr::Uint8>::iterator i = mData.begin();
00191            i!= mData.end(); i++ )
00192       {
00193          std::cout << (int)*i << " ";
00194       }
00195       std::cout << std::endl;
00196    }

vpr::Uint16 cluster::Header::getRIMCode (  )  [inline]

Definition at line 105 of file Header.h.

00106    {
00107       return mRIMCode;
00108    }

vpr::Uint16 cluster::Header::getPacketType (  )  [inline]

Definition at line 110 of file Header.h.

Referenced by cluster::Packet::getPacketType(), and gadget::Node::recvPacket().

00111    {
00112       return mPacketType;
00113    }

vpr::Uint32 cluster::Header::getPacketLength (  )  [inline]

Definition at line 115 of file Header.h.

Referenced by cluster::DataPacket::parse(), gadget::Node::recvPacket(), and gadget::Node::send().

00116    {
00117       return mPacketLength;
00118    }

void cluster::Header::setPacketLength ( const vpr::Uint32  length  )  [inline]

Definition at line 120 of file Header.h.

Referenced by cluster::ApplicationDataServer::serializeAndSend().

00121    {
00122       mPacketLength = length;
00123    }

vpr::Uint32 cluster::Header::getFrame (  )  [inline]

Definition at line 125 of file Header.h.

00126    {
00127       return mFrame;
00128    }

void cluster::Header::printData ( const int  debug_level  )  [virtual]

Definition at line 198 of file Header.cpp.

References gadgetDBG_RIM(), mFrame, mPacketLength, mPacketType, and mRIMCode.

Referenced by cluster::Packet::printData().

00199    {
00200       vprDEBUG_BEGIN( gadgetDBG_RIM, debug_level )
00201          << clrOutBOLD( clrYELLOW, "====== Packet Header ======" )
00202          << std::endl << vprDEBUG_FLUSH;
00203       
00204       vprDEBUG( gadgetDBG_RIM, debug_level )
00205          << clrOutBOLD( clrYELLOW, "RIMCode:    " ) << mRIMCode
00206          << std::endl << vprDEBUG_FLUSH;
00207       vprDEBUG( gadgetDBG_RIM, debug_level )
00208          << clrOutBOLD( clrYELLOW, "PacketType: " ) << mPacketType
00209          << std::endl << vprDEBUG_FLUSH;
00210       vprDEBUG( gadgetDBG_RIM, debug_level )
00211          << clrOutBOLD( clrYELLOW, "Frame #:    " ) << mFrame
00212          << std::endl << vprDEBUG_FLUSH;
00213       vprDEBUG( gadgetDBG_RIM, debug_level )
00214          << clrOutBOLD( clrYELLOW, "Length:     " ) << mPacketLength
00215          << std::endl << vprDEBUG_FLUSH;
00216 
00217       vprDEBUG_END( gadgetDBG_RIM, debug_level )
00218          << clrOutBOLD( clrYELLOW, "===========================" )
00219          << std::endl << vprDEBUG_FLUSH;
00220    }


Member Data Documentation

const unsigned short cluster::Header::RIM_PACKET = 400 [static]

Definition at line 56 of file Header.h.

Referenced by cluster::ApplicationDataAck::ApplicationDataAck(), cluster::ApplicationDataRequest::ApplicationDataRequest(), cluster::ConnectionAck::ConnectionAck(), cluster::ConnectionRequest::ConnectionRequest(), cluster::DataPacket::DataPacket(), cluster::DeviceAck::DeviceAck(), cluster::DeviceRequest::DeviceRequest(), cluster::EndBlock::EndBlock(), parseHeader(), cluster::StartBlock::StartBlock(), cluster::SyncAck::SyncAck(), and cluster::SyncRequest::SyncRequest().

const unsigned short cluster::Header::RIM_DATA_PACKET = 401 [static]

Definition at line 57 of file Header.h.

Referenced by cluster::DataPacket::DataPacket(), cluster::DataPacket::getPacketFactoryType(), gadget::RemoteInputManager::handlePacket(), cluster::ApplicationDataManager::handlePacket(), and gadget::Node::send().

const unsigned short cluster::Header::RIM_DEVICE_REQ = 402 [static]

Definition at line 58 of file Header.h.

Referenced by cluster::DeviceRequest::DeviceRequest(), cluster::DeviceRequest::getPacketFactoryType(), and gadget::RemoteInputManager::handlePacket().

const unsigned short cluster::Header::RIM_DEVICE_ACK = 403 [static]

Definition at line 59 of file Header.h.

Referenced by cluster::DeviceAck::DeviceAck(), cluster::DeviceAck::getPacketFactoryType(), and gadget::RemoteInputManager::handlePacket().

const unsigned short cluster::Header::RIM_CONNECTION_REQ = 404 [static]

Definition at line 60 of file Header.h.

Referenced by cluster::ConnectionRequest::ConnectionRequest(), cluster::ConnectionRequest::getPacketFactoryType(), and gadget::AbstractNetworkManager::handlePacket().

const unsigned short cluster::Header::RIM_CONNECTION_ACK = 405 [static]

Definition at line 61 of file Header.h.

Referenced by cluster::ConnectionAck::ConnectionAck(), cluster::ConnectionAck::getPacketFactoryType(), and gadget::AbstractNetworkManager::handlePacket().

const unsigned short cluster::Header::RIM_SYNC_REQ = 406 [static]

Definition at line 62 of file Header.h.

Referenced by cluster::SyncRequest::getPacketFactoryType(), and cluster::SyncRequest::SyncRequest().

const unsigned short cluster::Header::RIM_SYNC_ACK = 407 [static]

Definition at line 63 of file Header.h.

Referenced by cluster::SyncAck::getPacketFactoryType(), and cluster::SyncAck::SyncAck().

const unsigned short cluster::Header::RIM_APPDATA_REQ = 408 [static]

Definition at line 64 of file Header.h.

Referenced by cluster::ApplicationDataRequest::ApplicationDataRequest(), cluster::ApplicationDataRequest::getPacketFactoryType(), and cluster::ApplicationDataManager::handlePacket().

const unsigned short cluster::Header::RIM_APPDATA_ACK = 409 [static]

Definition at line 65 of file Header.h.

Referenced by cluster::ApplicationDataAck::ApplicationDataAck(), cluster::ApplicationDataAck::getPacketFactoryType(), and cluster::ApplicationDataManager::handlePacket().

const unsigned short cluster::Header::RIM_END_BLOCK = 410 [static]

Definition at line 66 of file Header.h.

Referenced by cluster::EndBlock::EndBlock(), cluster::EndBlock::getPacketFactoryType(), and gadget::AbstractNetworkManager::handlePacket().

const unsigned short cluster::Header::RIM_START_BLOCK = 411 [static]

Definition at line 67 of file Header.h.

Referenced by cluster::StartBlock::getPacketFactoryType(), cluster::StartBarrierPlugin::handlePacket(), and cluster::StartBlock::StartBlock().

const unsigned short cluster::Header::RIM_PACKET_HEAD_SIZE = 12 [static]

Definition at line 68 of file Header.h.

Referenced by cluster::ApplicationDataAck::ApplicationDataAck(), cluster::ApplicationDataRequest::ApplicationDataRequest(), cluster::ConnectionAck::ConnectionAck(), cluster::ConnectionRequest::ConnectionRequest(), cluster::DataPacket::DataPacket(), cluster::DeviceAck::DeviceAck(), cluster::DeviceRequest::DeviceRequest(), cluster::EndBlock::EndBlock(), cluster::DataPacket::parse(), readData(), gadget::Node::recvPacket(), gadget::Node::send(), send(), cluster::ApplicationDataServer::serializeAndSend(), cluster::StartBlock::StartBlock(), cluster::SyncAck::SyncAck(), cluster::SyncRequest::SyncRequest(), and gadget::DeviceServer::updateLocalData().

vpr::BufferObjectReader* cluster::Header::mPacketReader [protected]

Definition at line 132 of file Header.h.

Referenced by parseHeader().

vpr::BufferObjectWriter* cluster::Header::mPacketWriter [protected]

Definition at line 133 of file Header.h.

Referenced by serializeHeader().

std::vector<vpr::Uint8> cluster::Header::mData [protected]

Definition at line 134 of file Header.h.

Referenced by dump(), send(), and serializeHeader().

vpr::Uint16 cluster::Header::mRIMCode [protected]

Definition at line 136 of file Header.h.

Referenced by Header(), parseHeader(), printData(), and serializeHeader().

vpr::Uint16 cluster::Header::mPacketType [protected]

Definition at line 137 of file Header.h.

Referenced by Header(), parseHeader(), printData(), and serializeHeader().

vpr::Uint32 cluster::Header::mPacketLength [protected]

Definition at line 138 of file Header.h.

Referenced by Header(), parseHeader(), printData(), and serializeHeader().

vpr::Uint32 cluster::Header::mFrame [protected]

Definition at line 139 of file Header.h.

Referenced by Header(), parseHeader(), printData(), and serializeHeader().


The documentation for this class was generated from the following files:
Generated on Thu Jan 4 10:44:23 2007 for Gadgeteer by  doxygen 1.5.1