Prepare migration to binding v2
[src/app-framework-binder.git] / include / afb / afb-binding.h
index ac63d36..8df08de 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016 "IoT.bzh"
+ * Copyright (C) 2016, 2017 "IoT.bzh"
  * Author: José Bollo <jose.bollo@iot.bzh>
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  *
  * A binding is a shared library. This shared library must have at least one
  * exported symbol for being registered in afb-daemon.
- * For the current version of afb-daemon, the function exported MUST be named
  *
- *                  afbBindingV1Register
  */
 
 /*
  * Some function of the library are exported to afb-daemon.
  */
 
-#include <afb/afb-event-itf.h>
-#include <afb/afb-req-itf.h>
+#include "afb-event-itf.h"
+#include "afb-req-itf.h"
+#include "afb-binding-v1.h"
 
 /*
  * Definition of the type+versions of the binding.
@@ -50,69 +49,6 @@ enum  afb_binding_type
        AFB_BINDING_VERSION_1 = 123456789        /* version 1 */
 };
 
-/*
- * Enum for Session/Token/Assurance middleware.
- * This enumeration is valid for bindings of type 1
- */
-enum afb_session_v1
-{
-       AFB_SESSION_NONE = 0,   /* nothing required */
-       AFB_SESSION_CREATE = 1, /* Obsolete */
-       AFB_SESSION_CLOSE = 2,  /* After token authentification, closes the session at end */
-       AFB_SESSION_RENEW = 4,  /* After token authentification, refreshes the token at end */
-       AFB_SESSION_CHECK = 8,  /* Requires token authentification */
-
-       AFB_SESSION_LOA_GE = 16, /* check that the LOA is greater or equal to the given value */
-       AFB_SESSION_LOA_LE = 32, /* check that the LOA is lesser or equal to the given value */
-       AFB_SESSION_LOA_EQ = 48, /* check that the LOA is equal to the given value */
-
-       AFB_SESSION_LOA_SHIFT = 6, /* shift for LOA */
-       AFB_SESSION_LOA_MASK = 7,  /* mask for LOA */
-
-       AFB_SESSION_LOA_0 = 0,   /* value for LOA of 0 */
-       AFB_SESSION_LOA_1 = 64,  /* value for LOA of 1 */
-       AFB_SESSION_LOA_2 = 128, /* value for LOA of 2 */
-       AFB_SESSION_LOA_3 = 192, /* value for LOA of 3 */
-       AFB_SESSION_LOA_4 = 256, /* value for LOA of 4 */
-
-       AFB_SESSION_LOA_LE_0 = AFB_SESSION_LOA_LE | AFB_SESSION_LOA_0, /* check LOA <= 0 */
-       AFB_SESSION_LOA_LE_1 = AFB_SESSION_LOA_LE | AFB_SESSION_LOA_1, /* check LOA <= 1 */
-       AFB_SESSION_LOA_LE_2 = AFB_SESSION_LOA_LE | AFB_SESSION_LOA_2, /* check LOA <= 2 */
-       AFB_SESSION_LOA_LE_3 = AFB_SESSION_LOA_LE | AFB_SESSION_LOA_3, /* check LOA <= 3 */
-
-       AFB_SESSION_LOA_GE_0 = AFB_SESSION_LOA_GE | AFB_SESSION_LOA_0, /* check LOA >= 0 */
-       AFB_SESSION_LOA_GE_1 = AFB_SESSION_LOA_GE | AFB_SESSION_LOA_1, /* check LOA >= 1 */
-       AFB_SESSION_LOA_GE_2 = AFB_SESSION_LOA_GE | AFB_SESSION_LOA_2, /* check LOA >= 2 */
-       AFB_SESSION_LOA_GE_3 = AFB_SESSION_LOA_GE | AFB_SESSION_LOA_3, /* check LOA >= 3 */
-
-       AFB_SESSION_LOA_EQ_0 = AFB_SESSION_LOA_EQ | AFB_SESSION_LOA_0, /* check LOA == 0 */
-       AFB_SESSION_LOA_EQ_1 = AFB_SESSION_LOA_EQ | AFB_SESSION_LOA_1, /* check LOA == 1 */
-       AFB_SESSION_LOA_EQ_2 = AFB_SESSION_LOA_EQ | AFB_SESSION_LOA_2, /* check LOA == 2 */
-       AFB_SESSION_LOA_EQ_3 = AFB_SESSION_LOA_EQ | AFB_SESSION_LOA_3  /* check LOA == 3 */
-};
-
-/*
- * Description of one verb of the API provided by the binding
- * This enumeration is valid for bindings of type 1
- */
-struct afb_verb_desc_v1
-{
-       const char *name;                       /* name of the verb */
-       enum afb_session_v1 session;            /* authorisation and session requirements of the verb */
-       void (*callback)(struct afb_req req);   /* callback function implementing the verb */
-       const char *info;                       /* textual description of the verb */
-};
-
-/*
- * Description of the bindings of type 1
- */
-struct afb_binding_desc_v1
-{
-       const char *info;                       /* textual information about the binding */
-       const char *prefix;                     /* required prefix name for the binding */
-       const struct afb_verb_desc_v1 *verbs;   /* array of descriptions of verbs terminated by a NULL name */
-};
-
 /*
  * Description of a binding
  */
@@ -147,6 +83,8 @@ struct afb_daemon_itf {
        struct sd_bus *(*get_system_bus)(void *closure);        /* gets the common systemd's system d-bus */
        void (*vverbose)(void*closure, int level, const char *file, int line, const char *fmt, va_list args);
        struct afb_event (*event_make)(void *closure, const char *name); /* creates an event of 'name' */
+       int (*rootdir_get_fd)(void *closure);
+       int (*rootdir_open_locale)(void *closure, const char *filename, int flags, const char *locale);
 };
 
 /*
@@ -168,11 +106,6 @@ struct afb_binding_interface
        enum afb_mode mode;             /* run mode (local or remote) */
 };
 
-/*
- * Function for registering the binding
- */
-extern const struct afb_binding *afbBindingV1Register (const struct afb_binding_interface *interface);
-
 /*
  * Retrieves the common systemd's event loop of AFB
  * 'daemon' MUST be the daemon given in interface when activating the binding.
@@ -205,7 +138,7 @@ static inline struct sd_bus *afb_daemon_get_system_bus(struct afb_daemon daemon)
  * 'object' can be NULL.
  * 'daemon' MUST be the daemon given in interface when activating the binding.
  *
- * For conveniency, the function calls 'json_object_put' for 'object'.
+ * For convenience, the function calls 'json_object_put' for 'object'.
  * Thus, in the case where 'object' should remain available after
  * the function returns, the function 'json_object_get' shall be used.
  *
@@ -236,7 +169,7 @@ static inline void afb_daemon_verbose(struct afb_daemon daemon, int level, const
 {
        va_list args;
        va_start(args, fmt);
-       return daemon.itf->vverbose(daemon.closure, level, file, line, fmt, args);
+       daemon.itf->vverbose(daemon.closure, level, file, line, fmt, args);
        va_end(args);
 }
 
@@ -259,3 +192,23 @@ static inline void afb_daemon_verbose(struct afb_daemon daemon, int level, const
 # endif
 #endif
 
+/*
+ * Get the root directory file descriptor. This file descriptor can
+ * be used with functions 'openat', 'fstatat', ...
+ */
+static inline int afb_daemon_rootdir_get_fd(struct afb_daemon daemon)
+{
+       return daemon.itf->rootdir_get_fd(daemon.closure);
+}
+
+/*
+ * Opens 'filename' within the root directory with 'flags' (see function openat)
+ * using the 'locale' definition (example: "jp,en-US") that can be NULL.
+ * Returns the file descriptor or -1 in case of error.
+ */
+static inline int afb_daemon_rootdir_open_locale(struct afb_daemon daemon, const char *filename, int flags, const char *locale)
+{
+       return daemon.itf->rootdir_open_locale(daemon.closure, filename, flags, locale);
+}
+
+