/*
 * Copyright (C) 2001, Shilad Sen, Sourcelight Technologies, Inc.
 * See xmlrpc.h or the README for more copyright information.
 *
 * An object which represents a file-descriptor source to be monitored
 * for some "important" events.
 */

#ifndef _RPCSOURCE_H_
#define _RPCSOURCE_H_


#include "rpcInclude.h"


#define	ACT_INPUT	(1 << 0)
#define	ACT_OUTPUT	(1 << 1)
#define	ACT_EXCEPT	(1 << 2)
#define	ACT_IMMEDIATE	(1 << 3)

#define	ONERR_TYPE_C	(1 << 0)
#define	ONERR_TYPE_PY	(1 << 1)
#define	ONERR_TYPE_DEF	(1 << 2)

#define	ONERR_KEEP_DEF	(1 << 0)
#define	ONERR_KEEP_SRC	(1 << 1)	/* unimplemented */
#define	ONERR_KEEP_WORK	(1 << 2)


PyTypeObject	rpcSourceType;


struct _source;			/* to appease the compiler gods */
struct _disp;			/* to appease the compiler gods */


/*
 * a source object
 */
typedef struct _source {
	PyObject_HEAD			/* python standard */
	int		fd,		/* the file descriptor for events */
			id,		/* id associated with the source */
			actImp,		/* actions that are important */
			actOcc;		/* actions that occured in last event */
	char		*desc;		/* description of the source */
	bool		(*func)(	/* callback handler */
				struct _disp	*dp,
				struct _source	*sp,
				int		actions,
				PyObject	*params
			);
	PyObject	*params;	/* parameters for callback */
	char		onErrType;	/* is the handler in c or python? */
	void		*onErr;		/* error handler */
	bool		doClose;	/* should we close the fd when done? */
} rpcSource;



rpcSource	*rpcSourceNew(int fd);
void		rpcSourceDealloc(rpcSource *sp);
void		rpcSourceSetParams(rpcSource *sp, PyObject *params);
void		rpcSourceSetOnErr(rpcSource *sp, int funcType, void *func);


#endif /* _RPCSOURCE_H_ */


syntax highlighted by Code2HTML, v. 0.9.1