22 #ifndef DATAGRAMCONVERGENCELAYER_H_
23 #define DATAGRAMCONVERGENCELAYER_H_
42 static const std::string TAG;
79 virtual const std::string
getName()
const;
117 : ibrcommon::Exception(what) {
120 virtual ~ConnectionNotAvailableException() throw () {
128 class Receiver :
public ibrcommon::JoinableThread {
133 void init() throw ();
145 virtual ~Action() {};
148 class SegmentReceived :
public Action {
150 SegmentReceived(
size_t maxlen) : seqno(0), flags(0), data(maxlen), len(0) {};
151 virtual ~SegmentReceived() {};
156 std::vector<char> data;
160 class BeaconReceived :
public Action {
163 virtual ~BeaconReceived() {};
166 DiscoveryBeacon data;
169 class AckReceived :
public Action {
171 AckReceived() : seqno(0) {};
172 virtual ~AckReceived() {};
178 class NackReceived :
public Action {
180 NackReceived() : seqno(0), temporary(false) {};
181 virtual ~NackReceived() {};
188 class QueueBundle :
public Action {
190 QueueBundle(
const BundleTransfer &bt) : job(bt) {};
191 virtual ~QueueBundle() {};
197 class ConnectionDown :
public Action {
200 virtual ~ConnectionDown() {};
205 class NodeGone :
public Action {
208 virtual ~NodeGone() {};
213 class Shutdown :
public Action {
216 virtual ~Shutdown() {};
226 DatagramConnection& getConnection(
const std::string &identifier,
bool create)
throw (ConnectionNotAvailableException);
229 DatagramService *_service;
236 ibrcommon::Queue<Action*> _action_queue;
239 ibrcommon::Mutex _send_lock;
242 ibrcommon::Conditional _cond_connections;
244 typedef std::list<DatagramConnection*> connection_list;
245 connection_list _connections;
254 size_t _stats_retries;
255 size_t _stats_failure;
void queue(const dtn::core::Node &n, const dtn::net::BundleTransfer &job)
void callback_nack(DatagramConnection &connection, const unsigned int &seqno, const std::string &destination)
virtual void componentRun()
void onAdvertiseBeacon(const ibrcommon::vinterface &iface, const DiscoveryBeacon &beacon)
void connectionUp(const DatagramConnection *conn)
virtual const std::string getName() const
void raiseEvent(const dtn::core::NodeEvent &evt)
virtual ~DatagramConvergenceLayer()
void reportSuccess(size_t retries, double rtt)
virtual void getStats(ConvergenceLayer::stats_data &data) const
std::map< string, string > stats_data
int init(int argc, char **argv)
virtual void resetStats()
virtual void componentUp()
dtn::core::Node::Protocol getDiscoveryProtocol() const
void connectionDown(const DatagramConnection *conn)
DatagramConvergenceLayer(DatagramService *ds)
void callback_send(DatagramConnection &connection, const char &flags, const unsigned int &seqno, const std::string &destination, const char *buf, const dtn::data::Length &len)
void callback_ack(DatagramConnection &connection, const unsigned int &seqno, const std::string &destination)
virtual void componentDown()