Added a method to bio_writer_t that allows to skip a number of bytes
authorTobias Brunner <tobias@strongswan.org>
Fri, 29 Jun 2012 08:47:20 +0000 (10:47 +0200)
committerTobias Brunner <tobias@strongswan.org>
Wed, 8 Aug 2012 13:41:02 +0000 (15:41 +0200)
A chunk pointing to the skipped bytes is returned, allowing users of
bio_writer_t to write/copy data to the skipped bytes themselves.

src/libstrongswan/bio/bio_writer.c
src/libstrongswan/bio/bio_writer.h

index 16a16f4..8576843 100644 (file)
@@ -202,6 +202,20 @@ METHOD(bio_writer_t, wrap32, void,
        this->used += 4;
 }
 
        this->used += 4;
 }
 
+METHOD(bio_writer_t, skip, chunk_t,
+       private_bio_writer_t *this, size_t len)
+{
+       chunk_t skipped;
+
+       while (this->used + len > this->buf.len)
+       {
+               increase(this);
+       }
+       skipped = chunk_create(this->buf.ptr + this->used, len);
+       this->used += len;
+       return skipped;
+}
+
 METHOD(bio_writer_t, get_buf, chunk_t,
        private_bio_writer_t *this)
 {
 METHOD(bio_writer_t, get_buf, chunk_t,
        private_bio_writer_t *this)
 {
@@ -247,6 +261,7 @@ bio_writer_t *bio_writer_create(u_int32_t bufsize)
                        .wrap16 = _wrap16,
                        .wrap24 = _wrap24,
                        .wrap32 = _wrap32,
                        .wrap16 = _wrap16,
                        .wrap24 = _wrap24,
                        .wrap32 = _wrap32,
+                       .skip = _skip,
                        .get_buf = _get_buf,
                        .extract_buf = _extract_buf,
                        .destroy = _destroy,
                        .get_buf = _get_buf,
                        .extract_buf = _extract_buf,
                        .destroy = _destroy,
index 8f84d05..57a5c3d 100644 (file)
@@ -126,6 +126,15 @@ struct bio_writer_t {
        void (*wrap32)(bio_writer_t *this);
 
        /**
        void (*wrap32)(bio_writer_t *this);
 
        /**
+        * Skips len bytes in the buffer before the next data is written, returns
+        * a chunk covering the skipped bytes.
+        *
+        * @param len           number of bytes to skip
+        * @return                      chunk pointing to skipped bytes in the internal buffer
+        */
+       chunk_t (*skip)(bio_writer_t *this, size_t len);
+
+       /**
         * Get the encoded data buffer.
         *
         * @return                      chunk to internal buffer
         * Get the encoded data buffer.
         *
         * @return                      chunk to internal buffer