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

#include <TLSShutdown.h>

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

Static Public Member Functions

static void doShutdown (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

 TLSShutdown (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 68 of file TLSShutdown.h.

Constructor & Destructor Documentation

◆ TLSShutdown()

core::socket::stream::tls::TLSShutdown::TLSShutdown ( 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 61 of file TLSShutdown.cpp.

67 : ReadEventReceiver(instanceName + " SSL/TLS: Send close_notify", timeout)
68 , WriteEventReceiver(instanceName + " SSL/TLS: Send close_notify", timeout)
69 , ssl(ssl)
73 , timeoutTriggered(false)
74 , fd(SSL_get_fd(ssl)) {
75 const int ret = SSL_shutdown(ssl);
76
77 int sslErr = SSL_ERROR_NONE;
78 if (ret < 0) {
79 sslErr = SSL_get_error(ssl, ret);
80 }
81
82 if (!ReadEventReceiver::enable(fd)) {
83 delete this;
84 } else if (!WriteEventReceiver::enable(fd)) {
85 ReadEventReceiver::disable();
86 } else {
87 ReadEventReceiver::suspend();
88 WriteEventReceiver::suspend();
89
90 switch (sslErr) {
91 case SSL_ERROR_WANT_READ:
92 ReadEventReceiver::resume();
93 break;
94 case SSL_ERROR_WANT_WRITE:
95 WriteEventReceiver::resume();
96 break;
97 case SSL_ERROR_NONE:
98 case SSL_ERROR_ZERO_RETURN:
99 ReadEventReceiver::disable();
100 WriteEventReceiver::disable();
101 onSuccess();
102 break;
103 default:
104 ReadEventReceiver::disable();
105 WriteEventReceiver::disable();
106 onStatus(sslErr);
107 break;
108 }
109 }
110 }
ReadEventReceiver(const std::string &name, const utils::Timeval &timeout)
WriteEventReceiver(const std::string &name, const utils::Timeval &timeout)
std::function< void(void)> onSuccess
Definition TLSShutdown.h:97
std::function< void(void)> onTimeout
Definition TLSShutdown.h:98
std::function< void(int)> onStatus
Definition TLSShutdown.h:99

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

Referenced by doShutdown(), and TLSShutdown().

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

Member Function Documentation

◆ doShutdown()

void core::socket::stream::tls::TLSShutdown::doShutdown ( 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 52 of file TLSShutdown.cpp.

57 {
58 new TLSShutdown(instanceName, ssl, onSuccess, onTimeout, onStatus, timeout);
59 }
TLSShutdown(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 TLSShutdown().

Here is the call graph for this function:

◆ readEvent()

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

Implements core::eventreceiver::ReadEventReceiver.

Definition at line 112 of file TLSShutdown.cpp.

112 {
113 const int ret = SSL_shutdown(ssl);
114
115 int sslErr = SSL_ERROR_NONE;
116 if (ret < 0) {
117 sslErr = SSL_get_error(ssl, ret);
118 }
119
120 switch (sslErr) {
121 case SSL_ERROR_WANT_READ:
122 break;
123 case SSL_ERROR_WANT_WRITE:
124 ReadEventReceiver::suspend();
125 WriteEventReceiver::resume();
126 break;
127 case SSL_ERROR_NONE:
128 case SSL_ERROR_ZERO_RETURN:
129 ReadEventReceiver::disable();
130 WriteEventReceiver::disable();
131 onSuccess();
132 break;
133 default:
134 ReadEventReceiver::disable();
135 WriteEventReceiver::disable();
136 onStatus(sslErr);
137 break;
138 }
139 }

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::TLSShutdown::readTimeout ( )
finalprivatevirtual

Reimplemented from core::eventreceiver::ReadEventReceiver.

Definition at line 170 of file TLSShutdown.cpp.

170 {
171 if (!timeoutTriggered) {
172 timeoutTriggered = true;
173 ReadEventReceiver::disable();
174 WriteEventReceiver::disable();
175 onTimeout();
176 }
177 }

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

Here is the call graph for this function:

◆ signalEvent()

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

Reimplemented from core::eventreceiver::ReadEventReceiver.

Definition at line 188 of file TLSShutdown.cpp.

188 { // Do nothing on signal event
189 }

◆ unobservedEvent()

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

Implements core::Observer.

Definition at line 191 of file TLSShutdown.cpp.

191 {
192 delete this;
193 }

◆ writeEvent()

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

Implements core::eventreceiver::WriteEventReceiver.

Definition at line 141 of file TLSShutdown.cpp.

141 {
142 const int ret = SSL_shutdown(ssl);
143
144 int sslErr = SSL_ERROR_NONE;
145 if (ret < 0) {
146 sslErr = SSL_get_error(ssl, ret);
147 }
148
149 switch (sslErr) {
150 case SSL_ERROR_WANT_READ:
151 WriteEventReceiver::suspend();
152 ReadEventReceiver::resume();
153 break;
154 case SSL_ERROR_WANT_WRITE:
155 break;
156 case SSL_ERROR_NONE:
157 case SSL_ERROR_ZERO_RETURN:
158 ReadEventReceiver::disable();
159 WriteEventReceiver::disable();
160 onSuccess();
161 break;
162 default:
163 ReadEventReceiver::disable();
164 WriteEventReceiver::disable();
165 onStatus(sslErr);
166 break;
167 }
168 }

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::TLSShutdown::writeTimeout ( )
finalprivatevirtual

Reimplemented from core::eventreceiver::WriteEventReceiver.

Definition at line 179 of file TLSShutdown.cpp.

179 {
180 if (!timeoutTriggered) {
181 timeoutTriggered = true;
182 ReadEventReceiver::disable();
183 WriteEventReceiver::disable();
184 onTimeout();
185 }
186 }

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

Here is the call graph for this function:

Member Data Documentation

◆ fd

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

Definition at line 103 of file TLSShutdown.h.

Referenced by TLSShutdown().

◆ onStatus

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

Definition at line 99 of file TLSShutdown.h.

◆ onSuccess

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

Definition at line 97 of file TLSShutdown.h.

◆ onTimeout

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

Definition at line 98 of file TLSShutdown.h.

◆ ssl

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

Definition at line 96 of file TLSShutdown.h.

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

◆ timeoutTriggered

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

Definition at line 101 of file TLSShutdown.h.

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


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