IBR-DTNSuite  0.8
ibrcommon/ibrcommon/net/stopandwait.h
Go to the documentation of this file.
00001 /*
00002  * stopandwait.h
00003  *
00004  *  Created on: 08.11.2010
00005  *      Author: morgenro
00006  */
00007 
00008 #include <ibrcommon/thread/Conditional.h>
00009 
00010 #ifndef STOPANDWAIT_H_
00011 #define STOPANDWAIT_H_
00012 
00013 namespace ibrcommon
00014 {
00015         class stopandwait
00016         {
00017         public:
00018                 stopandwait(const size_t timeout, const size_t maxretry = 0);
00019                 virtual ~stopandwait();
00020 
00021                 void setTimeout(size_t timeout);
00022 
00023         protected:
00024                 int __send(const char *buffer, const size_t length);
00025                 int __recv(char *buffer, size_t &length);
00026 
00027                 virtual int __send_impl(const char *buffer, const size_t length)  = 0;
00028                 virtual int __recv_impl(char *buffer, size_t &length) = 0;
00029 
00030         private:
00031                 size_t _maxretry;
00032                 u_int8_t _out_seqno;
00033                 u_int8_t _in_seqno;
00034                 u_int8_t _ack_seqno;
00035 
00036                 unsigned int _count;
00037                 size_t _timeout;
00038                 ibrcommon::Conditional _ack_cond;
00039         };
00040 }
00041 
00042 #endif /* STOPANDWAIT_H_ */