00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef _FORWARDINGINFO_H_
00039 #define _FORWARDINGINFO_H_
00040
00041 #include <string>
00042 #include <sys/time.h>
00043 #include "CustodyTimer.h"
00044
00045 namespace dtn {
00046
00057 class ForwardingInfo {
00058 public:
00062 typedef enum {
00063 INVALID_ACTION = 0,
00064 FORWARD_ACTION,
00065 COPY_ACTION
00066 } action_t;
00067
00068 static inline const char* action_to_str(action_t action)
00069 {
00070 switch(action) {
00071 case INVALID_ACTION: return "INVALID";
00072 case FORWARD_ACTION: return "FORWARD";
00073 case COPY_ACTION: return "COPY";
00074 default:
00075 NOTREACHED;
00076 }
00077 }
00078
00082 typedef enum {
00083 NONE,
00084 IN_FLIGHT,
00085 TRANSMITTED,
00086 TRANSMIT_FAILED,
00087 CANCELLED,
00088 CUSTODY_TIMEOUT,
00089 } state_t;
00090
00091 static const char* state_to_str(state_t state)
00092 {
00093 switch(state) {
00094 case NONE: return "NONE";
00095 case IN_FLIGHT: return "IN_FLIGHT";
00096 case TRANSMITTED: return "TRANSMITTED";
00097 case TRANSMIT_FAILED: return "TRANSMIT_FAILED";
00098 case CANCELLED: return "CANCELLED";
00099 case CUSTODY_TIMEOUT: return "CUSTODY_TIMEOUT";
00100 default:
00101 NOTREACHED;
00102 }
00103 }
00104
00108 ForwardingInfo()
00109 : state_(NONE),
00110 action_(INVALID_ACTION),
00111 clayer_(""),
00112 nexthop_(""),
00113 custody_timer_() {}
00114
00118 ForwardingInfo(state_t state,
00119 action_t action,
00120 const std::string& clayer,
00121 const std::string& nexthop,
00122 const CustodyTimerSpec& custody_timer)
00123 : state_(NONE),
00124 action_(action),
00125 clayer_(clayer),
00126 nexthop_(nexthop),
00127 custody_timer_(custody_timer)
00128 {
00129 set_state(state);
00130 }
00131
00135 void set_state(state_t new_state)
00136 {
00137 state_ = new_state;
00138 ::gettimeofday(×tamp_, 0);
00139 }
00140
00141 state_t state_;
00142 action_t action_;
00143 std::string clayer_;
00144 std::string nexthop_;
00145 struct timeval timestamp_;
00146 CustodyTimerSpec custody_timer_;
00147 };
00148
00149 }
00150
00151 #endif