![]() |
User Manual, Developers Guide and API Documentation |
![]() |
00001 /****************************************************************************** 00002 * DLLBase (DLL Base classes to create FUN-based DLL) * 00003 * __________________________________________________________________________ * 00004 * * 00005 * Copyright (C) 2006 * 00006 * Chair of Communication Networks (ComNets) * 00007 * Kopernikusstr. 16, D-52074 Aachen, Germany * 00008 * phone: ++49-241-80-27910 (phone), fax: ++49-241-80-22242 * 00009 * email: wns@comnets.rwth-aachen.de * 00010 * www: http://wns.comnets.rwth-aachen.de * 00011 ******************************************************************************/ 00012 00013 #ifndef DLL_UPPERCONVERGENCE_HPP 00014 #define DLL_UPPERCONVERGENCE_HPP 00015 00016 #include <WNS/ldk/CommandTypeSpecifier.hpp> 00017 #include <WNS/ldk/Forwarding.hpp> 00018 #include <WNS/ldk/FUNConfigCreator.hpp> 00019 #include <WNS/ldk/HasConnector.hpp> 00020 #include <WNS/ldk/HasReceptor.hpp> 00021 #include <WNS/ldk/HasDeliverer.hpp> 00022 #include <WNS/ldk/Forwarding.hpp> 00023 #include <WNS/ldk/FirstServeConnector.hpp> 00024 #include <WNS/logger/Logger.hpp> 00025 00026 #include <WNS/service/dll/DataTransmission.hpp> 00027 #include <WNS/service/dll/FlowEstablishmentAndRelease.hpp> 00028 #include <WNS/service/dll/Handler.hpp> 00029 #include <WNS/service/dll/FlowID.hpp> 00030 #include <WNS/service/qos/QoSClasses.hpp> 00031 #include <WNS/pyconfig/View.hpp> 00032 00033 namespace dll { 00034 class RANG; 00035 00038 class UpperCommand : 00039 public wns::ldk::Command 00040 { 00041 public: 00042 UpperCommand() 00043 { 00044 peer.sourceMACAddress = wns::service::dll::UnicastAddress(); 00045 peer.targetMACAddress = wns::service::dll::UnicastAddress(); 00046 } 00047 00048 struct { 00049 wns::service::dll::FlowID dllFlowID; 00050 } local; 00051 struct { 00052 wns::service::dll::UnicastAddress sourceMACAddress; 00053 wns::service::dll::UnicastAddress targetMACAddress; 00054 } peer; 00056 struct {} magic; 00057 }; 00058 00066 class UpperConvergence : 00067 virtual public wns::ldk::FunctionalUnit, 00068 virtual public wns::service::dll::UnicastDataTransmission, 00069 virtual public wns::service::dll::Notification, 00070 public wns::ldk::CommandTypeSpecifier<UpperCommand>, 00071 public wns::ldk::HasReceptor<>, 00072 public wns::ldk::HasConnector<wns::ldk::FirstServeConnector>, 00073 public wns::ldk::HasDeliverer<> 00074 { 00075 public: 00076 UpperConvergence(wns::ldk::fun::FUN* fun, const wns::pyconfig::View& config); 00077 virtual ~UpperConvergence(); 00078 00079 virtual void 00080 registerFlowHandler(wns::service::dll::FlowHandler*){}; 00081 00082 virtual void 00083 registerIRuleControl(wns::service::dll::IRuleControl*){}; 00084 00085 // DataTransmission service 00086 virtual void 00087 sendData( 00088 const wns::service::dll::UnicastAddress& _peer, 00089 const wns::osi::PDUPtr& _data, 00090 wns::service::dll::protocolNumber protocol, 00091 wns::service::dll::FlowID _dllFlowID = 0); 00092 00093 virtual std::string 00094 getSubnetIdentifier() { return "DLLBase";} 00095 00096 virtual void 00097 setMACAddress(const wns::service::dll::UnicastAddress& _sourceMACAddress); 00098 00099 virtual wns::service::dll::UnicastAddress 00100 getMACAddress() const; 00101 00102 virtual void 00103 onFUNCreated(); 00104 00105 virtual wns::ldk::CommandPool* 00106 createReply(const wns::ldk::CommandPool* original) const; 00107 00108 protected: 00109 wns::service::dll::UnicastAddress sourceMACAddress; 00110 wns::logger::Logger logger; 00111 }; 00112 00113 00116 class UTUpperConvergence : 00117 public UpperConvergence, 00118 public wns::ldk::Forwarding<UTUpperConvergence>, 00119 public wns::service::dll::FlowEstablishmentAndRelease, 00120 public wns::Cloneable<UTUpperConvergence> 00121 { 00122 public: 00123 UTUpperConvergence(wns::ldk::fun::FUN* fun, const wns::pyconfig::View& config); 00124 virtual ~UTUpperConvergence(){}; 00125 virtual void processIncoming(const wns::ldk::CompoundPtr& compound); 00126 // Notification Service 00127 virtual void 00128 registerHandler(wns::service::dll::protocolNumber protocol, 00129 wns::service::dll::Handler* _dh); 00130 00131 virtual void 00132 registerFlowHandler(wns::service::dll::FlowHandler*) {} 00133 00134 virtual void 00135 establishFlow(wns::service::tl::FlowID flowID, wns::service::qos::QoSClass qosClass); 00136 00137 virtual void 00138 releaseFlow(wns::service::tl::FlowID flowID); 00139 protected: 00143 typedef wns::container::Registry<wns::service::dll::protocolNumber, wns::service::dll::Handler*> DataHandlerRegistry; 00144 00149 DataHandlerRegistry dataHandlerRegistry; 00150 }; 00151 00153 class APUpperConvergence : 00154 public UpperConvergence, 00155 public wns::ldk::Forwarding<APUpperConvergence>, 00156 public wns::Cloneable<APUpperConvergence> 00157 { 00158 public: 00159 APUpperConvergence(wns::ldk::fun::FUN* fun, const wns::pyconfig::View& config); 00160 virtual ~APUpperConvergence(){}; 00161 virtual void processIncoming(const wns::ldk::CompoundPtr& compound); 00162 // Notification Service 00163 virtual void 00164 registerHandler(wns::service::dll::protocolNumber protocol, 00165 wns::service::dll::Handler* _dh); 00166 00167 virtual void 00168 registerFlowHandler(wns::service::dll::FlowHandler*){}; 00169 00170 bool hasRANG(); 00171 dll::RANG* getRANG(); 00172 protected: 00173 RANG* dataHandler; 00174 }; 00175 00184 class NoUpperConvergence : 00185 public UpperConvergence, 00186 public wns::ldk::Forwarding<NoUpperConvergence>, 00187 public wns::Cloneable<NoUpperConvergence> 00188 { 00189 public: 00190 NoUpperConvergence(wns::ldk::fun::FUN* fun, const wns::pyconfig::View& config) : 00191 UpperConvergence(fun,config), 00192 wns::ldk::Forwarding<NoUpperConvergence>(), 00193 wns::Cloneable<NoUpperConvergence>() 00194 {} 00195 virtual void 00196 registerHandler(wns::service::dll::protocolNumber /*protocol*/, wns::service::dll::Handler* /*_dh*/){}; 00197 00198 virtual void 00199 registerFlowHandler(wns::service::dll::FlowHandler*){}; 00200 00201 /* wns::service::dll::UnicastAddress 00202 getMACAddress() const { return wns::service::dll::UnicastAddress(); }*/ 00203 }; 00204 } 00205 00206 #endif // NOT defined DLL_UPPERCONVERGENCE_HPP 00207 00208
1.5.5