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