Home | History | Annotate | Line # | Download | only in util
      1 /*	$NetBSD: nbbio.h,v 1.2 2017/02/14 01:16:49 christos Exp $	*/
      2 
      3 #ifndef _NBBIO_H_INCLUDED_
      4 #define _NBBIO_H_INCLUDED_
      5 
      6 /*++
      7 /* NAME
      8 /*	nbbio 3h
      9 /* SUMMARY
     10 /*	non-blocking buffered I/O
     11 /* SYNOPSIS
     12 /*	#include "nbbio.h"
     13 /* DESCRIPTION
     14 /* .nf
     15 
     16  /*
     17   * Utility library.
     18   */
     19 #include <events.h>			/* Needed for EVENT_READ etc. */
     20 
     21  /*
     22   * External interface. All structure members are private.
     23   */
     24 typedef void (*NBBIO_ACTION) (int, void *);
     25 
     26 typedef struct {
     27     int     fd;				/* socket file descriptor */
     28     ssize_t bufsize;			/* read/write buffer size */
     29     char   *label;			/* diagnostics */
     30     NBBIO_ACTION action;		/* call-back routine */
     31     void   *context;			/* call-back context */
     32     int     flags;			/* buffer-pair status */
     33 
     34     char   *read_buf;			/* start of buffer */
     35     ssize_t read_pend;			/* nr of unread bytes */
     36 
     37     char   *write_buf;			/* start of buffer */
     38     ssize_t write_pend;			/* nr of unwritten bytes */
     39 } NBBIO;
     40 
     41 #define NBBIO_FLAG_READ		(1<<0)
     42 #define NBBIO_FLAG_WRITE	(1<<1)
     43 #define NBBIO_FLAG_EOF		(1<<2)
     44 #define NBBIO_FLAG_ERROR	(1<<3)
     45 #define NBBIO_FLAG_TIMEOUT	(1<<4)
     46 
     47 #define NBBIO_OP_NAME(np) \
     48 	(((np)->flags & NBBIO_FLAG_READ) ? "read" : \
     49 	 ((np)->flags & NBBIO_FLAG_WRITE) ? "write" : \
     50 	 "unknown")
     51 
     52 #define NBBIO_MASK_ACTIVE \
     53 	(NBBIO_FLAG_READ | NBBIO_FLAG_WRITE)
     54 
     55 #define NBBIO_MASK_ERROR \
     56 	(NBBIO_FLAG_EOF | NBBIO_FLAG_ERROR | NBBIO_FLAG_TIMEOUT)
     57 
     58 #define NBBIO_BUFSIZE(np)		(((np)->bufsize) + 0)	/* Read-only */
     59 
     60 #define NBBIO_READ_PEND(np)		((np)->read_pend)
     61 #define NBBIO_READ_BUF(np)		((np)->read_buf + 0)	/* Read-only */
     62 
     63 #define NBBIO_WRITE_PEND(np)		((np)->write_pend)
     64 #define NBBIO_WRITE_BUF(np)		((np)->write_buf + 0)	/* Read-only */
     65 
     66 #define NBBIO_ACTIVE_FLAGS(np)		((np)->flags & NBBIO_MASK_ACTIVE)
     67 #define NBBIO_ERROR_FLAGS(np)		((np)->flags & NBBIO_MASK_ERROR)
     68 
     69 extern NBBIO *nbbio_create(int, ssize_t, const char *, NBBIO_ACTION, void *);
     70 extern void nbbio_free(NBBIO *);
     71 extern void nbbio_enable_read(NBBIO *, int);
     72 extern void nbbio_enable_write(NBBIO *, int);
     73 extern void nbbio_disable_readwrite(NBBIO *);
     74 extern void nbbio_slumber(NBBIO *, int);
     75 
     76 /* LICENSE
     77 /* .ad
     78 /* .fi
     79 /*	The Secure Mailer license must be distributed with this software.
     80 /* AUTHOR(S)
     81 /*	Wietse Venema
     82 /*	IBM T.J. Watson Research
     83 /*	P.O. Box 704
     84 /*	Yorktown Heights, NY 10598, USA
     85 /*--*/
     86 
     87 #endif
     88