/*
* Copyright (c) 2002-2005 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: iqdb.h,v 1.17 2005/09/29 17:17:49 ca Exp $
*/
#ifndef SM_IQDB_H
#define SM_IQDB_H 1
#include "sm/generic.h"
#include "sm/error.h"
#include "sm/rsct.h"
/* abstraction layer for iqdb (Incoming Queue envelope DB, memory only) */
#if 0
from db.func.tex:
iqdb_open(IN name, IN mode, IN size, OUT status, OUT iqdb-handle):
open an incoming envelope database.
iqdb_close(IN iqdb-handle, OUT status):
close an incoming envelope database.
iqdb_session_new(IN iqdb-handle, IN session-info, OUT status, OUT session-id):
create a new session (client connects succesfully).
iqdb_trans_new(IN iqdb-handle, IN sender-env-info, OUT status, OUT trans-id):
create a new envelope (done on MAIL command).
iqdb_rcpt_add(IN iqdb-handle, IN trans-id, IN rcpt-env-info, OUT status):
add a new recipient (RCPT command).
iqdb_rcpt_rm(IN iqdb-handle, IN trans-id, IN rcpt-id, IN rpct-status, OUT status):
remove a recipient (mail has been taken care of).
iqdb_trans_rm(IN iqdb-handle, IN trans-id, OUT status):
remove an envelope from the EDB (after all recipients have been taken care of).
Should this be done implicitly when all recipients have been removed?
iqdb_commit(IN iqdb-handle, IN trans-id, OUT status):
commit envelope information to stable storage.
iqdb_session_rm(IN iqdb-handle, IN session-id, OUT status):
remove a session from the EDB.
iqdb_trans_discard(IN iqdb-handle, IN trans-id, OUT status):
discard envelope (connection has been aborted somehow)
iqdb_items_cache(IN iqdb-handle, OUT items, OUT status):
return the number of items in the memory cache.
#endif /* 0 */
/* types of entries in RSC */
#define IQDB_T_SESS 0
#define IQDB_T_TA 1
#define IQDB_T_RCPT 2
typedef struct rsct_S iqdb_T, *iqdb_P;
typedef void *(*iqdb_create_F) (const char *, uint, void *, void *, uint);
typedef sm_ret_T (*iqdb_delete_F) (void *, void *, uint);
/* function type to apply to all entries in cache */
typedef void (iqdb_walk_F)(const char *, const void *, const void *, uint);
#define iqdb_open(limit, htsize, create, delete, context) \
rsct_new(limit, htsize, create, delete, context)
#define iqdb_close(iqdb) rsct_free(iqdb)
#define iqdb_walk(iqdb, action, ctx, lt) rsct_walk(iqdb, action, ctx, lt)
#define iqdb_session_new(iqdb, key, len, value, pvalue, lt) \
rsct_add(iqdb, false, IQDB_T_SESS, key, len, value, pvalue, lt)
#define iqdb_trans_new(iqdb, key, len, value, pvalue, lt) \
rsct_add(iqdb, false, IQDB_T_TA, key, len, value, pvalue, lt)
#define iqdb_rcpt_add(iqdb, key, len, value, pvalue, lt) \
rsct_add(iqdb, false, IQDB_T_RCPT, key, len, value, pvalue, lt)
/* specific session/transaction/... functions? */
#define iqdb_lookup(cache, key, len, lt) rsct_lookup(cache, key, len, lt)
#define iqdb_session_rm(iqdb, key, len, lt) rsct_rm(iqdb, key, len, lt)
#define iqdb_trans_rm(iqdb, key, len, lt) rsct_rm(iqdb, key, len, lt)
#define iqdb_rcpt_rm(iqdb, key, len, lt) rsct_rm(iqdb, key, len, lt)
#define iqdb_usage(iqdb) rsct_usage(iqdb)
#define iqdb_entries(iqdb, pmax_used) rsct_entries(iqdb, pmax_used)
#define iqdb_stats(iqdb, out, len) rsct_stats(iqdb, out, len)
#endif /* SM_IQDB_H */
syntax highlighted by Code2HTML, v. 0.9.1