00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _DISCOVERY_H_
00018 #define _DISCOVERY_H_
00019
00020 #include <oasys/debug/Log.h>
00021 #include <string>
00022 #include <list>
00023 #include "naming/EndpointID.h"
00024 #include "Announce.h"
00025
00026 namespace dtn {
00027
00043 class Discovery : public oasys::Logger {
00044 public:
00045
00049 const std::string& name() const { return name_; }
00050
00054 const std::string& af() const { return af_; }
00055
00059 const std::string& to_addr() const { return to_addr_; }
00060
00064 const std::string& local_addr() const { return local_; }
00065
00070 static Discovery* create_discovery(const std::string& name,
00071 const std::string& afname,
00072 int argc, const char* argv[],
00073 const char** error);
00077 void dump(oasys::StringBuffer* buf);
00078
00083 virtual void shutdown() = 0;
00084
00089 bool announce(const char* name, int argc, const char* argv[]);
00090
00094 bool remove(const char* name);
00095
00099 void handle_neighbor_discovered(const std::string& cl_type,
00100 const std::string& cl_addr,
00101 const EndpointID& remote_eid);
00102
00103 virtual ~Discovery();
00104 protected:
00105 typedef std::list<Announce*> List;
00106 typedef std::list<Announce*>::iterator iterator;
00107
00111 Discovery(const std::string& name,
00112 const std::string& af);
00113
00117 virtual bool configure(int argc, const char* argv[]) = 0;
00118
00122 virtual void handle_announce() {}
00123
00127 bool find(const char *name, iterator* iter);
00128
00129 std::string name_;
00130 std::string af_;
00131 std::string to_addr_;
00132 std::string local_;
00133 List list_;
00134 private:
00135 Discovery(const Discovery&)
00136 : oasys::Logger("Discovery","/no/loggy/here")
00137 {}
00138 };
00139
00140 };
00141
00142 #endif // _DISCOVERY_H_