@@ -81,6 +81,7 @@ void WiFiClientSecure::stop()
81
81
close (sslclient->socket );
82
82
sslclient->socket = -1 ;
83
83
_connected = false ;
84
+ _peek = -1 ;
84
85
}
85
86
stop_ssl_socket (sslclient, _CA_cert, _cert, _private_key);
86
87
}
@@ -105,7 +106,7 @@ int WiFiClientSecure::connect(const char *host, uint16_t port, const char *_CA_c
105
106
int ret = start_ssl_client (sslclient, host, port, _CA_cert, _cert, _private_key);
106
107
_lastError = ret;
107
108
if (ret < 0 ) {
108
- log_e (" lwip_connect_r : %d" , errno );
109
+ log_e (" start_ssl_client : %d" , ret );
109
110
stop ();
110
111
return 0 ;
111
112
}
@@ -117,7 +118,7 @@ int WiFiClientSecure::peek(){
117
118
if (_peek >= 0 ){
118
119
return _peek;
119
120
}
120
- _peek = read ();
121
+ _peek = timedRead ();
121
122
return _peek;
122
123
}
123
124
@@ -158,21 +159,30 @@ size_t WiFiClientSecure::write(const uint8_t *buf, size_t size)
158
159
159
160
int WiFiClientSecure::read (uint8_t *buf, size_t size)
160
161
{
162
+ int peeked = 0 ;
163
+ if ((!buf && size) || (_peek < 0 && !available ())) {
164
+ return -1 ;
165
+ }
166
+ if (!size){
167
+ return 0 ;
168
+ }
161
169
if (_peek >= 0 ){
162
- uint8_t data = -1 ;
163
- data = _peek;
170
+ buf[0 ] = _peek;
164
171
_peek = -1 ;
165
- return data;
172
+ size--;
173
+ if (!size || !available ()){
174
+ return 1 ;
175
+ }
176
+ buf++;
177
+ peeked = 1 ;
166
178
}
167
179
168
- if (!available ()) {
169
- return -1 ;
170
- }
171
180
int res = get_ssl_receive (sslclient, buf, size);
172
181
if (res < 0 ) {
173
182
stop ();
183
+ return res;
174
184
}
175
- return res;
185
+ return res + peeked ;
176
186
}
177
187
178
188
int WiFiClientSecure::available ()
@@ -183,7 +193,9 @@ int WiFiClientSecure::available()
183
193
int res = data_to_read (sslclient);
184
194
if (res < 0 ) {
185
195
stop ();
186
- }
196
+ } else if (_peek >= 0 ) {
197
+ res += 1 ;
198
+ }
187
199
return res;
188
200
}
189
201
0 commit comments