• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

randombit / botan / 5111374265

29 May 2023 11:19AM UTC coverage: 92.227% (+0.5%) from 91.723%
5111374265

push

github

randombit
Next release will be 3.1.0. Update release notes

75588 of 81959 relevant lines covered (92.23%)

11886470.91 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.14
/src/lib/filters/out_buf.cpp
1
/*
2
* Pipe Output Buffer
3
* (C) 1999-2007,2011 Jack Lloyd
4
*     2012 Markus Wanner
5
*
6
* Botan is released under the Simplified BSD License (see license.txt)
7
*/
8

9
#include <botan/internal/out_buf.h>
10

11
#include <botan/internal/secqueue.h>
12

13
namespace Botan {
14

15
/*
16
* Read data from a message
17
*/
18
size_t Output_Buffers::read(uint8_t output[], size_t length, Pipe::message_id msg) {
116✔
19
   SecureQueue* q = get(msg);
116✔
20
   if(q)
116✔
21
      return q->read(output, length);
116✔
22
   return 0;
23
}
24

25
/*
26
* Peek at data in a message
27
*/
28
size_t Output_Buffers::peek(uint8_t output[], size_t length, size_t stream_offset, Pipe::message_id msg) const {
1✔
29
   SecureQueue* q = get(msg);
1✔
30
   if(q)
1✔
31
      return q->peek(output, length, stream_offset);
1✔
32
   return 0;
33
}
34

35
/*
36
* Check available bytes in a message
37
*/
38
size_t Output_Buffers::remaining(Pipe::message_id msg) const {
76✔
39
   SecureQueue* q = get(msg);
76✔
40
   if(q)
76✔
41
      return q->size();
76✔
42
   return 0;
43
}
44

45
/*
46
* Return the total bytes of a message that have already been read.
47
*/
48
size_t Output_Buffers::get_bytes_read(Pipe::message_id msg) const {
8✔
49
   SecureQueue* q = get(msg);
8✔
50
   if(q)
8✔
51
      return q->get_bytes_read();
8✔
52
   return 0;
53
}
54

55
/*
56
* Add a new output queue
57
*/
58
void Output_Buffers::add(SecureQueue* queue) {
72✔
59
   BOTAN_ASSERT(queue, "queue was provided");
72✔
60

61
   BOTAN_ASSERT(m_buffers.size() < m_buffers.max_size(), "Room was available in container");
72✔
62

63
   m_buffers.push_back(std::unique_ptr<SecureQueue>(queue));
72✔
64
}
72✔
65

66
/*
67
* Retire old output queues
68
*/
69
void Output_Buffers::retire() {
65✔
70
   for(auto& buf : m_buffers) {
405✔
71
      if(buf && buf->empty()) {
275✔
72
         buf.reset();
298✔
73
      }
74
   }
75

76
   while(!m_buffers.empty() && !m_buffers[0]) {
88✔
77
      m_buffers.pop_front();
23✔
78
      m_offset = m_offset + Pipe::message_id(1);
23✔
79
   }
80
}
65✔
81

82
/*
83
* Get a particular output queue
84
*/
85
SecureQueue* Output_Buffers::get(Pipe::message_id msg) const {
201✔
86
   if(msg < m_offset)
201✔
87
      return nullptr;
88

89
   BOTAN_ASSERT(msg < message_count(), "Message number is in range");
×
90

91
   return m_buffers[msg - m_offset].get();
201✔
92
}
93

94
/*
95
* Return the total number of messages
96
*/
97
Pipe::message_id Output_Buffers::message_count() const { return (m_offset + m_buffers.size()); }
201✔
98

99
/*
100
* Output_Buffers Constructor
101
*/
102
Output_Buffers::Output_Buffers() { m_offset = 0; }
18✔
103

104
}  // namespace Botan
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc