OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
sandesh_server.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 //
6 // sandesh_server.h
7 //
8 // Sandesh Analytics Database Server
9 //
10 
11 #ifndef __SANDESH_SERVER_H__
12 #define __SANDESH_SERVER_H__
13 
14 #include <boost/asio.hpp>
15 #include <boost/asio/ip/tcp.hpp>
16 #include <boost/ptr_container/ptr_map.hpp>
17 #include <boost/scoped_ptr.hpp>
18 #include <boost/dynamic_bitset.hpp>
19 #include <base/lifetime.h>
20 #include <sandesh/sandesh.h>
21 #include <io/ssl_server.h>
22 #include <io/tcp_session.h>
23 
24 class SandeshConnection;
25 class SandeshSession;
27 class LifetimeActor;
28 class LifetimeManager;
29 class SandeshMessage;
30 
31 class SandeshServer : public SslServer {
32 public:
33  explicit SandeshServer(EventManager *evm, const SandeshConfig &config);
34  virtual ~SandeshServer();
35 
36  virtual bool Initialize(short port, const std::string &ip="0.0.0.0");
37  virtual TcpSession *CreateSession();
38  void Initiate();
39  void Shutdown();
40  virtual void SessionShutdown();
41 
45 
46  SandeshConnection *FindConnection(const Endpoint &peer_addr);
47  void RemoveConnection(SandeshConnection *connection);
48  virtual bool DisableSandeshLogMessages() const { return true; }
49 
50  virtual bool ReceiveResourceUpdate(SandeshSession *session,
51  bool rsc) { return true; }
52  virtual bool ReceiveSandeshMsg(SandeshSession *session,
53  const SandeshMessage *msg, bool resource) = 0;
54  virtual bool ReceiveSandeshCtrlMsg(SandeshStateMachine *state_machine,
55  SandeshSession *session, const Sandesh *sandesh);
56  virtual void DisconnectSession(SandeshSession *session) {}
57  size_t ConnectionsCount() { return connection_.size(); }
59  void FreeConnectionIndex(int);
60 
61 protected:
62  virtual SslSession *AllocSession(SslSocket *socket);
63  virtual bool AcceptSession(TcpSession *session);
64  // Session read, write, and state machine tasks run exclusively
65  int session_writer_task_id() const { return sm_task_id_; }
67 
68 private:
69  static const int kMaxInitRetries = 5;
70  static const std::string kSessionReaderTask;
71  static const std::string kStateMachineTask;
72  static const std::string kLifetimeMgrTask;
73  static bool task_policy_set_;
74 
75  class DeleteActor;
76  friend class DeleteActor;
77 
78  typedef boost::ptr_map<boost::asio::ip::tcp::endpoint,
80  typedef boost::ptr_container_detail::ref_pair<
81  boost::asio::ip::basic_endpoint<boost::asio::ip::tcp>,
83  bool Compare(const Endpoint &peer_addr, const SandeshConnectionPair &) const;
84 
86  boost::dynamic_bitset<> conn_bmap_;
90  boost::scoped_ptr<LifetimeManager> lifetime_manager_;
91  boost::scoped_ptr<DeleteActor> deleter_;
92  // Protect connection map and bmap
93  tbb::mutex mutex_;
94 
96 };
97 
98 #endif // __SANDESH_SERVER_H__
DISALLOW_COPY_AND_ASSIGN(SandeshServer)
virtual ~SandeshServer()
void RemoveConnection(SandeshConnection *connection)
static bool task_policy_set_
boost::scoped_ptr< LifetimeManager > lifetime_manager_
virtual TcpSession * CreateSession()
SandeshServer(EventManager *evm, const SandeshConfig &config)
SandeshConnectionMap connection_
int session_reader_task_id_
tbb::mutex mutex_
virtual bool DisableSandeshLogMessages() const
virtual bool ReceiveSandeshCtrlMsg(SandeshStateMachine *state_machine, SandeshSession *session, const Sandesh *sandesh)
int AllocConnectionIndex()
virtual void DisconnectSession(SandeshSession *session)
static const std::string kSessionReaderTask
virtual SslSession * AllocSession(SslSocket *socket)
static const int kMaxInitRetries
boost::dynamic_bitset conn_bmap_
virtual bool AcceptSession(TcpSession *session)
virtual bool ReceiveSandeshMsg(SandeshSession *session, const SandeshMessage *msg, bool resource)=0
virtual bool ReceiveResourceUpdate(SandeshSession *session, bool rsc)
boost::asio::ssl::stream< boost::asio::ip::tcp::socket > SslSocket
Definition: ssl_server.h:16
boost::scoped_ptr< DeleteActor > deleter_
SandeshConnection * FindConnection(const Endpoint &peer_addr)
boost::ptr_container_detail::ref_pair< boost::asio::ip::basic_endpoint< boost::asio::ip::tcp >, SandeshConnection *const > SandeshConnectionPair
int session_writer_task_id() const
LifetimeActor * deleter()
int lifetime_mgr_task_id()
boost::ptr_map< boost::asio::ip::tcp::endpoint, SandeshConnection > SandeshConnectionMap
static const std::string kLifetimeMgrTask
size_t ConnectionsCount()
int lifetime_mgr_task_id_
virtual bool Initialize(short port, const std::string &ip="0.0.0.0")
bool Compare(const Endpoint &peer_addr, const SandeshConnectionPair &) const
LifetimeManager * lifetime_manager()
virtual void SessionShutdown()
boost::asio::ip::tcp::endpoint Endpoint
Definition: tcp_server.h:30
void FreeConnectionIndex(int)
static EventManager evm
int session_reader_task_id() const
static const std::string kStateMachineTask