/*
 * Copyright (c) 2002-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: magic.h,v 1.55 2006/04/10 18:32:33 ca Exp $
 */

/* It's a kind of Magic (Queen: Highlander) */

#ifndef SM_MAGIC_H
#define SM_MAGIC_H 1

#include "sm/generic.h"

typedef int32_t	sm_magic_T;

/* no magic at all */
#define SM_MAGIC_NULL	((sm_magic_T) 0)

/*
**  Notes:
**  It is not such a good idea to have all the magic in one place,
**  it should be "distributed", i.e., local to the various libraries/modules.
**  The following naming pattern must be used: SM_[A-Z_]*_MAGIC
**  to simplify finding magic values:
**	grep '# *define  *\<SM_[A-Z_]*_MAGIC\>' filenames
**
**  Maybe add a "version" number to this magic?
**  Then we could "detect" if libraries from different version are used.
*/

/* Notice: may have to cast each entry to uint8_t */
#define SM_MAGIC(a, b, c, d) ((sm_magic_T) ((a) << 24 | (b) << 16 | (c) << 8 | d))

/*
**  To print this in a debugger, use hex format or x/4c sm_magic
*/

#define SM_RPOOL_MAGIC SM_MAGIC('R', 'P', 'O', 'L')
#define SM_STRBUF_MAGIC	0x1234AAAA
#define SM_STR_MAGIC	SM_MAGIC('S', 'T', 'R', 'I')
#define SM_RCB_MAGIC	SM_STR_MAGIC
#define SM_CSTR_MAGIC	SM_MAGIC('C', 'S', 'T', 'R')
/* #define SM_RCB_MAGIC	SM_MAGIC('R', 'C', 'B', 'u') */
#define SM_RSC_MAGIC	SM_MAGIC('R', 'S', 'C', 'T')
#define SM_DEBUG_MAGIC	0x0102beef
#define SM_FILE_MAGIC	SM_MAGIC('F', 'I', 'L', 'E')
#define SM_STREAM_MAGIC	SM_MAGIC('S', 'r', 'a', 'm')

#define SM_MCTX_MAGIC	SM_MAGIC('M', 'C', 'T', 'X')

/* QMGR */
#define SM_QMGR_CTX_MAGIC	SM_MAGIC('Q', 'M', 'G', 'R')
#define SM_QMGR_CNF_MAGIC	SM_MAGIC('Q', 'M', 'G', 'N')
#define SM_QSS_CTX_MAGIC	SM_MAGIC('Q', 'S', 'S', 'c')
#define SM_QSS_SE_MAGIC		SM_MAGIC('Q', 'S', 's', 'S')
#define SM_QSS_TA_MAGIC		SM_MAGIC('Q', 'S', 's', 'T')
#define SM_QSC_CTX_MAGIC	SM_MAGIC('Q', 'S', 'C', 'c')
#define SM_QAR_CTX_MAGIC	SM_MAGIC('Q', 'A', 'R', 'r')
#define SM_QCLEANUP_CTX_MAGIC	SM_MAGIC('Q', 'C', 'L', 'U')
#define SM_GLI_MAGIC		SM_MAGIC('Q', 'G', 'L', 'I')

/* libqmgr */
#define SM_TAC_CTX_MAGIC	SM_MAGIC('T', 'A', 'C', 'X')

/* AQ */
#define SM_AQ_MAGIC		SM_MAGIC('A', 'c', 'D', 'B')
#define SM_AQ_TA_MAGIC		SM_MAGIC('A', 'Q', 'T', 'A')
#define SM_AQ_DTA_MAGIC		SM_MAGIC('A', 'D', 'T', 'A')
#define SM_AQ_RCPT_MAGIC	SM_MAGIC('A', 'Q', 'R', 'c')
#define SM_AQOOCCE_MAGIC	SM_MAGIC('A', 'Q', 'O', 'C')

/* DA DB */
#define SM_DADB_MAGIC		SM_MAGIC('D', 'A', 'D', 'B')
#define SM_DADBE_MAGIC		SM_MAGIC('D', 'A', 'D', 'e')

/* EDBC */
#define SM_EDBC_MAGIC		SM_MAGIC('E', 'D', 'B', 'C')

/* EDB context */
#define SM_EDB_CTX_MAGIC	SM_MAGIC('E', 'D', 'C', 'X')

/* EDB conf */
#define SM_EDB_CNF_MAGIC	SM_MAGIC('E', 'D', 'C', 'N')

/* CDB */
#define SM_CDB_MAGIC		SM_MAGIC('C', 'D', 'B', 'x')

/* Event Threads system */
#define SM_EVTHR_CTX_MAGIC	SM_MAGIC('E', 'T', 'h', 'C')
#define SM_EVTHR_TASK_MAGIC	SM_MAGIC('E', 'T', 'h', 'T')

/* SMAR */
#define SM_SMAR_CTX_MAGIC	SM_MAGIC('S', 'M', 'A', 'R')
#define SM_SMAR_CNF_MAGIC	SM_MAGIC('S', 'M', 'A', 'N')
#define SM_SMAC_CTX_MAGIC	SM_MAGIC('S', 'M', 'A', 'C')
#define SM_SMAR_RCPT_MAGIC	SM_MAGIC('A', 'R', 'R', 'C')
#define SM_SMAR_RCPTS_MAGIC	SM_MAGIC('A', 'R', 'R', 'S')
#define SM_SMAR_ADDR_MAGIC	SM_MAGIC('A', 'D', 'D', 'R')

/* SMTPS */
#define SM_SS_CTX_MAGIC		SM_MAGIC('S', 'S', 'C', 'T')
#define SM_SS_CNF_MAGIC		SM_MAGIC('S', 'S', 'C', 'N')
#define SM_SS_SESS_MAGIC	SM_MAGIC('S', 'S', 'S', 'E')
#define SM_SS_TA_MAGIC		SM_MAGIC('S', 'S', 'T', 'A')

/* SMTPC */
#define SM_SC_CTX_MAGIC		SM_MAGIC('S', 'C', 'C', 'T')
#define SM_SC_CNF_MAGIC		SM_MAGIC('S', 'C', 'C', 'N')
#define SM_SC_T_CTX_MAGIC	SM_MAGIC('S', 'C', 'T', 'C')
#define SM_SC_SESS_MAGIC	SM_MAGIC('S', 'C', 'S', 'E')
#define SM_SC_TA_MAGIC		SM_MAGIC('S', 'C', 'T', 'A')
#define SM_C2Q_CTX_MAGIC	SM_MAGIC('S', 'C', '2', 'Q')

#define SM_OCCX_MAGIC		SM_MAGIC('O', 'C', 'C', 'X')
#define SM_OCCE_MAGIC		SM_MAGIC('O', 'C', 'C', 'E')

#define SM_SSOCC_MAGIC		SM_MAGIC('S', 'O', 'C', 'X')
#define SM_SSOCCE_MAGIC		SM_MAGIC('S', 'O', 'C', 'E')

#define SM_AQRDQ_MAGIC		SM_MAGIC('A', 'R', 'D', 'Q')

/* connection control context */
#define SM_CONNCTL_MAGIC	SM_MAGIC('C', 'O', 'C', 'T')

/* maps context */
#define SM_MAPS_MAGIC	SM_MAGIC('M', 'A', 'P', 'S')
#define SM_MAPC_MAGIC	SM_MAGIC('M', 'A', 'P', 'C')
#define SM_MAP_MAGIC	SM_MAGIC('M', 'A', 'P', '_')

#endif /* ! SM_MAGIC_H */


syntax highlighted by Code2HTML, v. 0.9.1