Annotation of embedaddon/strongswan/src/libstrongswan/bio/bio_writer.h, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (C) 2012 Tobias Brunner
! 3: * HSR Hochschule fuer Technik Rapperswil
! 4: *
! 5: * Copyright (C) 2010 Martin Willi
! 6: * Copyright (C) 2010 revosec AG
! 7: *
! 8: * This program is free software; you can redistribute it and/or modify it
! 9: * under the terms of the GNU General Public License as published by the
! 10: * Free Software Foundation; either version 2 of the License, or (at your
! 11: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
! 12: *
! 13: * This program is distributed in the hope that it will be useful, but
! 14: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 15: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
! 16: * for more details.
! 17: */
! 18:
! 19: /**
! 20: * @defgroup bio_writer bio_writer
! 21: * @{ @ingroup bio
! 22: */
! 23:
! 24: #ifndef BIO_WRITER_H_
! 25: #define BIO_WRITER_H_
! 26:
! 27: typedef struct bio_writer_t bio_writer_t;
! 28:
! 29: #include <library.h>
! 30:
! 31: /**
! 32: * Buffered output generator.
! 33: *
! 34: * @note Integers are converted to network byte order before writing.
! 35: */
! 36: struct bio_writer_t {
! 37:
! 38: /**
! 39: * Append a 8-bit integer to the buffer.
! 40: *
! 41: * @param value value to append
! 42: */
! 43: void (*write_uint8)(bio_writer_t *this, uint8_t value);
! 44:
! 45: /**
! 46: * Append a 16-bit integer to the buffer.
! 47: *
! 48: * @param value value to append
! 49: */
! 50: void (*write_uint16)(bio_writer_t *this, uint16_t value);
! 51:
! 52: /**
! 53: * Append a 24-bit integer to the buffer.
! 54: *
! 55: * @param value value to append
! 56: */
! 57: void (*write_uint24)(bio_writer_t *this, uint32_t value);
! 58:
! 59: /**
! 60: * Append a 32-bit integer to the buffer.
! 61: *
! 62: * @param value value to append
! 63: */
! 64: void (*write_uint32)(bio_writer_t *this, uint32_t value);
! 65:
! 66: /**
! 67: * Append a 64-bit integer to the buffer.
! 68: *
! 69: * @param value value to append
! 70: */
! 71: void (*write_uint64)(bio_writer_t *this, uint64_t value);
! 72:
! 73: /**
! 74: * Append a chunk of data without a length header.
! 75: *
! 76: * @param value value to append
! 77: */
! 78: void (*write_data)(bio_writer_t *this, chunk_t value);
! 79:
! 80: /**
! 81: * Append a chunk of data with a 8-bit length header.
! 82: *
! 83: * @param value value to append
! 84: */
! 85: void (*write_data8)(bio_writer_t *this, chunk_t value);
! 86:
! 87: /**
! 88: * Append a chunk of data with a 16-bit length header.
! 89: *
! 90: * @param value value to append
! 91: */
! 92: void (*write_data16)(bio_writer_t *this, chunk_t value);
! 93:
! 94: /**
! 95: * Append a chunk of data with a 24-bit length header.
! 96: *
! 97: * @param value value to append
! 98: */
! 99: void (*write_data24)(bio_writer_t *this, chunk_t value);
! 100:
! 101: /**
! 102: * Append a chunk of data with a 32-bit length header.
! 103: *
! 104: * @param value value to append
! 105: */
! 106: void (*write_data32)(bio_writer_t *this, chunk_t value);
! 107:
! 108: /**
! 109: * Prepend a 8-bit length header to existing data.
! 110: */
! 111: void (*wrap8)(bio_writer_t *this);
! 112:
! 113: /**
! 114: * Prepend a 16-bit length header to existing data.
! 115: */
! 116: void (*wrap16)(bio_writer_t *this);
! 117:
! 118: /**
! 119: * Prepend a 24-bit length header to existing data.
! 120: */
! 121: void (*wrap24)(bio_writer_t *this);
! 122:
! 123: /**
! 124: * Prepend a 32-bit length header to existing data.
! 125: */
! 126: void (*wrap32)(bio_writer_t *this);
! 127:
! 128: /**
! 129: * Skips len bytes in the buffer, return chunk of skipped data.
! 130: *
! 131: * The returned chunk is not valid after calling any other writer function
! 132: * (except get_buf()), because a buffer reallocation might move the
! 133: * internal buffer to a different memory location!
! 134: *
! 135: * @param len number of bytes to skip
! 136: * @return chunk pointing to skipped bytes in the internal buffer
! 137: */
! 138: chunk_t (*skip)(bio_writer_t *this, size_t len);
! 139:
! 140: /**
! 141: * Get the encoded data buffer.
! 142: *
! 143: * @return chunk to internal buffer
! 144: */
! 145: chunk_t (*get_buf)(bio_writer_t *this);
! 146:
! 147: /**
! 148: * Return the encoded data buffer and detach it from the writer (resets
! 149: * the internal buffer).
! 150: *
! 151: * @return chunk to internal buffer (has to be freed)
! 152: */
! 153: chunk_t (*extract_buf)(bio_writer_t *this);
! 154:
! 155: /**
! 156: * Destroy a bio_writer_t.
! 157: */
! 158: void (*destroy)(bio_writer_t *this);
! 159: };
! 160:
! 161: /**
! 162: * Create a bio_writer instance.
! 163: *
! 164: * The size of the internal buffer is increased automatically by bufsize (or a
! 165: * default if not given) if the initial size does not suffice.
! 166: *
! 167: * @param bufsize initially allocated buffer size
! 168: */
! 169: bio_writer_t *bio_writer_create(uint32_t bufsize);
! 170:
! 171: #endif /** BIO_WRITER_H_ @}*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>