Browse Source

Refined SSL implementation.

v_master
Michael Krumpus 6 years ago
parent
commit
afd96430e3
1 changed files with 37 additions and 53 deletions
  1. +37
    -53
      src/TinyGsmClientSequansMonarch.h

+ 37
- 53
src/TinyGsmClientSequansMonarch.h View File

@ -204,14 +204,40 @@ public:
: GsmClient(modem, mux)
{}
protected:
bool strictSSL = false;
public:
virtual int connect(const char *host, uint16_t port) {
if (sock_connected) stop();
TINY_GSM_YIELD();
rx.clear();
// configure security profile 1 with parameters:
if (strictSSL) {
// require minimum of TLS 1.2 (3)
// only support cipher suite 0x3D: TLS_RSA_WITH_AES_256_CBC_SHA256
// verify server certificate against imported CA certs 0 and enforce validity period (3)
at->sendAT(GF("+SQNSPCFG=1,3,\"0x3D\",3,0,,,\"\",\"\""));
} else {
// use TLS 1.0 or higher (1)
// support wider variety of cipher suites
// do not verify server certificate (0)
at->sendAT(GF("+SQNSPCFG=1,1,\"0x2F;0x35;0x3C;0x3D\",0,,,,\"\",\"\""));
}
if (at->waitResponse() != 1) {
DBG("failed to configure security profile");
return false;
}
sock_connected = at->modemConnect(host, port, mux, true);
return sock_connected;
}
void setStrictSSL(bool strict) {
strictSSL = strict;
}
};
public:
@ -299,11 +325,7 @@ public:
}
bool hasSSL() {
sendAT(GF("+SQNSPCFG=1"));
if (waitResponse(GFP(GSM_OK), GF(GSM_NL "+SQNSPCFG:")) != 2) {
return false;
}
return waitResponse() == 1;
return true;
}
/*
@ -559,73 +581,35 @@ public:
/*
* Location functions
*/
// TODO
String getGsmLocation() {
sendAT(GF("+CIPGSMLOC=1,1"));
if (waitResponse(10000L, GF(GSM_NL "+CIPGSMLOC:")) != 1) {
return "";
}
String res = stream.readStringUntil('\n');
waitResponse();
res.trim();
return res;
}
String getGsmLocation() TINY_GSM_ATTR_NOT_AVAILABLE;
/*
* Battery functions
*/
// Use: float vBatt = modem.getBattVoltage() / 1000.0;
// TODO
uint16_t getBattVoltage() {
sendAT(GF("+CBC"));
if (waitResponse(GF(GSM_NL "+CBC:")) != 1) {
return 0;
}
streamSkipUntil(','); // Skip
streamSkipUntil(','); // Skip
uint16_t getBattVoltage() TINY_GSM_ATTR_NOT_AVAILABLE;
uint16_t res = stream.readStringUntil(',').toInt();
waitResponse();
return res;
}
// TODO
int getBattPercent() {
sendAT(GF("+CBC"));
if (waitResponse(GF(GSM_NL "+CBC:")) != 1) {
return false;
}
stream.readStringUntil(',');
int res = stream.readStringUntil(',').toInt();
waitResponse();
return res;
}
int getBattPercent() TINY_GSM_ATTR_NOT_AVAILABLE;
protected:
bool modemConnect(const char* host, uint16_t port, uint8_t mux, bool ssl = false) {
int rsp;
if ((ssl) && (!hasSSL())) {
DBG("SSL not configured. Use AT+SQNSPCFG to configure security profile 1");
return false;
}
sendAT(GF("+SQNSCFG="), mux, GF(",3,300,90,600,50"));
waitResponse();
sendAT(GF("+SQNSCFGEXT="), mux, GF(",1,0,0,0,0"));
waitResponse();
if (ssl) {
// enable SSl and use security profile 1
sendAT(GF("+SQNSSCFG="), mux, GF(",1,1"));
if (waitResponse() != 1) {
DBG("failed to configure secure socket");
return false;
}
}
sendAT(GF("+SQNSCFG="), mux, GF(",3,300,90,600,50"));
waitResponse();
sendAT(GF("+SQNSCFGEXT="), mux, GF(",1,0,0,0,0"));
waitResponse();
sendAT(GF("+SQNSD="), mux, ",0,", port, ',', GF("\""), host, GF("\""), ",0,0,1");
rsp = waitResponse(75000L,
GF("OK" GSM_NL),


Loading…
Cancel
Save