Function silc_packet_stream_wrap
SYNOPSIS
SilcStream silc_packet_stream_wrap(SilcPacketStream stream,
SilcPacketType type,
SilcPacketFlags flags,
SilcBool blocking_mode,
SilcIdType src_id_type, void *src_id,
SilcIdType dst_id_type, void *dst_id,
SilcPacketWrapCoder coder,
void *context);
DESCRIPTION
Wraps the packet stream indicated by `stream' into a SilcStream for
the packet type indicated by `type' with packet flags indicated by
`flags'. The returned SilcStream can be used to read and write the
specified SILC packets with the specified packet flags, by calling
silc_stream_read and silc_stream_write, respectively. The returned
stream can be destroyed by calling silc_stream_destroy. It does not
destroy the wrapped packet stream.
If the `blocking_mode' mode is TRUE then the silc_stream_read and
silc_stream_write may block the calling process or thread until SILC
packet is read or written. If it is FALSE the stream is in non-blocking
mode and the calls never block. The returned stream is thread-safe and
packets may be read and written in multi-threaded environment.
In non-blocking mode the silc_stream_set_notifier must be called before
the returned stream can be used to read packets. The stream status
SILC_STREAM_CAN_READ will be returned to the notifier callback to
indicate that a packet is ready for reading. Calling silc_stream_read
once returns one complete SILC packet data payload (which is of type of
`type').
If src_id and/or dst_id are set they will be used as the ids in the
sent SILC packets. If the dst_id is set then the stream will receive
packets only originating from that id.
The `coder' is optional encoder/decoder callback which the packet engine
will call if it is non-NULL. It can be used to encode additional data
into each packet when silc_stream_write is called or decode data before
it is passed to reader when silc_stream_read is called. The `context'
is passed to `coder'.
The returned SilcStream can be used as any normal stream and all
SilcStream API functions may be used with the stream. This returns
NULL on error.
|