5 #ifndef SRC_BFD_BFD_SERVER_H_
6 #define SRC_BFD_BFD_SERVER_H_
13 #include <boost/asio.hpp>
14 #include <boost/asio/ip/address.hpp>
15 #include <boost/scoped_ptr.hpp>
25 typedef std::set<SessionKey>
Sessions;
35 const boost::asio::ip::udp::endpoint &local_endpoint,
36 const boost::asio::ip::udp::endpoint &remote_endpoint,
38 const boost::asio::const_buffer &recv_buffer,
39 std::size_t bytes_transferred,
const boost::system::error_code& error);
106 type(type), key(key), config(config), cb(cb) {
109 type(type), key(key) {
112 boost::asio::ip::udp::endpoint remote_endpoint,
114 const boost::asio::const_buffer &recv_buffer,
115 std::size_t bytes_transferred) :
116 type(type), local_endpoint(local_endpoint),
117 remote_endpoint(remote_endpoint), session_index(session_index),
118 recv_buffer(recv_buffer), bytes_transferred(bytes_transferred) {
152 #endif // SRC_BFD_BFD_SERVER_H_
void AddSession(const SessionKey &key, const SessionConfig &config, ChangeCb cb)
Session * SessionByKey(const SessionKey &key)
std::map< Discriminator, Session * > DiscriminatorSessionMap
void ProcessControlPacket(const boost::asio::ip::udp::endpoint &local_endpoint, const boost::asio::ip::udp::endpoint &remote_endpoint, const SessionIndex &session_index, const boost::asio::const_buffer &recv_buffer, std::size_t bytes_transferred, const boost::system::error_code &error)
Discriminator GenerateUniqueDiscriminator()
std::map< Session *, unsigned int > RefcountMap
const SessionIndex session_index
Session * SessionByKey(const boost::asio::ip::address &address, const SessionIndex &index=SessionIndex())
Session * SessionByDiscriminator(Discriminator discriminator)
Event(EventType type, boost::asio::ip::udp::endpoint local_endpoint, boost::asio::ip::udp::endpoint remote_endpoint, const SessionIndex &session_index, const boost::asio::const_buffer &recv_buffer, std::size_t bytes_transferred)
const boost::asio::const_buffer recv_buffer
WorkQueue< Event * > * event_queue()
SessionManager session_manager_
ResultCode ConfigureSession(const SessionKey &key, const SessionConfig &config, Connection *communicator, Discriminator *assignedDiscriminator)
SessionManager(EventManager *evm)
ResultCode RemoveSessionReference(const SessionKey &key)
bool EventCallback(Event *event)
boost::scoped_ptr< WorkQueue< Event * > > event_queue_
Event(EventType type, const SessionKey &key)
boost::asio::ip::udp::endpoint remote_endpoint
ResultCode ProcessControlPacketActual(const ControlPacket *packet)
Connection * communicator() const
void EnqueueEvent(Event *event)
std::set< SessionKey > Sessions
Event(EventType type, const SessionKey &key, const SessionConfig &config, ChangeCb cb)
std::map< SessionKey, Session * > KeySessionMap
DiscriminatorSessionMap by_discriminator_
boost::function< void(const SessionKey &key, const BFD::BFDState &state)> ChangeCb
Session * GetSession(const ControlPacket *packet)
ResultCode RemoveSessionReference(const SessionKey &key)
Connection * communicator_
void DeleteSession(const SessionKey &key)
std::size_t bytes_transferred
Server(EventManager *evm, Connection *communicator)
boost::asio::ip::udp::endpoint local_endpoint
ResultCode ConfigureSession(const SessionKey &key, const SessionConfig &config, Discriminator *assignedDiscriminator)
void DeleteClientSessions()