21 #include <type_traits> 34 template <
class C,
size_t SessionCache = 1>
50 static_assert(std::is_base_of<Client, C>::value,
"SSLClient can only accept a type with base class Client!");
51 static_assert(SessionCache > 0 && SessionCache < 255,
"There can be no less than one and no more than 255 sessions in the cache!");
52 static_assert(SessionCache <= 3,
"You need to decrease the size of m_iobuf in order to have more than 3 sessions at once, otherwise memory issues will occur.");
71 explicit SSLClient(
const C& client,
const br_x509_trust_anchor *trust_anchors,
const size_t trust_anchors_num,
const int analog_pin,
const DebugLevel debug =
SSL_WARN)
72 :
SSLClientImpl(trust_anchors, trust_anchors_num, analog_pin, debug)
78 setTimeout(30 * 1000);
189 size_t write(
const uint8_t *buf,
size_t size)
override {
return write_impl(buf, size); }
215 int read()
override { uint8_t read_val;
return read(&read_val, 1) > 0 ? read_val : -1; };
237 int read(uint8_t *buf,
size_t size)
override {
return read_impl(buf, size); }
327 bool operator==(
const bool value) {
return bool() == value; }
329 bool operator!=(
const bool value) {
return bool() != value; }
336 if (std::is_member_function_pointer<decltype(&C::localPort)>::value)
return m_client.localPort();
338 m_warn(
"Client class has no localPort function, so localPort() will always return 0", __func__);
344 if (std::is_member_function_pointer<decltype(&C::remoteIP)>::value)
return m_client.remoteIP();
346 m_warn(
"Client class has no remoteIP function, so remoteIP() will always return INADDR_NONE. This means that sessions caching will always be disabled.", __func__);
352 if (std::is_member_function_pointer<decltype(&C::remotePort)>::value)
return m_client.remotePort();
354 m_warn(
"Client class has no remotePort function, so remotePort() will always return 0", __func__);
size_t write_impl(const uint8_t *buf, size_t size)
Definition: SSLClientImpl.cpp:132
const SSLSession * get_session_array() const override
Definition: SSLClient.h:368
IPAddress remoteIP() override
Returns the remote IP, if C::remoteIP exists. Else return INADDR_NONE.
Definition: SSLClient.h:343
size_t write(uint8_t b) override
Definition: SSLClient.h:165
Definition: SSLClientImpl.h:65
SSLSession & get_session_impl(const char *host, const IPAddress &addr)
Definition: SSLClientImpl.cpp:280
This class stores values which allow SSLClient to save and resume SSL sessions.
Definition: SSLSession.h:52
bool operator!=(const C &rhs)
Returns whether or not two SSLClient objects do not have the same underlying client object.
Definition: SSLClient.h:333
int available() override
Returns the number of bytes available to read from the data that has been received and decrypted.
Definition: SSLClient.h:209
C & getClient()
Returns a reference to the client object stored in this class. Take care not to break it.
Definition: SSLClient.h:360
int peek_impl()
Definition: SSLClientImpl.cpp:211
void flush() override
Force writing the buffered bytes from SSLClient::write to the network.
Definition: SSLClient.h:256
The main SSLClient class. Check out README.md for more info.
Definition: SSLClient.h:35
bool operator!=(const bool value)
Definition: SSLClient.h:329
void stop() override
Close the connection.
Definition: SSLClient.h:266
size_t write(const uint8_t *buf, size_t size) override
Write some bytes to the SSL connection.
Definition: SSLClient.h:189
SSLClient(const C &client, const br_x509_trust_anchor *trust_anchors, const size_t trust_anchors_num, const int analog_pin, const DebugLevel debug=SSL_WARN)
Initialize SSLClient with all of the prerequisites needed.
Definition: SSLClient.h:71
int peek() override
View the first byte of the buffer, without removing it from the SSLClient Buffer.
Definition: SSLClient.h:247
int available_impl()
Definition: SSLClientImpl.cpp:175
bool operator==(const C &rhs)
Returns whether or not two SSLClient objects have the same underlying client object.
Definition: SSLClient.h:331
int read_impl(uint8_t *buf, size_t size)
Definition: SSLClientImpl.cpp:196
SSLSession * get_session_array() override
Returns an instance of the session array that is on the stack.
Definition: SSLClient.h:367
void remove_session_impl(const char *host, const IPAddress &addr)
Definition: SSLClientImpl.cpp:299
Client & get_arduino_client() override
Returns an instance of m_client that is polymorphic and can be used by SSLClientImpl.
Definition: SSLClient.h:364
uint16_t localPort() override
Returns the local port, C::localPort exists. Else return 0.
Definition: SSLClient.h:335
void m_warn(const T str, const char *func_name) const
Definition: SSLClientImpl.h:153
int read() override
Read a single byte, or -1 if none is available.
Definition: SSLClient.h:215
uint8_t connected() override
Check if the device is connected.
Definition: SSLClient.h:281
const Client & get_arduino_client() const override
Definition: SSLClient.h:365
int connect(const char *host, uint16_t port) override
Connect over SSL to a host specified by a hostname.
Definition: SSLClient.h:162
bool operator==(const bool value)
Definition: SSLClient.h:327
uint16_t remotePort() override
Returns the remote port, if C::remotePort exists. Else return 0.
Definition: SSLClient.h:351
int connect_impl(IPAddress ip, uint16_t port)
Definition: SSLClientImpl.cpp:75
size_t getSessionCount() const override
Get the maximum number of SSL sessions that can be stored at once.
Definition: SSLClient.h:318
void stop_impl()
Definition: SSLClientImpl.cpp:231
void flush_impl()
Definition: SSLClientImpl.cpp:223
Implementation code to be inherited by SSLClient.
Definition: SSLClientImpl.h:71
void removeSession(const char *host, const IPAddress &addr)
Clear the session corresponding to a host and IP.
Definition: SSLClient.h:311
uint8_t connected_impl()
Definition: SSLClientImpl.cpp:254
SSLSession & getSession(const char *host, const IPAddress &addr)
Gets a session reference corresponding to a host and IP, or a reference to a empty session if none ex...
Definition: SSLClient.h:301
DebugLevel
Level of verbosity used in logging for SSLClient.
Definition: SSLClientImpl.h:59
int read(uint8_t *buf, size_t size) override
Read size bytes from the SSL client buffer, copying them into *buf, and return the number of bytes re...
Definition: SSLClient.h:237
int connect(IPAddress ip, uint16_t port) override
Connect over SSL to a host specified by an IP address.
Definition: SSLClient.h:124