/*
 * Copyright (c) 2005, 2006 Sendmail, Inc. and its suppliers.
 *	All rights reserved.
 *
 * By using this file, you agree to the terms and conditions set
 * forth in the LICENSE file which can be found at the top level of
 * the sendmail distribution.
 *
 *	$Id: greyctl.h,v 1.6 2006/11/30 04:32:59 ca Exp $
 */

#ifndef GREYCTL_H
#define GREYCTL_H 1
#include "sm/generic.h"
#include "sm/types.h"
#include "sm/net.h"
#include "sm/greyctl.h"
#include "sm/bdb.h"
#if MTA_USE_PTHREADS
#include "sm/pthread.h"
#endif
#include "sm/greycnf.h"

/* maximum key length: 256 for 2 mail addresses + 4 for IPv4 address */
#define GL_KEYLEN	516

enum grey_type_E
{
	GREY_TYPE_NONE	= 0,
	GREY_TYPE_GREY	= 1,
	GREY_TYPE_WHITE	= 2
};
typedef enum grey_type_E grey_type_T;

struct greyentry_S
{
	uchar		 ge_key[GL_KEYLEN];
	uint		 ge_len;
	time_t		 ge_time;	/* timestamp */
	time_t		 ge_expire;	/* expiration timestamp */
	grey_type_T	 ge_type;
};

typedef struct greyentry_S	greyentry_T, *greyentry_P;

struct greyctx_S
{
#if SM_GREYCTL_CHECK
	sm_magic_T	 sm_magic;
#endif
	greycnf_T	 greyc_cnf;

	uint		 greyc_used;	/* current # of entries */
	DB		*greyc_grey_db;
	DB		*greyc_grey_sdb;
#if MTA_USE_PTHREADS
	pthread_mutex_t	 greyc_mutex;
#endif
};

sm_ret_T sm_grey_rm(DB *_db, void *_key, uint _len);
int	sm_grey_compare(DB *_dbp, const DBT *_d1, const DBT *_d2);
int	sm_grey_si(DB *_db, const DBT *_pkey, const DBT *_pdata, DBT *_skey);

#define SM_IS_GREYCTX(greyctx)	SM_REQUIRE((greyctx) != NULL)

#endif /* GREYCTL_H */


syntax highlighted by Code2HTML, v. 0.9.1