Exemple #1
0
static int
cgi_send (fastphoto_t * params)
{
  header_last_modified (params->in.mtime);

  if (params->nochange) {
    cgi_send_photo (&params->in);
  } else if (params->out.name) {
    cgi_send_photo (&params->out);
  } else {
    header_content_length ((off_t)params->data_size);
    header_end();

    memory_send (params);
  }

  return 0;
}
Exemple #2
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;
}