netwib doc_html (version 5.39.0)

## main index

## section index

    /*-------------------------------------------------------------*/
    /***************************************************************
     * Functions herein allow to create a new netwib_io.           *
     ***************************************************************/

    /*-------------------------------------------------------------*/
    /***************************************************************
     * Following functions can return :                            *
     *  - NETWIB_ERR_OK : the job was done (by the io or a next in *
     *                    the chain)                               *
     *  - NETWIB_ERR_PLEASETRYNEXT : the io doesn't know how to do *
     *                               what was requested, so please *
     *                               try next                      *
     *  - NETWIB_ERR_PLEASECONSTRUCT : if way is                   *
     *                                 NETWIB_IO_WAYTYPE_RDWR or   *
     *                                _SUPPORTED, the library has  *
     *                                to do the task using _READ   *
     *                                and _WRITE                   *
     *  - NETWIB_ERR_PLEASELOOPTIME : there is no event, so please *
     *                                loop to reach abstime        *
     ***************************************************************/

    /* Function called when netwib_io_read is called on the io
       This function should return :
         NETWIB_ERR_OK
         NETWIB_ERR_PLEASETRYNEXT
    */
    typedef netwib_err (*netwib_io_read_pf)(netwib_io *pio,
                                            netwib_buf *pbuf);

    /* Function called when netwib_io_write is called on the io
       This function should return :
         NETWIB_ERR_OK
         NETWIB_ERR_PLEASETRYNEXT
    */
    typedef netwib_err (*netwib_io_write_pf)(netwib_io *pio,
                                             netwib_constbuf *pbuf);

    /* Function called when netwib_io_wait is called on the io
       This function should return :
         NETWIB_ERR_OK
         NETWIB_ERR_PLEASETRYNEXT
         NETWIB_ERR_PLEASECONSTRUCT
         NETWIB_ERR_PLEASELOOPTIME
    */
    typedef netwib_err (*netwib_io_wait_pf)(netwib_io *pio,
                                            netwib_io_waytype way,
                                            netwib_consttime *pabstime,
                                            netwib_bool *pevent);

    /* Function called when netwib_io_unread is called on the io
       This function should return :
         NETWIB_ERR_OK
         NETWIB_ERR_PLEASETRYNEXT
    */
    typedef netwib_err (*netwib_io_unread_pf)(netwib_io *pio,
                                              netwib_constbuf *pbuf);

    /* Function called when netwib_io_ctl_set is called on the io
       This function should return :
         NETWIB_ERR_OK
         NETWIB_ERR_PLEASETRYNEXT
         NETWIB_ERR_PLEASECONSTRUCT
    */
    typedef netwib_err (*netwib_io_ctl_set_pf)(netwib_io *pio,
                                               netwib_io_waytype way,
                                               netwib_io_ctltype ctltype,
                                               netwib_ptr p,
                                               netwib_uint32 ui);
    /* Function called when netwib_io_ctl_get is called on the io
       This function should return :
         NETWIB_ERR_OK
         NETWIB_ERR_PLEASETRYNEXT
         NETWIB_ERR_PLEASECONSTRUCT
    */
    typedef netwib_err (*netwib_io_ctl_get_pf)(netwib_io *pio,
                                               netwib_io_waytype way,
                                               netwib_io_ctltype ctltype,
                                               netwib_ptr p,
                                               netwib_uint32 *pui);

    /* Function called when netwib_io_close is called on the io
       This function should return :
         NETWIB_ERR_OK
    */
    typedef netwib_err (*netwib_io_close_pf)(netwib_io *pio);

    /*-------------------------------------------------------------*/
    /* Name : netwib_io_init
       Description :
         Create a user defined netwib_io.
       Input parameter(s) :
         readsupported : read is supported
         writesupported : write is supported
         pcommon : common data which can be shared between functions
         pfx : functions or NULL if not needed
       Input/output parameter(s) :
       Output parameter(s) :
         **ppio : io created
       Normal return values :
         NETWIB_ERR_OK : ok
    */
    netwib_err netwib_io_init(netwib_bool readsupported,
                              netwib_bool writesupported,
                              netwib_ptr pcommon,
                              netwib_io_read_pf pfread,
                              netwib_io_write_pf pfwrite,
                              netwib_io_wait_pf pfwait,
                              netwib_io_unread_pf pfunread,
                              netwib_io_ctl_set_pf pfctl_set,
                              netwib_io_ctl_get_pf pfctl_get,
                              netwib_io_close_pf pfclose,
                              netwib_io **ppio);

    /*-------------------------------------------------------------*/
    /***************************************************************
     * Those structure definitions should only be used in functions*
     * for netwib_io_init.                                         *
     ***************************************************************/
    typedef struct {
      netwib_io *pnext; /* next io in the chain */
      netwib_bool supported; /* true if way is supported */
      netwib_uint32 numusers; /* number of io using this one */
    } netwib_io_way_t;
    struct netwib_io {
      netwib_io_way_t rd; /* read information */
      netwib_io_way_t wr; /* write information */
      netwib_ptr pcommon; /* pointer used in netwib_io_init */
      netwib_io_write_pf pfwrite;
      netwib_io_read_pf pfread;
      netwib_io_unread_pf pfunread;
      netwib_io_wait_pf pfwait;
      netwib_io_ctl_set_pf pfctl_set;
      netwib_io_ctl_get_pf pfctl_get;
      netwib_io_close_pf pfclose;
    };

    /*-------------------------------------------------------------*/
    /***************************************************************
     * Previous structure is useful to do simple things. But,      *
     * it's complicated to deal with several netwib_io_waytype.    *
     * Those defines can be used :                                 *
     *  - to work on "pnext", use netwib_io_next (in io.h)         *
     *  - to work on "supported", use netwib_io_ctl_s/get_support  *
     *  - to work on "numusers", use netwib_io_ctl_s/get_numusers  *
     ***************************************************************/

    /* netwib_err f(netwib_io *pio, netwib_io_waytype way, netwib_bool yes); */
    #define netwib_io_ctl_set_support(pio,way,yes) netwib_io_ctl_set(pio,way,NETWIB_IO_CTLTYPE_SUPPORT,NULL,(netwib_uint32)yes)
    #define netwib_io_ctl_get_support(pio,way,pyes) netwib_io_ctl_get(pio,way,NETWIB_IO_CTLTYPE_SUPPORT,NULL,(netwib_uint32*)pyes)

    /* netwib_err f(netwib_io *pio,netwib_io_waytype way,netwib_uint32 numusers);*/
    #define netwib_io_ctl_set_numusers(pio,way,numusers) netwib_io_ctl_set(pio,way,NETWIB_IO_CTLTYPE_NUMUSERS,NULL,numusers)
    #define netwib_io_ctl_get_numusers(pio,way,pnumusers) netwib_io_ctl_get(pio,way,NETWIB_IO_CTLTYPE_NUMUSERS,NULL,pnumusers)
    /* only increment or decrement */
    #define netwib_io_ctl_set_numusers_inc(pio,way) netwib_io_ctl_set(pio,way,NETWIB_IO_CTLTYPE_NUMUSERSINC,NULL,+1)
    #define netwib_io_ctl_set_numusers_dec(pio,way) netwib_io_ctl_set(pio,way,NETWIB_IO_CTLTYPE_NUMUSERSINC,NULL,(netwib_uint32)-1)

## main index

## section index