acl  3.5.3.0
sslbase_io.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 #include "../stdlib/string.hpp"
4 #include "stream_hook.hpp"
5 
6 struct ACL_VSTREAM;
7 
8 namespace acl {
9 
10 class sslbase_conf;
11 class atomic_long;
12 
14 {
15 public:
16  /**
17  * 构造函数
18  * @param conf {sslbase_conf&} 对每一个 SSL 连接进行配置的类对象
19  * @param server_side {bool} 是否为服务端模式,因为客户端模式与服务端
20  * 模式的握手方法不同,所以通过此参数来进行区分
21  * @param nblock {bool} 是否为非阻塞模式
22  */
23  sslbase_io(sslbase_conf& conf, bool server_side, bool nblock = false);
24  virtual ~sslbase_io(void);
25 
26  /**
27  * ssl 握手纯虚方法
28  * @return {bool}
29  */
30  virtual bool handshake(void) = 0;
31 
32  /**
33  * 设置套接字为阻塞模式/非阻塞模式
34  * @param yes {bool} 当为 false 时则设为阻塞模式,否则设为非阻塞模式
35  */
36  void set_non_blocking(bool yes);
37 
38  /**
39  * 判断当前设置的 SSL IO 是否阻塞模式还是非阻塞模式
40  * @return {bool} 返回 true 则表示为非阻塞模式,否则为阻塞模式
41  */
42  bool is_non_blocking(void) const
43  {
44  return nblock_;
45  }
46 
47  /**
48  * 判断 SSL 握手是否成功
49  * @return {bool}
50  */
51  bool handshake_ok(void)
52  {
53  return handshake_ok_;
54  }
55 
56  /**
57  * 设置 SNI HOST 字段
58  * @param host {const char*}
59  */
60  void set_sni_host(const char* host);
61 
62 protected:
65  bool nblock_;
69  string sni_host_; // just for SNI
70 };
71 
72 } // namespace acl
sslbase_conf & base_conf_
Definition: sslbase_io.hpp:63
ACL_VSTREAM * stream_
Definition: sslbase_io.hpp:68
bool is_non_blocking(void) const
Definition: sslbase_io.hpp:42
atomic_long * refers_
Definition: sslbase_io.hpp:67
#define ACL_CPP_API
bool handshake_ok(void)
Definition: sslbase_io.hpp:51