User Manual, Developers Guide and API Documentation

UpperConvergence.hpp

Go to the documentation of this file.
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 

Generated on Sat Feb 11 03:31:33 2012 for openWNS by  doxygen 1.5.5