Skip to content

Commit 080aeb3

Browse files
committed
Merge remote-tracking branch 'origin/wifi_leven_dev' into wifi_leven_dev
Former-commit-id: c37bffe
2 parents 49e4c94 + 4fd36e0 commit 080aeb3

File tree

6 files changed

+246
-18
lines changed

6 files changed

+246
-18
lines changed

libraries/WiFiS3/src/Modem.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ bool ModemClass::buf_read(const string &prompt, string &data_res) {
184184
bool res = false;
185185
bool found = false;
186186
unsigned long start_time = millis();
187-
while(millis() - start_time < _timeout && !found){
187+
while((millis() - start_time < _timeout) && !found){
188188
while(_serial->available()){
189189
char c = _serial->read();
190190
data_res += c;

libraries/WiFiS3/src/Modem.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
#include "StringHelpers.h"
77

88

9-
//#define MODEM_DEBUG
10-
9+
#define MODEM_DEBUG
10+
#define MODEM_DEBUG_PASSTHROUGH
1111
#define MODEM_TIMEOUT 10000
1212
#define MAX_BUFF_SIZE 64
1313

libraries/WiFiS3/src/WiFiFileSystem.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ void WiFiFileSystem::mount(bool format_on_fault) {
1212
modem.write(string(PROMPT(_MOUNTFS)), res, "%s%d\r\n" , CMD_WRITE(_MOUNTFS), format_on_fault);
1313
}
1414
}
15-
void WiFiFileSystem::writefile(const char* name, const char* data) {
15+
size_t WiFiFileSystem::writefile(const char* name, const char* data, size_t size, int operation) {
1616
string res = "";
17-
if(modem.write(string(PROMPT(_FILESYSTEM)), res, "%s%d,%d,%s,%s\r\n" , CMD_WRITE(_FILESYSTEM), 0, WIFI_FILE_WRITE, name, data)) {
17+
modem.write_nowait(string(PROMPT(_FILESYSTEM)), res, "%s%d,%d,%s,%d\r\n" , CMD_WRITE(_FILESYSTEM), 0, operation, name, size);
18+
if(modem.passthrough((uint8_t *)data, size)) {
19+
return size;
1820
}
1921
}
2022

@@ -26,7 +28,7 @@ void WiFiFileSystem::readfile(const char* name) {
2628
while(1) {
2729
modem.avoid_trim_results();
2830
modem.read_using_size();
29-
if(modem.write(string(PROMPT(_FILESYSTEM)), res, "%s%d,%d,%s,%d,%d\r\n" , CMD_WRITE(_FILESYSTEM), 0, WIFI_FILE_READ, name, i, 1023)) {
31+
if(modem.write(DO_NOT_CHECK_CMD, res, "%s%d,%d,%s,%d,%d\r\n" , CMD_WRITE(_FILESYSTEM), 0, WIFI_FILE_READ, name, i, 1023)) {
3032
Serial.print(res.c_str()); //WIP i'll fix this in next commit for now just print the filecontent
3133
i += res.size();
3234
} else {

libraries/WiFiS3/src/WiFiFileSystem.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class WiFiFileSystem {
2929
public:
3030
WiFiFileSystem();
3131
void mount(bool format_on_fault = false);
32-
void writefile(const char* name, const char* data);
32+
size_t writefile(const char* name, const char* data, size_t size, int operation = WIFI_FILE_WRITE);
3333
void readfile(const char* name);
3434

3535
};
Lines changed: 208 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,29 @@
11
#include "WiFiSSLClient.h"
22

33
/* -------------------------------------------------------------------------- */
4-
WiFiSSLClient::WiFiSSLClient() {
4+
WiFiSSLClient::WiFiSSLClient() : _sock(-1){
55
/* -------------------------------------------------------------------------- */
66

77
}
88

9+
/* -------------------------------------------------------------------------- */
10+
void WiFiSSLClient::getSocket() {
11+
/* -------------------------------------------------------------------------- */
12+
if(_sock == -1) {
13+
string res = "";
14+
modem.begin();
15+
if(modem.write(string(PROMPT(_SSLBEGINCLIENT)),res, "%s" , CMD(_SSLBEGINCLIENT))) {
16+
_sock = atoi(res.c_str());
17+
}
18+
}
19+
}
20+
921
/* -------------------------------------------------------------------------- */
1022
int WiFiSSLClient::connect(IPAddress ip, uint16_t port) {
1123
/* -------------------------------------------------------------------------- */
1224
getSocket();
1325
string res = "";
14-
if(modem.write(string(PROMPT(_SSLCLIENTCONNECT)),res, "%s%d,%s,%d\r\n" , CMD_WRITE(_SSLCLIENTCONNECT), _sock, ip.toString(), port)) {
26+
if(modem.write(string(PROMPT(_SSLCLIENTCONNECTIP)),res, "%s%d,%s,%d\r\n" , CMD_WRITE(_SSLCLIENTCONNECTIP), _sock, ip.toString(), port)) {
1527
return 1;
1628
}
1729
return 0;
@@ -22,28 +34,214 @@ int WiFiSSLClient::connect(const char* host, uint16_t port) {
2234
/* -------------------------------------------------------------------------- */
2335
getSocket();
2436
string res = "";
25-
if(modem.write(DO_NOT_CHECK_CMD,res, "%s%d,%s,%d\r\n" , CMD_WRITE(_SSLCLIENTCONNECT), _sock, host, port)) {
37+
if(modem.write(string(PROMPT(_SSLCLIENTCONNECTNAME)),res, "%s%d,%s,%d\r\n" , CMD_WRITE(_SSLCLIENTCONNECTNAME), _sock, host, port)) {
2638
return 1;
2739
}
2840
return 0;
2941
}
3042

3143
/* -------------------------------------------------------------------------- */
32-
void WiFiSSLClient::setCACert(const char* root_ca) {
44+
void WiFiSSLClient::setCACert(const char* root_ca, size_t size) {
3345
/* -------------------------------------------------------------------------- */
3446
getSocket();
3547
string res = "";
36-
modem.write(string(PROMPT(_SETCAROOT)),res, "%s%d,%s\r\n" , CMD_WRITE(_SETCAROOT), _sock,root_ca);
48+
Serial.print("size ");
49+
Serial.println(size);
50+
if(size > 0) {
51+
modem.write_nowait(string(PROMPT(_SETCAROOT)),res, "%s%d,%d\r\n" , CMD_WRITE(_SETCAROOT), _sock, size);
52+
if(modem.passthrough((uint8_t *)root_ca, size)) {
53+
return;
54+
}
55+
} else {
56+
modem.write(string(PROMPT(_SETCAROOT)),res, "%s%d\r\n" , CMD_WRITE(_SETCAROOT), _sock);
57+
}
3758
}
3859

3960
/* -------------------------------------------------------------------------- */
4061
void WiFiSSLClient::setInsecure() {
4162
/* -------------------------------------------------------------------------- */
4263
getSocket();
4364
string res = "";
44-
modem.write(DO_NOT_CHECK_CMD,res, "%s%d\r\n" , CMD_WRITE(_SSLSETINSERCURE), _sock);
45-
// if(modem.write(string(PROMPT(_SSLSETINSERCURE)),res, "%s%d\r\n" , CMD_WRITE(_SSLSETINSERCURE), _sock)) {
46-
// return true;
47-
// }
48-
65+
modem.write(string(PROMPT(_SSLSETINSERCURE)),res, "%s%d\r\n" , CMD_WRITE(_SSLSETINSERCURE), _sock);
66+
67+
}
68+
69+
/* -------------------------------------------------------------------------- */
70+
size_t WiFiSSLClient::write(uint8_t b){
71+
/* -------------------------------------------------------------------------- */
72+
return write(&b, 1);
73+
}
74+
75+
/* -------------------------------------------------------------------------- */
76+
size_t WiFiSSLClient::write(const uint8_t *buf, size_t size){
77+
/* -------------------------------------------------------------------------- */
78+
if(_sock >= 0) {
79+
string res = "";
80+
modem.begin();
81+
modem.write_nowait(string(PROMPT(_SSLCLIENTSEND)),res, "%s%d,%d\r\n" , CMD_WRITE(_SSLCLIENTSEND), _sock, size);
82+
if(modem.passthrough(buf,size)) {
83+
return size;
84+
}
85+
86+
}
87+
return 0;
88+
89+
}
90+
91+
/* -------------------------------------------------------------------------- */
92+
int WiFiSSLClient::available(){
93+
/* -------------------------------------------------------------------------- */
94+
int rv = 0;
95+
if(_sock >= 0) {
96+
if(rx_buffer.available() > 0) {
97+
return rx_buffer.available();
98+
}
99+
else {
100+
string res = "";
101+
modem.begin();
102+
if(modem.write(string(PROMPT(_SSLAVAILABLE)),res, "%s%d\r\n" , CMD_WRITE(_SSLAVAILABLE), _sock)) {
103+
rv = atoi(res.c_str());
104+
}
105+
}
106+
}
107+
return rv;
108+
}
109+
110+
/* -------------------------------------------------------------------------- */
111+
int WiFiSSLClient::_read() {
112+
/* -------------------------------------------------------------------------- */
113+
int rv = -1;
114+
if(_sock >= 0) {
115+
string res = "";
116+
uint32_t size = rx_buffer.freePositions() - 1;
117+
modem.begin();
118+
119+
/* important - it works one shot */
120+
modem.avoid_trim_results();
121+
modem.read_using_size();
122+
if(modem.write(string(PROMPT(_SSLCLIENTRECEIVE)),res, "%s%d,%d\r\n" , CMD_WRITE(_SSLCLIENTRECEIVE), _sock, size)) {
123+
for(int i = 0, rv = 0; i < size && i < res.size(); i++) {
124+
rx_buffer.store((uint8_t)res[i]);
125+
rv++;
126+
}
127+
}
128+
}
129+
return rv;
130+
}
131+
132+
/* -------------------------------------------------------------------------- */
133+
bool WiFiSSLClient::read_needed(size_t s) {
134+
/* -------------------------------------------------------------------------- */
135+
if((size_t)rx_buffer.available() < s) {
136+
_read();
137+
}
138+
}
139+
140+
/* -------------------------------------------------------------------------- */
141+
int WiFiSSLClient::read() {
142+
/* -------------------------------------------------------------------------- */
143+
uint8_t b;
144+
if(read(&b, 1) == 1) {
145+
return b;
146+
}
147+
return -1;
49148
}
149+
150+
/* -------------------------------------------------------------------------- */
151+
int WiFiSSLClient::read(uint8_t *buf, size_t size) {
152+
/* -------------------------------------------------------------------------- */
153+
read_needed(size);
154+
int rv = 0;
155+
bool go_on = true;
156+
for(int i = 0; i < size && go_on; i++) {
157+
bool is_read = false;
158+
*(buf+i) = rx_buffer.read(&is_read);
159+
if(is_read) {
160+
rv++;
161+
}
162+
else {
163+
go_on = false;
164+
}
165+
}
166+
return rv;
167+
}
168+
169+
/* -------------------------------------------------------------------------- */
170+
int WiFiSSLClient::peek() {
171+
/* -------------------------------------------------------------------------- */
172+
int rv = -1;
173+
if(_sock >= 0) {
174+
string res = "";
175+
modem.begin();
176+
if(modem.write(string(PROMPT(_SSLPEEK)),res, "%s%d\r\n" , CMD_WRITE(_SSLPEEK), _sock)) {
177+
rv = atoi(res.c_str());
178+
}
179+
}
180+
return rv;
181+
}
182+
183+
184+
/* -------------------------------------------------------------------------- */
185+
void WiFiSSLClient::flush() {
186+
/* -------------------------------------------------------------------------- */
187+
if(_sock >= 0) {
188+
string res = "";
189+
modem.begin();
190+
modem.write(string(PROMPT(_SSLCLIENTFLUSH)),res, "%s%d\r\n" , CMD_WRITE(_SSLCLIENTFLUSH), _sock);
191+
}
192+
}
193+
194+
/* -------------------------------------------------------------------------- */
195+
void WiFiSSLClient::stop() {
196+
/* -------------------------------------------------------------------------- */
197+
if(_sock >= 0) {
198+
string res = "";
199+
modem.begin();
200+
modem.write(string(PROMPT(_SSLCLIENTCLOSE)),res, "%s%d\r\n" , CMD_WRITE(_SSLCLIENTCLOSE), _sock);
201+
_sock = -1;
202+
}
203+
}
204+
205+
/* -------------------------------------------------------------------------- */
206+
uint8_t WiFiSSLClient::connected() {
207+
/* -------------------------------------------------------------------------- */
208+
uint8_t rv = 0;
209+
if(_sock >= 0) {
210+
string res = "";
211+
modem.begin();
212+
if(modem.write(string(PROMPT(_SSLCLIENTCONNECTED)),res, "%s%d\r\n" , CMD_WRITE(_SSLCLIENTCONNECTED), _sock)) {
213+
rv = atoi(res.c_str());
214+
}
215+
}
216+
return rv;
217+
}
218+
219+
/* -------------------------------------------------------------------------- */
220+
IPAddress WiFiSSLClient::remoteIP() {
221+
/* -------------------------------------------------------------------------- */
222+
IPAddress ip;
223+
if(_sock >= 0) {
224+
string res = "";
225+
modem.begin();
226+
if(modem.write(string(PROMPT(_SSLREMOTEIP)),res, "%s%d\r\n" , CMD_WRITE(_SSLREMOTEIP), _sock)) {
227+
ip.fromString(res.c_str());
228+
return ip;
229+
}
230+
}
231+
return IPAddress(0,0,0,0);
232+
}
233+
234+
/* -------------------------------------------------------------------------- */
235+
uint16_t WiFiSSLClient::remotePort(){
236+
/* -------------------------------------------------------------------------- */
237+
uint16_t rv = 0;
238+
if(_sock >= 0) {
239+
string res = "";
240+
modem.begin();
241+
if(modem.write(string(PROMPT(_SSLREMOTEPORT)),res, "%s%d\r\n" , CMD_WRITE(_SSLREMOTEPORT), _sock)) {
242+
rv = atoi(res.c_str());
243+
return rv;
244+
}
245+
}
246+
return rv;
247+
}

libraries/WiFiS3/src/WiFiSSLClient.h

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,37 @@ class WiFiSSLClient : public WiFiClient {
3333

3434
virtual int connect(IPAddress ip, uint16_t port);
3535
virtual int connect(const char* host, uint16_t port);
36-
void setCACert(const char* root_ca);
36+
void setCACert(const char* root_ca = NULL, size_t size = 0);
3737
void setInsecure();
38+
virtual size_t write(uint8_t);
39+
virtual size_t write(const uint8_t *buf, size_t size);
40+
virtual int available();
41+
virtual int read();
42+
virtual int read(uint8_t *buf, size_t size);
43+
virtual int peek();
44+
virtual void flush();
45+
virtual void stop();
46+
virtual uint8_t connected();
47+
virtual operator bool() {
48+
return _sock != -1;
49+
}
3850

51+
virtual IPAddress remoteIP();
52+
virtual uint16_t remotePort();
53+
54+
friend class WiFiServer;
55+
56+
using Print::write;
57+
58+
protected:
59+
int _sock;
60+
void getSocket();
61+
FifoBuffer<uint8_t,RX_BUFFER_DIM> rx_buffer;
62+
int _read();
63+
bool read_needed(size_t s);
64+
65+
private:
66+
void upload_default_Cert();
3967
};
4068

4169
#endif /* WIFISSLCLIENT_H */

0 commit comments

Comments
 (0)