OpenSDN source code
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 <mutex>
15 
16 #include <boost/asio.hpp>
17 #include <boost/asio/ip/tcp.hpp>
18 #include <boost/ptr_container/ptr_map.hpp>
19 #include <boost/scoped_ptr.hpp>
20 #include <boost/dynamic_bitset.hpp>
21 #include <base/lifetime.h>
22 #include <sandesh/sandesh.h>
23 #include <io/ssl_server.h>
24 #include <io/tcp_session.h>
25 
26 class SandeshConnection;
27 class SandeshSession;
29 class LifetimeActor;
30 class LifetimeManager;
31 class SandeshMessage;
32 
33 class SandeshServer : public SslServer {
34 public:
35  explicit SandeshServer(EventManager *evm, const SandeshConfig &config);
36  virtual ~SandeshServer();
37 
38  virtual bool Initialize(short port, const std::string &ip="0.0.0.0");
39  virtual TcpSession *CreateSession();
40  void Initiate();
41  void Shutdown();
42  virtual void SessionShutdown();
43 
47 
48  SandeshConnection *FindConnection(const Endpoint &peer_addr);
49  void RemoveConnection(SandeshConnection *connection);
50  virtual bool DisableSandeshLogMessages() const { return true; }
51 
52  virtual bool ReceiveResourceUpdate(SandeshSession *session,
53  bool rsc) { return true; }
54  virtual bool ReceiveSandeshMsg(SandeshSession *session,
55  const SandeshMessage *msg, bool resource) = 0;
56  virtual bool ReceiveSandeshCtrlMsg(SandeshStateMachine *state_machine,
57  SandeshSession *session, const Sandesh *sandesh);
58  virtual void DisconnectSession(SandeshSession *session) {}
59  size_t ConnectionsCount() { return connection_.size(); }
61  void FreeConnectionIndex(int);
62 
63 protected:
64  virtual SslSession *AllocSession(SslSocket *socket);
65  virtual bool AcceptSession(TcpSession *session);
66  // Session read, write, and state machine tasks run exclusively
67  int session_writer_task_id() const { return sm_task_id_; }
69 
70 private:
71  static const int kMaxInitRetries = 5;
72  static const std::string kSessionReaderTask;
73  static const std::string kStateMachineTask;
74  static const std::string kLifetimeMgrTask;
75  static bool task_policy_set_;
76 
77  class DeleteActor;
78  friend class DeleteActor;
79 
80  typedef boost::ptr_map<boost::asio::ip::tcp::endpoint,
82  typedef boost::ptr_container_detail::ref_pair<
83  boost::asio::ip::basic_endpoint<boost::asio::ip::tcp>,
85  bool Compare(const Endpoint &peer_addr, const SandeshConnectionPair &) const;
86 
88  boost::dynamic_bitset<> conn_bmap_;
92  boost::scoped_ptr<LifetimeManager> lifetime_manager_;
93  boost::scoped_ptr<DeleteActor> deleter_;
94  // Protect connection map and bmap
95  std::mutex mutex_;
96 
98 };
99 
100 #endif // __SANDESH_SERVER_H__
static const std::string kLifetimeMgrTask
size_t ConnectionsCount()
virtual bool ReceiveResourceUpdate(SandeshSession *session, bool rsc)
int AllocConnectionIndex()
virtual TcpSession * CreateSession()
virtual bool DisableSandeshLogMessages() const
int session_writer_task_id() const
virtual void DisconnectSession(SandeshSession *session)
DISALLOW_COPY_AND_ASSIGN(SandeshServer)
virtual void SessionShutdown()
boost::scoped_ptr< LifetimeManager > lifetime_manager_
SandeshServer(EventManager *evm, const SandeshConfig &config)
int lifetime_mgr_task_id()
virtual SslSession * AllocSession(SslSocket *socket)
virtual bool Initialize(short port, const std::string &ip="0.0.0.0")
SandeshConnectionMap connection_
static const std::string kStateMachineTask
boost::ptr_map< boost::asio::ip::tcp::endpoint, SandeshConnection > SandeshConnectionMap
LifetimeActor * deleter()
bool Compare(const Endpoint &peer_addr, const SandeshConnectionPair &) const
static bool task_policy_set_
SandeshConnection * FindConnection(const Endpoint &peer_addr)
virtual ~SandeshServer()
boost::dynamic_bitset conn_bmap_
void FreeConnectionIndex(int)
virtual bool ReceiveSandeshCtrlMsg(SandeshStateMachine *state_machine, SandeshSession *session, const Sandesh *sandesh)
LifetimeManager * lifetime_manager()
virtual bool AcceptSession(TcpSession *session)
boost::scoped_ptr< DeleteActor > deleter_
int session_reader_task_id() const
void RemoveConnection(SandeshConnection *connection)
int session_reader_task_id_
static const std::string kSessionReaderTask
boost::ptr_container_detail::ref_pair< boost::asio::ip::basic_endpoint< boost::asio::ip::tcp >, SandeshConnection *const > SandeshConnectionPair
virtual bool ReceiveSandeshMsg(SandeshSession *session, const SandeshMessage *msg, bool resource)=0
std::mutex mutex_
int lifetime_mgr_task_id_
static const int kMaxInitRetries
boost::asio::ssl::stream< boost::asio::ip::tcp::socket > SslSocket
Definition: ssl_server.h:16
boost::asio::ip::tcp::endpoint Endpoint
Definition: tcp_server.h:30
static EventManager evm