#ifndef _SSL_DEBUG_H_
#define _SSL_DEBUG_H_
#include "sslContext.h"
#include <security_utilities/debugging.h>
#include <assert.h>
#ifndef NDEBUG
#include <stdio.h>
#endif
#ifndef SSL_USE_SYSLOG
#define SSL_USE_SYSLOG 0
#endif
#if SSL_USE_SYSLOG
#include <syslog.h>
#define ssl_secdebug(scope, format...) \
{ \
syslog(LOG_NOTICE, format); \
secdebug(scope, format); \
}
#else
#define ssl_secdebug(scope, format...) \
secdebug(scope, format)
#endif
#ifndef NDEBUG
#define sslHdskStateDebug(args...) ssl_secdebug("sslHdskState", ## args)
#define sslHdskMsgDebug(args...) ssl_secdebug("sslHdskMsg", ## args)
#define sslLogNegotiateDebug(args...) ssl_secdebug("sslLogNegotiate", ## args)
#define sslLogRxProtocolDebug(msgType) ssl_secdebug("sslLogRxProtocol", \
"---received protoMsg %s", msgType)
#define sslLogResumSessDebug(args...) ssl_secdebug("sslResumSession", ## args)
#define sslLogSessCacheDebug(args...) ssl_secdebug("sslSessionCache", ## args)
#define sslLogRecordIo(args...) ssl_secdebug("sslRecordIo", ## args)
#define sslCertDebug(args...) ssl_secdebug("sslCert", ## args)
#define sslDhDebug(args...) ssl_secdebug("sslDh", ## args)
#define sslEapDebug(args...) ssl_secdebug("sslEap", ## args)
#define sslEcdsaDebug(args...) ssl_secdebug("sslEcdsa", ## args)
#else
#define sslHdskStateDebug(args...)
#define sslHdskMsgDebug(args...)
#define sslLogNegotiateDebug(args...)
#define sslLogRxProtocolDebug(msgType)
#define sslLogResumSessDebug(args...)
#define sslLogSessCacheDebug(args...)
#define sslLogRecordIo(args...)
#define sslCertDebug(args...)
#define sslDhDebug(args...)
#define sslEapDebug(args...)
#define sslEcdsaDebug(args...)
#endif
#ifdef NDEBUG
#define SSLChangeHdskState(ctx, newState) { ctx->state=newState; }
#define SSLLogHdskMsg(msg, sent)
#define sslErrorLog(args...)
#define sslDebugLog(args...)
#define sslDump(d, l)
#else
#include "sslAlertMessage.h"
extern void SSLLogHdskMsg(SSLHandshakeType msg, char sent);
extern char *hdskStateToStr(SSLHandshakeState state);
extern void SSLChangeHdskState(SSLContext *ctx, SSLHandshakeState newState);
extern void SSLDump(const unsigned char *data, unsigned long len);
#if SSL_DEBUG
#define sslDebugLog(args...) ssl_secdebug("sslDebug", ## args)
#else
#define sslDebugLog(args...)
#endif
#define sslErrorLog(args...) ssl_secdebug("sslError", ## args)
#define sslDump(d, l) SSLDump((d), (l))
#endif
#ifdef NDEBUG
#define ASSERT(s)
#else
#define ASSERT(s) assert(s)
#endif
#endif