00001 /* 00002 * DiscoveryAnnouncement.h 00003 * 00004 * Created on: 09.09.2009 00005 * Author: morgenro 00006 */ 00007 00008 #ifndef DISCOVERYANNOUNCEMENT_H_ 00009 #define DISCOVERYANNOUNCEMENT_H_ 00010 00011 #include <ibrdtn/data/SDNV.h> 00012 #include <ibrdtn/data/EID.h> 00013 #include <ibrdtn/data/BundleString.h> 00014 #include "net/DiscoveryService.h" 00015 #include <string> 00016 #include <list> 00017 00018 namespace dtn 00019 { 00020 namespace net 00021 { 00022 class DiscoveryAnnouncement 00023 { 00024 enum BEACON_FLAGS_V1 00025 { 00026 BEACON_NO_FLAGS = 0x00, 00027 BEACON_SHORT = 0x01 00028 }; 00029 00030 enum BEACON_FLAGS_V2 00031 { 00032 BEACON_CONTAINS_EID = 0x01, 00033 BEACON_SERVICE_BLOCK = 0x02, 00034 BEACON_BLOOMFILTER = 0x04 00035 }; 00036 00037 public: 00038 enum DiscoveryVersion 00039 { 00040 DISCO_VERSION_00 = 0x01, 00041 DISCO_VERSION_01 = 0x02 00042 }; 00043 00044 DiscoveryAnnouncement(const DiscoveryVersion version = DISCO_VERSION_00, dtn::data::EID eid = dtn::data::EID()); 00045 00046 virtual ~DiscoveryAnnouncement(); 00047 00048 dtn::data::EID getEID() const; 00049 00050 const std::list<DiscoveryService> getServices() const; 00051 void clearServices(); 00052 void addService(DiscoveryService service); 00053 const DiscoveryService& getService(string name) const; 00054 00055 string toString() const; 00056 00057 void setSequencenumber(u_int16_t sequence); 00058 00059 private: 00060 friend std::ostream &operator<<(std::ostream &stream, const DiscoveryAnnouncement &announcement); 00061 friend std::istream &operator>>(std::istream &stream, DiscoveryAnnouncement &announcement); 00062 00063 unsigned int _version; 00064 unsigned char _flags; 00065 dtn::data::EID _canonical_eid; 00066 u_int16_t _sn; 00067 dtn::data::BundleString _bloomfilter; 00068 00069 std::list<DiscoveryService> _services; 00070 }; 00071 } 00072 } 00073 00074 #endif /* DISCOVERYANNOUNCEMENT_H_ */
1.6.3