diff --git a/src/TinyGsmClientSIM7000.h b/src/TinyGsmClientSIM7000.h index e7088457..5fcdc230 100644 --- a/src/TinyGsmClientSIM7000.h +++ b/src/TinyGsmClientSIM7000.h @@ -38,6 +38,11 @@ class TinyGsmSim7000 : public TinyGsmSim70xx, init(&modem, mux); } + virtual ~GsmClientSim7000() { + stop(); + at->sockets[mux] = nullptr; + } + bool init(TinyGsmSim7000* modem, uint8_t mux = 0) { this->at = modem; sock_available = 0; @@ -56,6 +61,19 @@ class TinyGsmSim7000 : public TinyGsmSim70xx, } public: + + GsmClientSim7000* createClient() { + for (uint8_t idx = 0; idx < TINY_GSM_MUX_COUNT; idx++) { + if (!sockets[idx]) { + GsmClientSim7000* client = new GsmClientSim7000(); + client->init(this, idx); + return client; + } + } + DBG(GF("ERROR: Cannot create client, TINYGSM_MUX_COUNT ["), TINY_GSM_MUX_COUNT, GF("] exceeded.")); + return nullptr; + } + virtual int connect(const char* host, uint16_t port, int timeout_s) { stop(); TINY_GSM_YIELD(); diff --git a/src/TinyGsmClientSIM7000SSL.h b/src/TinyGsmClientSIM7000SSL.h index 2f88e893..bf14cb39 100644 --- a/src/TinyGsmClientSIM7000SSL.h +++ b/src/TinyGsmClientSIM7000SSL.h @@ -41,6 +41,11 @@ class TinyGsmSim7000SSL init(&modem, mux); } + virtual ~GsmClientSim7000SSL() { + stop(); + at->sockets[mux] = nullptr; + } + bool init(TinyGsmSim7000SSL* modem, uint8_t mux = 0) { this->at = modem; sock_available = 0; @@ -122,6 +127,20 @@ class TinyGsmSim7000SSL certificates() { memset(sockets, 0, sizeof(sockets)); } + + GsmClientSim7000SSL* createClient(bool ssl = false) { + for (uint8_t idx = 0; idx < TINY_GSM_MUX_COUNT; idx++) { + if (!sockets[idx]) { + GsmClientSim7000SSL* client = ssl + ? new GsmClientSecureSIM7000SSL() + : new GsmClientSim7000SSL(); + client->init(this, idx); + return client; + } + } + DBG(GF("ERROR: Cannot create client, TINYGSM_MUX_COUNT ["), TINY_GSM_MUX_COUNT, GF("] exceeded.")); + return nullptr; + } /* * Basic functions