OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
xmpp_session.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef __XMPP_SESSION_H__
6 #define __XMPP_SESSION_H__
7 
8 #include <string>
9 #include "base/regex.h"
10 #include "io/ssl_server.h"
11 #include "io/ssl_session.h"
12 
13 class XmppServer;
14 class XmppConnection;
16 class XmppRegexMock;
17 
18 class XmppSession : public SslSession {
19 public:
21  bool async_ready = true);
22  virtual ~XmppSession();
23 
24  void SetConnection(XmppConnection *connection);
25  void ClearConnection();
27 
28  virtual void WriteReady(const boost::system::error_code &error);
29  void ProcessWriteReady();
30 
31  typedef std::pair<uint64_t, uint64_t> StatsPair; // (packets, bytes)
32  StatsPair Stats(unsigned int message_type) const;
33  void IncStats(unsigned int message_type, uint64_t bytes);
34 
35  static const int kMaxMessageSize = 4096;
36  friend class XmppRegexMock;
37 
38  virtual int GetSessionInstance() const { return task_instance_; }
39 
40  boost::system::error_code EnableTcpKeepalive(int tcp_hold_time);
41 
42 protected:
43  std::string jid;
44  virtual void OnRead(Buffer buffer);
45 
46 private:
47  // eg: if tcp_hold_time is 30sec,
48  // keepalive_idle_time_ = 30/3 = 10s
49  // keepalive_interval_ = (30-10) / keepalive_probes_ = 20s/3 = 6s
50  // i.e socket empty - idle timeout (30 sec)
51  // socket tx buffer not empty - tcp user timeout (30 sec)
52  static const int kSessionKeepaliveProbes = 3; // # unack probe
53  typedef std::deque<Buffer> BufferQueue;
54 
55  contrail::regex tag_to_pattern(const char *);
56  int MatchRegex(const contrail::regex &patt);
57  bool Match(Buffer buffer, int *result, bool NewBuf);
58  void SetBuf(const std::string &);
59  void ReplaceBuf(const std::string &);
60  bool LeftOver() const;
61 
65  std::string begin_tag_;
66  std::string buf_;
67  std::string::const_iterator offset_;
70  boost::match_results<std::string::const_iterator> res_;
71  std::vector<StatsPair> stats_; // packet count
77 
78  static const contrail::regex patt_;
85  static const contrail::regex end_patt_;
86 
88 };
89 
90 #endif // __XMPP_SESSION_H__
XmppConnectionManager * manager_
Definition: xmpp_session.h:62
int keepalive_interval_
Definition: xmpp_session.h:73
static const contrail::regex starttls_patt_
Definition: xmpp_session.h:83
void ClearConnection()
Definition: xmpp_session.cc:63
virtual void WriteReady(const boost::system::error_code &error)
Definition: xmpp_session.cc:91
virtual ~XmppSession()
Definition: xmpp_session.cc:47
BufferQueue queue_
Definition: xmpp_session.h:64
boost::asio::const_buffer Buffer
Definition: tcp_session.h:64
XmppSession(XmppConnectionManager *manager, SslSocket *sock, bool async_ready=true)
Definition: xmpp_session.cc:33
std::string::const_iterator offset_
Definition: xmpp_session.h:67
std::string begin_tag_
Definition: xmpp_session.h:65
boost::system::error_code EnableTcpKeepalive(int tcp_hold_time)
DISALLOW_COPY_AND_ASSIGN(XmppSession)
virtual int GetSessionInstance() const
Definition: xmpp_session.h:38
int keepalive_idle_time_
Definition: xmpp_session.h:72
std::deque< Buffer > BufferQueue
Definition: xmpp_session.h:53
static const int kSessionKeepaliveProbes
Definition: xmpp_session.h:52
boost::asio::ssl::stream< boost::asio::ip::tcp::socket > SslSocket
Definition: ssl_session.h:18
static const contrail::regex stream_features_patt_
Definition: xmpp_session.h:82
static const contrail::regex proceed_patt_
Definition: xmpp_session.h:84
static const contrail::regex end_patt_
Definition: xmpp_session.h:85
StatsPair Stats(unsigned int message_type) const
Definition: xmpp_session.cc:97
friend class XmppRegexMock
Definition: xmpp_session.h:36
XmppConnection * Connection()
Definition: xmpp_session.h:26
bool LeftOver() const
void ReplaceBuf(const std::string &)
std::vector< StatsPair > stats_
Definition: xmpp_session.h:71
static const contrail::regex whitespace_
Definition: xmpp_session.h:81
static const contrail::regex stream_res_end_
Definition: xmpp_session.h:80
void IncStats(unsigned int message_type, uint64_t bytes)
int task_instance_
Definition: xmpp_session.h:69
contrail::regex tag_to_pattern(const char *)
static const int kMaxMessageSize
Definition: xmpp_session.h:35
int tcp_user_timeout_
Definition: xmpp_session.h:75
std::pair< uint64_t, uint64_t > StatsPair
Definition: xmpp_session.h:31
XmppConnection * connection_
Definition: xmpp_session.h:63
static const contrail::regex stream_patt_
Definition: xmpp_session.h:79
std::string jid
Definition: xmpp_session.h:43
int keepalive_probes_
Definition: xmpp_session.h:74
static const contrail::regex patt_
Definition: xmpp_session.h:78
void SetConnection(XmppConnection *connection)
Definition: xmpp_session.cc:52
void SetBuf(const std::string &)
boost::match_results< std::string::const_iterator > res_
Definition: xmpp_session.h:70
int MatchRegex(const contrail::regex &patt)
std::string buf_
Definition: xmpp_session.h:66
virtual void OnRead(Buffer buffer)
void ProcessWriteReady()
Definition: xmpp_session.cc:72
bool stream_open_matched_
Definition: xmpp_session.h:76
bool Match(Buffer buffer, int *result, bool NewBuf)