Lines Matching refs:buffer

46 	net_buffer *buffer;
47 while ((buffer = fList.RemoveHead()) != NULL) {
48 gBufferModule->free(buffer);
72 BufferQueue::Add(net_buffer *buffer)
74 Add(buffer, fLastSequence);
79 BufferQueue::Add(net_buffer *buffer, tcp_sequence sequence)
81 TRACE(("BufferQueue@%p::Add(buffer %p, size %" B_PRIu32 ", sequence %"
82 B_PRIu32 ")\n", this, buffer, buffer->size, sequence.Number()));
88 if (tcp_sequence(sequence + buffer->size) <= fFirstSequence
89 || buffer->size == 0) {
90 // This buffer does not contain any data of interest
91 gBufferModule->free(buffer);
95 // this buffer contains data that is already long gone - trim it
96 gBufferModule->remove_header(buffer,
102 // we usually just add the buffer to the end of the queue
103 fList.Add(buffer);
104 buffer->sequence = sequence.Number();
108 // there is no hole in the buffer, we can make the whole buffer
110 fContiguousBytes += buffer->size;
113 fLastSequence = sequence + buffer->size;
114 fNumBytes += buffer->size;
123 if (fLastSequence < sequence + buffer->size)
124 fLastSequence = sequence + buffer->size;
126 // find the place where to insert the buffer into the queue
146 if (previous->size >= buffer->size) {
147 gBufferModule->free(buffer);
148 buffer = NULL;
155 >= sequence + buffer->size) {
157 gBufferModule->free(buffer);
158 buffer = NULL;
161 // We already have the first part of this buffer
162 gBufferModule->remove_header(buffer,
168 // "next" always starts at or after the buffer sequence
169 ASSERT(next == NULL || buffer == NULL || next->sequence >= sequence);
171 while (buffer != NULL && next != NULL
172 && tcp_sequence(sequence + buffer->size) > next->sequence) {
175 <= sequence + buffer->size) {
183 // We have the end of this buffer already
184 gBufferModule->remove_trailer(buffer,
185 (sequence + buffer->size - next->sequence).Number());
188 gBufferModule->free(buffer);
189 buffer = NULL;
193 if (buffer == NULL) {
201 fList.InsertBefore(next, buffer);
202 buffer->sequence = sequence.Number();
203 fNumBytes += buffer->size;
214 fContiguousBytes += buffer->size;
216 buffer = (struct net_buffer *)buffer->link.next;
217 } while (buffer != NULL
218 && fFirstSequence + fContiguousBytes == buffer->sequence);
245 net_buffer *buffer = NULL;
246 while ((buffer = iterator.Next()) != NULL && buffer->sequence < sequence) {
247 ASSERT(lastRemoved == buffer->sequence);
251 if (sequence >= buffer->sequence + buffer->size) {
252 // remove this buffer completely
254 fNumBytes -= buffer->size;
256 fContiguousBytes -= buffer->size;
257 lastRemoved = buffer->sequence + buffer->size;
258 gBufferModule->free(buffer);
261 size_t size = (sequence - buffer->sequence).Number();
262 gBufferModule->remove_header(buffer, size);
264 buffer->sequence += size;
281 /*! Clones the requested data in the buffer queue into the provided \a buffer.
284 BufferQueue::Get(net_buffer *buffer, tcp_sequence sequence, size_t bytes)
302 // find first buffer matching the sequence
324 status_t status = gBufferModule->append_cloned(buffer, source, offset,
339 /*! Creates a new buffer containing \a bytes bytes from the start of the
340 buffer queue. If \a remove is \c true, the data is removed from the
350 // we don't need to create a buffer when there is no data
355 net_buffer *buffer = fList.First();
357 ASSERT(buffer != NULL);
359 if (!remove || buffer->size > bytes) {
360 // we need a new buffer
361 buffer = gBufferModule->create(256);
362 if (buffer == NULL)
365 // we can reuse this buffer
366 bytesLeft -= buffer->size;
367 fFirstSequence += buffer->size;
369 fList.Remove(buffer);
379 status = gBufferModule->append_cloned(buffer, source, 0, size);
388 // remove either the whole buffer or only the part we cloned
401 if (remove && buffer->size) {
402 fNumBytes -= buffer->size;
403 fContiguousBytes -= buffer->size;
407 if (status < B_OK && buffer->size == 0) {
408 // We could not remove any bytes from the buffer, so
410 gBufferModule->free(buffer);
415 *_buffer = buffer;
446 net_buffer* buffer = iterator.Next();
451 while (buffer != NULL && buffer->sequence > sequence) {
452 if (buffer->sequence + buffer->size < sacks[sackCount].left_edge) {
456 sacks[sackCount].left_edge = buffer->sequence;
457 sacks[sackCount].right_edge = buffer->sequence + buffer->size;
459 sacks[sackCount].left_edge = buffer->sequence;
461 sacks[sackCount].right_edge = buffer->sequence + buffer->size;
464 buffer = iterator.Next();
498 while (net_buffer* buffer = iterator.Next()) {
499 if (contiguous && buffer->sequence == last)
500 contiguousBytes += buffer->size;
504 ASSERT(last <= buffer->sequence);
505 ASSERT(buffer->size > 0);
507 numBytes += buffer->size;
508 last = buffer->sequence + buffer->size;
522 while (net_buffer* buffer = iterator.Next()) {
523 kprintf(" %" B_PRId32 ". buffer %p, sequence %" B_PRIu32
524 ", size %" B_PRIu32 "\n", ++number, buffer, buffer->sequence,
525 buffer->size);