Revert manifest to default one
[external/cups.git] / scheduler / server.c
1 /*
2  * "$Id: server.c 9632 2011-03-21 02:12:14Z mike $"
3  *
4  *   Server start/stop routines for the CUPS scheduler.
5  *
6  *   Copyright 2007-2010 by Apple Inc.
7  *   Copyright 1997-2006 by Easy Software Products, all rights reserved.
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  *   cupsdStartServer() - Start the server.
18  *   cupsdStopServer()  - Stop the server.
19  */
20
21 /*
22  * Include necessary headers...
23  */
24
25 #include <cups/http-private.h>
26 #include "cupsd.h"
27 #include <grp.h>
28 #ifdef HAVE_NOTIFY_H
29 #  include <notify.h>
30 #endif /* HAVE_NOTIFY_H */
31
32
33 /*
34  * Local globals...
35  */
36
37 static int              started = 0;    /* Did we start the server already? */
38
39
40 /*
41  * 'cupsdStartServer()' - Start the server.
42  */
43
44 void
45 cupsdStartServer(void)
46 {
47  /*
48   * Create the default security profile...
49   */
50
51   DefaultProfile = cupsdCreateProfile(0);
52
53  /*
54   * Startup all the networking stuff...
55   */
56
57   cupsdStartListening();
58   cupsdStartBrowsing();
59   cupsdStartPolling();
60
61  /*
62   * Create a pipe for CGI processes...
63   */
64
65   if (cupsdOpenPipe(CGIPipes))
66     cupsdLogMessage(CUPSD_LOG_ERROR,
67                     "cupsdStartServer: Unable to create pipes for CGI status!");
68   else
69   {
70     CGIStatusBuffer = cupsdStatBufNew(CGIPipes[0], "[CGI]");
71
72     cupsdAddSelect(CGIPipes[0], (cupsd_selfunc_t)cupsdUpdateCGI, NULL, NULL);
73   }
74
75  /*
76   * Mark that the server has started and printers and jobs may be changed...
77   */
78
79   LastEvent = CUPSD_EVENT_PRINTER_CHANGED | CUPSD_EVENT_JOB_STATE_CHANGED |
80               CUPSD_EVENT_SERVER_STARTED;
81   started   = 1;
82
83   cupsdSetBusyState();
84 }
85
86
87 /*
88  * 'cupsdStopServer()' - Stop the server.
89  */
90
91 void
92 cupsdStopServer(void)
93 {
94   if (!started)
95     return;
96
97  /*
98   * Close all network clients and stop all jobs...
99   */
100
101   cupsdCloseAllClients();
102   cupsdStopListening();
103   cupsdStopPolling();
104   cupsdStopBrowsing();
105   cupsdStopAllNotifiers();
106   cupsdDeleteAllCerts();
107
108   if (Clients)
109   {
110     cupsArrayDelete(Clients);
111     Clients = NULL;
112   }
113
114  /*
115   * Close the pipe for CGI processes...
116   */
117
118   if (CGIPipes[0] >= 0)
119   {
120     cupsdRemoveSelect(CGIPipes[0]);
121
122     cupsdStatBufDelete(CGIStatusBuffer);
123     close(CGIPipes[1]);
124
125     CGIPipes[0] = -1;
126     CGIPipes[1] = -1;
127   }
128
129 #ifdef HAVE_NOTIFY_POST
130  /*
131   * Send one last notification as the server shuts down.
132   */
133
134   cupsdLogMessage(CUPSD_LOG_DEBUG2,
135                   "notify_post(\"com.apple.printerListChange\") last");
136   notify_post("com.apple.printerListChange");
137 #endif /* HAVE_NOTIFY_POST */
138
139  /*
140   * Close all log files...
141   */
142
143   if (AccessFile != NULL)
144   {
145     cupsFileClose(AccessFile);
146
147     AccessFile = NULL;
148   }
149
150   if (ErrorFile != NULL)
151   {
152     cupsFileClose(ErrorFile);
153
154     ErrorFile = NULL;
155   }
156
157   if (PageFile != NULL)
158   {
159     cupsFileClose(PageFile);
160
161     PageFile = NULL;
162   }
163
164  /*
165   * Delete the default security profile...
166   */
167
168   cupsdDestroyProfile(DefaultProfile);
169   DefaultProfile = NULL;
170
171  /*
172   * Write out any dirty files...
173   */
174
175   if (DirtyFiles)
176     cupsdCleanDirty();
177
178   started = 0;
179 }
180
181
182 /*
183  * End of "$Id: server.c 9632 2011-03-21 02:12:14Z mike $".
184  */