Copyright © 2001 - 2005 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 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 UTF-8 Interface
    SILC Stringprep Interface
    SILC Util Interface
    SILC List Interface
    SILC Dynamic List Interface
    SILC VCard Interface
    SILC Application Utilities
    SILC MIME Interface
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
SILC SFTP Library
    SILC SFTP Interface
    SFTP Filesystems Interface
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
    Unicode and UTF-8 Strings in Client Library
    Client Library Interface Reference
SILC Key Exchange Library
    SILC SKE Interface
    SKE Status Types
    SKE Diffie Hellman Groups
    SKE Payloads
SILC Math Library
    SILC MP Interface
    SILC Math 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 - 2005 SILC Project
SILC Project Website
SILC Toolkit Reference Manual
Index