like Fill but keep data in buffer
| 1200 | |
| 1201 | // like Fill but keep data in buffer |
| 1202 | void SSL::PeekData(Data& data) |
| 1203 | { |
| 1204 | if (GetError()) return; |
| 1205 | uint dataSz = data.get_length(); // input, data size to fill |
| 1206 | size_t elements = buffers_.getData().size(); |
| 1207 | |
| 1208 | data.set_length(0); // output, actual data filled |
| 1209 | dataSz = min(dataSz, bufferedData()); |
| 1210 | |
| 1211 | Buffers::inputList::iterator front = buffers_.useData().begin(); |
| 1212 | |
| 1213 | while (elements) { |
| 1214 | uint frontSz = (*front)->get_remaining(); |
| 1215 | uint readSz = min(dataSz - data.get_length(), frontSz); |
| 1216 | uint before = (*front)->get_current(); |
| 1217 | |
| 1218 | (*front)->read(data.set_buffer() + data.get_length(), readSz); |
| 1219 | data.set_length(data.get_length() + readSz); |
| 1220 | (*front)->set_current(before); |
| 1221 | |
| 1222 | if (data.get_length() == dataSz) |
| 1223 | break; |
| 1224 | |
| 1225 | elements--; |
| 1226 | front++; |
| 1227 | } |
| 1228 | } |
| 1229 | |
| 1230 | |
| 1231 | // flush output buffer |
no test coverage detected