SNode.C
Loading...
Searching...
No Matches
core::socket::stream::tls::TLSHandshake Class Reference

#include <TLSHandshake.h>

Inheritance diagram for core::socket::stream::tls::TLSHandshake:
Collaboration diagram for core::socket::stream::tls::TLSHandshake:

Static Public Member Functions

static void doHandshake (const std::string &instanceName, SSL *ssl, const std::function< void(void)> &onSuccess, const std::function< void(void)> &onTimeout, const std::function< void(int)> &onStatus, const utils::Timeval &timeout)
 
- Static Public Member Functions inherited from core::EventReceiver
static void atNextTick (const std::function< void(void)> &callBack)
 

Private Member Functions

 TLSHandshake (const std::string &instanceName, SSL *ssl, const std::function< void(void)> &onSuccess, const std::function< void(void)> &onTimeout, const std::function< void(int)> &onStatus, const utils::Timeval &timeout)
 
void readEvent () final
 
void writeEvent () final
 
void signalEvent (int signum) final
 
void readTimeout () final
 
void writeTimeout () final
 
void unobservedEvent () final
 

Private Attributes

SSL * ssl = nullptr
 
std::function< void(void)> onSuccess
 
std::function< void(void)> onTimeout
 
std::function< void(int)> onStatus
 
bool timeoutTriggered
 
int fd = -1
 

Additional Inherited Members

- Public Member Functions inherited from core::DescriptorEventReceiver
 DescriptorEventReceiver (const std::string &name, DescriptorEventPublisher &descriptorEventPublisher, const utils::Timeval &timeout=TIMEOUT::DISABLE)
 
int getRegisteredFd () const
 
bool isEnabled () const
 
bool isSuspended () const
 
void setTimeout (const utils::Timeval &timeout)
 
utils::Timeval getTimeout (const utils::Timeval &currentTime) const
 
void checkTimeout (const utils::Timeval &currentTime)
 
- Public Member Functions inherited from core::EventReceiver
 EventReceiver (const std::string &name)
 
 EventReceiver (EventReceiver &)=delete
 
 EventReceiver (EventReceiver &&)=delete
 
EventReceiveroperator= (EventReceiver &)=delete
 
EventReceiveroperator= (EventReceiver &&)=delete
 
virtual void destruct ()
 
void span ()
 
void relax ()
 
const std::string & getName () const
 
- Protected Member Functions inherited from core::eventreceiver::ReadEventReceiver
 ReadEventReceiver (const std::string &name, const utils::Timeval &timeout)
 
- Protected Member Functions inherited from core::DescriptorEventReceiver
bool enable (int fd)
 
void disable ()
 
void suspend ()
 
void resume ()
 
- Protected Member Functions inherited from core::Observer
void observed ()
 
void unObserved ()
 
 Observer ()=default
 
 Observer (Observer &)=delete
 
 Observer (Observer &&)=delete
 
virtual ~Observer ()
 
- Protected Member Functions inherited from core::EventReceiver
virtual ~EventReceiver ()=default
 
 EventReceiver (const std::string &name)
 
 EventReceiver (EventReceiver &)=delete
 
 EventReceiver (EventReceiver &&)=delete
 
EventReceiveroperator= (EventReceiver &)=delete
 
EventReceiveroperator= (EventReceiver &&)=delete
 
virtual void destruct ()
 
void span ()
 
void relax ()
 
const std::string & getName () const
 
- Protected Member Functions inherited from core::eventreceiver::WriteEventReceiver
 WriteEventReceiver (const std::string &name, const utils::Timeval &timeout)
 
- Static Protected Member Functions inherited from core::EventReceiver
static void atNextTick (const std::function< void(void)> &callBack)
 

Detailed Description

Definition at line 46 of file TLSHandshake.h.

Constructor & Destructor Documentation

◆ TLSHandshake()

core::socket::stream::tls::TLSHandshake::TLSHandshake ( const std::string & instanceName,
SSL * ssl,
const std::function< void(void)> & onSuccess,
const std::function< void(void)> & onTimeout,
const std::function< void(int)> & onStatus,
const utils::Timeval & timeout )
private

Definition at line 39 of file TLSHandshake.cpp.

45 : ReadEventReceiver(instanceName + " SSL/TLS: Handshake", timeout)
46 , WriteEventReceiver(instanceName + " SSL/TLS: Handshake", timeout)
47 , ssl(ssl)
51 , timeoutTriggered(false)
52 , fd(SSL_get_fd(ssl)) {
53 const int ret = SSL_do_handshake(ssl);
54
55 int sslErr = SSL_ERROR_NONE;
56 if (ret < 1) {
57 sslErr = SSL_get_error(ssl, ret);
58 }
59
60 if (!ReadEventReceiver::enable(fd)) {
61 delete this;
62 } else if (!WriteEventReceiver::enable(fd)) {
63 ReadEventReceiver::disable();
64 } else {
65 ReadEventReceiver::suspend();
66 WriteEventReceiver::suspend();
67
68 switch (sslErr) {
69 case SSL_ERROR_WANT_READ:
70 ReadEventReceiver::resume();
71 break;
72 case SSL_ERROR_WANT_WRITE:
73 WriteEventReceiver::resume();
74 break;
75 case SSL_ERROR_NONE:
76 case SSL_ERROR_ZERO_RETURN:
77 ReadEventReceiver::disable();
78 WriteEventReceiver::disable();
79 onSuccess();
80 break;
81 default:
82 ReadEventReceiver::disable();
83 WriteEventReceiver::disable();
84 onStatus(sslErr);
85 break;
86 }
87 }
88 }
ReadEventReceiver(const std::string &name, const utils::Timeval &timeout)
WriteEventReceiver(const std::string &name, const utils::Timeval &timeout)
std::function< void(void)> onTimeout
std::function< void(int)> onStatus
std::function< void(void)> onSuccess

References core::DescriptorEventReceiver::disable(), core::DescriptorEventReceiver::enable(), fd, core::DescriptorEventReceiver::resume(), ssl, core::DescriptorEventReceiver::suspend(), timeoutTriggered, and TLSHandshake().

Referenced by doHandshake(), and TLSHandshake().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Function Documentation

◆ doHandshake()

void core::socket::stream::tls::TLSHandshake::doHandshake ( const std::string & instanceName,
SSL * ssl,
const std::function< void(void)> & onSuccess,
const std::function< void(void)> & onTimeout,
const std::function< void(int)> & onStatus,
const utils::Timeval & timeout )
static

Definition at line 30 of file TLSHandshake.cpp.

35 {
36 new TLSHandshake(instanceName, ssl, onSuccess, onTimeout, onStatus, timeout);
37 }
TLSHandshake(const std::string &instanceName, SSL *ssl, const std::function< void(void)> &onSuccess, const std::function< void(void)> &onTimeout, const std::function< void(int)> &onStatus, const utils::Timeval &timeout)

References TLSHandshake().

Here is the call graph for this function:

◆ readEvent()

void core::socket::stream::tls::TLSHandshake::readEvent ( )
finalprivatevirtual

Implements core::eventreceiver::ReadEventReceiver.

Definition at line 90 of file TLSHandshake.cpp.

90 {
91 const int ret = SSL_do_handshake(ssl);
92
93 int sslErr = SSL_ERROR_NONE;
94 if (ret < 1) {
95 sslErr = SSL_get_error(ssl, ret);
96 }
97
98 switch (sslErr) {
99 case SSL_ERROR_WANT_READ:
100 break;
101 case SSL_ERROR_WANT_WRITE:
102 ReadEventReceiver::suspend();
103 WriteEventReceiver::resume();
104 break;
105 case SSL_ERROR_NONE:
106 case SSL_ERROR_ZERO_RETURN:
107 ReadEventReceiver::disable();
108 WriteEventReceiver::disable();
109 onSuccess();
110 break;
111 default:
112 ReadEventReceiver::disable();
113 WriteEventReceiver::disable();
114 onStatus(sslErr);
115 break;
116 }
117 }

References core::DescriptorEventReceiver::disable(), core::DescriptorEventReceiver::resume(), ssl, and core::DescriptorEventReceiver::suspend().

Here is the call graph for this function:

◆ readTimeout()

void core::socket::stream::tls::TLSHandshake::readTimeout ( )
finalprivatevirtual

Reimplemented from core::eventreceiver::ReadEventReceiver.

Definition at line 148 of file TLSHandshake.cpp.

148 {
149 if (!timeoutTriggered) {
150 timeoutTriggered = true;
151 ReadEventReceiver::disable();
152 WriteEventReceiver::disable();
153 onTimeout();
154 }
155 }

References core::DescriptorEventReceiver::disable(), and timeoutTriggered.

Here is the call graph for this function:

◆ signalEvent()

void core::socket::stream::tls::TLSHandshake::signalEvent ( int signum)
finalprivatevirtual

Reimplemented from core::eventreceiver::ReadEventReceiver.

Definition at line 166 of file TLSHandshake.cpp.

166 { // Do nothing on signal event
167 }

◆ unobservedEvent()

void core::socket::stream::tls::TLSHandshake::unobservedEvent ( )
finalprivatevirtual

Implements core::Observer.

Definition at line 169 of file TLSHandshake.cpp.

169 {
170 delete this;
171 }

◆ writeEvent()

void core::socket::stream::tls::TLSHandshake::writeEvent ( )
finalprivatevirtual

Implements core::eventreceiver::WriteEventReceiver.

Definition at line 119 of file TLSHandshake.cpp.

119 {
120 const int ret = SSL_do_handshake(ssl);
121
122 int sslErr = SSL_ERROR_NONE;
123 if (ret < 1) {
124 sslErr = SSL_get_error(ssl, ret);
125 }
126
127 switch (sslErr) {
128 case SSL_ERROR_WANT_READ:
129 WriteEventReceiver::suspend();
130 ReadEventReceiver::resume();
131 break;
132 case SSL_ERROR_WANT_WRITE:
133 break;
134 case SSL_ERROR_NONE:
135 case SSL_ERROR_ZERO_RETURN:
136 ReadEventReceiver::disable();
137 WriteEventReceiver::disable();
138 onSuccess();
139 break;
140 default:
141 ReadEventReceiver::disable();
142 WriteEventReceiver::disable();
143 onStatus(sslErr);
144 break;
145 }
146 }

References core::DescriptorEventReceiver::disable(), core::DescriptorEventReceiver::resume(), ssl, and core::DescriptorEventReceiver::suspend().

Here is the call graph for this function:

◆ writeTimeout()

void core::socket::stream::tls::TLSHandshake::writeTimeout ( )
finalprivatevirtual

Reimplemented from core::eventreceiver::WriteEventReceiver.

Definition at line 157 of file TLSHandshake.cpp.

157 {
158 if (!timeoutTriggered) {
159 timeoutTriggered = true;
160 ReadEventReceiver::disable();
161 WriteEventReceiver::disable();
162 onTimeout();
163 }
164 }

References core::DescriptorEventReceiver::disable(), and timeoutTriggered.

Here is the call graph for this function:

Member Data Documentation

◆ fd

int core::socket::stream::tls::TLSHandshake::fd = -1
private

Definition at line 81 of file TLSHandshake.h.

Referenced by TLSHandshake().

◆ onStatus

std::function<void(int)> core::socket::stream::tls::TLSHandshake::onStatus
private

Definition at line 77 of file TLSHandshake.h.

◆ onSuccess

std::function<void(void)> core::socket::stream::tls::TLSHandshake::onSuccess
private

Definition at line 75 of file TLSHandshake.h.

◆ onTimeout

std::function<void(void)> core::socket::stream::tls::TLSHandshake::onTimeout
private

Definition at line 76 of file TLSHandshake.h.

◆ ssl

SSL* core::socket::stream::tls::TLSHandshake::ssl = nullptr
private

Definition at line 74 of file TLSHandshake.h.

Referenced by readEvent(), TLSHandshake(), and writeEvent().

◆ timeoutTriggered

bool core::socket::stream::tls::TLSHandshake::timeoutTriggered
private

Definition at line 79 of file TLSHandshake.h.

Referenced by readTimeout(), TLSHandshake(), and writeTimeout().


The documentation for this class was generated from the following files: