SILC Core Library
    SILC Auth API
    SILC Channel API
    SILC Command API
    SILC ID API
    SILC ID Cache API
    SILC Modes
    SILC Notify API
    SILC Packet API
    SILC Argument API
    SILC Private API
SILC Math Library
    SILC Math API
    SILC MP API
SILC SFTP Library
    SILC SFTP API
    SILC SFTP Filesystems
SILC Utility Library
    SILC Buffer API
    SILC Buffer Format API
    SILC Buffer Utility API
    SILC Hash Table API
    SILC Log and Debug API
    SILC Memory API
    SILC Mutex API
    SILC Thread API
    SILC Net API
    SILC Schedule API
    SILC Socket Connection API
    SILC Protocol API
    SILC Util API
    SILC Zip API
    SILC List API
    SILC Dynamic List API
SILC Key Exchange Library
    SILC SKE API
    SILC SKE Status
SILC Client Library
    SILC Client API
SILC Crypto Library
    SILC Cipher API
    SILC Hash API
    SILC HMAC API
    SILC PKCS API
    SILC RNG API
Function silc_packet_assemble

SYNOPSIS

    void silc_packet_assemble(SilcPacketContext *ctx);

DESCRIPTION

    Assembles a new packet to be ready for send out. The buffer sent as
    argument must include the data to be sent and it must not be encrypted. 
    The packet also must have enough free space so that the SILC header
    and padding maybe added to the packet. The packet is encrypted after 
    this function has returned.

    The buffer sent as argument should be something like following:

    --------------------------------------------
    | head             | data           | tail |
    --------------------------------------------
    ^                  ^
    58 bytes           x bytes

    So that the SILC header and 1 - 16 bytes of padding can fit to
    the buffer. After assembly the buffer might look like this:

    --------------------------------------------
    | data                              |      |
    --------------------------------------------
    ^                                   ^
    Start of assembled packet

    Packet construct is as follows (* = won't be encrypted):

    n bytes       SILC Header
      2 bytes     Payload length  (*)
      1 byte      Flags
      1 byte      Packet type
      2 bytes     Source ID Length
      2 bytes     Destination ID Length
      1 byte      Source ID Type
      n bytes     Source ID
      1 byte      Destination ID Type
      n bytes     Destination ID

    1 - 16 bytes    Padding

    n bytes        Data payload

    All fields in the packet will be authenticated by MAC. The MAC is
    not computed here, it must be computed separately before encrypting
    the packet.

>> SilcPacketAPI
>> SilcPacketType
>> SilcPacketVersion
>> SilcPacketFlags
>> SilcPacketContext
>> SilcPacketParserContext
>> SilcPacketParserCallback
>> SILC_PACKET_LENGTH
>> SILC_PACKET_PADLEN
>> SILC_PACKET_PADLEN_MAX
>> silc_packet_send
>> silc_packet_encrypt
>> silc_packet_assemble
>> silc_packet_send_prepare
>> silc_packet_receive
>> silc_packet_receive_process
>> silc_packet_parse
>> silc_packet_parse_special
>> silc_packet_context_alloc
>> silc_packet_context_dup
>> silc_packet_context_free