/* LINTLIBRARY */
/* PROTOLIB1 */

/*
 * Copyright (c) 1998 by Sun Microsystems, Inc.
 * All rights reserved.
 */
#pragma ident   "@(#)llib-llpmsg 1.1     98/07/10 SMI"


# include	<sys/types.h>
# include	<poll.h>
# include	<stdarg.h>
# include	<stropts.h>


typedef	struct	strbuf	strbuf_t;	/*  STREAMS buffer */

typedef	struct mque
{
    struct mque	  *next;
    struct strbuf *dat;
} MQUE;

typedef struct
{
    short	type;			/* type of connection */
    int		readfd;			/* STREAM fd to read from */
    int		writefd;		/* STREAM fd to write to */
    int		wait;			/* number of systems waiting for */
    char	*file;			/* pipe name if type==MD_FIFO */
    short	state;			/* Current state of client */
    short	admin;			/* Non zero if admin  */
    short	event;			/* Event returned from poll */
    MQUE *	mque;			/* backlogged message ptr */
    uid_t	uid;			/* Clients UID */
    gid_t	gid;			/* Clients GID */
    void	(**on_discon)();	/* Clean up functions */
} MESG;

#define	MSGMAX		2048
typedef struct
{
	int	full;
	char	save [MSGMAX],
		*psave,
		*psave_end;
} fifobuffer_t;

MESG		* mcreate ( char * );
int		mlisteninit ( MESG * );
MESG		* mlisten ( void );
int		mlistenadd ( MESG *, short );
int		mon_discon ( MESG *, void (*)());
MESG		* mlistenreset ( void );
int		mdestroy ( MESG * );

MESG		* mconnect ( char *, int, int );
int		mgetm ( MESG *, int, ... );
int		mwrite ( MESG *, char * );
int		mputm ( MESG *, int, ... );
int		mread ( MESG *, char *, int );
short		msize ( char * );
short		mpeek ( MESG * );
int		mdisconnect ( MESG * );

void		__mbfree ( void );

int		mclose ( void );
int		mneeds ( void );
int		mopen ( void );
int		mrecv ( char *, int );
int		msend ( char * );

int		Putmsg (MESG *, strbuf_t *, strbuf_t *, int);
int		Getmsg (MESG *, strbuf_t *, strbuf_t *, int *);
int		read3_2 (MESG * md, char *msgbuf, int size);
int		write3_2 (MESG *, char *, int);
int		read_fifo (int, char *, unsigned int);
int		write_fifo (int, char *, unsigned int);
int		ResetFifoBuffer (int);
fifobuffer_t	*GetFifoBuffer (int);

char		* htos ( char *, unsigned short );
char		* ltos ( char *, unsigned long );
unsigned long	stol ( char * );
unsigned short	stoh ( char * );
int		_getmessage ( char *, short, va_list );
int		_putmessage ( char *, short, va_list );
int		getmessage ( char *, short, ... );
int		putmessage ( char *, short, ... );
