2 * Copyright (C) 2007 Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #include <atompub/atom.h>
28 cgi_serve_request (AtomCtx *ctx)
30 char *method = getenv ("REQUEST_METHOD");
31 char *path = getenv ("PATH_INFO");
36 path = atom_config_get_str (ctx, "cgi", "index");
38 if (!strcmp (method, "GET"))
40 IRI *iri = iri_new ();
43 iri_set_path (iri, path);
44 atom = atom_retrieve_resource (ctx, iri);
48 char *header = "Content-type: application/atom+xml\n\n";
49 write (1, header, strlen (header));
50 write (1, atom_string (atom), atom_len (atom));
53 else if ((error = atom_error_get (ctx)) != NULL)
55 if (error->domain == G_FILE_ERROR &&
56 (error->code == G_FILE_ERROR_EXIST ||
57 error->code == G_FILE_ERROR_ACCES ||
58 error->code == G_FILE_ERROR_PERM))
59 fprintf (stdout, "Status: 403 %s\n\n", error->message);
60 else if (error->domain == G_FILE_ERROR &&
61 error->code == G_FILE_ERROR_NOENT)
62 fprintf (stdout, "Status: 404 %s\n\n", error->message);
64 fprintf (stdout, "Status: 500 %s\n\n", error->message);
69 fprintf (stdout, "Status: 501 Not Implemented\n\n");