/* silcfdstream.h Author: Pekka Riikonen Copyright (C) 2005 - 2007 Pekka Riikonen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */ /****h* silcutil/SILC File Descriptor Stream Interface * * DESCRIPTION * * Implementation of SILC File Descriptor Stream. The file descriptor * stream can be used read from and write to a file descriptor. This * interface should be used only with real file descriptors, not with * sockets. Use the SILC Socket Stream for sockets. * * SILC File Descriptor Stream is not thread-safe. If same stream must be * used in multithreaded environment concurrency control must be employed. * ***/ #ifndef SILCFDSTREAM_H #define SILCFDSTREAM_H /****f* silcutil/SilcFDStreamAPI/silc_fd_stream_create * * SYNOPSIS * * SilcStream silc_fd_stream_create(int fd, SilcStack stack); * * DESCRIPTION * * Creates file descriptor stream for the open file descriptor indicated * by `fd'. The stream is closed with the silc_stream_close and destroyed * with the silc_stream_destroy. Returns NULL if system is out of memory. * * If the silc_stream_set_notifier is called the stream is set to * non-blocking mode. * * If `stack' is non-NULL all memory is allocated from the `stack' and * will be released back to `stack' after the stream is destroyed. * ***/ SilcStream silc_fd_stream_create(int fd, SilcStack stack); /****f* silcutil/SilcFDStreamAPI/silc_fd_stream_create2 * * SYNOPSIS * * SilcStream silc_fd_stream_create2(int read_fd, int write_fd, * SilcStack stack); * * DESCRIPTION * * Creates file descriptor stream for the open file descriptors indicated * by `read_fd' and `write_fd'. The `read_fd' must be opened for reading * and `write_fd' opened for writing. The stream is closed with the * silc_stream_close and destroyed with the silc_stream_destroy. Returns * NULL if system is out of memory. * * If the silc_stream_set_notifier is called the stream is set to * non-blocking mode. * * If `stack' is non-NULL all memory is allocated from the `stack' and * will be released back to `stack' after the stream is destroyed. * ***/ SilcStream silc_fd_stream_create2(int read_fd, int write_fd, SilcStack stack); /****f* silcutil/SilcFDStreamAPI/silc_fd_stream_file * * SYNOPSIS * * SilcStream silc_fd_stream_file(const char *filename, SilcBool reading, * SilcBool writing, SilcStack stack); * * DESCRIPTION * * Same as silc_fd_stream_create but creates the stream by opening the * file indicated by `filename'. If the `reading' is TRUE the file is * opened for reading. If the `writing' is TRUE the file is opened * for writing. Returns NULL if system is out of memory. * * If the silc_stream_set_notifier is called the stream is set to * non-blocking mode. * * If `stack' is non-NULL all memory is allocated from the `stack' and * will be released back to `stack' after the stream is destroyed. * ***/ SilcStream silc_fd_stream_file(const char *filename, SilcBool reading, SilcBool writing, SilcStack stack); /****f* silcutil/SilcFDStreamAPI/silc_fd_stream_file2 * * SYNOPSIS * * SilcStream silc_fd_stream_file2(const char *read_file, * const char *write_file, * SilcStack stack); * * DESCRIPTION * * Same as silc_fd_stream_file but creates the stream by opening `read_file' * for reading and `write_file' for writing. Returns NULL if system is * out of memory. * * If the silc_stream_set_notifier is called the stream is set to * non-blocking mode. * * If `stack' is non-NULL all memory is allocated from the `stack' and * will be released back to `stack' after the stream is destroyed. * ***/ SilcStream silc_fd_stream_file2(const char *read_file, const char *write_file, SilcStack stack); /****f* silcutil/SilcFDStreamAPI/silc_fd_stream_get_info * * SYNOPSIS * * SilcBool * silc_fd_stream_get_info(SilcStream stream, int *read_fd, int *write_fd); * * DESCRIPTION * * Returns the file descriptors associated with the stream. The 'write_fd' * is available only if the stream was created with silc_fd_stream_create2 * function. Returns FALSE if the information is not available. * ***/ SilcBool silc_fd_stream_get_info(SilcStream stream, int *read_fd, int *write_fd); /* Backwards support */ #define silc_fd_stream_get_error(stream) silc_errno #endif /* SILCFDSTREAM_H */