Menu

AWDSNL.h

Go to the documentation of this file.
00001 /*******************************************************************************
00002  *
00003  * Copyright (c) 2008-2009 Michael Schulze <mschulze@ivs.cs.uni-magdeburg.de>
00004  *               2009-2010 Michael Kriese <kriese@cs.uni-magdeburg.de>
00005  * All rights reserved.
00006  *
00007  *    Redistribution and use in source and binary forms, with or without
00008  *    modification, are permitted provided that the following conditions
00009  *    are met:
00010  *
00011  *    * Redistributions of source code must retain the above copyright
00012  *      notice, this list of conditions and the following disclaimer.
00013  *
00014  *    * Redistributions in binary form must reproduce the above copyright
00015  *      notice, this list of conditions and the following disclaimer in
00016  *      the documentation and/or other materials provided with the
00017  *      distribution.
00018  *
00019  *    * Neither the name of the copyright holders nor the names of
00020  *      contributors may be used to endorse or promote products derived
00021  *      from this software without specific prior written permission.
00022  *
00023  *
00024  *    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
00025  *    IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
00026  *    TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
00027  *    PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00028  *    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00029  *    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00030  *    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00031  *    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00032  *    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00033  *    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00034  *    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00035  *
00036  *
00037  * $Id$
00038  *
00039  ******************************************************************************/
00040 
00041 #ifndef __AWDSNL_hpp__
00042 #define __AWDSNL_hpp__
00043 
00044 #include "mw/nl/DistinctNL.h"
00045 #include "mw/nl/Packet.h"
00046 #include "mw/afp/Config.h"
00047 #include "mw/common/Subject.h"
00048 #include "mw/nl/awds/AWDS_Packet.h"
00049 #include "mw/nl/awds/NodeRepository.h"
00050 #include <boost/asio/ip/tcp.hpp>
00051 #include <boost/asio/deadline_timer.hpp>
00052 #include <map>
00053 
00054 namespace famouso {
00055     namespace mw {
00056         namespace nl {
00057 
00062             using namespace awds;
00063 
00067             class AWDSNL: public DistinctNL, boost::noncopyable {
00068                 public:
00069 
00072                     struct info {
00073                             enum {
00077                                 payload = AWDS_Packet::constants::packet_size::payload - sizeof(famouso::mw::Subject)
00078                             };
00079                     };
00080 
00082                     typedef famouso::mw::Subject SNN;
00083 
00085                     typedef Packet<SNN> Packet_t;
00086 
00088                     typedef afp::MultiSubjectESeqReorderDuplicateConfig<SNN> AFP_Config;
00089 
00093                     AWDSNL();
00094 
00101                     ~AWDSNL() throw ();
00102 
00106                     void init();
00107 
00114                     void bind(const famouso::mw::Subject &s, SNN &snn);
00115 
00123                     void deliver(const Packet_t& p);
00124 
00130                     void fetch(Packet_t& p);
00131 
00137                     SNN lastPacketSNN();
00138 
00139                 private:
00145                     void interrupt(const boost::system::error_code& error, size_t bytes_recvd);
00146 
00152                     void announce_subscriptions(const boost::system::error_code& error);
00153 
00154                     boost::asio::ip::tcp::socket m_socket; 
00155                     boost::asio::deadline_timer timer_; 
00156                     AWDS_Packet awds_packet; 
00157                     std::map<SNN, ComparableAttributeSet<>::type> subscriptions; 
00158                     NodeRepository::type &_repo; 
00159                     bool next_packet_is_full_packet; 
00160                     int interval; 
00161                     bool flowMgmtAvail; 
00162                     int _maxAge; 
00163                     int8_t _flowPrio; 
00164             };
00165 
00166         } // namespace nl
00167     } // namespace mw
00168 } // namespace famouso
00169 
00170 #endif /* __AWDSNL_hpp__ */