mDNSDebug.h revision 4904:cd464a980538
1/* -*- Mode: C; tab-width: 4 -*- 2 * 3 * Copyright (c) 2002-2003 Apple Computer, Inc. All rights reserved. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 17 Change History (most recent first): 18 19$Log: mDNSDebug.h,v $ 20Revision 1.26.2.1 2006/08/29 06:24:22 cheshire 21Re-licensed mDNSResponder daemon source code under Apache License, Version 2.0 22 23Revision 1.26 2005/07/04 22:40:26 cheshire 24Additional debugging code to help catch memory corruption 25 26Revision 1.25 2004/12/14 21:34:16 cheshire 27Add "#define ANSWER_REMOTE_HOSTNAME_QUERIES 0" and comment 28 29Revision 1.24 2004/09/16 01:58:21 cheshire 30Fix compiler warnings 31 32Revision 1.23 2004/05/18 23:51:25 cheshire 33Tidy up all checkin comments to use consistent "<rdar://problem/xxxxxxx>" format for bug numbers 34 35Revision 1.22 2004/04/22 04:27:42 cheshire 36Spacing tidyup 37 38Revision 1.21 2004/04/14 23:21:41 ksekar 39Removed accidental checkin of MALLOC_DEBUGING flag in 1.20 40 41Revision 1.20 2004/04/14 23:09:28 ksekar 42Support for TSIG signed dynamic updates. 43 44Revision 1.19 2004/03/15 18:57:59 cheshire 45Undo last checkin that accidentally made verbose debugging the default for all targets 46 47Revision 1.18 2004/03/13 01:57:33 ksekar 48<rdar://problem/3192546>: DynDNS: Dynamic update of service records 49 50Revision 1.17 2004/01/28 21:14:23 cheshire 51Reconcile debug_mode and gDebugLogging into a single flag (mDNS_DebugMode) 52 53Revision 1.16 2003/12/09 01:30:06 rpantos 54Fix usage of ARGS... macros to build properly on Windows. 55 56Revision 1.15 2003/12/08 20:55:26 rpantos 57Move some definitions here from mDNSMacOSX.h. 58 59Revision 1.14 2003/08/12 19:56:24 cheshire 60Update to APSL 2.0 61 62Revision 1.13 2003/07/02 21:19:46 cheshire 63<rdar://problem/3313413> Update copyright notices, etc., in source code comments 64 65Revision 1.12 2003/05/26 03:01:27 cheshire 66<rdar://problem/3268904> sprintf/vsprintf-style functions are unsafe; use snprintf/vsnprintf instead 67 68Revision 1.11 2003/05/21 17:48:10 cheshire 69Add macro to enable GCC's printf format string checking 70 71Revision 1.10 2003/04/26 02:32:57 cheshire 72Add extern void LogMsg(const char *format, ...); 73 74Revision 1.9 2002/09/21 20:44:49 zarzycki 75Added APSL info 76 77Revision 1.8 2002/09/19 04:20:43 cheshire 78Remove high-ascii characters that confuse some systems 79 80Revision 1.7 2002/09/16 18:41:42 cheshire 81Merge in license terms from Quinn's copy, in preparation for Darwin release 82 83*/ 84 85#pragma ident "%Z%%M% %I% %E% SMI" 86 87#ifndef __mDNSDebug_h 88#define __mDNSDebug_h 89 90// Set MDNS_DEBUGMSGS to 0 to optimize debugf() calls out of the compiled code 91// Set MDNS_DEBUGMSGS to 1 to generate normal debugging messages 92// Set MDNS_DEBUGMSGS to 2 to generate verbose debugging messages 93// MDNS_DEBUGMSGS is normally set in the project options (or makefile) but can also be set here if desired 94// (If you edit the file here to turn on MDNS_DEBUGMSGS while you're debugging some code, be careful 95// not to accidentally check-in that change by mistake when you check in your other changes.) 96 97//#undef MDNS_DEBUGMSGS 98//#define MDNS_DEBUGMSGS 2 99 100// Set MDNS_CHECK_PRINTF_STYLE_FUNCTIONS to 1 to enable extra GCC compiler warnings 101// Note: You don't normally want to do this, because it generates a bunch of 102// spurious warnings for the following custom extensions implemented by mDNS_vsnprintf: 103// warning: `#' flag used with `%s' printf format (for %#s -- pascal string format) 104// warning: repeated `#' flag in format (for %##s -- DNS name string format) 105// warning: double format, pointer arg (arg 2) (for %.4a, %.16a, %#a -- IP address formats) 106#define MDNS_CHECK_PRINTF_STYLE_FUNCTIONS 0 107#if MDNS_CHECK_PRINTF_STYLE_FUNCTIONS 108#define IS_A_PRINTF_STYLE_FUNCTION(F,A) __attribute__ ((format(printf,F,A))) 109#else 110#define IS_A_PRINTF_STYLE_FUNCTION(F,A) 111#endif 112 113#ifdef __cplusplus 114 extern "C" { 115#endif 116 117#if MDNS_DEBUGMSGS 118#define debugf debugf_ 119extern void debugf_(const char *format, ...) IS_A_PRINTF_STYLE_FUNCTION(1,2); 120#else // If debug breaks are off, use a preprocessor trick to optimize those calls out of the code 121 #if (defined(__GNUC__)) 122 #define debugf( ARGS... ) ((void)0) 123 #elif (defined(__MWERKS__)) 124 #define debugf( ... ) 125 #else 126 #define debugf 1 ? ((void)0) : (void) 127 #endif 128#endif 129 130#if MDNS_DEBUGMSGS > 1 131#define verbosedebugf verbosedebugf_ 132extern void verbosedebugf_(const char *format, ...) IS_A_PRINTF_STYLE_FUNCTION(1,2); 133#else 134 #if (defined(__GNUC__)) 135 #define verbosedebugf( ARGS... ) ((void)0) 136 #elif (defined(__MWERKS__)) 137 #define verbosedebugf( ... ) 138 #else 139 #define verbosedebugf 1 ? ((void)0) : (void) 140 #endif 141#endif 142 143// LogMsg is used even in shipping code, to write truly serious error messages to syslog (or equivalent) 144extern int mDNS_DebugMode; // If non-zero, LogMsg() writes to stderr instead of syslog 145extern void LogMsg(const char *format, ...) IS_A_PRINTF_STYLE_FUNCTION(1,2); 146extern void LogMsgIdent(const char *ident, const char *format, ...) IS_A_PRINTF_STYLE_FUNCTION(2,3); 147extern void LogMsgNoIdent(const char *format, ...) IS_A_PRINTF_STYLE_FUNCTION(1,2); 148 149// Set this symbol to 1 to answer remote queries for our Address, reverse mapping PTR, and HINFO records 150#define ANSWER_REMOTE_HOSTNAME_QUERIES 0 151 152// Set this symbol to 1 to do extra debug checks on malloc() and free() 153// Set this symbol to 2 to write a log message for every malloc() and free() 154#define MACOSX_MDNS_MALLOC_DEBUGGING 0 155 156#if MACOSX_MDNS_MALLOC_DEBUGGING >= 1 157extern void *mallocL(char *msg, unsigned int size); 158extern void freeL(char *msg, void *x); 159extern void LogMemCorruption(const char *format, ...); 160extern void uds_validatelists(void); 161#else 162#define mallocL(X,Y) malloc(Y) 163#define freeL(X,Y) free(Y) 164#endif 165 166#if MACOSX_MDNS_MALLOC_DEBUGGING >= 2 167#define LogMalloc LogMsg 168#else 169 #if (defined( __GNUC__ )) 170 #define LogMalloc(ARGS...) ((void)0) 171 #elif (defined( __MWERKS__ )) 172 #define LogMalloc( ... ) 173 #else 174 #define LogMalloc 1 ? ((void)0) : (void) 175 #endif 176#endif 177 178#define LogAllOperations 0 179 180#if LogAllOperations 181#define LogOperation LogMsg 182#else 183#define LogOperation debugf 184#endif 185 186#define ForceAlerts 0 187 188#ifdef __cplusplus 189 } 190#endif 191 192#endif 193