X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=include%2Fafb%2Fafb-binding-v1.h;h=e6f322fb1f3e028178ad9b1b680e9c4eaf01c663;hb=95c29ef579d6320a721f96d7146efd10f74a201b;hp=4fbe8f9bad97d7d203519d4077c3c005e275169d;hpb=e94995611bd4e05a2aac1c0ae7c7f0855137b78a;p=src%2Fapp-framework-binder.git diff --git a/include/afb/afb-binding-v1.h b/include/afb/afb-binding-v1.h index 4fbe8f9b..e6f322fb 100644 --- a/include/afb/afb-binding-v1.h +++ b/include/afb/afb-binding-v1.h @@ -17,7 +17,19 @@ #pragma once -struct afb_binding_interface; +struct json_object; + +#include "afb-req-itf.h" +#include "afb-event-itf.h" +#include "afb-service-common.h" +#include "afb-daemon-common.h" + +#include "afb-session-v1.h" +#include "afb-daemon-v1.h" +#include "afb-daemon-v1.h" + +struct afb_binding_v1; +struct afb_binding_interface_v1; /* * Function for registering the binding @@ -38,52 +50,36 @@ struct afb_binding_interface; * Be aware that the given 'interface' is not fully functionnal * because no provision is given to the name and description * of the binding. Check the function 'afbBindingV1ServiceInit' - * defined in the file because when + * defined in the file because when * the function 'afbBindingV1ServiceInit' is called, the 'interface' * is fully functionnal. */ -extern const struct afb_binding *afbBindingV1Register (const struct afb_binding_interface *interface); +extern const struct afb_binding_v1 *afbBindingV1Register (const struct afb_binding_interface_v1 *interface); /* - * Enum for Session/Token/Assurance middleware. - * This enumeration is valid for bindings of type 1 + * When a binding have an exported implementation of the + * function 'afbBindingV1ServiceInit', defined below, + * the framework calls it for initialising the service after + * registration of all bindings. + * + * The object 'service' should be recorded. It has functions that + * allows the binding to call features with its own personality. + * + * The function should return 0 in case of success or, else, should return + * a negative value. */ -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 */ -}; +extern int afbBindingV1ServiceInit(struct afb_service service); + +/* + * When a binding have an implementation of the function 'afbBindingV1ServiceEvent', + * defined below, the framework calls that function for any broadcasted event or for + * events that the service subscribed to in its name. + * + * It receive the 'event' name and its related data in 'object' (be aware that 'object' + * might be NULL). + */ +extern void afbBindingV1ServiceEvent(const char *event, struct json_object *object); + /* * Description of one verb of the API provided by the binding @@ -92,7 +88,7 @@ enum afb_session_v1 struct afb_verb_desc_v1 { const char *name; /* name of the verb */ - enum afb_session_v1 session; /* authorisation and session requirements of the verb */ + enum afb_session_flags_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 */ }; @@ -107,3 +103,129 @@ struct afb_binding_desc_v1 const struct afb_verb_desc_v1 *verbs; /* array of descriptions of verbs terminated by a NULL name */ }; +/* + * Definition of the type+versions of the binding. + * The definition uses hashes. + */ +enum afb_binding_type_v1 +{ + AFB_BINDING_VERSION_1 = 123456789 +}; + +/* + * Description of a binding + */ +struct afb_binding_v1 +{ + enum afb_binding_type_v1 type; /* type of the binding */ + union { + struct afb_binding_desc_v1 v1; /* description of the binding of type 1 */ + }; +}; + +/* + * config mode + */ +enum afb_mode_v1 { + AFB_MODE_LOCAL = 0, /* run locally */ + AFB_MODE_REMOTE, /* run remotely */ + AFB_MODE_GLOBAL /* run either remotely or locally (DONT USE! reserved for future) */ +}; + +/* + * Interface between the daemon and the binding. + */ +struct afb_binding_interface_v1 +{ + struct afb_daemon daemon; /* access to the daemon facilies */ + int verbosity; /* level of verbosity */ + enum afb_mode_v1 mode; /* run mode (local or remote) */ +}; + +/* + * Macros for logging messages + */ +#if !defined(AFB_BINDING_PRAGMA_NO_VERBOSE_MACRO) +# if !defined(AFB_BINDING_PRAGMA_NO_VERBOSE_DETAILS) +# define AFB_ERROR_V1(itf,...) do{if(itf->verbosity>=0)afb_daemon_verbose(itf->daemon,3,__FILE__,__LINE__,__VA_ARGS__);}while(0) +# define AFB_WARNING_V1(itf,...) do{if(itf->verbosity>=1)afb_daemon_verbose(itf->daemon,4,__FILE__,__LINE__,__VA_ARGS__);}while(0) +# define AFB_NOTICE_V1(itf,...) do{if(itf->verbosity>=1)afb_daemon_verbose(itf->daemon,5,__FILE__,__LINE__,__VA_ARGS__);}while(0) +# define AFB_INFO_V1(itf,...) do{if(itf->verbosity>=2)afb_daemon_verbose(itf->daemon,6,__FILE__,__LINE__,__VA_ARGS__);}while(0) +# define AFB_DEBUG_V1(itf,...) do{if(itf->verbosity>=3)afb_daemon_verbose(itf->daemon,7,__FILE__,__LINE__,__VA_ARGS__);}while(0) +# else +# define AFB_ERROR_V1(itf,...) do{if(itf->verbosity>=0)afb_daemon_verbose(itf->daemon,3,NULL,0,__VA_ARGS__);}while(0) +# define AFB_WARNING_V1(itf,...) do{if(itf->verbosity>=1)afb_daemon_verbose(itf->daemon,4,NULL,0,__VA_ARGS__);}while(0) +# define AFB_NOTICE_V1(itf,...) do{if(itf->verbosity>=1)afb_daemon_verbose(itf->daemon,5,NULL,0,__VA_ARGS__);}while(0) +# define AFB_INFO_V1(itf,...) do{if(itf->verbosity>=2)afb_daemon_verbose(itf->daemon,6,NULL,0,__VA_ARGS__);}while(0) +# define AFB_DEBUG_V1(itf,...) do{if(itf->verbosity>=3)afb_daemon_verbose(itf->daemon,7,NULL,0,__VA_ARGS__);}while(0) +# endif +#endif + + +/***************************************************************************************************/ + +#if AFB_BINDING_VERSION == 1 + +# define afb_binding afb_binding_v1 +# define afb_binding_interface afb_binding_interface_v1 + +# define AFB_SESSION_NONE AFB_SESSION_NONE_V1 +# define AFB_SESSION_CREATE AFB_SESSION_CREATE_V1 +# define AFB_SESSION_CLOSE AFB_SESSION_CLOSE_V1 +# define AFB_SESSION_RENEW AFB_SESSION_RENEW_V1 +# define AFB_SESSION_CHECK AFB_SESSION_CHECK_V1 + +# define AFB_SESSION_LOA_GE AFB_SESSION_LOA_GE_V1 +# define AFB_SESSION_LOA_LE AFB_SESSION_LOA_LE_V1 +# define AFB_SESSION_LOA_EQ AFB_SESSION_LOA_EQ_V1 + +# define AFB_SESSION_LOA_SHIFT AFB_SESSION_LOA_SHIFT_V1 +# define AFB_SESSION_LOA_MASK AFB_SESSION_LOA_MASK_V1 + +# define AFB_SESSION_LOA_0 AFB_SESSION_LOA_0_V1 +# define AFB_SESSION_LOA_1 AFB_SESSION_LOA_1_V1 +# define AFB_SESSION_LOA_2 AFB_SESSION_LOA_2_V1 +# define AFB_SESSION_LOA_3 AFB_SESSION_LOA_3_V1 +# define AFB_SESSION_LOA_4 AFB_SESSION_LOA_4_V1 + +# define AFB_SESSION_LOA_LE_0 AFB_SESSION_LOA_LE_0_V1 +# define AFB_SESSION_LOA_LE_1 AFB_SESSION_LOA_LE_1_V1 +# define AFB_SESSION_LOA_LE_2 AFB_SESSION_LOA_LE_2_V1 +# define AFB_SESSION_LOA_LE_3 AFB_SESSION_LOA_LE_3_V1 + +# define AFB_SESSION_LOA_EQ_0 AFB_SESSION_LOA_EQ_0_V1 +# define AFB_SESSION_LOA_EQ_1 AFB_SESSION_LOA_EQ_1_V1 +# define AFB_SESSION_LOA_EQ_2 AFB_SESSION_LOA_EQ_2_V1 +# define AFB_SESSION_LOA_EQ_3 AFB_SESSION_LOA_EQ_3_V1 + +# define AFB_SESSION_LOA_GE_0 AFB_SESSION_LOA_GE_0_V1 +# define AFB_SESSION_LOA_GE_1 AFB_SESSION_LOA_GE_1_V1 +# define AFB_SESSION_LOA_GE_2 AFB_SESSION_LOA_GE_2_V1 +# define AFB_SESSION_LOA_GE_3 AFB_SESSION_LOA_GE_3_V1 + +# if !defined(AFB_BINDING_PRAGMA_NO_VERBOSE_MACRO) + +# define ERROR AFB_ERROR_V1 +# define WARNING AFB_WARNING_V1 +# define NOTICE AFB_NOTICE_V1 +# define INFO AFB_INFO_V1 +# define DEBUG AFB_DEBUG_V1 + +# endif + +#define afb_daemon_get_event_loop afb_daemon_get_event_loop_v1 +#define afb_daemon_get_user_bus afb_daemon_get_user_bus_v1 +#define afb_daemon_get_system_bus afb_daemon_get_system_bus_v1 +#define afb_daemon_broadcast_event afb_daemon_broadcast_event_v1 +#define afb_daemon_make_event afb_daemon_make_event_v1 +#define afb_daemon_verbose afb_daemon_verbose_v1 +#define afb_daemon_rootdir_get_fd afb_daemon_rootdir_get_fd_v1 +#define afb_daemon_rootdir_open_locale afb_daemon_rootdir_open_locale_v1 +#define afb_daemon_queue_job afb_daemon_queue_job_v1 + +#define afb_service_call afb_service_call_v1 + +#endif + + +