+static void
+atom_post (AtomCtx *ctx, AtomRequest *request)
+{
+ AtomError *error;
+ /* Publish requests go to the same IRI as the feed IRI */
+ if (!atom_is_feed (ctx, atom_request_request (request)))
+ {
+ error = atom_error_new ();
+ atom_error_code_set (error, 400);
+ atom_error_message_set (error, "Bad Request");
+ atom_error_set (ctx, error);
+ }
+ else
+ {
+ char *content = NULL;
+ size_t len = 0;
+ AtomEntry *entry;
+ atom_request_content (request, &content, &len);
+ /* TODO: If the content is not an Atom Entry, consider it a media
+ * publish request */
+ entry = atom_entry_new_data_len (content, len);
+ if (entry == NULL)
+ {
+ error = atom_error_new ();
+ atom_error_code_set (error, 400);
+ atom_error_message_set (error, "Bad Request");
+ atom_error_set (ctx, error);
+ }
+ else
+ {
+ atom_publish_entry (ctx, atom_request_request (request), entry);
+ /* TODO: Entry should be the backend representation and more
+ * information should be given to the frontend */
+ if (!atom_error_get (ctx))
+ atom_handle_publish (ctx, entry);
+ }
+ }
+}
+