-/*
- SILC Buffer object.
-
- SilcBuffer is very simple and easy to use, yet you can do to the
- buffer almost anything you want with its method functions. The buffer
- is constructed of four different data sections that in whole creates
- the allocated data area. Following short description of the fields
- of the buffer.
-
- unsigned int truelen;
-
- True length of the buffer. This is set at the allocation of the
- buffer and it should not be touched after that. This field should
- be considered read-only.
-
- unsigned int len;
-
- Length of the currently valid data area. Tells the length of the
- data at the buffer. This is set to zero at the allocation of the
- buffer and should not be updated by hand. Method functions of the
- buffer automatically updates this field. However, it is not
- read-only field and can be updated manually if necessary.
-
- unsiged char *head;
-
- Head of the allocated buffer. This is the start of the allocated
- data area and remains as same throughout the lifetime of the buffer.
- However, the end of the head area or the start of the currently valid
- data area is variable.
-
- --------------------------------
- | head | data | tail |
- --------------------------------
- ^ ^
-
- Current head section in the buffer is sb->data - sb->head.
-
- unsigned char *data;
-
- Currently valid data area. This is the start of the currently valid
- main data area. The data area is variable in all directions.
-
- --------------------------------
- | head | data | tail |
- --------------------------------
- ^ ^
-
- Current valid data area in the buffer is sb->tail - sb->data.
-
- unsigned char *tail;
-
- Tail of the buffer. This is the end of the currently valid data area
- or start of the tail area. The start of the tail area is variable.
-
- --------------------------------
- | head | data | tail |
- --------------------------------
- ^ ^
-
- Current tail section in the buffer is sb->end - sb->tail.
-
- unsigned char *end;
-
- End of the allocated buffer. This is the end of the allocated data
- area and remains as same throughout the lifetime of the buffer.
- Usually this field is not needed except when checking the size
- of the buffer.
-
- --------------------------------
- | head | data | tail |
- --------------------------------
- ^
-
- Length of the entire buffer is (ie. truelen) sb->end - sb->head.
-
- Currently valid data area is considered to be the main data area in
- the buffer. However, the entire buffer is of course valid data and can
- be used as such. Usually head section of the buffer includes different
- kind of headers or similiar. Data section includes the main data of
- the buffer. Tail section can be seen as a reserve space of the data
- section. Tail section can be pulled towards end thus the data section
- becomes larger.
-
- This buffer scheme is based on Linux kernel's Socket Buffer, the
- idea were taken directly from there and credits should go there.
-
-*/
-
-typedef struct SilcBufferStruct {
- unsigned int truelen;
- unsigned int len;
+/****h* silcutil/SILC Buffer Interface
+ *
+ * DESCRIPTION
+ *
+ * SilcBuffer is very simple and easy to use, yet you can do to the
+ * buffer almost anything you want with its method functions. The buffer
+ * is constructed of four different data sections that in whole creates
+ * the allocated data area.
+ *
+ * This buffer scheme is based on Linux kernel's Socket Buffer, the
+ * idea were taken directly from there and credits should go there.
+ *
+ ***/
+
+/****s* silcutil/SilcBufferAPI/SilcBuffer
+ *
+ * NAME
+ *
+ * typedef struct { ... } *SilcBuffer, SilcBufferStruct;
+ *
+ * DESCRIPTION
+ *
+ * SILC Buffer object. Following short description of the fields
+ * of the buffer.
+ *
+ * EXAMPLE
+ *
+ * SilcUInt32 truelen;
+ *
+ * True length of the buffer. This is set at the allocation of the
+ * buffer and it should not be touched after that. This field should
+ * be considered read-only.
+ *
+ * SilcUInt32 len;
+ *
+ * Length of the currently valid data area. Tells the length of the
+ * data at the buffer. This is set to zero at the allocation of the
+ * buffer and should not be updated by hand. Method functions of the
+ * buffer automatically updates this field. However, it is not
+ * read-only field and can be updated manually if necessary.
+ *
+ * unsiged char *head;
+ *
+ * Head of the allocated buffer. This is the start of the allocated
+ * data area and remains as same throughout the lifetime of the buffer.
+ * However, the end of the head area or the start of the currently valid
+ * data area is variable.
+ *
+ * --------------------------------
+ * | head | data | tail |
+ * --------------------------------
+ * ^ ^
+ *
+ * Current head section in the buffer is sb->data - sb->head.
+ *
+ * unsigned char *data;
+ *
+ * Currently valid data area. This is the start of the currently valid
+ * main data area. The data area is variable in all directions.
+ *
+ * --------------------------------
+ * | head | data | tail |
+ * --------------------------------
+ * ^ ^
+ *
+ * Current valid data area in the buffer is sb->tail - sb->data.
+ *
+ * unsigned char *tail;
+ *
+ * Tail of the buffer. This is the end of the currently valid data area
+ * or start of the tail area. The start of the tail area is variable.
+ *
+ * --------------------------------
+ * | head | data | tail |
+ * --------------------------------
+ * ^ ^
+ *
+ * Current tail section in the buffer is sb->end - sb->tail.
+ *
+ * unsigned char *end;
+ *
+ * End of the allocated buffer. This is the end of the allocated data
+ * area and remains as same throughout the lifetime of the buffer.
+ * Usually this field is not needed except when checking the size
+ * of the buffer.
+ *
+ * --------------------------------
+ * | head | data | tail |
+ * --------------------------------
+ * ^
+ *
+ * Length of the entire buffer is (ie. truelen) sb->end - sb->head.
+ *
+ * Currently valid data area is considered to be the main data area in
+ * the buffer. However, the entire buffer is of course valid data and can
+ * be used as such. Usually head section of the buffer includes different
+ * kind of headers or similar. Data section includes the main data of
+ * the buffer. Tail section can be seen as a reserve space of the data
+ * section. Tail section can be pulled towards end, and thus the data
+ * section becomes larger.
+ *
+ * SOURCE
+ */
+typedef struct {
+ SilcUInt32 truelen;
+ SilcUInt32 len;