00001 #ifndef EMMACONVERGENCELAYER_H_ 00002 #define EMMACONVERGENCELAYER_H_ 00003 00004 #include "core/ConvergenceLayer.h" 00005 #include "core/UDPConvergenceLayer.h" 00006 #include "core/BundleReceiver.h" 00007 #include "data/BundleFactory.h" 00008 #include "emma/DiscoverBlockFactory.h" 00009 #include "emma/GPSProvider.h" 00010 #include "core/BundleRouter.h" 00011 #include "utils/Service.h" 00012 00013 #include "core/EventReceiver.h" 00014 00015 #include "utils/MutexLock.h" 00016 #include "utils/Mutex.h" 00017 00018 #include <queue> 00019 00020 using namespace dtn::data; 00021 using namespace dtn::core; 00022 using namespace dtn::utils; 00023 00024 namespace emma 00025 { 00032 class EmmaConvergenceLayer : public dtn::core::ConvergenceLayer, public BundleReceiver, public EventReceiver 00033 { 00034 public: 00043 EmmaConvergenceLayer(string eid, string bind_addr, unsigned short port, string broadcast, unsigned int mtu = 1280); 00044 00048 virtual ~EmmaConvergenceLayer(); 00049 00053 virtual TransmitReport transmit(const Bundle &b); 00054 00058 virtual TransmitReport transmit(const Bundle &b, const Node &node); 00059 00060 void received(const ConvergenceLayer &cl, const Bundle &b); 00061 00065 void raiseEvent(const Event *evt); 00066 00067 virtual void initialize(); 00068 virtual void terminate(); 00069 00070 private: 00074 void yell(); 00075 00079 void yell(Node node); 00080 00081 static const int MAX_SIZE; 00082 00083 string m_eid; 00084 string m_bindaddr; 00085 unsigned int m_bindport; 00086 00087 UDPConvergenceLayer *m_direct_cl; 00088 UDPConvergenceLayer *m_broadcast_cl; 00089 00090 Mutex m_receivelock; 00091 00092 pair<double,double> m_position; 00093 00094 DiscoverBlockFactory *m_dfactory; 00095 }; 00096 } 00097 00098 #endif /*EMMACONVERGENCELAYER_H_*/
1.5.6