diff options
author | Tobias Brunner <tobias@strongswan.org> | 2012-06-29 10:12:27 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2012-08-08 15:41:02 +0200 |
commit | 59a15a7475f60049dc2b259935c2a047ec764f95 (patch) | |
tree | 0a9f9326e8164104d5c3fc261642b67f52fdc3b9 /src | |
parent | c1830d26703fe7ff51d31b3b2aeb3e15bde66c25 (diff) | |
download | strongswan-59a15a7475f60049dc2b259935c2a047ec764f95.tar.bz2 strongswan-59a15a7475f60049dc2b259935c2a047ec764f95.tar.xz |
Added a method to bio_writer_t that allows to extract the internal buffer
Diffstat (limited to 'src')
-rw-r--r-- | src/libstrongswan/bio/bio_writer.c | 13 | ||||
-rw-r--r-- | src/libstrongswan/bio/bio_writer.h | 16 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/libstrongswan/bio/bio_writer.c b/src/libstrongswan/bio/bio_writer.c index bf373d6ac..16a16f4bd 100644 --- a/src/libstrongswan/bio/bio_writer.c +++ b/src/libstrongswan/bio/bio_writer.c @@ -1,4 +1,7 @@ /* + * Copyright (C) 2012 Tobias Brunner + * Hochschule fuer Technik Rapperswil + * * Copyright (C) 2010 Martin Willi * Copyright (C) 2010 revosec AG * @@ -205,6 +208,15 @@ METHOD(bio_writer_t, get_buf, chunk_t, return chunk_create(this->buf.ptr, this->used); } +METHOD(bio_writer_t, extract_buf, chunk_t, + private_bio_writer_t *this) +{ + chunk_t buf = get_buf(this); + this->buf = chunk_empty; + this->used = 0; + return buf; +} + METHOD(bio_writer_t, destroy, void, private_bio_writer_t *this) { @@ -236,6 +248,7 @@ bio_writer_t *bio_writer_create(u_int32_t bufsize) .wrap24 = _wrap24, .wrap32 = _wrap32, .get_buf = _get_buf, + .extract_buf = _extract_buf, .destroy = _destroy, }, .increase = bufsize ? max(bufsize, 4) : 32, diff --git a/src/libstrongswan/bio/bio_writer.h b/src/libstrongswan/bio/bio_writer.h index 0b50f7882..8f84d0500 100644 --- a/src/libstrongswan/bio/bio_writer.h +++ b/src/libstrongswan/bio/bio_writer.h @@ -1,4 +1,7 @@ /* + * Copyright (C) 2012 Tobias Brunner + * Hochschule fuer Technik Rapperswil + * * Copyright (C) 2010 Martin Willi * Copyright (C) 2010 revosec AG * @@ -27,6 +30,8 @@ typedef struct bio_writer_t bio_writer_t; /** * Buffered output generator. + * + * @note Integers are converted to network byte order before writing. */ struct bio_writer_t { @@ -128,6 +133,14 @@ struct bio_writer_t { chunk_t (*get_buf)(bio_writer_t *this); /** + * Return the encoded data buffer and detach it from the writer (resets + * the internal buffer). + * + * @return chunk to internal buffer (has to be freed) + */ + chunk_t (*extract_buf)(bio_writer_t *this); + + /** * Destroy a bio_writer_t. */ void (*destroy)(bio_writer_t *this); @@ -136,6 +149,9 @@ struct bio_writer_t { /** * Create a bio_writer instance. * + * The size of the internal buffer is increased automatically by bufsize (or a + * default if not given) if the initial size does not suffice. + * * @param bufsize initially allocated buffer size */ bio_writer_t *bio_writer_create(u_int32_t bufsize); |