OpenSDN source code
xmpp_server.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef __XMPP_SERVER_H__
6 #define __XMPP_SERVER_H__
7 
8 #include <mutex>
9 #include <shared_mutex>
10 
11 #include <boost/asio/ip/tcp.hpp>
12 #include <boost/scoped_ptr.hpp>
13 
14 #include "base/lifetime.h"
15 #include "base/queue_task.h"
16 #include "base/address.h"
17 #include "bgp/bgp_config.h"
18 #include "io/ssl_server.h"
19 #include "xmpp/xmpp_session.h"
20 #include "xmpp/xmpp_config.h"
22 #include "xmpp/xmpp_channel_mux.h"
23 
24 class LifetimeActor;
25 class LifetimeManager;
26 class ShowXmppConnection;
27 class ShowXmppServerResp;
28 class TcpSession;
30 class XmppConfigUpdater;
32 
33 // Class to represent Xmpp Server
35 public:
36  typedef boost::asio::ip::tcp::endpoint Endpoint;
37  typedef std::unique_lock<std::shared_mutex> WriteLock;
38  typedef std::shared_lock<std::shared_mutex> ReadLock;
39 
40  XmppServer(EventManager *evm, const std::string &server_addr,
41  const XmppChannelConfig *config);
42  XmppServer(EventManager *evm, const std::string &server_addr);
43  explicit XmppServer(EventManager *evm);
44  virtual ~XmppServer();
45 
46  typedef boost::function<void(XmppChannelMux *, xmps::PeerState)> ConnectionEventCb;
50  size_t ConnectionEventCount() const;
51 
53  virtual LifetimeActor *deleter();
54  virtual LifetimeActor *deleter() const;
55 
56  virtual TcpSession *CreateSession();
57  virtual bool Initialize(short port);
58  virtual bool Initialize(short port, bool logUVE);
59  virtual bool Initialize(short port, bool logUVE, const IpAddress &ip);
60  void SessionShutdown();
61  bool MayDelete() const;
62  void Shutdown();
63  void Terminate();
64 
66  virtual XmppServerConnection *FindConnection(Endpoint remote_endpoint);
67  virtual XmppServerConnection *FindConnection(const std::string &address);
68  virtual void InsertConnection(XmppServerConnection *connection);
69  virtual void RemoveConnection(XmppServerConnection *connection);
71  XmppConnection *connection2);
72 
73  virtual void InsertDeletedConnection(XmppServerConnection *connection);
74  virtual void RemoveDeletedConnection(XmppServerConnection *connection);
75 
76  bool ClearConnection(const std::string &hostname);
77  void ClearAllConnections();
78  void UpdateAllConnections(uint8_t time_out);
79 
80  const std::string &ServerAddr() const { return server_addr_; }
81  size_t ConnectionCount() const;
82 
84  const std::string &endpoint_name);
86  XmppServerConnection *connection, bool &created);
88 
90  std::vector<ShowXmppConnection> *show_connection_list) const;
91  void FillShowServer(ShowXmppServerResp *resp) const;
92  void CreateConfigUpdater(BgpConfigManager *config_manager);
93  virtual bool IsPeerCloseGraceful() const;
94  uint16_t GetGracefulRestartTime() const;
95  uint32_t GetLongLivedGracefulRestartTime() const;
96  uint32_t GetEndOfRibReceiveTime() const;
97  uint32_t GetEndOfRibSendTime() const;
98  bool IsGRHelperModeEnabled() const;
99  bool gr_helper_disable() const { return gr_helper_disable_; }
102  }
103  void SetDscpValue(uint8_t value);
104  uint8_t dscp_value() const { return dscp_value_; }
105  const std::string subcluster_name() const {
106  return subcluster_name_;
107  }
108  void set_subcluster_name(const std::string& subcluster_name) {
110  }
111 
112 protected:
113  virtual SslSession *AllocSession(SslSocket *socket);
114  virtual bool AcceptSession(TcpSession *session);
115 
116  mutable std::shared_mutex connection_map_mutex_;
117  typedef std::map<Endpoint, XmppServerConnection *> ConnectionMap;
119 
120 private:
121  class DeleteActor;
122  friend class BgpXmppBasicTest;
123  friend class DeleteActor;
124  friend class XmppStateMachineTest;
125 
126  typedef std::set<XmppServerConnection *> ConnectionSet;
127  typedef std::map<std::string, XmppConnectionEndpoint *> ConnectionEndpointMap;
128  typedef std::map<xmps::PeerId, ConnectionEventCb> ConnectionEventCbMap;
129 
130  bool DequeueConnection(XmppServerConnection *connection);
131  size_t GetConnectionQueueSize() const;
132  void SetConnectionQueueDisable(bool disabled);
133  void WorkQueueExitCallback(bool done);
134  size_t ConnectionMapSize() const;
135 
138 
141 
142  std::mutex deletion_mutex_;
143  boost::scoped_ptr<LifetimeManager> lifetime_manager_;
144  boost::scoped_ptr<DeleteActor> deleter_;
145 
147  std::string server_addr_;
148  bool log_uve_;
152  boost::scoped_ptr<XmppConfigUpdater> xmpp_config_updater_;
153  uint8_t dscp_value_;
154  std::string subcluster_name_;
156 
158 };
159 
160 #endif
boost::asio::ip::address IpAddress
Definition: address.h:13
boost::asio::ssl::stream< boost::asio::ip::tcp::socket > SslSocket
Definition: ssl_server.h:16
uint32_t GetLongLivedGracefulRestartTime() const
Definition: xmpp_server.cc:245
virtual bool IsPeerCloseGraceful() const
Definition: xmpp_server.cc:280
void ClearAllConnections()
Definition: xmpp_server.cc:445
XmppServer(EventManager *evm, const std::string &server_addr, const XmppChannelConfig *config)
void SetDscpValue(uint8_t value)
Definition: xmpp_server.cc:585
LifetimeManager * lifetime_manager()
Definition: xmpp_server.cc:360
std::map< xmps::PeerId, ConnectionEventCb > ConnectionEventCbMap
Definition: xmpp_server.h:128
std::mutex deletion_mutex_
Definition: xmpp_server.h:142
XmppConnectionEndpoint * FindConnectionEndpoint(const std::string &endpoint_name)
Definition: xmpp_server.cc:675
virtual ~XmppServer()
Definition: xmpp_server.cc:295
size_t ConnectionEventCount() const
Definition: xmpp_server.cc:396
bool MayDelete() const
Definition: xmpp_server.cc:328
DISALLOW_COPY_AND_ASSIGN(XmppServer)
virtual XmppServerConnection * CreateConnection(XmppSession *session)
Definition: xmpp_server.cc:566
virtual void RemoveDeletedConnection(XmppServerConnection *connection)
Definition: xmpp_server.cc:665
std::mutex endpoint_map_mutex_
Definition: xmpp_server.h:139
virtual SslSession * AllocSession(SslSocket *socket)
Definition: xmpp_server.cc:472
uint8_t dscp_value() const
Definition: xmpp_server.h:104
const std::string & ServerAddr() const
Definition: xmpp_server.h:80
size_t ConnectionCount() const
Definition: xmpp_server.cc:405
void FillShowConnections(std::vector< ShowXmppConnection > *show_connection_list) const
Definition: xmpp_server.cc:731
XmppServer(EventManager *evm, const std::string &server_addr)
std::shared_mutex connection_map_mutex_
Definition: xmpp_server.h:116
friend class XmppStateMachineTest
Definition: xmpp_server.h:124
std::string server_addr_
Definition: xmpp_server.h:147
boost::function< void(XmppChannelMux *, xmps::PeerState)> ConnectionEventCb
Definition: xmpp_server.h:46
virtual void RemoveConnection(XmppServerConnection *connection)
Definition: xmpp_server.cc:518
ConnectionEventCbMap connection_event_map_
Definition: xmpp_server.h:146
std::shared_lock< std::shared_mutex > ReadLock
Definition: xmpp_server.h:38
ConnectionSet deleted_connection_set_
Definition: xmpp_server.h:136
virtual void InsertConnection(XmppServerConnection *connection)
Definition: xmpp_server.cc:545
virtual bool AcceptSession(TcpSession *session)
Definition: xmpp_server.cc:490
bool ClearConnection(const std::string &hostname)
Definition: xmpp_server.cc:427
void UnRegisterConnectionEvent(xmps::PeerId)
Definition: xmpp_server.cc:457
bool log_uve_
Definition: xmpp_server.h:148
std::map< Endpoint, XmppServerConnection * > ConnectionMap
Definition: xmpp_server.h:117
void Terminate()
Definition: xmpp_server.cc:347
void WorkQueueExitCallback(bool done)
void SwapXmppConnectionMapEntries(XmppConnection *connection1, XmppConnection *connection2)
Definition: xmpp_server.cc:529
bool gr_helper_disable_
Definition: xmpp_server.h:151
bool auth_enabled_
Definition: xmpp_server.h:149
void set_subcluster_name(const std::string &subcluster_name)
Definition: xmpp_server.h:108
void CreateConfigUpdater(BgpConfigManager *config_manager)
Definition: xmpp_server.cc:234
ConnectionMap connection_map_
Definition: xmpp_server.h:118
virtual TcpSession * CreateSession()
Definition: xmpp_server.cc:364
boost::scoped_ptr< DeleteActor > deleter_
Definition: xmpp_server.h:144
friend class BgpXmppBasicTest
Definition: xmpp_server.h:121
void SetConnectionQueueDisable(bool disabled)
Definition: xmpp_server.cc:645
void Shutdown()
Definition: xmpp_server.cc:339
int tcp_hold_time_
Definition: xmpp_server.h:150
const std::string subcluster_name() const
Definition: xmpp_server.h:105
virtual bool Initialize(short port)
Definition: xmpp_server.cc:300
void ReleaseConnectionEndpoint(XmppServerConnection *connection)
Definition: xmpp_server.cc:721
bool IsGRHelperModeEnabled() const
Definition: xmpp_server.cc:264
WorkQueue< XmppServerConnection * > connection_queue_
Definition: xmpp_server.h:155
bool DequeueConnection(XmppServerConnection *connection)
Definition: xmpp_server.cc:600
uint16_t GetGracefulRestartTime() const
Definition: xmpp_server.cc:238
XmppConnectionEndpoint * LocateConnectionEndpoint(XmppServerConnection *connection, bool &created)
Definition: xmpp_server.cc:683
size_t ConnectionMapSize() const
Definition: xmpp_server.cc:400
void RegisterConnectionEvent(xmps::PeerId, ConnectionEventCb)
Definition: xmpp_server.cc:452
virtual XmppServerConnection * FindConnection(Endpoint remote_endpoint)
Definition: xmpp_server.cc:409
boost::asio::ip::tcp::endpoint Endpoint
Definition: xmpp_server.h:36
uint8_t dscp_value_
Definition: xmpp_server.h:153
size_t GetConnectionQueueSize() const
Definition: xmpp_server.cc:641
void SessionShutdown()
Definition: xmpp_server.cc:318
boost::scoped_ptr< XmppConfigUpdater > xmpp_config_updater_
Definition: xmpp_server.h:152
boost::scoped_ptr< LifetimeManager > lifetime_manager_
Definition: xmpp_server.h:143
bool gr_helper_disable() const
Definition: xmpp_server.h:99
virtual LifetimeActor * deleter()
Definition: xmpp_server.cc:352
virtual void InsertDeletedConnection(XmppServerConnection *connection)
Definition: xmpp_server.cc:652
void NotifyConnectionEvent(XmppChannelMux *, xmps::PeerState)
Definition: xmpp_server.cc:463
uint32_t GetEndOfRibSendTime() const
Definition: xmpp_server.cc:258
void UpdateAllConnections(uint8_t time_out)
Definition: xmpp_server.cc:438
ConnectionEndpointMap connection_endpoint_map_
Definition: xmpp_server.h:140
size_t max_connections_
Definition: xmpp_server.h:137
std::string subcluster_name_
Definition: xmpp_server.h:154
void FillShowServer(ShowXmppServerResp *resp) const
Definition: xmpp_server.cc:747
uint32_t GetEndOfRibReceiveTime() const
Definition: xmpp_server.cc:252
void set_gr_helper_disable(bool gr_helper_disable)
Definition: xmpp_server.h:100
virtual XmppServerConnection * FindConnection(const std::string &address)
std::map< std::string, XmppConnectionEndpoint * > ConnectionEndpointMap
Definition: xmpp_server.h:127
std::unique_lock< std::shared_mutex > WriteLock
Definition: xmpp_server.h:37
std::set< XmppServerConnection * > ConnectionSet
Definition: xmpp_server.h:126
static EventManager evm