/*
 * pfqueue backend
 */

#ifndef PFQ_BACKEND_H
#define PFQ_BACKEND_H

#define LOGLEVEL LOG_USER | LOG_ERR

#define BECAPS_MSG_DEL		1	// Can delete messages
#define BECAPS_MSG_HOLD		2	// Can hold (freeze) messages
#define BECAPS_MSG_REQUEUE	4	// Can requeue messages
#define BECAPS_MSG_ENVELOPE	8	// Can extract from/to from envelope
#define BECAPS_MIXED_QUEUE	16	// Backend is single-queue, with status somewhere in some files
#define BECAPS_MSG_LOG		32	// Each message has its own log

#define BUF_SIZE		250

#ifndef FALSE
#define FALSE			0
#endif

#include "../pfqmessage.h"

#define PFQ_API_VERSION		3

#define PFBE_OK			0
#define PFBE_ERROR		-3
#define PFBE_UNUSABLE		1
#define PFBE_MSGNOTEX		-1
#define PFBE_MSGCACHED		-2

#define PFBE_SERROR	"*Error*"
#define PFBE_SNOTFOUND	"*Not found*"

struct pfb_conf_t {
	int	max_char;		/* char buffer max length */
	char	command_path[200];	/* path to executables */
	char	config_path[200];	/* path to config */
	int	msg_max;		/* max num of messages */
	int	scan_limit;		/* max secs for a single scan */
	char	version[200];		/* version of mta to use */
	char	host[200];		/* remote host (only for socket backend) */
	int	port;			/* remote port (only for socket backend) */
};

int pfb_caps;
int pfb_using_envelope;

// Returns backend API version
int pfb_apiversion();

// Returns backend id string
const char *pfb_id();

// Returns backend version
const char *pfb_version();

// Returns conf structure
struct pfb_conf_t *pfb_getconf();

// Init backend
int pfb_init();

// Setup backend
int pfb_setup ( struct msg_t*, struct be_msg_t* );

// Closes backend
int pfb_close();

// Fill message queue (called from pthread)
int pfb_fill_queue ();

// Retreive from/to/subject fields
int pfb_retr_headers ( const char* );

// Retreive message status
int pfb_retr_status ( const char* );

// Retreive message body
int pfb_retr_body ( const char*, char*, size_t );

// Delete a message
int pfb_message_delete ( const char* );

// Hold a message
int pfb_message_hold ( const char* );
// 
// Release a message
int pfb_message_release ( const char* );

// Requeue a message
int pfb_message_requeue ( const char* );

// Change current queue
int pfb_set_queue ( int );

// Set/unset use of envelope for from/to retreival
void pfb_use_envelope ( int );

// Get backend caps
int pfb_get_caps();

// Returns the queue name
char* pfb_queue_name( int );

// Returns the number of the queues
int pfb_queue_count();

// Ptr to main queue
struct be_msg_t *my_queue;

// Ptr to backend queue
struct msg_t *ext_queue;

// Sets the number of seconds the queue scanning should not exceed
int dig_limit;

// Time digging was last started
int dig_start;

// Max number of messages to handle
int msg_max;

#endif


syntax highlighted by Code2HTML, v. 0.9.1