/usr/include/dlib/sockstreambuf/sockstreambuf.h is in libdlib-dev 18.18-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | // Copyright (C) 2003 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#ifndef DLIB_SOCKStREAMBUF_Hh_
#define DLIB_SOCKStREAMBUF_Hh_
#include <iosfwd>
#include <streambuf>
#include "../sockets.h"
#include "sockstreambuf_abstract.h"
#include "sockstreambuf_unbuffered.h"
namespace dlib
{
// ----------------------------------------------------------------------------------------
class sockstreambuf : public std::streambuf
{
/*!
INITIAL VALUE
- con == a connection
- in_buffer == an array of in_buffer_size bytes
- out_buffer == an array of out_buffer_size bytes
CONVENTION
- in_buffer == the input buffer used by this streambuf
- out_buffer == the output buffer used by this streambuf
- max_putback == the maximum number of chars to have in the put back buffer.
!*/
public:
// These typedefs are here for backwards compatibility with previous versions of
// dlib.
typedef sockstreambuf_unbuffered kernel_1a;
typedef sockstreambuf kernel_2a;
sockstreambuf (
connection* con_
) :
con(*con_),
out_buffer(0),
in_buffer(0),
autoflush(false)
{
init();
}
sockstreambuf (
const scoped_ptr<connection>& con_
) :
con(*con_),
out_buffer(0),
in_buffer(0),
autoflush(false)
{
init();
}
virtual ~sockstreambuf (
)
{
sync();
delete [] out_buffer;
delete [] in_buffer;
}
connection* get_connection (
) { return &con; }
void flush_output_on_read()
{
autoflush = true;
}
bool flushes_output_on_read() const
{
return autoflush;
}
void do_not_flush_output_on_read()
{
autoflush = false;
}
protected:
void init (
)
{
try
{
out_buffer = new char[out_buffer_size];
in_buffer = new char[in_buffer_size];
}
catch (...)
{
if (out_buffer) delete [] out_buffer;
throw;
}
setp(out_buffer, out_buffer + (out_buffer_size-1));
setg(in_buffer+max_putback,
in_buffer+max_putback,
in_buffer+max_putback);
}
int flush_out_buffer (
)
{
int num = static_cast<int>(pptr()-pbase());
if (con.write(out_buffer,num) != num)
{
// the write was not successful so return EOF
return EOF;
}
pbump(-num);
return num;
}
// output functions
int_type overflow (
int_type c
);
int sync (
)
{
if (flush_out_buffer() == EOF)
{
// an error occurred
return -1;
}
return 0;
}
std::streamsize xsputn (
const char* s,
std::streamsize num
);
// input functions
int_type underflow(
);
std::streamsize xsgetn (
char_type* s,
std::streamsize n
);
private:
// member data
connection& con;
static const std::streamsize max_putback = 4;
static const std::streamsize out_buffer_size = 10000;
static const std::streamsize in_buffer_size = 10000;
char* out_buffer;
char* in_buffer;
bool autoflush;
};
// ----------------------------------------------------------------------------------------
}
#ifdef NO_MAKEFILE
#include "sockstreambuf.cpp"
#endif
#endif // DLIB_SOCKStREAMBUF_Hh_
|