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