Copyright © 2001 - 2002 SILC Project SILC Project Website | SILC Toolkit Reference Manual Index

SILC Toolkit Reference Manual
SILC Core Library
SILC Authentication Interface
SILC Message Interface
SILC Channel Interface
SILC Command Interface
SILC Notify Interface
SILC Status Types
SILC Modes
SILC ID Interface
SILC ID Cache Interface
SILC Argument Interface
SILC Attributes Interface
Packet Protocol Interface
SILC Math Library
SILC MP Interface
SILC Math Interface
SILC SFTP Library
SILC SFTP Interface
SFTP Filesystems Interface
SILC Utility Library
Basic SILC Types
SILC Buffer Interface
SILC Buffer Format Interface
SILC Hash Table Interface
SILC Logging Interface
SILC Memory Interface
SILC Mutex Interface
SILC Thread Interface
SILC Network Interface
SILC Schedule Interface
SILC Socket Interface
SILC Protocol Interface
SILC Config Interface
SILC File Util Interface
SILC String Util Interface
SILC Util Interface
SILC List Interface
SILC Dynamic List Interface
SILC VCard Interface
SILC Application Utilities
SILC Key Exchange Library
SILC SKE Interface
SKE Status Types
SKE Diffie Hellman Groups
SKE Payloads
SILC Client Library
Using SILC Client Library Tutorial
Arguments for command_reply Client Operation
SilcStatus Error Arguments in command_reply Client Operation
Arguments for notify Client Operation
Client Library Interface Reference
SILC Crypto Library
Introduction to SILC RNG
SILC RNG Interface
SILC Cipher API
SILC PKCS API
SILC PKCS#1 API
SILC Hash Interface
SILC HMAC Interface
Resource Links
SILC Project Website
SILC Protocol Documentation
SILC White Paper
SILC FAQs

Structure 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;
          unsigned char *head;
          unsigned char *data;
          unsigned char *tail;
          unsigned char *end;
        } *SilcBuffer, SilcBufferStruct;

SILC Buffer Interface SilcBuffer SILC_BUFFER_END silc_buffer_alloc silc_buffer_free silc_buffer_steal silc_buffer_set silc_buffer_pull silc_buffer_push silc_buffer_pull_tail silc_buffer_push_tail silc_buffer_put_head silc_buffer_put silc_buffer_put_tail silc_buffer_alloc_size silc_buffer_clear silc_buffer_copy silc_buffer_clone silc_buffer_realloc

Copyright © 2001 - 2002 SILC Project SILC Project Website | SILC Toolkit Reference Manual Index