]> git.saurik.com Git - apple/syslog.git/blame - libsystem_asl.tproj/include/asl.h
syslog-267.tar.gz
[apple/syslog.git] / libsystem_asl.tproj / include / asl.h
CommitLineData
81582353 1/*
f3df4c03 2 * Copyright (c) 2004-2013 Apple Inc. All rights reserved.
81582353
A
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24#ifndef __ASL_H__
25#define __ASL_H__
26
27#include <stdint.h>
f3df4c03 28#include <stddef.h>
81582353
A
29#include <stdarg.h>
30#include <sys/cdefs.h>
31#include <Availability.h>
32
f3df4c03
A
33/* Version number encodes the date YYYYMMDD */
34#define ASL_API_VERSION 20131108
35
36typedef struct __asl_object_s *asl_object_t;
37typedef asl_object_t aslclient;
38typedef asl_object_t aslmsg;
39typedef asl_object_t aslresponse;
81582353
A
40
41/*! @header
42 * These routines provide an interface to the Apple System Log facility.
43 * The API allows client applications to create flexible, structured messages
44 * and send them to the syslogd server. Messages received by the server are
45 * saved in a data store, subject to input filtering constraints.
46 * This API also permits clients to create queries and search the message
47 * data store for matching messages.
48 */
49
50/*
51 * NOTE FOR HeaderDoc
52 *
53 * These are added to allow headerdoc2html to process
54 * the prototypes of asl_log and asl_vlog correctly.
55 * The "-p" option to headerdoc2html is required.
56 */
57#ifndef __printflike
58/*! @parseOnly */
59#define __printflike(a,b)
60#endif
61
f3df4c03
A
62#pragma mark -
63
81582353
A
64/*! @defineblock Log Message Priority Levels
65 * Log levels of the message.
66 */
67#define ASL_LEVEL_EMERG 0
68#define ASL_LEVEL_ALERT 1
69#define ASL_LEVEL_CRIT 2
70#define ASL_LEVEL_ERR 3
71#define ASL_LEVEL_WARNING 4
72#define ASL_LEVEL_NOTICE 5
73#define ASL_LEVEL_INFO 6
74#define ASL_LEVEL_DEBUG 7
75/*! @/defineblock */
76
f3df4c03
A
77#pragma mark -
78
81582353
A
79/*! @defineblock Log Message Priority Level Strings
80 * Strings corresponding to log levels.
81 */
82#define ASL_STRING_EMERG "Emergency"
83#define ASL_STRING_ALERT "Alert"
84#define ASL_STRING_CRIT "Critical"
85#define ASL_STRING_ERR "Error"
86#define ASL_STRING_WARNING "Warning"
87#define ASL_STRING_NOTICE "Notice"
88#define ASL_STRING_INFO "Info"
89#define ASL_STRING_DEBUG "Debug"
90/*! @/defineblock */
91
f3df4c03
A
92#pragma mark -
93
81582353
A
94/*! @defineblock Attribute Matching
95 * Attribute value comparison operations.
96 */
97#define ASL_QUERY_OP_CASEFOLD 0x0010
98#define ASL_QUERY_OP_PREFIX 0x0020
99#define ASL_QUERY_OP_SUFFIX 0x0040
100#define ASL_QUERY_OP_SUBSTRING 0x0060
101#define ASL_QUERY_OP_NUMERIC 0x0080
102#define ASL_QUERY_OP_REGEX 0x0100
103
104#define ASL_QUERY_OP_EQUAL 0x0001
105#define ASL_QUERY_OP_GREATER 0x0002
106#define ASL_QUERY_OP_GREATER_EQUAL 0x0003
107#define ASL_QUERY_OP_LESS 0x0004
108#define ASL_QUERY_OP_LESS_EQUAL 0x0005
109#define ASL_QUERY_OP_NOT_EQUAL 0x0006
110#define ASL_QUERY_OP_TRUE 0x0007
111/*! @/defineblock */
112
f3df4c03
A
113#pragma mark -
114
81582353 115/*! @defineblock Message Attributes
81582353
A
116 * These attributes are known by ASL, and are generally
117 * associated with all log messages.
118 * Additional attributes may be added as desired.
119 */
f3df4c03
A
120#define ASL_KEY_TIME "Time" /* Timestamp. Set automatically */
121#define ASL_KEY_TIME_NSEC "TimeNanoSec" /* Nanosecond time. */
122#define ASL_KEY_HOST "Host" /* Sender's address (set by the server). */
123#define ASL_KEY_SENDER "Sender" /* Sender's identification string. Default is process name. */
124#define ASL_KEY_FACILITY "Facility" /* Sender's facility. Default is "user". */
125#define ASL_KEY_PID "PID" /* Sending process ID encoded as a string. Set automatically. */
126#define ASL_KEY_UID "UID" /* UID that sent the log message (set by the server). */
127#define ASL_KEY_GID "GID" /* GID that sent the log message (set by the server). */
128#define ASL_KEY_LEVEL "Level" /* Log level number encoded as a string. See levels above. */
129#define ASL_KEY_MSG "Message" /* Message text. */
130#define ASL_KEY_READ_UID "ReadUID" /* User read access (-1 is any user). */
131#define ASL_KEY_READ_GID "ReadGID" /* Group read access (-1 is any group). */
132#define ASL_KEY_EXPIRE_TIME "ASLExpireTime" /* Expiration time for messages with long TTL. */
133#define ASL_KEY_MSG_ID "ASLMessageID" /* 64-bit message ID number (set by the server). */
134#define ASL_KEY_SESSION "Session" /* Session (set by the launchd). */
135#define ASL_KEY_REF_PID "RefPID" /* Reference PID for messages proxied by launchd */
136#define ASL_KEY_REF_PROC "RefProc" /* Reference process for messages proxied by launchd */
137#define ASL_KEY_AUX_TITLE "ASLAuxTitle" /* Auxiliary title string */
138#define ASL_KEY_AUX_UTI "ASLAuxUTI" /* Auxiliary Uniform Type ID */
139#define ASL_KEY_AUX_URL "ASLAuxURL" /* Auxiliary Uniform Resource Locator */
140#define ASL_KEY_AUX_DATA "ASLAuxData" /* Auxiliary in-line data */
141#define ASL_KEY_OPTION "ASLOption" /* Internal */
142#define ASL_KEY_MODULE "ASLModule" /* Internal */
143#define ASL_KEY_SENDER_INSTANCE "SenderInstance" /* Sender instance UUID. */
144#define ASL_KEY_SENDER_MACH_UUID "SenderMachUUID" /* Sender Mach-O UUID. */
145#define ASL_KEY_FINAL_NOTIFICATION "ASLFinalNotification" /* syslogd posts value as a notification when message has been processed */
146#define ASL_KEY_OS_ACTIVITY_ID "OSActivityID" /* Current OS Activity for the logging thread */
81582353
A
147/*! @/defineblock */
148
f3df4c03
A
149#pragma mark -
150
151/*! @defineblock ASL Object Types
152 * The library uses only one opaque type - asl_object_t.
153 * Many of the routines can operate on several different types.
154 * For example, asl_search() can be used to search a list of messages,
155 * an ASL database directory or data file, or the main ASL database.
156 * It can even be used to check a single message against a query
157 * message, or against another message to check for exact match.
158 *
159 * The first three types are container objects - messages, queries,
160 * and lists of messages or queries. The following types are
161 * abstractions for ASL data files and ASL data stores (directories
162 * containing data files).
163 *
164 * ASL_TYPE_CLIENT is a high-level object that abstracts ASL
165 * interactions. It may access ASL stores or files directly,
166 * and it may communicate with ASL daemons.
167 *
81582353 168 */
f3df4c03 169#define ASL_TYPE_UNDEF 0xffffffff
81582353
A
170#define ASL_TYPE_MSG 0
171#define ASL_TYPE_QUERY 1
f3df4c03
A
172#define ASL_TYPE_LIST 2
173#define ASL_TYPE_FILE 3
174#define ASL_TYPE_STORE 4
175#define ASL_TYPE_CLIENT 5
176/*! @/defineblock */
177
178#pragma mark -
179
180/*! @defineblock search directions
181 * Used for asl_store_match(), asl_file_match(), and asl_match().
182 */
183#define ASL_MATCH_DIRECTION_FORWARD 1
184#define ASL_MATCH_DIRECTION_REVERSE -1
81582353
A
185/*! @/defineblock */
186
f3df4c03
A
187#pragma mark -
188
81582353
A
189/*! @defineblock Filter Masks
190 * Used in client-side filtering, which determines which
191 * messages are sent by the client to the syslogd server.
192 */
193#define ASL_FILTER_MASK_EMERG 0x01
194#define ASL_FILTER_MASK_ALERT 0x02
195#define ASL_FILTER_MASK_CRIT 0x04
196#define ASL_FILTER_MASK_ERR 0x08
197#define ASL_FILTER_MASK_WARNING 0x10
198#define ASL_FILTER_MASK_NOTICE 0x20
199#define ASL_FILTER_MASK_INFO 0x40
200#define ASL_FILTER_MASK_DEBUG 0x80
201/*! @/defineblock */
202
f3df4c03
A
203#pragma mark -
204
81582353
A
205/*! @defineblock Filter Mask Macros
206 * Macros to create bitmasks for filter settings - see asl_set_filter().
207 */
208#define ASL_FILTER_MASK(level) (1 << (level))
209#define ASL_FILTER_MASK_UPTO(level) ((1 << ((level) + 1)) - 1)
210/*! @/defineblock */
211
f3df4c03
A
212#pragma mark -
213
81582353
A
214/*! @defineblock Client Creation Options
215 * Options for asl_open().
f3df4c03 216 * Note that ASL_OPT_NO_DELAY no longer has any effect.
81582353
A
217 */
218#define ASL_OPT_STDERR 0x00000001
219#define ASL_OPT_NO_DELAY 0x00000002
220#define ASL_OPT_NO_REMOTE 0x00000004
221/*! @/defineblock */
222
f3df4c03
A
223#pragma mark -
224
225/*! @defineblock File and Store Open Options
226 * Options for asl_open_path().
227 */
228#define ASL_OPT_OPEN_WRITE 0x00000001
229#define ASL_OPT_CREATE_STORE 0x00000002
230/*! @/defineblock */
231
232#pragma mark -
233
81582353
A
234/*! @defineblock File Descriptor Types
235 * Instructions on how to treat the file descriptor in asl_log_descriptor().
236 */
237#define ASL_LOG_DESCRIPTOR_READ 1
238#define ASL_LOG_DESCRIPTOR_WRITE 2
239
f3df4c03
A
240#pragma mark -
241
81582353
A
242/*! @defineblock Output file message and time formats.
243 * These select internally defined formats for printed log messages for
244 * asl_add_output_file(). Custom message and time formats may also be
245 * used. These pre-defined formats and custom formats are described in detail
246 * in the syslog(1) manual page.
247 */
248#define ASL_MSG_FMT_RAW "raw"
249#define ASL_MSG_FMT_STD "std"
250#define ASL_MSG_FMT_BSD "bsd"
251#define ASL_MSG_FMT_XML "xml"
252#define ASL_MSG_FMT_MSG "msg"
253
254#define ASL_TIME_FMT_SEC "sec"
255#define ASL_TIME_FMT_UTC "utc"
256#define ASL_TIME_FMT_LCL "lcl"
257
f3df4c03
A
258#pragma mark -
259
81582353
A
260/*! @defineblock Text Encoding Types
261 * These are used by the library when formatting messages to be written
262 * to file descriptors associated with an ASL client handle with
263 * asl_add_output_file(). The syslog(1) manual page describes text encoding
264 * in detail. ASL_ENCODE_ASL corresponds to the "vis" encoding option
265 * described in the syslog(1) manual. ASL_ENCODE_XML should be used in
266 * combination with ASL_MSG_FMT_XML to ensure that special XML characters
267 * are correctly encoded.
268 */
269#define ASL_ENCODE_NONE 0
270#define ASL_ENCODE_SAFE 1
271#define ASL_ENCODE_ASL 2
272#define ASL_ENCODE_XML 3
273
f3df4c03
A
274#pragma mark -
275
81582353
A
276/*!
277 * ASL_PREFILTER_LOG is a macro similar to asl_log(), but it first checks
278 * if the message will simply be ignored due to local filter settings.
279 * This prevents the variable argument list from being evaluated.
280 * Note that the message may still be processed if it will be written
281 * to a file or stderr.
282 *
f3df4c03
A
283 * @param client
284 * (input) An ASL_TYPE_CLIENT object.
81582353 285 * @param msg
f3df4c03 286 * (input) An asl_object_t of type ASL_TYPE_MSG (default attributes will be supplied if msg is NULL).
81582353 287 * @param level
f3df4c03 288 * (input) Log level (ASL_LEVEL_DEBUG to ASL_LEVEL_EMERG).
81582353 289 * @param format
f3df4c03 290 * (input) A printf() - style format string followed by a list of arguments.
81582353 291 */
f3df4c03 292#define ASL_PREFILTER_LOG(client, msg, level, format, ...) \
81582353 293 do { \
f3df4c03
A
294 asl_object_t _client = (client); \
295 asl_object_t _msg = (msg); \
296 uint32_t _asl_eval = _asl_evaluate_send(_client, _msg, (level)); \
297 if (_asl_eval != 0) _asl_lib_log(_client, _asl_eval, _msg, (format), ## __VA_ARGS__); \
81582353
A
298 } while (0)
299
f3df4c03
A
300#pragma mark -
301
81582353
A
302__BEGIN_DECLS
303
304/* ASL Library SPI - do not call directly */
f3df4c03
A
305int _asl_lib_log(asl_object_t client, uint32_t eval, asl_object_t msg, const char *format, ...) __printflike(4, 5);
306uint32_t _asl_evaluate_send(asl_object_t client, asl_object_t msg, int level);
81582353
A
307
308/*!
309 * Initialize a connection to the ASL server.
310 *
f3df4c03 311 * This call is optional in many cases. The library will perform any
81582353
A
312 * necessary initializations on the fly. A call to asl_open() is required
313 * if optional settings must be made before messages are sent to the server.
314 * These include setting the client filter and managing additional output
315 * file descriptors. Note that the default setting of the client filter is
316 * ASL_FILTER_MASK_UPTO(ASL_LEVEL_NOTICE), so ASL_LEVEL_DEBUG and ASL_LEVEL_INFO
317 * messages are not sent to the server by default.
f3df4c03
A
318 * A separate client connection is required for multiple threads or
319 * dispatch queues.
320 *
81582353
A
321 * Options (defined above) may be set using the opts parameter. They are:
322 *
323 * ASL_OPT_STDERR - adds stderr as an output file descriptor
324 *
81582353
A
325 * ASL_OPT_NO_REMOTE - disables the remote-control mechanism for adjusting
326 * filter levers for processes using e.g. syslog -c ...
327 *
328 * @param ident
f3df4c03 329 * (input) Sender name.
81582353 330 * @param facility
f3df4c03 331 * (input) Facility name.
81582353 332 * @param opts
f3df4c03
A
333 * (input) Options (see Client Creation Options).
334 * @result Returns an ASL client handle (asl_object_t of type ASL_TYPE_CLIENT).
81582353 335 */
f3df4c03
A
336asl_object_t asl_open(const char *ident, const char *facility, uint32_t opts) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
337
338/*!
339 * Open an ASL database or ASL data file for read or write access.
340 *
341 * Opens an ASL database if the path specifies a directory, or
342 * an ASL data file if the path specifies a file. Opens the system
343 * ASL database if path is NULL.
344 *
345 * If the ASL_OPT_OPEN_READ option is specified, the database or data file may be
346 * searched with asl_search() or asl_match(). asl_next() and asl_prev() may be used
347 * to iterate over the messages in the database or file.
348 *
349 * If the ASL_OPT_OPEN_WRITE option is specified, an existing file or database is
350 * opened for writing. New messages may be added to the file or database using
351 * asl_append(), asl_send(), asl_log(), or asl_vlog(). Existing messages in the
352 * store or file may not be deleted or modified.
353 *
354 * If the path does not exist, asl_open_path() will create a new database if
355 * ASL_OPT_CREATE_STORE is set in the options, or a new data file otherwise.
356 * The file will be created with the user's effective UID and GID as owner and
357 * group. The mode will be 0644. If a different mode, UID, or GID is desired,
358 * an empty file or directory may be pre-created with the desired settings.
359 *
360 * @param path
361 * (input) Location of the ASL database or ASL data file in the filesystem.
362 * A value of NULL may be used to open the system's database.
363 * @param opts
364 * (input) Options (see File and Store Open Options).
365 * @result Returns an ASL object of type ASL_TYPE_STORE or ASL_TYPE_FILE, or NULL on failure.
366 */
367asl_object_t asl_open_path(const char *path, uint32_t opts) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
81582353
A
368
369/*!
370 * Shuts down a connection to the server.
f3df4c03 371 * This routine is identical to asl_release().
81582353 372 *
f3df4c03
A
373 * @param obj
374 * (input) An ASL object.
81582353 375 */
f3df4c03 376void asl_close(asl_object_t obj) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
81582353
A
377
378/*!
379 * Write log messages to the given file descriptor.
380 *
381 * Log messages will be written to this file as well as to the server.
382 * This is equivalent to calling:
383 * asl_add_output_file(asl, descriptor, ASL_MSG_FMT_STD, ASL_TIME_FMT_LCL, ASL_FILTER_MASK_UPTO(ASL_LEVEL_DEBUG), ASL_ENCODE_SAFE)
384 *
f3df4c03
A
385 * @param client
386 * (input) An ASL client handle (asl_object_t of type ASL_TYPE_CLIENT).
81582353 387 * @param descriptor
f3df4c03
A
388 * (input) A file descriptor.
389 * @result Returns 0 on success, non-zero on failure.
81582353 390*/
f3df4c03 391int asl_add_log_file(asl_object_t client, int descriptor) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
81582353
A
392
393/*!
394 * Write log messages to the given file descriptor.
395 *
396 * Log messages will be written to this file as well as to the server.
397 * This routine extends the basic interface offered by asl_add_log_file(),
398 * allowing control of the format used to write log message written to the file.
399 * control of the time zone used when printing time values, and allowing
400 * individual filtering control for each log file.
401 *
f3df4c03
A
402 * @param client
403 * (input) An ASL client handle (asl_object_t of type ASL_TYPE_CLIENT).
81582353 404 * @param descriptor
f3df4c03 405 * (input) A file descriptor.
81582353 406 * @param mfmt
f3df4c03 407 * (input) A character string specifying the message format.
81582353 408 * @param tfmt
f3df4c03 409 * (input) A character string specifying the time format.
81582353 410 * @param filter
f3df4c03 411 * (input) A filter value.
81582353 412 * @param text_encoding
f3df4c03
A
413 * (input) A text encoding type.
414 * @result Returns 0 on success, non-zero on failure.
81582353 415 */
f3df4c03 416int asl_add_output_file(asl_object_t client, int fd, const char *mfmt, const char *tfmt, int filter, int text_encoding) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
81582353
A
417
418/*!
419 * Write log messages to the given file descriptor.
420 *
421 * Sets or changes a filter value for filtering messages written to a file associated
422 * with an ASL client handle using asl_add_output_file() or asl_add_log_file().
423 *
f3df4c03
A
424 * @param client
425 * (input) An ASL client handle (asl_object_t of type ASL_TYPE_CLIENT).
81582353 426 * @param descriptor
f3df4c03 427 * (input) A file descriptor.
81582353 428 * @param filter
f3df4c03
A
429 * (input) A filter value.
430 * @result Returns the previous filter value.
81582353 431 */
f3df4c03 432int asl_set_output_file_filter(asl_object_t client, int fd, int filter) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
81582353
A
433
434/*!
435 * Stop writing log messages to the given file descriptor.
436 * The file descripter is not closed by this routine.
437 *
f3df4c03
A
438 * @param client
439 * (input) An ASL client handle (asl_object_t of type ASL_TYPE_CLIENT).
81582353 440 * @param descriptor
f3df4c03
A
441 * (input) A file descriptor.
442 * @result Returns 0 on success, non-zero on failure.
81582353 443 */
f3df4c03 444int asl_remove_log_file(asl_object_t client, int descriptor) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
81582353
A
445
446/*!
447 * Set a filter for messages being sent to the server.
448 * The filter is a bitmask representing priorities. The ASL_FILTER_MASK
449 * macro may be used to convert a priority level into a bitmask for that
450 * level. The ASL_FILTER_MASK_UPTO macro creates a bitmask for all
451 * priorities up to and including a given priority.
452 * Messages with priority levels that do not have a corresponding bit
453 * set in the filter are not sent to the server, although they will be
454 * sent to any file descripters added with asl_add_log_file().
455 * The default setting is ASL_FILTER_MASK_UPTO(ASL_LEVEL_NOTICE).
456 * Returns the previous filter value.
457 *
f3df4c03
A
458 * @param client
459 * (input) An ASL client handle (asl_object_t of type ASL_TYPE_CLIENT).
81582353 460 * @param f
f3df4c03
A
461 * (input) A filter value.
462 * @result Returns the previous filter value.
81582353 463 */
f3df4c03 464int asl_set_filter(asl_object_t client, int f) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
81582353
A
465
466/*
467 * Examine attribute keys.
468 *
469 * @param msg
f3df4c03 470 * (input) An ASL message or query (asl_object_t of type ASL_TYPE_MSG or ASL_TYPE_QUERY).
81582353 471 * @param n
f3df4c03 472 * (input) An index value.
81582353
A
473 * @result Returns the key of the nth attribute in a message (beginning at zero),
474 * or NULL if n is greater than the largest message index.
475 */
f3df4c03
A
476const char *asl_key(asl_object_t msg, uint32_t n) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
477
478/*
479 * Examine attribute keys.
480 *
481 * @param msg
482 * (input) An ASL message or query (asl_object_t of type ASL_TYPE_MSG or ASL_TYPE_QUERY).
483 * @param key
484 * (output) key at the given index. May be NULL.
485 * @param val
486 * (output) val at the given index. May be NULL.
487 * @param op
488 * (output) op at the given index. May be NULL.
489 * @param n
490 * (input) An index value.
491 * @result returns 0 for success, non-zero for failure.
492 */
493int asl_fetch_key_val_op(asl_object_t msg, uint32_t n, const char **key, const char **val, uint32_t *op) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
81582353
A
494
495/*!
f3df4c03 496 * Create a new log message, query message, message list, or a connection to the system database.
81582353
A
497 *
498 * @param type
f3df4c03
A
499 * (input) ASL_TYPE_MSG, ASL_TYPE_QUERY, ASL_TYPE_LIST, or ASL_TYPE_CLIENT.
500 * @result Returns a newly allocated asl_object_t of the specified type.
501 *
502 * @discussion
503 * New objects of type ASL_TYPE_CLIENT will be created with default settings for
504 * a client connection, equivalent to asl_open(NULL, NULL, 0).
505 * The Sender and Facility values associated with an ASL_TYPE_CLIENT may
506 * be reset using asl_set().
81582353 507 */
f3df4c03 508asl_object_t asl_new(uint32_t type) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
81582353
A
509
510/*!
f3df4c03
A
511 * Set or re-set a message or query attribute.
512 * May also be used to set values associated with an ASL_TYPE_CLIENT object,
513 * such as Sender and Facility.
81582353 514 *
f3df4c03
A
515 * @param obj
516 * (input) An ASL object of type ASL_TYPE_MSG, ASL_TYPE_QUERY, or ASL_TYPE_CLIENT.
81582353 517 * @param key
f3df4c03 518 * (input) Attribute key.
81582353 519 * @param value
f3df4c03
A
520 * (input) Attribute value.
521 * @result returns 0 for success, non-zero for failure.
81582353 522 */
f3df4c03 523int asl_set(asl_object_t obj, const char *key, const char *value) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
81582353
A
524
525/*!
f3df4c03 526 * Remove a key/value attribute.
81582353 527 *
f3df4c03
A
528 * @param obj
529 * (input) An ASL object of type ASL_TYPE_MSG, ASL_TYPE_QUERY, or ASL_TYPE_CLIENT.
81582353 530 * @param key
f3df4c03
A
531 * (input) Attribute key.
532 * returns 0 for success, non-zero for failure.
81582353 533 */
f3df4c03 534int asl_unset(asl_object_t obj, const char *key) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
81582353
A
535
536/*!
f3df4c03 537 * Get the value associated with an attribute key.
81582353 538 *
f3df4c03
A
539 * @param obj
540 * (input) An ASL object of type ASL_TYPE_MSG, ASL_TYPE_QUERY, or ASL_TYPE_CLIENT.
81582353 541 * @param key
f3df4c03
A
542 * (input) Attribute key.
543 * @result Returns the attribute value, or NULL if the object does not contain the key.
81582353 544 */
f3df4c03 545const char *asl_get(asl_object_t msg, const char *key) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
81582353
A
546
547/*!
548 * Log a message with a particular log level.
549 *
f3df4c03
A
550 * @param obj
551 * (input) An asl_object_t or NULL.
81582353 552 * @param msg
f3df4c03 553 * (input) An asl_object_t of type ASL_TYPE_MSG (default attributes will be supplied if msg is NULL).
81582353 554 * @param level
f3df4c03 555 * (input) Log level (ASL_LEVEL_DEBUG to ASL_LEVEL_EMERG).
81582353 556 * @param format
f3df4c03
A
557 * (input) A printf() - style format string followed by a list of arguments.
558 * @result Returns 0 for success, non-zero for failure.
559 *
560 * @discussion
561 * The input object may be of any type.
562 * In typical usage, obj is of type ASL_TYPE_CLIENT or obj is NULL.
563 * NULL causes the library to use the default ASL client handle.
564 * This routine prepares a message for tranmission to the ASL server daemon (syslogd),
565 * The message is sent to the server subject to filter settings. The message may also
566 * be formatted and printed to various output files.
567 *
568 * For ASL_TYPE_MSG, this routine will set all key/value pairs in the input object as
569 * they would appear if the message were being sent to the server. This includes
570 * setting alues for ASL_KEY_TIME, ASL_KEY_TIME_NSEC, ASL_KEY_HOST, and so on.
571 *
572 * If the object is of type ASL_TYPE_STORE or ASL_TYPE_FILE, a message will be
573 * constructed (as above) and saved in the file or data store. No filtering is done.
574 *
575 * If obj is of type ASL_TYPE_LIST, a message is created and appended to the list.
576 *
577 * The object type ASL_TYPE_QUERY is supported, but the key/value pairs set in the
578 * object will have an operator value of zero.
579 */
580int asl_log(asl_object_t client, asl_object_t msg, int level, const char *format, ...) __printflike(4, 5) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
581
582/*!
583 * Log a message with a particular log level.
584 *
585 * This API is a simplified version of asl_log(). It uses the default (NULL) ASL client handle,
586 * and does not have a msg parameter to supply additonal key/value pairs to be attached to the
587 * message sent to the syslogd server.
588 *
589 * @param level
590 * (input) Log level (ASL_LEVEL_DEBUG to ASL_LEVEL_EMERG).
591 * @param format
592 * (input) A printf() - style format string followed by a list of arguments.
593 * @result Returns 0 for success, non-zero for failure.
81582353 594 */
f3df4c03 595int asl_log_message(int level, const char *format, ...) __printflike(2, 3) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
81582353
A
596
597/*!
598 * Log a message with a particular log level.
599 * Similar to asl_log, but takes a va_list argument.
600 *
601 * @param asl
f3df4c03 602 * (input) An ASL object or NULL.
81582353 603 * @param msg
f3df4c03 604 * (input) An asl_object_t of type ASL_TYPE_MSG (default attributes will be supplied if msg is NULL).
81582353 605 * @param level
f3df4c03 606 * (input) Log level (ASL_LEVEL_DEBUG to ASL_LEVEL_EMERG).
81582353 607 * @param format
f3df4c03 608 * (input) A printf() - style format string followed by a list of arguments.
81582353 609 * @param ap
f3df4c03
A
610 * (input) A va_list containing the values for the format string.
611 * @result Returns 0 for success, non-zero for failure.
612 * @discussion
613 * See the discussion for asl_log() for a description of how this routine treats different
614 * types of input object.
615 *
81582353 616 */
f3df4c03 617int asl_vlog(asl_object_t obj, asl_object_t msg, int level, const char *format, va_list ap) __printflike(4, 0) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
81582353
A
618
619/*!
620 * Log a message.
621 *
622 * This routine may be used instead of asl_log() or asl_vlog() if asl_set()
623 * has been used to set all of a message's attributes.
624 *
625 * @param asl
f3df4c03 626 * (input) An ASL object or NULL.
81582353 627 * @param msg
f3df4c03
A
628 * (input) An asl_object_t of type ASL_TYPE_MSG.
629 * @result Returns 0 for success, non-zero for failure.
630 * @discussion
631 * See the discussion for asl_log() for a description of how this routine treats different
632 * types of input object.
81582353 633 */
f3df4c03 634int asl_send(asl_object_t obj, asl_object_t msg) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
81582353
A
635
636/*!
f3df4c03
A
637 * DEPRECATED: Free an ASL object and all internal resources associated with it.
638 * This routine is identical to asl_release(), which should be used instead.
639 * Note that we don't issue a deprecation warning - yet.
81582353 640 *
f3df4c03
A
641 * @param obj
642 * (input) An ASL object to free.
643 */
644void asl_free(asl_object_t obj) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
645
646/*!
647 * Increment the internal reference count of an ASL object.
648 *
649 * @param obj
650 * (input) An ASL object to retain.
651 * @result Returns the object.
652 */
653asl_object_t asl_retain(asl_object_t obj) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
654
655/*!
656 * Decrement the internal reference count of an ASL object.
657 * Frees the object when the reference count becomes zero.
658 *
659 * @param obj
660 * (input) An ASL object to release.
661 */
662void asl_release(asl_object_t obj) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
663
664/*!
665 * Get the internal type of an ASL object.
666 *
667 * @param obj
668 * (input) An ASL object.
669 * @result Returns the object type.
81582353 670 */
f3df4c03 671uint32_t asl_get_type(asl_object_t obj) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
81582353
A
672
673/*!
674 * Set arbitrary parameters of a query.
675 * This is similar to asl_set, but allows richer query operations.
676 * See ASL_QUERY_OP_* above.
677 *
678 * @param msg
f3df4c03 679 * (input) An ASL object of type ASL_TYPE_QUERY.
81582353
A
680 * @param key
681 * (input) Attribute key
682 * @param value
683 * (input) Attribute value
684 * @param op
685 * (input) An operation (ASL_QUERY_OP_*)
686 * @result Returns 0 for success, non-zero for failure
687 */
f3df4c03 688int asl_set_query(asl_object_t msg, const char *key, const char *value, uint32_t op) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
81582353
A
689
690/*!
f3df4c03 691 * Search for messages matching the criteria described by an query object.
81582353 692 * The caller should set the attributes to match using asl_set_query() or asl_set().
f3df4c03 693 * The operation ASL_QUERY_OP_EQUAL is used for attributes set with asl_set().
81582353 694 *
f3df4c03
A
695 * @param obj
696 * (input) An ASL object to search.
697 * @param query
698 * (input) An asl_object_t of type ASL_TYPE_QUERY or ASL_TYPE_MSG.
699 * query may be NULL, which matches anything.
700 * @result Returns an ASL object containing messages matching the query, or NULL if there are no matches.
701 *
702 * @discussion
703 * The object to search may be of any type.
704 * ASL_TYPE_CLIENT searches the main ASL database.
705 * ASL_TYPE_STORE searches an ASL database in the filesystem.
706 * ASL_TYPE_FILE searches an ASL data file in the filesystem.
707 * ASL_TYPE_LIST searches for matches in a list of messages.
708 *
709 * A NULL query matches anything.
710 *
711 * If obj is of type ASL_TYPE_MSG and query is of type ASL_TYPE_QUERY, obj is matched against the query,
712 * and a list containing the "obj" object is returned if the match succeeds.
713 *
714 * If both obj and query are objects of type ASL_TYPE_MSG or both are of type ASL_TYPE_QUERY,
715 * they are tested for exact match. A list containing the "obj" object is returned if the match is exact.
716 *
717 * If obj is of type ASL_TYPE_QUERY and query is of type ASL_TYPE_MSG, the routine returns NULL.
718 *
719 */
720asl_object_t asl_search(asl_object_t obj, asl_object_t query) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
721
722/*!
723 * DEPRECATED: Iterate over messages in an asl_object_t (same as an aslresponse).
724 * This routine is identical to asl_next().
725 *
726 * @param list
727 * (input) An asl_object_t (aslresponse).
728 * @result Returns the next message contained in an ASL object, or NULL when there are no more messages.
729 *
730 * @discussion
731 * This routine is deprecated in favor of asl_next().
732 */
733asl_object_t aslresponse_next(asl_object_t obj) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_4,__MAC_10_10,__IPHONE_2_0,__IPHONE_7_0, "Use asl_next instead");
734
735/*!
736 * DEPRECATED: Free an asl_object_t.
737 * This routine is identical to asl_release().
738 *
739 * @param list
740 * (input) An asl_object_t (aslresponse).
741 *
742 * @discussion
743 * This routine is deprecated in favor of asl_release().
744 */
745void aslresponse_free(asl_object_t obj) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_4,__MAC_10_10,__IPHONE_2_0,__IPHONE_7_0, "Use asl_release instead");
746
747/*!
748 * Append messages to an object of type ASL_TYPE_LIST. The input "obj"
749 * parameter may be of type ASL_TYPE_MSG or ASL_TYPE_QUERY, in which case
750 * the object is appended to the list, or "obj" may be of type ASL_TYPE_LIST,
751 * in which case each object in that list is appended to the "list" object.
752 * Does nothing if either list or obj are NULL.
753 *
754 * @param obj
755 * (input) An object of type ASLTYPE_CLIENT or ASL_TYPE_LIST, or an object of type
756 * ASL_TYPE_FILE or ASL_TYPE_STORE that is open for write operations.
757 * @param obj_to_add
758 * (input) An object of type ASL_TYPE_MSG, ASL_TYPE_QUERY or type ASL_TYPE_LIST.
759 */
760void asl_append(asl_object_t obj, asl_object_t obj_to_add) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
761
762/*!
763 * Prepend messages to an object of type ASL_TYPE_LIST. The input "obj"
764 * parameter may be of type ASL_TYPE_MSG or ASL_TYPE_QUERY, in which case
765 * the object is prepended to the list, or "obj" may be of type ASL_TYPE_LIST,
766 * in which case each object in that list is prepended to the "list" object.
767 * Does nothing if either list or obj are NULL.
768 *
769 * @param obj
770 * (input) An object of type ASL_TYPE_LIST.
771 * @param obj_to_add
772 * (input) An object of type ASL_TYPE_MSG, ASL_TYPE_QUERY or type ASL_TYPE_LIST.
773 */
774void asl_prepend(asl_object_t obj, asl_object_t obj_to_add) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
775
776/*!
777 * Get the number of key/value pairs in an object of type ASL_TYPE_MSG or ASL_TYPE_QUERY,
778 * or the number of components in an object of type ASL_TYPE_LIST.
779 *
780 * @param obj
781 * (input) An asl_object_t of type ASL_TYPE_MSG, ASL_TYPE_QUERY, or ASL_TYPE_LIST.
782 * @result The number of components in the object.
783 * Returns zero if object is empty or NULL, or if the type is not
784 * ASL_TYPE_MSG, ASL_TYPE_QUERY, or ASL_TYPE_LIST.
81582353 785 */
f3df4c03 786size_t asl_count(asl_object_t obj) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
81582353
A
787
788/*!
f3df4c03 789 * Retreive a message from an object of type ASL_TYPE_LIST.
81582353 790 *
f3df4c03
A
791 * @param obj
792 * (input) An asl_object_t of type ASL_TYPE_LIST
793 * @result Returns the message (an object of type ASL_TYPE_MSG or ASL_TYPE_QUERY) at the specified index.
794 * Returns NULL if the index is out of range or if list is not an object of type ASL_TYPE_LIST.
81582353 795 */
f3df4c03 796asl_object_t asl_get_index(asl_object_t list, size_t index) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
81582353
A
797
798/*!
f3df4c03
A
799 * Remove the message at a specified index from an object of type ASL_TYPE_LIST.
800 *
801 * @param list
802 * (input) An object of type ASL_TYPE_LIST.
81582353 803 */
f3df4c03 804void asl_remove_index(asl_object_t list, size_t index) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
81582353
A
805
806/*!
807 * Creates an auxiliary file that may be used to save arbitrary data. The ASL message msg
808 * will be saved at the time that the auxiliary file is closed with asl_close_auxiliary_file().
809 * The log entry will include any keys and values found in msg, and it will include the title
810 * and Uniform Type Identifier specified. If NULL is supplied as a value for the uti parameter,
811 * the type "public.data" is used. Console.app will display a hyperlink to the file.
812 * Output parameter out_descriptor will contain a readable and writable file descriptor for the new
813 * auxiliary file.
814 *
815 * By default, the file will be world-readable. If the message contains a ReadUID and/or a
816 * ReadGID key, then the values for those keys will determine read access to the file.
817 *
818 * The file will be deleted at the same time that the message expires from the ASL data store.
819 * The aslmanager utility manages message expiry. If msg contains a value for ASLExpireTime,
820 * then the message and the file will not be deleted before that time. The value may be in
821 * seconds after the Epoch, or it may be ctime() format, e.g "Thu Jun 24 18:22:48 2010".
822 *
823 * @param msg
f3df4c03 824 * (input) An object of type ASL_TYPE_MSG.
81582353 825 * @param tite
f3df4c03 826 * (input) A title string for the file.
81582353 827 * @param uti
f3df4c03 828 * (input) Uniform Type Identifier for the file.
81582353 829 * @param out_descriptor
f3df4c03 830 * (output) A writable file descriptor.
81582353
A
831 * @result Returns 0 for success, non-zero for failure
832 */
f3df4c03 833int asl_create_auxiliary_file(asl_object_t msg, const char *title, const char *uti, int *out_descriptor) __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_5_0);
81582353
A
834
835/*!
836 * Close an auxiliary file opened by asl_create_auxiliary_file() when writing is complete.
837 * syslogd will log the message provided to asl_create_auxiliary_file() when this routine
838 * is called.
839 *
840 * @param descriptor
841 * (input) The file descriptor
842 * @result Returns 0 for success, non-zero for failure
843 */
f3df4c03 844int asl_close_auxiliary_file(int descriptor) __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_5_0);
81582353
A
845
846/*!
847 * Sends an ASL message to syslogd along with a title string, Uniform Resource Locator,
848 * and Uniform Type Identifier specified. Console.app will hyperlink the title string to
849 * the specified URL. If NULL is supplied as a value for the uti parameter, the default
850 * type "public.data" is used.
851 *
852 * @param msg
f3df4c03 853 * (input) An object of type ASL_TYPE_MSG.
81582353
A
854 * @param title
855 * (input) A title string for the file
856 * @param uti
857 * (input) Uniform Type Identifier for the file
858 * @param url
859 * (input) Uniform Type Locator
860 * @result Returns 0 for success, non-zero for failure
861 */
f3df4c03 862int asl_log_auxiliary_location(asl_object_t msg, const char *title, const char *uti, const char *url) __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_5_0);
81582353
A
863
864/*!
f3df4c03
A
865 * Creates an object of type ASL_TYPE_CLIENT for logging to a file descriptor.
866 * The file must be opened for read and write access. This routine may be used in conjunction
867 * with asl_create_auxiliary_file() to save ASL format log messages to an auxiliary file.
81582353 868 *
f3df4c03
A
869 * When logging to the file is complete, the returned object should be released with asl_release().
870 * The file descriptor should be closed using asl_close_auxiliary_file() if it was returned by
871 * asl_create_auxiliary_file(), or close() otherwise.
81582353 872 *
f3df4c03
A
873 * The returned client object is thread-safe. It contains a lock that is aquired by
874 * the calling thread. Note that this may cause unexpected syncronization behavior
875 * if multiple threads log to the returned object, or in applications that use the
876 * object in multiple dispatch queues.
81582353
A
877 *
878 * Note that per-message read access controls (ReadUID and ReadGID) and message expire
879 * times (ASLExpireTime) keys have no effect for messages written to this file.
880 *
f3df4c03
A
881 * Also note that files are NOT truncated. This is a change in OS X 10.9 and iOS 7.0.
882 * Previous versions of this routine truncated the file before writing. Callers
883 * may use ftruncate() to truncate the file if desired. If an existing non-empty
884 * file is used, it must be an ASL format data file.
885 *
81582353
A
886 * @param descriptor
887 * (input) A file descriptor
888 * @param ident
889 * (input) Sender name
890 * @param facility
891 * (input) Facility name
f3df4c03 892 * @result An object of type ASL_TYPE_CLIENT.
81582353 893 */
f3df4c03 894asl_object_t asl_open_from_file(int descriptor, const char *ident, const char *facility) __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_5_0);
81582353
A
895
896/*!
897 * This API provides functionality to use file descriptors to send logging
898 * data to ASL.
899 *
900 * asl is retained by ASL and must still be closed by the caller by calling
901 * asl_close() if the caller loses reference to it. msg is copied by ASL and
902 * similarly must still be freed by the caller by calling asl_free() if the
903 * caller loses reference to it. Any changes made to it after calling
904 * asl_log_descriptor() are not applicable to the message used. descriptor
905 * is treated differentlty based on the value of fd_type.
906 *
907 * If fd_type is ASL_LOG_DESCRIPTOR_READ, the descriptor must be open for read
908 * access. ASL uses GCD to read from the descriptor as data becomes available.
909 * These data are line buffered and passed to asl_log. When EOF is read, the
910 * descriptor is closed.
911 *
912 * Example:
913 * asl_log_descriptor(c, m, ASL_LEVEL_NOTICE, STDIN_FILENO, ASL_LOG_DESCRIPTOR_READ);
914 *
915 * If fd_type is ASL_LOG_DESCRIPTOR_WRITE, the descriptor is closed and a new
916 * writable descriptor is created with the same fileno. Any data written to
917 * this new descriptor are line buffered and passed to asl_log. When EOF is
918 * sent, no further data are read. The caller is responsible for closing the
919 * new descriptor. One common use for this API is to redirect writes to stdout
920 * or stderr to ASL by passing STDOUT_FILENO or STDERR_FILENO as descriptor.
921 *
922 * Example:
923 * asl_log_descriptor(c, m, ASL_LEVEL_NOTICE, STDOUT_FILENO, ASL_LOG_DESCRIPTOR_WRITE);
924 * asl_log_descriptor(c, m, ASL_LEVEL_ERR, STDERR_FILENO, ASL_LOG_DESCRIPTOR_WRITE);
925 *
f3df4c03
A
926 * @param client
927 * (input) An ASL object of type ASL_TYPE_CLIENT.
81582353 928 * @param msg
f3df4c03 929 * (input) An asl_object_t of type ASL_TYPE_MSG (default attributes will be supplied if msg is NULL).
81582353
A
930 * @param level
931 * (input) Log level (ASL_LEVEL_DEBUG to ASL_LEVEL_EMERG)
932 * @param descriptor
933 * (input) An open file descriptor to read from
934 * @param fd_type
935 * (input) Either ASL_LOG_DESCRIPTOR_READ or ASL_LOG_DESCRIPTOR_WRITE
936 * @result Returns 0 for success, non-zero for failure
937 */
f3df4c03
A
938int asl_log_descriptor(asl_object_t asl, asl_object_t msg, int level, int descriptor, uint32_t fd_type) __OSX_AVAILABLE_STARTING(__MAC_10_8,__IPHONE_5_1);
939
940#pragma mark -
941
942
943/*!
944 * Creates a string representation of an ASL message.
945 *
946 * This utility creates a character string suitable for printing an ASL message.
947 * The returned string ends with a newline character. The caller is responsible
948 * for freeing the returned string.
949 * The message is formatted according to the specified format string. Timestamps
950 * are formatted accoring to the specified time format string. Special characters
951 * are enoded as specified by the text_encoding parameter.
952 *
953 * @param msg
954 * (input) An asl_object_t of type ASL_TYPE_MSG.
955 * @param fmt
956 * (input) A format specification string. See "Output file message and time formats"
957 * for standard formats. See the syslog(1) man page for more discussion on formats.
958 * @param fmt
959 * (input) A time format specification string. See "Output file message and time formats"
960 * for standard formats. See the syslog(1) man page for more discussion on time formats.
961 * @param text_encoding
962 * (input) Text encoding control (for special characters). See "Text Encoding Types".
963* @result Returns a character string, or NULL in case of a failure.
964 */
965char *asl_format(asl_object_t msg, const char *msg_fmt, const char *time_fmt, uint32_t text_encoding) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
966
967/*!
968 * Encodes a buffer with embedded nul characters into a nul terminated C string.
969 * The result must be freed by the caller.
970 *
971 * This utility is used to encode the value associated with ASL_KEY_AUX_DATA
972 * in an ASL_TYPE_MSG object. An ASL_KEY_AUX_DATA key/value pair is used to hold the
973 * data written to a file descriptor created by asl_create_auxiliary_file on iOS
974 * systems, where the ASL database is stored in memory.
975 *
976 * @param buf
977 * (input) Pointer to a data buffer.
978 * @param len
979 * (input) Length (in octets) of data buffer.
980 * @result Returns an encoded character string.
981 */
982char *asl_encode_buffer(const char *buf, size_t len) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
983
984/*!
985 * Decodes a C string previously created by asl_encode_buffer back into a buffer,
986 * possibly containing embedded nul characters. Allocates memory for the buffer
987 * and returns a pointer in an output parameter "buf".
988 * The caller is responsible for freeing the buffer.
989 *
990 * This routine should be used to decode the value associated with an
991 * ASL_KEY_AUX_DATA key in an ASL_TYPE_MSG object.
992 *
993 * @param in
994 * (input) Pointer to nul-terminated string created by asl_encode_buffer.
995 * @param buf
996 * (output) Pointer to a newly allocated data buffer.
997 * @param len
998 * (input) Length (in octets) of data buffer.
999 * @result Returns 0 on success, non-zero on failure.
1000 */
1001int asl_decode_buffer(const char *in, char **buf, size_t *len) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
1002
1003/*!
1004 * Iterate forward through messages in an asl_object_t.
1005 * The asl_object_t object maintains an internal position index for the underlying
1006 * collection of ASL messages, whether the asl_object_t represents a list, a
1007 * data file, or an ASL database. The position index is moved forward and the
1008 * "next" message is returned.
1009 *
1010 * @param obj
1011 * (input) An asl_object_t.
1012 * @result Returns the next message (an object of type ASL_TYPE_MSG or ASL_TYPE_QUERY) from the object,
1013 * which should be of type ASL_TYPE_CLIENT, ASL_TYPE_LIST, ASL_TYPE_STORE, or ASL_TYPE_FILE.
1014 * Returns NULL when there are no more messages or if obj is not a type that holds messages.
1015 */
1016asl_object_t asl_next(asl_object_t obj) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
1017
1018/*!
1019 * Iterate backwards through messages in an asl_object_t.
1020 * The asl_object_t object maintains an internal position index for the underlying
1021 * collection of ASL messages, whether the asl_object_t represents a list, a
1022 * data file, or an ASL database. The position index is moved backward and the
1023 * "previous" message is returned.
1024 *
1025 * @param data
1026 * (input) An asl_object_t.
1027 * @result Returns the previous message (an object of type ASL_TYPE_MSG or ASL_TYPE_QUERY) from the object,
1028 * which should be of type ASL_TYPE_CLIENT, ASL_TYPE_LIST, ASL_TYPE_STORE, or ASL_TYPE_FILE.
1029 * Returns NULL when there are no more messages or if obj is not a type that holds messages.
1030 */
1031asl_object_t asl_prev(asl_object_t obj) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
1032
1033/*!
1034 * Reset internal interation index in an asl_object_t.
1035 *
1036 * @param obj
1037 * (input) An object of type ASL_TYPE_CLIENT, ASL_TYPE_LIST, ASL_TYPE_STORE, or ASL_TYPE_FILE.
1038 * @param position
1039 * (input) Use 0 to position the internal interation index at the beginning of the asl_object_t object,
1040 * and SIZE_MAX to position it at the end. Other values of position may cause unpredictable behavior.
1041 */
1042void asl_reset_iteration(asl_object_t obj, size_t position) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
1043
1044/*!
1045 * Searches an asl_object_t.
1046 * The search is controlled by a list of queries, and returns a list with matching messages.
1047 * A message is returned if it matches any of the queries in the query list.
1048 * A NULL querylist matches anything.
1049 *
1050 * The caller may provide a starting ASL message ID, a direction, and a count.
1051 * A start ID value of 0 means that matching should commence at the beginning of the target obj.
1052 * A value of SIZE_MAX indicates that matching should commence at the end (most recent message)
1053 * in the target. If a non-zero count value is supplied, the routine will return when it has
1054 * found that many messages, or it has checked all messages. If a non-zero duration is supplied,
1055 * the routine will return after the specified time (in microseconds).
1056 * If both count and duration are non-zero, the routine will return when the desired number of
1057 * items has been matched or when the specified duration has been exceeded, whichever occurs first.
1058 * The search direction may be ASL_MATCH_DIRECTION_FORWARD or ASL_MATCH_DIRECTION_REVERSE.
1059 * The routine sets the value of the out parameter last to be an index of the last message
1060 * checked while matching. To fetch matching messages in batches (using a small count or
1061 * duration value), the start value for each iteration should be set to (last + 1) if searching
1062 * forward, or (last - 1)for reverse search.
1063 *
1064 * @param data
1065 * (input) An asl_object_t object.
1066 * @param querylist
1067 * (input) An asl_object_t object containing zero or more queries.
1068 * @param last
1069 * (output) An internal position index of the last message checked while matching in the asl_object_t object.
1070 * @param start
1071 * (input) A position index specifying where matching should commence.
1072 * @param count
1073 * (input) The maximum number of messages to be returned in the res output list (zero indicates no limit).
1074 * @param duration
1075 * (input) A limit (in microseconds) on the time to be spent searching for results. Zero indicates no time limit.
1076 * @param direction
1077 * (input) ASL_MATCH_DIRECTION_FORWARD or ASL_MATCH_DIRECTION_REVERSE.
1078 * @result Returns an ASL object containing messages matching the querylist, or NULL if there are no matches.
1079 */
1080asl_object_t asl_match(asl_object_t data, asl_object_t querylist, size_t *last, size_t start, size_t count, uint32_t duration, int32_t direction) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_7_0);
81582353
A
1081
1082__END_DECLS
1083
1084#endif /* __ASL_H__ */