mirror of
https://github.com/esp8266/Arduino.git
synced 2025-07-30 16:24:09 +03:00
WifiClient::write refactoring (second attempt) (#2177)
* WiFiClient: use DataSource for writes * ESP8266WebServer: delegate writing to WiFiClient * ESP8266WebServer: set write timeout before sending content
This commit is contained in:
@ -49,8 +49,10 @@ public:
|
||||
virtual size_t write(uint8_t);
|
||||
virtual size_t write(const uint8_t *buf, size_t size);
|
||||
size_t write_P(PGM_P buf, size_t size);
|
||||
template <typename T>
|
||||
size_t write(T& source, size_t unitSize);
|
||||
size_t write(Stream& stream);
|
||||
|
||||
// This one is deprecated, use write(Stream& instead)
|
||||
size_t write(Stream& stream, size_t unitSize) __attribute__ ((deprecated));
|
||||
|
||||
virtual int available();
|
||||
virtual int read();
|
||||
@ -73,28 +75,6 @@ public:
|
||||
void setNoDelay(bool nodelay);
|
||||
static void setLocalPortStart(uint16_t port) { _localPort = port; }
|
||||
|
||||
template<typename T> size_t write(T &src){
|
||||
uint8_t obuf[WIFICLIENT_MAX_PACKET_SIZE];
|
||||
size_t doneLen = 0;
|
||||
size_t sentLen;
|
||||
int i;
|
||||
|
||||
while (src.available() > WIFICLIENT_MAX_PACKET_SIZE){
|
||||
src.read(obuf, WIFICLIENT_MAX_PACKET_SIZE);
|
||||
sentLen = write(obuf, WIFICLIENT_MAX_PACKET_SIZE);
|
||||
doneLen = doneLen + sentLen;
|
||||
if(sentLen != WIFICLIENT_MAX_PACKET_SIZE){
|
||||
return doneLen;
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t leftLen = src.available();
|
||||
src.read(obuf, leftLen);
|
||||
sentLen = write(obuf, leftLen);
|
||||
doneLen = doneLen + sentLen;
|
||||
return doneLen;
|
||||
}
|
||||
|
||||
friend class WiFiServer;
|
||||
|
||||
using Print::write;
|
||||
@ -114,24 +94,4 @@ protected:
|
||||
static uint16_t _localPort;
|
||||
};
|
||||
|
||||
|
||||
template <typename T>
|
||||
inline size_t WiFiClient::write(T& source, size_t unitSize) {
|
||||
std::unique_ptr<uint8_t[]> buffer(new uint8_t[unitSize]);
|
||||
size_t size_sent = 0;
|
||||
while(true) {
|
||||
size_t left = source.available();
|
||||
if (!left)
|
||||
break;
|
||||
size_t will_send = (left < unitSize) ? left : unitSize;
|
||||
source.read(buffer.get(), will_send);
|
||||
size_t cb = write(buffer.get(), will_send);
|
||||
size_sent += cb;
|
||||
if (cb != will_send) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return size_sent;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user