mirror of
https://github.com/meshtastic/firmware.git
synced 2025-08-18 19:23:19 +00:00

Some checks are pending
CI / setup (check) (push) Waiting to run
CI / setup (esp32) (push) Waiting to run
CI / setup (esp32c3) (push) Waiting to run
CI / setup (esp32c6) (push) Waiting to run
CI / setup (esp32s3) (push) Waiting to run
CI / setup (nrf52840) (push) Waiting to run
CI / setup (rp2040) (push) Waiting to run
CI / setup (stm32) (push) Waiting to run
CI / check (push) Blocked by required conditions
CI / build-esp32 (push) Blocked by required conditions
CI / build-esp32-s3 (push) Blocked by required conditions
CI / build-esp32-c3 (push) Blocked by required conditions
CI / build-esp32-c6 (push) Blocked by required conditions
CI / build-nrf52 (push) Blocked by required conditions
CI / build-rpi2040 (push) Blocked by required conditions
CI / build-stm32 (push) Blocked by required conditions
CI / build-debian-src (push) Waiting to run
CI / package-pio-deps-native (push) Waiting to run
CI / test-native (push) Waiting to run
CI / docker-debian-amd64 (push) Waiting to run
CI / docker-alpine-amd64 (push) Waiting to run
CI / docker-debian-arm64 (push) Waiting to run
CI / docker-debian-armv7 (push) Waiting to run
CI / after-checks (push) Blocked by required conditions
CI / gather-artifacts (esp32) (push) Blocked by required conditions
CI / gather-artifacts (esp32c3) (push) Blocked by required conditions
CI / gather-artifacts (esp32c6) (push) Blocked by required conditions
CI / gather-artifacts (esp32s3) (push) Blocked by required conditions
CI / gather-artifacts (nrf52840) (push) Blocked by required conditions
CI / gather-artifacts (rp2040) (push) Blocked by required conditions
CI / gather-artifacts (stm32) (push) Blocked by required conditions
CI / release-artifacts (push) Blocked by required conditions
CI / release-firmware (esp32) (push) Blocked by required conditions
CI / release-firmware (esp32c3) (push) Blocked by required conditions
CI / release-firmware (esp32c6) (push) Blocked by required conditions
CI / release-firmware (esp32s3) (push) Blocked by required conditions
CI / release-firmware (nrf52840) (push) Blocked by required conditions
CI / release-firmware (rp2040) (push) Blocked by required conditions
CI / release-firmware (stm32) (push) Blocked by required conditions
Flawfinder Scan / Flawfinder (push) Waiting to run
83 lines
2.2 KiB
C++
83 lines
2.2 KiB
C++
#include "ServerAPI.h"
|
|
#include "configuration.h"
|
|
#include <Arduino.h>
|
|
|
|
template <typename T>
|
|
ServerAPI<T>::ServerAPI(T &_client) : StreamAPI(&client), concurrency::OSThread("ServerAPI"), client(_client)
|
|
{
|
|
LOG_INFO("Incoming API connection");
|
|
}
|
|
|
|
template <typename T> ServerAPI<T>::~ServerAPI()
|
|
{
|
|
client.stop();
|
|
}
|
|
|
|
template <typename T> void ServerAPI<T>::close()
|
|
{
|
|
client.stop(); // drop tcp connection
|
|
StreamAPI::close();
|
|
}
|
|
|
|
/// Check the current underlying physical link to see if the client is currently connected
|
|
template <typename T> bool ServerAPI<T>::checkIsConnected()
|
|
{
|
|
return client.connected();
|
|
}
|
|
|
|
template <class T> int32_t ServerAPI<T>::runOnce()
|
|
{
|
|
if (client.connected()) {
|
|
return StreamAPI::runOncePart();
|
|
} else {
|
|
LOG_INFO("Client dropped connection, suspend API service");
|
|
enabled = false; // we no longer need to run
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
template <class T, class U> APIServerPort<T, U>::APIServerPort(int port) : U(port), concurrency::OSThread("ApiServer") {}
|
|
|
|
template <class T, class U> void APIServerPort<T, U>::init()
|
|
{
|
|
U::begin();
|
|
}
|
|
|
|
template <class T, class U> int32_t APIServerPort<T, U>::runOnce()
|
|
{
|
|
#ifdef ARCH_ESP32
|
|
#if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0)
|
|
auto client = U::accept();
|
|
#else
|
|
auto client = U::available();
|
|
#endif
|
|
#elif defined(ARCH_RP2040)
|
|
auto client = U::accept();
|
|
#else
|
|
auto client = U::available();
|
|
#endif
|
|
if (client) {
|
|
// Close any previous connection (see FIXME in header file)
|
|
if (openAPI) {
|
|
#if RAK_4631
|
|
// RAK13800 Ethernet requests periodically take more time
|
|
// This backoff addresses most cases keeping max wait < 1s
|
|
// Reconnections are delayed by full wait time
|
|
if (waitTime < 400) {
|
|
waitTime *= 2;
|
|
LOG_INFO("Previous TCP connection still open, try again in %dms", waitTime);
|
|
return waitTime;
|
|
}
|
|
#endif
|
|
LOG_INFO("Force close previous TCP connection");
|
|
delete openAPI;
|
|
}
|
|
|
|
openAPI = new T(client);
|
|
}
|
|
|
|
#if RAK_4631
|
|
waitTime = 100;
|
|
#endif
|
|
return 100; // only check occasionally for incoming connections
|
|
} |