Array StreamPeer::_get_partial_data(int p_bytes) { Array ret; DVector<uint8_t> data; data.resize(p_bytes); if (data.size() != p_bytes) { ret.push_back(ERR_OUT_OF_MEMORY); ret.push_back(DVector<uint8_t>()); return ret; } DVector<uint8_t>::Write w = data.write(); int received; Error err = get_partial_data(&w[0], p_bytes, received); w = DVector<uint8_t>::Write(); if (err != OK) { data.resize(0); } else if (received != data.size()) { data.resize(received); } ret.push_back(err); ret.push_back(data); return ret; }
Error StreamPeerBuffer::get_data(uint8_t *p_buffer, int p_bytes) { int recv; get_partial_data(p_buffer, p_bytes, recv); if (recv != p_bytes) return ERR_INVALID_PARAMETER; return OK; }
Error StreamPeerMbedTLS::get_data(uint8_t *p_buffer, int p_bytes) { ERR_FAIL_COND_V(!connected, ERR_UNCONFIGURED); Error err; int got = 0; while (p_bytes > 0) { err = get_partial_data(p_buffer, p_bytes, got); if (err != OK) { return err; } p_buffer += got; p_bytes -= got; } return OK; }