/home/aherms/Code/git/awds-routing/src/awds/UCMetricPacket.h

00001 #ifndef D__UCMetricPacket
00002 #define D__UCMetricPacket
00003 
00004 #include <gea/ObjRepository.h>
00005 #include <gea/Blocker.h>
00006 #include <gea/API.h>
00007 
00008 #include <awds/packettypes.h>
00009 #include <awds/TraceUcPacket.h>
00010 #include <awds/AwdsRouting.h>
00011 #include <awds/ext/Shell.h>
00012 #include <awds/Topology.h>
00013 #include <awds/toArray.h>
00014 
00015 #include <awds/Flood.h>
00016 
00017 namespace awds {
00018 
00019   class UCMetricPacket : public UnicastPacket {
00020   public:
00021     enum Type {req,resp,first,second};
00022     static const size_t OffsetSeq = UnicastPacket::UnicastPacketEnd;
00023     static const size_t OffsetType = OffsetSeq+sizeof(unsigned int);
00024     static const size_t OffsetOriginator = OffsetType+sizeof(Type);
00025     static const size_t OffsetTime1 = OffsetOriginator+sizeof(NodeId);
00026     static const size_t OffsetTime2 = OffsetTime1+sizeof(gea::AbsTime);
00027     static const size_t OffsetDuration = OffsetTime2+sizeof(gea::AbsTime);
00028     static const size_t MetricHeaderEnd = OffsetDuration+sizeof(gea::Duration);
00029     UCMetricPacket(BasePacket &p);
00030     UCMetricPacket(BasePacket &p,Type t,unsigned int ttl,unsigned int seq,gea::AbsTime time);
00031     UCMetricPacket(BasePacket &p,Type t,unsigned int ttl,unsigned int seq,gea::Duration duration);
00032 
00033     void setSeq(unsigned int s) {
00034       *((unsigned int*)&packet.buffer[OffsetSeq]) = s;
00035     }
00036     unsigned int getSeq() {
00037       return *((unsigned int*)&packet.buffer[OffsetSeq]);
00038     }
00039     void setType(Type t) {
00040       packet.buffer[OffsetType] = t;
00041     }
00042     Type getType() {
00043       return static_cast<Type>(packet.buffer[OffsetType]);
00044     }
00045     void setOriginator(const NodeId& id) {
00046       id.toArray(&packet.buffer[OffsetOriginator]);     
00047     }
00048     
00049     void getOriginator(NodeId& id) const {
00050       id.fromArray(&packet.buffer[OffsetOriginator]);
00051     }
00052 
00053     void setTime1(gea::AbsTime t) {
00054       *((gea::AbsTime*)&packet.buffer[OffsetTime1]) = t;
00055     }
00056 
00057     gea::AbsTime getTime1() {
00058       return *((gea::AbsTime*)&packet.buffer[OffsetTime1]);
00059     }
00060 
00061     void setDuration(gea::Duration d) {
00062       *((gea::Duration*)&packet.buffer[OffsetDuration]) = d;
00063     }
00064 
00065     gea::Duration getDuration() {
00066       return *((gea::Duration*)&packet.buffer[OffsetDuration]);
00067     }
00068   };
00069 
00070 }
00071 
00072 #endif // D__UCMetricPacket

Generated on Tue Dec 11 17:58:48 2007 for AWDS by  doxygen 1.5.3-20071008