/*
 * Copyright (c) 2004-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: sccnfdef.h,v 1.43 2007/05/27 15:12:53 ca Exp $
 */

#ifndef SM_SCCNFDEF_H
#define SM_SCCNFDEF_H 1

#include "sm/generic.h"
#include "sm/types.h"
#include "sm/time.h"
#include "sm/qmgrcnf.h"
#include "sm/mcpcnfs.h"
#include "sm/tlscnfs.h"
#include "sm/mta.h"
#include "sm/smtpdef.h"
#include "sm/scdef.h"
#include "sm/sm-conf-time.h"

#define LMTPSOCK	"lmtpsock"

#if SM_SCCNFDEF
#define SM_TLSREQCNFDEF 1
#endif

#include "sm/tlsreqcnf.h"
#include "sm/tlsreqcnfs.h"

#if SM_SCCNFDEF
#define EXTERN
#else
#define EXTERN extern
#endif

#if MTA_USE_TLS
EXTERN
sm_conf_definition_T
sc_tls_defs[]
#if SM_SCCNFDEF
=
{
	TLS_DEFS(sc_cnf_T, sc),

{ SM_CONF_DEF_MAGIC, "options",		sm_conf_type_u32,
	offsetof(sc_cnf_T, sc_cnf_tls.tlscnf_options),	sizeof(long),
	SM_XSTR(SSL_OP_ALL),	0,	NULL, NULL,	NULL,
	"options for SSL_CTX_set_options [expert only]"
	SM_LC_ISSET(offsetof(sc_cnf_T, sc_cnf_tls.tlscnf_options_isset))
	SM_LC_SET_MAGIC(0) },

/* Sentinel */
{ SM_CONF_DEF_MAGIC, NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0)}
}
#endif /* SM_SCCNFDEF */
;
#endif /* MTA_USE_TLS */


EXTERN
sm_conf_definition_T const
sc_flag_names[]
#if SM_SCCNFDEF
=
{
{ SM_CONF_DEF_MAGIC,
	"read_QUIT_reply",		sm_conf_type_choice_value,
	SCC_CFL_READ_QUIT,
	0, NULL, 0, NULL, NULL, NULL,
	"read reply to QUIT command"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC,
	"separate_final_dot_and_QUIT",	sm_conf_type_choice_value,
	SCC_CFL_SEP_DOT_QUIT,
	0, NULL, 0, NULL, NULL, NULL,
	"separate final dot and QUIT"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

{ SM_CONF_DEF_MAGIC,
	"talk_to_myself",		sm_conf_type_choice_value,
	SCC_CFL_NOTTM,
	0, NULL, 0, NULL, NULL, NULL,
	"do not check whether server greets with our own hostname"
	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },

/* Sentinel */
{ SM_CONF_DEF_MAGIC, NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0)}
}
#endif /* SM_SCCNFDEF */
;


EXTERN
sm_conf_definition_T
sc_defs[]
#if SM_SCCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "remote_port",			sm_conf_type_u32,
	offsetof(sc_cnf_T, sc_cnf_port),	sizeof(int),
	SM_XSTR(SMTPC_PORT),	0,	NULL,	NULL,	NULL,
	"port to connect to on server"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},
{ SM_CONF_DEF_MAGIC, "LMTP_socket",		sm_conf_type_string,
	offsetof(sc_cnf_T, sc_cnf_lmtpsock ),	0,
	LMTPSOCK,	0,	NULL,	NULL,	NULL,
	""
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "max_threads",		sm_conf_type_u32,
	offsetof(sc_cnf_T, sc_cnf_max_threads),	sizeof(uint),
	SM_XSTR(MAX_THREADS_DEFAULT),	0,	NULL,	NULL,	NULL,
	"maximum number of threads"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "max_wait_threads",		sm_conf_type_u32,
	offsetof(sc_cnf_T, sc_cnf_max_wait_threads),	sizeof(uint),
	SM_XSTR(MAX_WAIT_THREADS_DEFAULT),	0,	NULL,	NULL,	NULL,
	"maximum number of waiting threads"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "min_wait_threads",		sm_conf_type_u32,
	offsetof(sc_cnf_T, sc_cnf_min_wait_threads),	sizeof(uint),
	SM_XSTR(MIN_WAIT_THREADS_DEFAULT),	0,	NULL,	NULL,	NULL,
	"minimum number of waiting threads"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "flags",		sm_conf_type_choice,
	offsetof(sc_cnf_T, sc_cnf_confflags),	sizeof(uint32_t),
	NULL, SM_CONF_FLAG_MULTIPLE|SM_CONF_FLAG_OR|SM_CONF_FLAG_PLURAL,
	sc_flag_names,
	NULL,	NULL,
	"flags to influence behavior [see documentation]"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "log_level",		sm_conf_type_u32,
	offsetof(sc_cnf_T, sc_cnf_loglevel),	sizeof(uint),
	SM_XSTR(SM_LOG_LEVEL),	0,	NULL,	NULL,	NULL,
	""
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},
{ SM_CONF_DEF_MAGIC, "log", sm_conf_type_section,
	offsetof(sc_cnf_T, sc_cnf_log),		0,
	NULL, SM_CONF_FLAG_KEEP_DEFAULT, sm_log_spec_defs,
	NULL, NULL, NULL
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "debug_level",		sm_conf_type_u32,
	offsetof(sc_cnf_T, sc_cnf_debug),	sizeof(int),
	"0",	0,	NULL,	NULL,	NULL,
	NULL
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "io_timeout",		sm_conf_type_u32,
	offsetof(sc_cnf_T, sc_cnf_timeout),	sizeof(sm_intvl_T),
	SM_XSTR(SC_IO_TIMEOUT),	0,	sm_conf_time_suffixes,
	NULL,	NULL,
	"timeout for SMTP I/O operations"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "module_timeout",		sm_conf_type_u32,
	offsetof(sc_cnf_T, sc_cnf_qmgr_tmo),	sizeof(sm_intvl_T),
	SM_XSTR(SC_RCB_SND_TMO),	0,	sm_conf_time_suffixes,
	NULL,	NULL,
	"timeout for communication with other modules (QMGR)"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "wait_for_server",		sm_conf_type_u32,
	offsetof(sc_cnf_T, sc_cnf_wait4srv),	sizeof(uint),
	"1",			0,	sm_conf_time_suffixes,
	NULL,	NULL,
	"maximum amount of time to wait for a server to become available"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "id",			sm_conf_type_u32,
	offsetof(sc_cnf_T, sc_cnf_id),		sizeof(uint),
	SM_XSTR(SMTPC_ID),	SM_CONF_FLAG_KEEP_DEFAULT,
	NULL,	NULL,	NULL,
	"unique id"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "connect_only_to",		sm_conf_type_ipv4,
	offsetof(sc_cnf_T, sc_cnf_sink),	sizeof(ipv4_T),
	"0",			0,	0,
	NULL,	NULL,
	"connect only to this IPv4 address [testing]"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},

#if MTA_USE_TLS
{ SM_CONF_DEF_MAGIC, "tls", sm_conf_type_section,
	0, sizeof(sc_cnf_T), NULL,
	SM_CONF_FLAG_KEEP_DEFAULT|SM_CONF_FLAG_MULTIPLE,
	sc_tls_defs,
	NULL, NULL, NULL
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},
#endif /* MTA_USE_TLS */

#if SC_TEST
{ SM_CONF_DEF_MAGIC, "tests",		sm_conf_type_u32,
	offsetof(sc_cnf_T, sc_cnf_tests),	sizeof(uint),
	"0", 0, NULL, NULL, NULL,
	"test options"
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},
#endif

	MCP_DEFS(sc_cnf_T, sc_cnf)

/* Sentinel */
{ SM_CONF_DEF_MAGIC, NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0)}
}
#endif /* SM_SCCNFDEF */
;

EXTERN
sm_conf_definition_T
sc_global_defs[]
#if SM_SCCNFDEF
=
{
{ SM_CONF_DEF_MAGIC, "SMTPC_socket",	sm_conf_type_string,
	offsetof(sc_cnf_T, sc_cnf_smtpcsock),	0,	smsmtpcsock,
	0, NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},
{ SM_CONF_DEF_MAGIC, "CDB_base_directory",	sm_conf_type_string,
	offsetof(sc_cnf_T, sc_cnf_cdb_base),	0,	"",
	0, NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},
{ SM_CONF_DEF_MAGIC, "hostname",		sm_conf_type_string,
	offsetof(sc_cnf_T, sc_cnf_hostname),	0,	NULL,
	0, NULL, NULL, NULL, NULL
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},

{ SM_CONF_DEF_MAGIC, "smtpc", sm_conf_type_section,
	0, sizeof(sc_cnf_T), NULL,
	SM_CONF_FLAG_KEEP_DEFAULT|SM_CONF_FLAG_MULTIPLE|SM_CONF_FLAG_PARSE_ONLY,
	sc_defs,
	NULL, NULL, NULL
	SM_LC_NO_ISSET
	SM_LC_SET_MAGIC(SM_SC_CNF_MAGIC)
	},

/* Sentinel */
{ SM_CONF_DEF_MAGIC, NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0)}
}
#endif /* SM_SCCNFDEF */
;

#undef EXTERN

#endif /* SM_SCCNFDEF_H */


syntax highlighted by Code2HTML, v. 0.9.1