11#include " WiFiClient.h"
22
33/* -------------------------------------------------------------------------- */
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+ }
513/* -------------------------------------------------------------------------- */
614
715/* -------------------------------------------------------------------------- */
8- WiFiClient::WiFiClient (int s) : _sock(s) {
16+ WiFiClient::~WiFiClient () {
17+ if (destroy_at_distructor) {
18+ clear_buffer ();
19+ }
920}
1021/* -------------------------------------------------------------------------- */
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+
1239/* -------------------------------------------------------------------------- */
1340void WiFiClient::getSocket () {
1441/* -------------------------------------------------------------------------- */
@@ -77,9 +104,9 @@ size_t WiFiClient::write(const uint8_t *buf, size_t size){
77104int WiFiClient::available (){
78105/* -------------------------------------------------------------------------- */
79106 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 ();
83110 }
84111 else {
85112 string res = " " ;
@@ -96,29 +123,33 @@ int WiFiClient::available(){
96123int WiFiClient::_read () {
97124/* -------------------------------------------------------------------------- */
98125 int rv = -1 ;
99- if (_sock >= 0 ) {
126+ if (_sock >= 0 && rx_buffer != nullptr ) {
100127 string res = " " ;
101- uint32_t size = rx_buffer. freePositions () - 1 ;
128+ uint32_t size = rx_buffer-> freePositions () - 1 ;
102129 modem.begin ();
103130
104131 /* important - it works one shot */
105132 modem.avoid_trim_results ();
106133 modem.read_using_size ();
107134 if (modem.write (string (PROMPT (_CLIENTRECEIVE)),res, " %s%d,%d\r\n " , CMD_WRITE (_CLIENTRECEIVE), _sock, size)) {
108135 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]);
110137 rv++;
111138 }
112139 }
113140 }
141+
142+
114143 return rv;
115144}
116145
117146/* -------------------------------------------------------------------------- */
118147bool WiFiClient::read_needed (size_t s) {
119148/* -------------------------------------------------------------------------- */
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+ }
122153 }
123154}
124155
@@ -138,14 +169,16 @@ int WiFiClient::read(uint8_t *buf, size_t size) {
138169 read_needed (size);
139170 int rv = 0 ;
140171 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+ }
149182 }
150183 }
151184 return rv;
0 commit comments