1 /* -*- Mode: C; tab-width: 4 -*-
3 * Copyright (c) 2003 Apple Computer, Inc. All rights reserved.
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 Contains: Implementation of debugging utilities. Requires a POSIX environment.
23 Change History (most recent first):
26 Revision 1.13 2007/12/01 00:40:30 cheshire
27 Fixes from Bob Bradley for building on EFI
29 Revision 1.12 2007/10/01 19:06:19 cheshire
30 Defined symbolic constant MDNS_LOG_INITIAL_LEVEL to set the logging level we start out at
32 Revision 1.11 2007/07/27 20:19:56 cheshire
33 For now, comment out unused log levels MDNS_LOG_ERROR, MDNS_LOG_WARN, MDNS_LOG_INFO, MDNS_LOG_DEBUG
35 Revision 1.10 2007/06/15 21:54:51 cheshire
36 <rdar://problem/4883206> Add packet logging to help debugging private browsing over TLS
38 Revision 1.9 2007/04/05 19:52:32 cheshire
39 Display correct ident in syslog messages (i.e. in dnsextd, ProgramName is not "mDNSResponder")
41 Revision 1.8 2007/01/20 01:43:27 cheshire
42 <rdar://problem/4058383> Should not write log messages to /dev/console
44 Revision 1.7 2006/08/14 23:24:56 cheshire
45 Re-licensed mDNSResponder daemon source code under Apache License, Version 2.0
47 Revision 1.6 2005/01/27 22:57:56 cheshire
48 Fix compile errors on gcc4
50 Revision 1.5 2004/09/17 01:08:55 cheshire
51 Renamed mDNSClientAPI.h to mDNSEmbeddedAPI.h
52 The name "mDNSClientAPI.h" is misleading to new developers looking at this code. The interfaces
53 declared in that file are ONLY appropriate to single-address-space embedded applications.
54 For clients on general-purpose computers, the interfaces defined in dns_sd.h should be used.
56 Revision 1.4 2004/06/11 22:36:51 cheshire
57 Fixes for compatibility with Windows
59 Revision 1.3 2004/01/28 21:14:23 cheshire
60 Reconcile debug_mode and gDebugLogging into a single flag (mDNS_DebugMode)
62 Revision 1.2 2003/12/09 01:30:40 rpantos
63 Fix usage of ARGS... macros to build properly on Windows.
65 Revision 1.1 2003/12/08 21:11:42; rpantos
66 Changes necessary to support mDNSResponder on Linux.
70 #include "mDNSDebug.h"
74 #if defined(WIN32) || defined(EFI32) || defined(EFI64) || defined(EFIX64)
75 // Need to add Windows/EFI syslog support here
78 #define LOG_PERROR 0x20
83 #include "mDNSEmbeddedAPI.h"
85 mDNSexport LogLevel_t mDNS_LogLevel
= MDNS_LOG_INITIAL_LEVEL
;
88 mDNSexport
int mDNS_DebugMode
= mDNStrue
;
90 mDNSexport
int mDNS_DebugMode
= mDNSfalse
;
93 // Note, this uses mDNS_vsnprintf instead of standard "vsnprintf", because mDNS_vsnprintf knows
94 // how to print special data types like IP addresses and length-prefixed domain names
96 mDNSexport
void debugf_(const char *format
, ...)
100 va_start(ptr
,format
);
101 buffer
[mDNS_vsnprintf(buffer
, sizeof(buffer
), format
, ptr
)] = 0;
103 mDNSPlatformWriteDebugMsg(buffer
);
107 #if MDNS_DEBUGMSGS > 1
108 mDNSexport
void verbosedebugf_(const char *format
, ...)
112 va_start(ptr
,format
);
113 buffer
[mDNS_vsnprintf(buffer
, sizeof(buffer
), format
, ptr
)] = 0;
115 mDNSPlatformWriteDebugMsg(buffer
);
119 // Log message with default "mDNSResponder" ident string at the start
120 mDNSexport
void LogMsg(const char *format
, ...)
124 va_start(ptr
,format
);
125 buffer
[mDNS_vsnprintf((char *)buffer
, sizeof(buffer
), format
, ptr
)] = 0;
127 mDNSPlatformWriteLogMsg(ProgramName
, buffer
, 0);
130 // Log message with specified ident string at the start
131 mDNSexport
void LogMsgIdent(const char *ident
, const char *format
, ...)
135 va_start(ptr
,format
);
136 buffer
[mDNS_vsnprintf((char *)buffer
, sizeof(buffer
), format
, ptr
)] = 0;
138 mDNSPlatformWriteLogMsg(ident
, buffer
, ident
&& *ident
? LOG_PID
: 0);
141 // Log message with no ident string at the start
142 mDNSexport
void LogMsgNoIdent(const char *format
, ...)
146 va_start(ptr
,format
);
147 buffer
[mDNS_vsnprintf((char *)buffer
, sizeof(buffer
), format
, ptr
)] = 0;
149 mDNSPlatformWriteLogMsg("", buffer
, 0);
152 mDNSlocal
const char *CStringForLogLevel(LogLevel_t level
)
156 case MDNS_LOG_NONE
: return "MDNS_LOG_NONE";
157 // case MDNS_LOG_ERROR: return "MDNS_LOG_ERROR";
158 // case MDNS_LOG_WARN: return "MDNS_LOG_WARN";
159 // case MDNS_LOG_INFO: return "MDNS_LOG_INFO";
160 // case MDNS_LOG_DEBUG: return "MDNS_LOG_DEBUG";
161 case MDNS_LOG_VERBOSE_DEBUG
: return "MDNS_LOG_VERBOSE_DEBUG";
162 default: return "MDNS_LOG_UNKNOWN";
166 mDNSexport
void SigLogLevel(void)
168 if (mDNS_LogLevel
< MDNS_LOG_VERBOSE_DEBUG
) mDNS_LogLevel
++;
169 else mDNS_LogLevel
= MDNS_LOG_NONE
;
170 LogMsg("Log Level Changed to %s", CStringForLogLevel(mDNS_LogLevel
));