use input buffer to fill data
| 1170 | |
| 1171 | // use input buffer to fill data |
| 1172 | void SSL::fillData(Data& data) |
| 1173 | { |
| 1174 | if (GetError()) return; |
| 1175 | uint dataSz = data.get_length(); // input, data size to fill |
| 1176 | size_t elements = buffers_.getData().size(); |
| 1177 | |
| 1178 | data.set_length(0); // output, actual data filled |
| 1179 | dataSz = min(dataSz, bufferedData()); |
| 1180 | |
| 1181 | for (size_t i = 0; i < elements; i++) { |
| 1182 | input_buffer* front = buffers_.getData().front(); |
| 1183 | uint frontSz = front->get_remaining(); |
| 1184 | uint readSz = min(dataSz - data.get_length(), frontSz); |
| 1185 | |
| 1186 | front->read(data.set_buffer() + data.get_length(), readSz); |
| 1187 | data.set_length(data.get_length() + readSz); |
| 1188 | |
| 1189 | if (readSz == frontSz) { |
| 1190 | buffers_.useData().pop_front(); |
| 1191 | ysDelete(front); |
| 1192 | } |
| 1193 | if (data.get_length() == dataSz) |
| 1194 | break; |
| 1195 | } |
| 1196 | |
| 1197 | if (buffers_.getData().size() == 0) has_data_ = false; // none left |
| 1198 | } |
| 1199 | |
| 1200 | |
| 1201 | // like Fill but keep data in buffer |
no test coverage detected