-
- the_len = WC->burst_len;
- the_data = WC->burst;
-
- WC->burst_len = 0;
- WC->burst_alloc = 0;
- WC->burst = NULL;
-
-#ifdef HAVE_ZLIB
- /* Perform gzip compression, if enabled and supported by client */
- if (WC->gzip_ok) {
- char *compressed_data = NULL;
- size_t compressed_len;
-
- compressed_len = ((the_len * 101) / 100) + 100;
- compressed_data = malloc(compressed_len);
-
- if (compress_gzip((Bytef *) compressed_data,
- &compressed_len,
- (Bytef *) the_data,
- (uLongf) the_len, Z_BEST_SPEED) == Z_OK) {
- wprintf("Content-encoding: gzip\r\n");
- free(the_data);
- the_data = compressed_data;
- the_len = compressed_len;
- } else {
- free(compressed_data);
- }
- }
-#endif /* HAVE_ZLIB */
-
- wprintf("Content-length: %d\r\n\r\n", the_len);
- client_write(the_data, the_len);
- free(the_data);
- return;
-}
-
-
-
-/*
- * \brief Read data from the client socket with default timeout.
- * (This is implemented in terms of client_read_to() and could be
- * justifiably moved out of sysdep.c)
- * \param sock the socket fd to read from
- * \param buf the buffer to write to
- * \param bytes Number of bytes to read
- */
-int client_read(int sock, char *buf, int bytes)
-{
- return (client_read_to(sock, buf, bytes, SLEEPING));
-}
-
-
-/*
- * \brief Get a LF-terminated line of text from the client.
- * (This is implemented in terms of client_read() and could be
- * justifiably moved out of sysdep.c)
- * \param sock socket fd to get client line from
- * \param buf buffer to write read data to
- * \param bufsiz how many bytes to read
- * \return number of bytes read???
- */
-int client_getln(int sock, char *buf, int bufsiz)
-{
- int i, retval;
-
- /* Read one character at a time.*/
- for (i = 0;; i++) {
- retval = client_read(sock, &buf[i], 1);
- if (retval != 1 || buf[i] == '\n' || i == (bufsiz-1))
- break;
- if ( (!isspace(buf[i])) && (!isprint(buf[i])) ) {
- /* Non printable character recieved from client */
- return(-1);
- }
- }
-
- /* If we got a long line, discard characters until the newline. */
- if (i == (bufsiz-1))
- while (buf[i] != '\n' && retval == 1)
- retval = client_read(sock, &buf[i], 1);
-
- /*
- * Strip any trailing non-printable characters.
- */
- buf[i] = 0;
- while ((i > 0) && (!isprint(buf[i - 1]))) {
- buf[--i] = 0;
- }
- return (retval);
-}
-
-/*
- * \brief shut us down the regular way.
- * param signum the signal we want to forward
- */
-pid_t current_child;
-void graceful_shutdown_watcher(int signum) {
- lprintf (1, "bye; shutting down watcher.");
- kill(current_child, signum);
- if (signum != SIGHUP)
- exit(0);
-}
-
-/*
- * \brief shut us down the regular way.
- * param signum the signal we want to forward
- */
-pid_t current_child;
-void graceful_shutdown(int signum) {
-// kill(current_child, signum);
- char wd[SIZ];
- FILE *FD;
- int fd;
- getcwd(wd, SIZ);
- lprintf (1, "bye going down gracefull.[%d][%s]\n", signum, wd);
- fd = msock;
- msock = -1;
- time_to_die = 1;
- FD=fdopen(fd, "a+");
- fflush (FD);
- fclose (FD);
- close(fd);
-}
-
-
-/*
- * \brief Start running as a daemon.
- *
- * param do_close_stdio Only close stdio if set.
- */
-
-/*
- * Start running as a daemon.
- */
-void start_daemon(char *pid_file)
-{
- int status = 0;
- pid_t child = 0;
- FILE *fp;
- int do_restart = 0;
-
- current_child = 0;
-
- /* Close stdin/stdout/stderr and replace them with /dev/null.
- * We don't just call close() because we don't want these fd's
- * to be reused for other files.
- */
- chdir("/");
-
- signal(SIGHUP, SIG_IGN);
- signal(SIGINT, SIG_IGN);
- signal(SIGQUIT, SIG_IGN);
-
- child = fork();
- if (child != 0) {
- exit(0);