1/*
2 * "$Id: testnotify.c 11093 2013-07-03 20:48:42Z msweet $"
3 *
4 *   Test notifier for CUPS.
5 *
6 *   Copyright 2007-2011 by Apple Inc.
7 *   Copyright 1997-2005 by Easy Software Products.
8 *
9 *   These coded instructions, statements, and computer programs are the
10 *   property of Apple Inc. and are protected by Federal copyright
11 *   law.  Distribution and use rights are outlined in the file "LICENSE.txt"
12 *   which should have been included with this file.  If this file is
13 *   file is missing or damaged, see the license at "http://www.cups.org/".
14 *
15 * Contents:
16 *
17 *   main()             - Main entry for the test notifier.
18 *   print_attributes() - Print the attributes in a request...
19 */
20
21/*
22 * Include necessary headers...
23 */
24
25#include <cups/cups-private.h>
26
27
28/*
29 * Local functions...
30 */
31
32void	print_attributes(ipp_t *ipp, int indent);
33
34
35/*
36 * 'main()' - Main entry for the test notifier.
37 */
38
39int					/* O - Exit status */
40main(int  argc,				/* I - Number of command-line arguments */
41     char *argv[])			/* I - Command-line arguments */
42{
43  int		i;			/* Looping var */
44  ipp_t		*event;			/* Event from scheduler */
45  ipp_state_t	state;			/* IPP event state */
46
47
48  setbuf(stderr, NULL);
49
50  fprintf(stderr, "DEBUG: argc=%d\n", argc);
51  for (i = 0; i < argc; i ++)
52    fprintf(stderr, "DEBUG: argv[%d]=\"%s\"\n", i, argv[i]);
53  fprintf(stderr, "DEBUG: TMPDIR=\"%s\"\n", getenv("TMPDIR"));
54
55  for (;;)
56  {
57    event = ippNew();
58    while ((state = ippReadFile(0, event)) != IPP_DATA)
59    {
60      if (state <= IPP_IDLE)
61        break;
62    }
63
64    if (state == IPP_ERROR)
65      fputs("DEBUG: ippReadFile() returned IPP_ERROR!\n", stderr);
66
67    if (state <= IPP_IDLE)
68    {
69      ippDelete(event);
70      return (0);
71    }
72
73    print_attributes(event, 4);
74    ippDelete(event);
75
76   /*
77    * If the recipient URI is "testnotify://nowait", then we exit after each
78    * event...
79    */
80
81    if (!strcmp(argv[1], "testnotify://nowait"))
82      return (0);
83  }
84}
85
86
87/*
88 * 'print_attributes()' - Print the attributes in a request...
89 */
90
91void
92print_attributes(ipp_t *ipp,		/* I - IPP request */
93                 int   indent)		/* I - Indentation */
94{
95  ipp_tag_t		group;		/* Current group */
96  ipp_attribute_t	*attr;		/* Current attribute */
97  char			buffer[1024];	/* Value buffer */
98
99
100  for (group = IPP_TAG_ZERO, attr = ipp->attrs; attr; attr = attr->next)
101  {
102    if ((attr->group_tag == IPP_TAG_ZERO && indent <= 8) || !attr->name)
103    {
104      group = IPP_TAG_ZERO;
105      fputc('\n', stderr);
106      continue;
107    }
108
109    if (group != attr->group_tag)
110    {
111      group = attr->group_tag;
112
113      fprintf(stderr, "DEBUG: %*s%s:\n\n", indent - 4, "", ippTagString(group));
114    }
115
116    ippAttributeString(attr, buffer, sizeof(buffer));
117
118    fprintf(stderr, "DEBUG: %*s%s (%s%s) %s", indent, "", attr->name,
119            attr->num_values > 1 ? "1setOf " : "",
120	    ippTagString(attr->value_tag), buffer);
121  }
122}
123
124
125/*
126 * End of "$Id: testnotify.c 11093 2013-07-03 20:48:42Z msweet $".
127 */
128