1287111Smarcel/*
2287111Smarcel * Copyright (c) 2014, Juniper Networks, Inc.
3287111Smarcel * All rights reserved.
4287111Smarcel * This SOFTWARE is licensed under the LICENSE provided in the
5287111Smarcel * ../Copyright file. By downloading, installing, copying, or otherwise
6287111Smarcel * using the SOFTWARE, you agree to be bound by the terms of that
7287111Smarcel * LICENSE.
8287111Smarcel * Phil Shafer, July 2014
9287111Smarcel */
10287111Smarcel
11287111Smarcel#include <stdio.h>
12287111Smarcel#include <stdlib.h>
13287111Smarcel#include <string.h>
14287111Smarcel#include <unistd.h>
15287111Smarcel#include <errno.h>
16287111Smarcel#include <time.h>
17287111Smarcel#include <ctype.h>
18287111Smarcel#include <syslog.h>
19287111Smarcel
20287111Smarcel#include "xo.h"
21287111Smarcel
22287111Smarcelvoid
23287111Smarceltest_syslog_open (void)
24287111Smarcel{
25287111Smarcel    printf("syslog open\n");
26287111Smarcel}
27287111Smarcel
28287111Smarcelvoid
29287111Smarceltest_syslog_close (void)
30287111Smarcel{
31287111Smarcel    printf("syslog close\n");
32287111Smarcel}
33287111Smarcel
34287111Smarcelvoid
35287111Smarceltest_syslog_send (const char *full_msg, const char *v0_hdr,
36287111Smarcel		  const char *text_only)
37287111Smarcel{
38287111Smarcel    printf("{{%s}}\n{{%s}}\n{{%s}}\n\n", full_msg, v0_hdr, text_only);
39287111Smarcel}
40287111Smarcel
41287111Smarcelint
42287111Smarcelmain (int argc, char **argv)
43287111Smarcel{
44287111Smarcel    int unit_test = 1;
45287111Smarcel    int fire = 0;
46287111Smarcel    const char *tzone = "EST";
47287111Smarcel
48287111Smarcel    argc = xo_parse_args(argc, argv);
49287111Smarcel    if (argc < 0)
50287111Smarcel	return 1;
51287111Smarcel
52287111Smarcel    for (argc = 1; argv[argc]; argc++) {
53287111Smarcel	if (strcmp(argv[argc], "full") == 0)
54287111Smarcel	    unit_test = 0;
55287111Smarcel	else if (strcmp(argv[argc], "fire") == 0)
56287111Smarcel	    fire = 1;
57287111Smarcel	else if (strcmp(argv[argc], "tz") == 0)
58287111Smarcel	    tzone = argv[++argc];
59287111Smarcel    }
60287111Smarcel
61287111Smarcel    setenv("TZ", tzone, 1);
62287111Smarcel    tzset();
63287111Smarcel
64287111Smarcel    if (!fire) {
65287111Smarcel	xo_set_syslog_handler(test_syslog_open, test_syslog_send,
66287111Smarcel			      test_syslog_close);
67287111Smarcel    }
68287111Smarcel
69287111Smarcel    if (unit_test) {
70287111Smarcel	xo_set_unit_test_mode(1);
71287111Smarcel	xo_open_log("test-program", LOG_PERROR, 0);
72287111Smarcel    }
73287111Smarcel
74287111Smarcel    xo_set_version("3.1.4");
75287111Smarcel    xo_set_syslog_enterprise_id(42); /* SunOs */
76287111Smarcel
77287111Smarcel    xo_open_container_h(NULL, "top");
78287111Smarcel
79287111Smarcel    xo_syslog(LOG_INFO | LOG_KERN, "animal-status",
80287111Smarcel	      "The {:animal} is {:state}", "snake", "loose");
81287111Smarcel    xo_syslog(LOG_INFO | LOG_MAIL, "animal-consumed",
82287111Smarcel	      "My {:animal} ate your {:pet}", "snake", "hamster");
83287111Smarcel    xo_syslog(LOG_NOTICE | LOG_DAEMON, "animal-talk",
84287111Smarcel	      "{:count/%d} {:animal} said {:quote}", 1, "owl", "\"e=m\\c[2]\"");
85287111Smarcel
86287111Smarcel    /*
87287111Smarcel      <165>1 2003-10-11T22:14:15.003Z mymachine.example.com
88287111Smarcel           evntslog - ID47 [exampleSDID@32473 iut="3" eventSource=
89287111Smarcel           "Application" eventID="1011"] BOMAn application
90287111Smarcel           event log entry...
91287111Smarcel
92287111Smarcel   This example is modeled after Example 1.  However, this time it
93287111Smarcel   contains STRUCTURED-DATA, a single element with the value
94287111Smarcel   "[exampleSDID@32473 iut="3" eventSource="Application"
95287111Smarcel   eventID="1011"]".  The MSG itself is "An application event log
96287111Smarcel   entry..."  The BOM at the beginning of MSG indicates UTF-8 encoding.
97287111Smarcel    */
98287111Smarcel
99287111Smarcel    xo_set_syslog_enterprise_id(32473);
100287111Smarcel    xo_syslog(LOG_LOCAL4 | LOG_NOTICE, "ID47",
101287111Smarcel	      "{e:iut/%u}An {:event-source} {:event-id/%u} log entry",
102287111Smarcel	      3, "application", 1011);
103287111Smarcel
104287111Smarcel    xo_close_container_h(NULL, "top");
105287111Smarcel
106287111Smarcel    xo_finish();
107287111Smarcel
108287111Smarcel    return 0;
109287111Smarcel}
110