Added get_request function to the frontend
[cascardo/atompub.git] / atom / frontend.c
index 778ffa1..e530aa8 100644 (file)
@@ -26,6 +26,8 @@
 struct _atom_frontend
 {
   void (*map_entries) (AtomCtx *, char **, AtomEntry **, size_t);
+  int  (*is_feed) (AtomCtx *, char *);
+  AtomRequest * (*get_request) (AtomCtx *);
 };
 
 AtomFrontend *
@@ -34,6 +36,8 @@ atom_frontend_new ()
   AtomFrontend *frontend;
   frontend = g_slice_new (AtomFrontend);
   frontend->map_entries = NULL;
+  frontend->is_feed = NULL;
+  frontend->get_request = NULL;
   return frontend;
 }
 
@@ -53,6 +57,20 @@ atom_frontend_map_entries_set (AtomFrontend *frontend,
   frontend->map_entries = map_entries;
 }
 
+void
+atom_frontend_is_feed_set (AtomFrontend *frontend,
+                         int is_feed (AtomCtx *, char *))
+{
+  frontend->is_feed = is_feed;
+}
+
+void
+atom_frontend_get_request_set (AtomFrontend *frontend,
+                              AtomRequest * get_request (AtomCtx *))
+{
+  frontend->get_request = get_request;
+}
+
 void
 atom_frontend_map_entries (AtomCtx *ctx, char ** reqs,
                           AtomEntry ** entries, size_t len)
@@ -64,3 +82,32 @@ atom_frontend_map_entries (AtomCtx *ctx, char ** reqs,
       frontend->map_entries (ctx, reqs, entries, len);
     }
 }
+
+int
+atom_is_feed (AtomCtx *ctx, char *req)
+{
+  AtomFrontend *frontend;
+  AtomError *aerr;
+  frontend = atom_frontend (ctx);
+  if (frontend && frontend->is_feed)
+    {
+      return frontend->is_feed (ctx, req);
+    }
+  /* If frontend cannot decide if a request is a feed, let's tell it's
+   * not. If the request mapping cannot be done, it will return a "Not
+   * Found" error anyway.
+   */
+  return 0;
+}
+
+AtomRequest *
+atom_get_request (AtomCtx *ctx)
+{
+  AtomFrontend *frontend;
+  frontend = atom_frontend (ctx);
+  if (frontend && frontend->get_request)
+    {
+      return frontend->get_request (ctx);
+    }
+  return NULL;
+}