xref: /aosp_15_r20/external/libcups/notifier/testnotify.c (revision 5e7646d21f1134fb0638875d812ef646c12ab91e)
1*5e7646d2SAndroid Build Coastguard Worker /*
2*5e7646d2SAndroid Build Coastguard Worker  * Test notifier for CUPS.
3*5e7646d2SAndroid Build Coastguard Worker  *
4*5e7646d2SAndroid Build Coastguard Worker  * Copyright 2007-2016 by Apple Inc.
5*5e7646d2SAndroid Build Coastguard Worker  * Copyright 1997-2005 by Easy Software Products.
6*5e7646d2SAndroid Build Coastguard Worker  *
7*5e7646d2SAndroid Build Coastguard Worker  * Licensed under Apache License v2.0.  See the file "LICENSE" for more information.
8*5e7646d2SAndroid Build Coastguard Worker  */
9*5e7646d2SAndroid Build Coastguard Worker 
10*5e7646d2SAndroid Build Coastguard Worker /*
11*5e7646d2SAndroid Build Coastguard Worker  * Include necessary headers...
12*5e7646d2SAndroid Build Coastguard Worker  */
13*5e7646d2SAndroid Build Coastguard Worker 
14*5e7646d2SAndroid Build Coastguard Worker #include <cups/cups-private.h>
15*5e7646d2SAndroid Build Coastguard Worker 
16*5e7646d2SAndroid Build Coastguard Worker 
17*5e7646d2SAndroid Build Coastguard Worker /*
18*5e7646d2SAndroid Build Coastguard Worker  * Local functions...
19*5e7646d2SAndroid Build Coastguard Worker  */
20*5e7646d2SAndroid Build Coastguard Worker 
21*5e7646d2SAndroid Build Coastguard Worker void	print_attributes(ipp_t *ipp, int indent);
22*5e7646d2SAndroid Build Coastguard Worker 
23*5e7646d2SAndroid Build Coastguard Worker 
24*5e7646d2SAndroid Build Coastguard Worker /*
25*5e7646d2SAndroid Build Coastguard Worker  * 'main()' - Main entry for the test notifier.
26*5e7646d2SAndroid Build Coastguard Worker  */
27*5e7646d2SAndroid Build Coastguard Worker 
28*5e7646d2SAndroid Build Coastguard Worker int					/* O - Exit status */
main(int argc,char * argv[])29*5e7646d2SAndroid Build Coastguard Worker main(int  argc,				/* I - Number of command-line arguments */
30*5e7646d2SAndroid Build Coastguard Worker      char *argv[])			/* I - Command-line arguments */
31*5e7646d2SAndroid Build Coastguard Worker {
32*5e7646d2SAndroid Build Coastguard Worker   int		i;			/* Looping var */
33*5e7646d2SAndroid Build Coastguard Worker   ipp_t		*event;			/* Event from scheduler */
34*5e7646d2SAndroid Build Coastguard Worker   ipp_state_t	state;			/* IPP event state */
35*5e7646d2SAndroid Build Coastguard Worker 
36*5e7646d2SAndroid Build Coastguard Worker 
37*5e7646d2SAndroid Build Coastguard Worker   setbuf(stderr, NULL);
38*5e7646d2SAndroid Build Coastguard Worker 
39*5e7646d2SAndroid Build Coastguard Worker   fprintf(stderr, "DEBUG: argc=%d\n", argc);
40*5e7646d2SAndroid Build Coastguard Worker   for (i = 0; i < argc; i ++)
41*5e7646d2SAndroid Build Coastguard Worker     fprintf(stderr, "DEBUG: argv[%d]=\"%s\"\n", i, argv[i]);
42*5e7646d2SAndroid Build Coastguard Worker   fprintf(stderr, "DEBUG: TMPDIR=\"%s\"\n", getenv("TMPDIR"));
43*5e7646d2SAndroid Build Coastguard Worker 
44*5e7646d2SAndroid Build Coastguard Worker   for (;;)
45*5e7646d2SAndroid Build Coastguard Worker   {
46*5e7646d2SAndroid Build Coastguard Worker     event = ippNew();
47*5e7646d2SAndroid Build Coastguard Worker     while ((state = ippReadFile(0, event)) != IPP_DATA)
48*5e7646d2SAndroid Build Coastguard Worker     {
49*5e7646d2SAndroid Build Coastguard Worker       if (state <= IPP_IDLE)
50*5e7646d2SAndroid Build Coastguard Worker         break;
51*5e7646d2SAndroid Build Coastguard Worker     }
52*5e7646d2SAndroid Build Coastguard Worker 
53*5e7646d2SAndroid Build Coastguard Worker     if (state == IPP_ERROR)
54*5e7646d2SAndroid Build Coastguard Worker       fputs("DEBUG: ippReadFile() returned IPP_ERROR!\n", stderr);
55*5e7646d2SAndroid Build Coastguard Worker 
56*5e7646d2SAndroid Build Coastguard Worker     if (state <= IPP_IDLE)
57*5e7646d2SAndroid Build Coastguard Worker     {
58*5e7646d2SAndroid Build Coastguard Worker       ippDelete(event);
59*5e7646d2SAndroid Build Coastguard Worker       return (0);
60*5e7646d2SAndroid Build Coastguard Worker     }
61*5e7646d2SAndroid Build Coastguard Worker 
62*5e7646d2SAndroid Build Coastguard Worker     print_attributes(event, 4);
63*5e7646d2SAndroid Build Coastguard Worker     ippDelete(event);
64*5e7646d2SAndroid Build Coastguard Worker 
65*5e7646d2SAndroid Build Coastguard Worker    /*
66*5e7646d2SAndroid Build Coastguard Worker     * If the recipient URI is "testnotify://nowait", then we exit after each
67*5e7646d2SAndroid Build Coastguard Worker     * event...
68*5e7646d2SAndroid Build Coastguard Worker     */
69*5e7646d2SAndroid Build Coastguard Worker 
70*5e7646d2SAndroid Build Coastguard Worker     if (!strcmp(argv[1], "testnotify://nowait"))
71*5e7646d2SAndroid Build Coastguard Worker       return (0);
72*5e7646d2SAndroid Build Coastguard Worker   }
73*5e7646d2SAndroid Build Coastguard Worker }
74*5e7646d2SAndroid Build Coastguard Worker 
75*5e7646d2SAndroid Build Coastguard Worker 
76*5e7646d2SAndroid Build Coastguard Worker /*
77*5e7646d2SAndroid Build Coastguard Worker  * 'print_attributes()' - Print the attributes in a request...
78*5e7646d2SAndroid Build Coastguard Worker  */
79*5e7646d2SAndroid Build Coastguard Worker 
80*5e7646d2SAndroid Build Coastguard Worker void
print_attributes(ipp_t * ipp,int indent)81*5e7646d2SAndroid Build Coastguard Worker print_attributes(ipp_t *ipp,		/* I - IPP request */
82*5e7646d2SAndroid Build Coastguard Worker                  int   indent)		/* I - Indentation */
83*5e7646d2SAndroid Build Coastguard Worker {
84*5e7646d2SAndroid Build Coastguard Worker   ipp_tag_t		group;		/* Current group */
85*5e7646d2SAndroid Build Coastguard Worker   ipp_attribute_t	*attr;		/* Current attribute */
86*5e7646d2SAndroid Build Coastguard Worker   char			buffer[1024];	/* Value buffer */
87*5e7646d2SAndroid Build Coastguard Worker 
88*5e7646d2SAndroid Build Coastguard Worker 
89*5e7646d2SAndroid Build Coastguard Worker   for (group = IPP_TAG_ZERO, attr = ipp->attrs; attr; attr = attr->next)
90*5e7646d2SAndroid Build Coastguard Worker   {
91*5e7646d2SAndroid Build Coastguard Worker     if ((attr->group_tag == IPP_TAG_ZERO && indent <= 8) || !attr->name)
92*5e7646d2SAndroid Build Coastguard Worker     {
93*5e7646d2SAndroid Build Coastguard Worker       group = IPP_TAG_ZERO;
94*5e7646d2SAndroid Build Coastguard Worker       fputc('\n', stderr);
95*5e7646d2SAndroid Build Coastguard Worker       continue;
96*5e7646d2SAndroid Build Coastguard Worker     }
97*5e7646d2SAndroid Build Coastguard Worker 
98*5e7646d2SAndroid Build Coastguard Worker     if (group != attr->group_tag)
99*5e7646d2SAndroid Build Coastguard Worker     {
100*5e7646d2SAndroid Build Coastguard Worker       group = attr->group_tag;
101*5e7646d2SAndroid Build Coastguard Worker 
102*5e7646d2SAndroid Build Coastguard Worker       fprintf(stderr, "DEBUG: %*s%s:\n\n", indent - 4, "", ippTagString(group));
103*5e7646d2SAndroid Build Coastguard Worker     }
104*5e7646d2SAndroid Build Coastguard Worker 
105*5e7646d2SAndroid Build Coastguard Worker     ippAttributeString(attr, buffer, sizeof(buffer));
106*5e7646d2SAndroid Build Coastguard Worker 
107*5e7646d2SAndroid Build Coastguard Worker     fprintf(stderr, "DEBUG: %*s%s (%s%s) %s\n", indent, "", attr->name,
108*5e7646d2SAndroid Build Coastguard Worker             attr->num_values > 1 ? "1setOf " : "",
109*5e7646d2SAndroid Build Coastguard Worker 	    ippTagString(attr->value_tag), buffer);
110*5e7646d2SAndroid Build Coastguard Worker   }
111*5e7646d2SAndroid Build Coastguard Worker }
112