1
1
#include " WiFiClient.h"
2
2
3
3
/* -------------------------------------------------------------------------- */
4
- WiFiClient::WiFiClient () : _sock(-1 ) { }
4
+ WiFiClient::WiFiClient () : _sock(-1 ), destroy_at_distructor(true ), rx_buffer(nullptr ) {
5
+ rx_buffer = new FifoBuffer<uint8_t ,RX_BUFFER_DIM>();
6
+ }
7
+ /* -------------------------------------------------------------------------- */
8
+
9
+ /* -------------------------------------------------------------------------- */
10
+ WiFiClient::WiFiClient (int s) : _sock(s), destroy_at_distructor(false ), rx_buffer(nullptr ) {
11
+ rx_buffer = new FifoBuffer<uint8_t ,RX_BUFFER_DIM>();
12
+ }
5
13
/* -------------------------------------------------------------------------- */
6
14
7
15
/* -------------------------------------------------------------------------- */
8
- WiFiClient::WiFiClient (int s) : _sock(s) {
16
+ WiFiClient::~WiFiClient () {
17
+ if (destroy_at_distructor) {
18
+ clear_buffer ();
19
+ }
9
20
}
10
21
/* -------------------------------------------------------------------------- */
11
-
22
+
23
+ void WiFiClient::clear_buffer () {
24
+ if (rx_buffer != nullptr ) {
25
+ delete rx_buffer;
26
+ rx_buffer = nullptr ;
27
+ }
28
+ }
29
+
30
+
31
+ /* -------------------------------------------------------------------------- */
32
+ WiFiClient::WiFiClient (const WiFiClient& c) {
33
+ /* -------------------------------------------------------------------------- */
34
+ _sock = c._sock ;
35
+ rx_buffer = c.rx_buffer ;
36
+ }
37
+
38
+
12
39
/* -------------------------------------------------------------------------- */
13
40
void WiFiClient::getSocket () {
14
41
/* -------------------------------------------------------------------------- */
@@ -77,9 +104,9 @@ size_t WiFiClient::write(const uint8_t *buf, size_t size){
77
104
int WiFiClient::available (){
78
105
/* -------------------------------------------------------------------------- */
79
106
int rv = 0 ;
80
- if (_sock >= 0 ) {
81
- if (rx_buffer. available () > 0 ) {
82
- return rx_buffer. available ();
107
+ if (_sock >= 0 && rx_buffer != nullptr ) {
108
+ if (rx_buffer-> available () > 0 ) {
109
+ return rx_buffer-> available ();
83
110
}
84
111
else {
85
112
string res = " " ;
@@ -96,29 +123,33 @@ int WiFiClient::available(){
96
123
int WiFiClient::_read () {
97
124
/* -------------------------------------------------------------------------- */
98
125
int rv = -1 ;
99
- if (_sock >= 0 ) {
126
+ if (_sock >= 0 && rx_buffer != nullptr ) {
100
127
string res = " " ;
101
- uint32_t size = rx_buffer. freePositions () - 1 ;
128
+ uint32_t size = rx_buffer-> freePositions () - 1 ;
102
129
modem.begin ();
103
130
104
131
/* important - it works one shot */
105
132
modem.avoid_trim_results ();
106
133
modem.read_using_size ();
107
134
if (modem.write (string (PROMPT (_CLIENTRECEIVE)),res, " %s%d,%d\r\n " , CMD_WRITE (_CLIENTRECEIVE), _sock, size)) {
108
135
for (int i = 0 , rv = 0 ; i < size && i < res.size (); i++) {
109
- rx_buffer. store ((uint8_t )res[i]);
136
+ rx_buffer-> store ((uint8_t )res[i]);
110
137
rv++;
111
138
}
112
139
}
113
140
}
141
+
142
+
114
143
return rv;
115
144
}
116
145
117
146
/* -------------------------------------------------------------------------- */
118
147
bool WiFiClient::read_needed (size_t s) {
119
148
/* -------------------------------------------------------------------------- */
120
- if ((size_t )rx_buffer.available () < s) {
121
- _read ();
149
+ if (rx_buffer != nullptr ) {
150
+ if ((size_t )rx_buffer->available () < s) {
151
+ _read ();
152
+ }
122
153
}
123
154
}
124
155
@@ -138,14 +169,16 @@ int WiFiClient::read(uint8_t *buf, size_t size) {
138
169
read_needed (size);
139
170
int rv = 0 ;
140
171
bool go_on = true ;
141
- for (int i = 0 ; i < size && go_on; i++) {
142
- bool is_read = false ;
143
- *(buf+i) = rx_buffer.read (&is_read);
144
- if (is_read) {
145
- rv++;
146
- }
147
- else {
148
- go_on = false ;
172
+ if (_sock >= 0 && rx_buffer != nullptr ) {
173
+ for (int i = 0 ; i < size && go_on; i++) {
174
+ bool is_read = false ;
175
+ *(buf+i) = rx_buffer->read (&is_read);
176
+ if (is_read) {
177
+ rv++;
178
+ }
179
+ else {
180
+ go_on = false ;
181
+ }
149
182
}
150
183
}
151
184
return rv;
0 commit comments