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 if ((path = atom_config_get_str (ctx, "cgi", "index")) == NULL)
38 /* We do not want to disclose our configuration is empty.
39 * The requester cannot distinguish an empty configuration
40 * from a non-existent index.
42 fprintf (stdout, "Status: 404 Not Found\n\n");
46 if (!strcmp (method, "GET"))
51 id = atom_id_new (path);
52 atom = atom_retrieve_resource (ctx, id);
58 char *header = "Content-type: application/atom+xml\n\n";
59 write (1, header, strlen (header));
60 atom_resource_string (atom, &str, &len);
63 atom_resource_delete (atom);
65 else if ((error = atom_error_get (ctx)) != NULL)
67 int code = atom_error_code (error);
68 char *message = atom_error_message (error);
69 fprintf (stdout, "Status: %d %s\n\n%s\n", code, message, message);
73 fprintf (stdout, "Status: 500 Server error\n\nServer error\n");
78 fprintf (stdout, "Status: 501 Not Implemented\n\n");
85 AtomFrontend *frontend;
86 frontend = atom_frontend_new ();
87 atom_frontend_map_entries_set (frontend, atom_map_frontend_requests);