]> git.saurik.com Git - apple/mdnsresponder.git/blob - mDNSShared/mDNSDebug.c
mDNSResponder-176.2.tar.gz
[apple/mdnsresponder.git] / mDNSShared / mDNSDebug.c
1 /* -*- Mode: C; tab-width: 4 -*-
2 *
3 * Copyright (c) 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 File: mDNSDebug.c
18
19 Contains: Implementation of debugging utilities. Requires a POSIX environment.
20
21 Version: 1.0
22
23 Change History (most recent first):
24
25 $Log: mDNSDebug.c,v $
26 Revision 1.13 2007/12/01 00:40:30 cheshire
27 Fixes from Bob Bradley for building on EFI
28
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
31
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
34
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
37
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")
40
41 Revision 1.8 2007/01/20 01:43:27 cheshire
42 <rdar://problem/4058383> Should not write log messages to /dev/console
43
44 Revision 1.7 2006/08/14 23:24:56 cheshire
45 Re-licensed mDNSResponder daemon source code under Apache License, Version 2.0
46
47 Revision 1.6 2005/01/27 22:57:56 cheshire
48 Fix compile errors on gcc4
49
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.
55
56 Revision 1.4 2004/06/11 22:36:51 cheshire
57 Fixes for compatibility with Windows
58
59 Revision 1.3 2004/01/28 21:14:23 cheshire
60 Reconcile debug_mode and gDebugLogging into a single flag (mDNS_DebugMode)
61
62 Revision 1.2 2003/12/09 01:30:40 rpantos
63 Fix usage of ARGS... macros to build properly on Windows.
64
65 Revision 1.1 2003/12/08 21:11:42; rpantos
66 Changes necessary to support mDNSResponder on Linux.
67
68 */
69
70 #include "mDNSDebug.h"
71
72 #include <stdio.h>
73
74 #if defined(WIN32) || defined(EFI32) || defined(EFI64) || defined(EFIX64)
75 // Need to add Windows/EFI syslog support here
76 #define LOG_PID 0x01
77 #define LOG_CONS 0x02
78 #define LOG_PERROR 0x20
79 #else
80 #include <syslog.h>
81 #endif
82
83 #include "mDNSEmbeddedAPI.h"
84
85 mDNSexport LogLevel_t mDNS_LogLevel = MDNS_LOG_INITIAL_LEVEL;
86
87 #if MDNS_DEBUGMSGS
88 mDNSexport int mDNS_DebugMode = mDNStrue;
89 #else
90 mDNSexport int mDNS_DebugMode = mDNSfalse;
91 #endif
92
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
95 #if MDNS_DEBUGMSGS
96 mDNSexport void debugf_(const char *format, ...)
97 {
98 char buffer[512];
99 va_list ptr;
100 va_start(ptr,format);
101 buffer[mDNS_vsnprintf(buffer, sizeof(buffer), format, ptr)] = 0;
102 va_end(ptr);
103 mDNSPlatformWriteDebugMsg(buffer);
104 }
105 #endif
106
107 #if MDNS_DEBUGMSGS > 1
108 mDNSexport void verbosedebugf_(const char *format, ...)
109 {
110 char buffer[512];
111 va_list ptr;
112 va_start(ptr,format);
113 buffer[mDNS_vsnprintf(buffer, sizeof(buffer), format, ptr)] = 0;
114 va_end(ptr);
115 mDNSPlatformWriteDebugMsg(buffer);
116 }
117 #endif
118
119 // Log message with default "mDNSResponder" ident string at the start
120 mDNSexport void LogMsg(const char *format, ...)
121 {
122 char buffer[512];
123 va_list ptr;
124 va_start(ptr,format);
125 buffer[mDNS_vsnprintf((char *)buffer, sizeof(buffer), format, ptr)] = 0;
126 va_end(ptr);
127 mDNSPlatformWriteLogMsg(ProgramName, buffer, 0);
128 }
129
130 // Log message with specified ident string at the start
131 mDNSexport void LogMsgIdent(const char *ident, const char *format, ...)
132 {
133 char buffer[512];
134 va_list ptr;
135 va_start(ptr,format);
136 buffer[mDNS_vsnprintf((char *)buffer, sizeof(buffer), format, ptr)] = 0;
137 va_end(ptr);
138 mDNSPlatformWriteLogMsg(ident, buffer, ident && *ident ? LOG_PID : 0);
139 }
140
141 // Log message with no ident string at the start
142 mDNSexport void LogMsgNoIdent(const char *format, ...)
143 {
144 char buffer[512];
145 va_list ptr;
146 va_start(ptr,format);
147 buffer[mDNS_vsnprintf((char *)buffer, sizeof(buffer), format, ptr)] = 0;
148 va_end(ptr);
149 mDNSPlatformWriteLogMsg("", buffer, 0);
150 }
151
152 mDNSlocal const char *CStringForLogLevel(LogLevel_t level)
153 {
154 switch (level)
155 {
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";
163 }
164 }
165
166 mDNSexport void SigLogLevel(void)
167 {
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));
171 }