static int cgi_send (fastphoto_t * params) { header_last_modified (params->in.mtime); if (params->nochange) { cgi_send_photo (¶ms->in); } else if (params->out.name) { cgi_send_photo (¶ms->out); } else { header_content_length ((off_t)params->data_size); header_end(); memory_send (params); } return 0; }
int cgi_main (OCState * state) { int err = 0; char * path_info; char * path_translated; char * query_string; char * if_modified_since; time_t since_time, last_time; struct stat statbuf; int built_path_translated=0; httpdate_init (); path_info = getenv ("PATH_INFO"); path_translated = getenv ("PATH_TRANSLATED"); query_string = getenv ("QUERY_STRING"); if_modified_since = getenv ("HTTP_IF_MODIFIED_SINCE"); memset (state, 0, sizeof(*state)); state->end = -1.0; state->do_skeleton = 1; if (path_translated == NULL) { if (path_info == NULL) return path_undefined ("PATH_TRANSLATED and PATH_INFO"); path_translated = prepend_document_root (path_info); if (path_translated == NULL) return path_undefined ("PATH_TRANSLATED"); built_path_translated = 1; } state->infilename = path_translated; /* Get Last-Modified time */ if (stat (path_translated, &statbuf) == -1) { switch (errno) { case ENOENT: return 0; default: fprintf (stderr, "oggz-chop: %s: %s\n", path_translated, strerror(errno)); return -1; } } last_time = statbuf.st_mtime; if (if_modified_since != NULL) { int len; fprintf (stderr, "If-Modified-Since: %s\n", if_modified_since); len = strlen (if_modified_since) + 1; since_time = httpdate_parse (if_modified_since, len); if (last_time <= since_time) { header_not_modified(); header_end(); return 1; } } header_content_type_ogg (); header_last_modified (last_time); header_accept_timeuri_ogg (); parse_query (state, query_string); header_end(); err = 0; err = chop (state); if (built_path_translated && path_translated != NULL) free (path_translated); return err; }