2 * "$Id: server.c 6123 2006-11-21 15:36:04Z mike $"
4 * Server start/stop routines for the Common UNIX Printing System (CUPS).
6 * Copyright 1997-2006 by Easy Software Products, all rights reserved.
8 * These coded instructions, statements, and computer programs are the
9 * property of Easy Software Products and are protected by Federal
10 * copyright law. Distribution and use rights are outlined in the file
11 * "LICENSE.txt" which should have been included with this file. If this
12 * file is missing or damaged please contact Easy Software Products
15 * Attn: CUPS Licensing Information
16 * Easy Software Products
17 * 44141 Airport View Drive, Suite 204
18 * Hollywood, Maryland 20636 USA
20 * Voice: (301) 373-9600
21 * EMail: cups-info@cups.org
22 * WWW: http://www.cups.org
26 * cupsdStartServer() - Start the server.
27 * cupsdStopServer() - Stop the server.
31 * Include necessary headers...
34 #include <cups/http-private.h>
39 #endif /* HAVE_NOTIFY_H */
46 static int started
= 0;
50 * 'cupsdStartServer()' - Start the server.
54 cupsdStartServer(void)
57 int i
; /* Looping var */
58 struct timeval curtime
; /* Current time in microseconds */
59 unsigned char data
[1024]; /* Seed data */
60 #endif /* HAVE_LIBSSL */
65 * Initialize the encryption libraries...
69 SSL_load_error_strings();
72 * Using the current time is a dubious random seed, but on some systems
73 * it is the best we can do (on others, this seed isn't even used...)
76 gettimeofday(&curtime
, NULL
);
77 srand(curtime
.tv_sec
+ curtime
.tv_usec
);
79 for (i
= 0; i
< sizeof(data
); i
++)
80 data
[i
] = rand(); /* Yes, this is a poor source of random data... */
82 RAND_seed(&data
, sizeof(data
));
83 #elif defined(HAVE_GNUTLS)
85 * Initialize the encryption libraries...
89 #endif /* HAVE_LIBSSL */
92 * Startup all the networking stuff...
95 cupsdStartListening();
100 * Create a pipe for CGI processes...
103 if (cupsdOpenPipe(CGIPipes
))
104 cupsdLogMessage(CUPSD_LOG_ERROR
,
105 "cupsdStartServer: Unable to create pipes for CGI status!");
108 CGIStatusBuffer
= cupsdStatBufNew(CGIPipes
[0], "[CGI]");
110 cupsdAddSelect(CGIPipes
[0], (cupsd_selfunc_t
)cupsdUpdateCGI
, NULL
, NULL
);
114 * Mark that the server has started and printers and jobs may be changed...
117 LastEvent
= CUPSD_EVENT_PRINTER_CHANGED
| CUPSD_EVENT_JOB_STATE_CHANGED
|
118 CUPSD_EVENT_SERVER_STARTED
;
125 * 'cupsdStopServer()' - Stop the server.
129 cupsdStopServer(void)
135 * Close all network clients and stop all jobs...
138 cupsdCloseAllClients();
139 cupsdStopListening();
142 cupsdStopAllNotifiers();
143 cupsdSaveRemoteCache();
144 cupsdDeleteAllCerts();
148 cupsArrayDelete(Clients
);
153 * Close the pipe for CGI processes...
156 if (CGIPipes
[0] >= 0)
158 cupsdRemoveSelect(CGIPipes
[0]);
160 cupsdStatBufDelete(CGIStatusBuffer
);
168 * Close all log files...
171 if (AccessFile
!= NULL
)
173 cupsFileClose(AccessFile
);
178 if (ErrorFile
!= NULL
)
180 cupsFileClose(ErrorFile
);
185 if (PageFile
!= NULL
)
187 cupsFileClose(PageFile
);
192 #ifdef HAVE_NOTIFY_POST
194 * Send one last notification as the server shuts down.
197 cupsdLogMessage(CUPSD_LOG_DEBUG
,
198 "notify_post(\"com.apple.printerListChange\") last");
199 notify_post("com.apple.printerListChange");
200 #endif /* HAVE_NOTIFY_POST */
207 * End of "$Id: server.c 6123 2006-11-21 15:36:04Z mike $".