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 #ifndef __BASIC_EPIDEMIC_EPIDEMIC_APP_H__
00032 #define __BASIC_EPIDEMIC_EPIDEMIC_APP_H__
00033
00034 #include "config.h"
00035
00036 #include "mobileforwarding/Protocol.h"
00037 #include "mobility/MockLink.h"
00038 #include "dtn/Bundle.h"
00039 #include "dtn/BundlePointer.h"
00040
00041
00042 #include <list>
00043
00044 namespace BasicEpidemic
00045 {
00048
00050 class EpidemicApp : public MobileForwarding::Protocol
00051 {
00052 public :
00054 typedef std::list< DTN::ByteString > DigestList;
00055
00057 static DTN::ByteString kIdentifier;
00058
00060 static unsigned char kSummaryVector;
00062 static unsigned char kDataRequest;
00063
00065 typedef std::map< DTN::ByteString , Mobility::MockLink* > LinkMap;
00066
00071 EpidemicApp( Mobility::MobileNode* n,
00072 DTN::Link* l,
00073 const struct timeval& t );
00074
00076 virtual ~EpidemicApp();
00077
00078 void newNeighbor( const DTN::ByteString& addr );
00079
00083 DTN::Link* getLink( const DTN::ByteString& addr );
00084
00085 void tweak( DTN::Bundle* b );
00086
00087 protected :
00088 const DTN::ByteString& appID() const;
00089
00090 void process( const DTN::Bundle& b );
00091
00092 private :
00096 static DTN::ByteString digest( const DTN::BundlePointer& p );
00097
00101 static DigestList* parseSummaryVector( const DTN::ByteString& sv );
00102
00108 DTN::BundlePointer storedBundle( const DTN::ByteString& d );
00109
00110 LinkMap m_linkMap;
00111 };
00112
00114 }
00115
00116 #endif // __BASIC_EPIDEMIC_EPIDEMIC_APP_H__