/* * 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 *\' 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 */