5 void buffer_init(buffer_t *buf)
10 void buffer_close(buffer_t *buf)
12 /* Our data is static - nothing needs "release", just reset */
16 /* Code these simple ones in compact form */
17 unsigned int buffer_used(buffer_t *buf) {
19 unsigned int buffer_unused(buffer_t *buf) {
20 return (MAX_DATA_SIZE - buf->used); }
21 int buffer_full(buffer_t *buf) {
22 return (buf->used == MAX_DATA_SIZE ? 1 : 0); }
23 int buffer_notfull(buffer_t *buf) {
24 return (buf->used < MAX_DATA_SIZE ? 1 : 0); }
25 int buffer_empty(buffer_t *buf) {
26 return (buf->used == 0 ? 1 : 0); }
27 int buffer_notempty(buffer_t *buf) {
28 return (buf->used > 0 ? 1 : 0); }
30 unsigned int buffer_adddata(buffer_t *buf, const unsigned char *ptr,
33 unsigned int added = MAX_DATA_SIZE - buf->used;
38 memcpy(buf->data + buf->used, ptr, added);
43 unsigned int buffer_takedata(buffer_t *buf, unsigned char *ptr,
46 unsigned int taken = buf->used;
52 memcpy(ptr, buf->data, taken);
54 /* Do we have to scroll? */
56 memmove(buf->data, buf->data + taken, buf->used);
60 unsigned int buffer_tobuffer(buffer_t *to, buffer_t *from, int cap)
62 unsigned int moved, tomove = from->used;
67 moved = buffer_adddata(to, from->data, tomove);
70 buffer_takedata(from, NULL, moved);
76 int buffer_from_fd(buffer_t *buf, int fd)
78 unsigned int toread = buffer_unused(buf);
80 /* Shouldn't be called in this case! */
82 toread = read(fd, buf->data + buf->used, toread);
88 int buffer_to_fd(buffer_t *buf, int fd)
90 unsigned int towrite = buffer_used(buf);
92 /* Shouldn't be called in this case! */
94 towrite = write(fd, buf->data, towrite);
96 buffer_takedata(buf, NULL, towrite);
100 #endif /* !defined(NO_IP) */
104 void buffer_from_SSL(buffer_t *buf, SSL *ssl)
107 if(!ssl || buffer_full(buf))
109 ret = SSL_read(ssl, buf->data + buf->used, buffer_unused(buf));
114 void buffer_to_SSL(buffer_t *buf, SSL *ssl)
117 if(!ssl || buffer_empty(buf))
119 ret = SSL_write(ssl, buf->data, buf->used);
121 buffer_takedata(buf, NULL, ret);
124 void buffer_from_BIO(buffer_t *buf, BIO *bio)
127 if(!bio || buffer_full(buf))
129 ret = BIO_read(bio, buf->data + buf->used, buffer_unused(buf));
134 void buffer_to_BIO(buffer_t *buf, BIO *bio)
137 if(!bio || buffer_empty(buf))
139 ret = BIO_write(bio, buf->data, buf->used);
141 buffer_takedata(buf, NULL, ret);
144 #endif /* !defined(NO_OPENSSL) */
146 #endif /* !defined(NO_BUFFER) */