| 228 | } |
| 229 | |
| 230 | void BufferedConnection::write(StringRef buf) { |
| 231 | int remaining = buf.size(); |
| 232 | const uint8_t* ptr = buf.begin(); |
| 233 | |
| 234 | PacketBuffer* pb = self->unsent.getWriteBuffer(); |
| 235 | |
| 236 | while (remaining) { |
| 237 | int writable = PacketBuffer::DATA_SIZE - pb->bytes_written; |
| 238 | if (!writable) { |
| 239 | pb->next = new PacketBuffer(); |
| 240 | self->unsent.setWriteBuffer(pb->nextPacketBuffer()); |
| 241 | pb = pb->nextPacketBuffer(); |
| 242 | writable = PacketBuffer::DATA_SIZE; |
| 243 | } |
| 244 | |
| 245 | int to_write = std::min(remaining, writable); |
| 246 | |
| 247 | memcpy(pb->data + pb->bytes_written, ptr, to_write); |
| 248 | pb->bytes_written += to_write; |
| 249 | ptr += to_write; |
| 250 | |
| 251 | remaining -= to_write; |
| 252 | } |
| 253 | |
| 254 | self->on_data_write.trigger(); |
| 255 | } |
| 256 | |
| 257 | ACTOR Future<Void> doOnBytesAvailable(BufferedConnectionData* self, int count) { |
| 258 | if (count > self->desired_bytes.get()) { |
no test coverage detected