1#ifndef _NOSTR_ESP32_TRANSPORT_H
2#define _NOSTR_ESP32_TRANSPORT_H 1
5#if defined(_ESP32_BOARD_)
7#include "ArduinoJson.h"
14#include <WiFiClientSecure.h>
15#include <HTTPClient.h>
16#include <WebSocketsClient.h>
18#include <initializer_list>
22struct ESP32TlsConfig {
25 const char *caCertificatePem;
26 bool requireCertificateValidation;
28 ESP32TlsConfig() : caCertificatePem(nullptr), requireCertificateValidation(false) {}
31struct ESP32TransportConfig {
52 uint16_t connectTimeoutMs;
53 uint16_t readTimeoutMs;
54 uint8_t maxProtocolViolations;
56 std::function<bool(
const ParsedUrl &)> lnurlCallbackFilter;
61 ESP32TransportConfig()
62 : tls(), limits(), connectTimeoutMs(10000), readTimeoutMs(15000), maxProtocolViolations(3),
63 lnurlCallbackFilter(), expectedBolt11Currency(
"") {}
67class ESP32Connection :
public Connection {
68 friend class ESP32Transport;
72 void disconnect()
override;
74 bool isReady()
override;
75 void addMessageListener(std::function<
void(
NostrString)> listener)
override;
76 void addConnectionStatusListener(std::function<
void(ConnectionStatus status)> listener)
override;
77 WebSocketsClient *getWebsocket() {
return &ws; }
78 ~ESP32Connection()
override;
81 ESP32Connection(ESP32Transport *transport,
NostrString url);
84 ESP32Transport *transport;
86 std::vector<std::function<void(
NostrString)>> messageListeners;
87 std::vector<std::function<void(ConnectionStatus status)>> connectionListeners;
89 bool fragmentedMessageRejected =
false;
91 uint8_t protocolViolations = 0;
92 void noteProtocolViolation(
const char *message);
94class ESP32Transport :
public Transport {
95 friend class ESP32Connection;
100 void disconnect(Connection *conn)
override;
101 ~ESP32Transport()
override;
102 explicit ESP32Transport(
const ESP32TransportConfig &config = ESP32TransportConfig());
103 bool isReady()
override;
104 const ESP32TransportConfig &getConfig()
const {
return config; }
105 bool tlsCertificateValidationActive()
const {
return config.tls.caCertificatePem !=
nullptr; }
109 bool configureTls(WiFiClientSecure &client);
110 bool allowTlsConnection();
111 void noteUnverifiedTls();
112 ESP32TransportConfig config;
113 bool warnedUnverifiedTls =
false;
114 WiFiClientSecure httpsClient;
115 std::vector<Connection *> connections;
#define NostrString
Definition NostrString.h:10
Definition CryptoLock.h:6