X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=include%2Flocal-def.h;h=edaf1bbc49b720ff354577f2b8656a55e0c97ef9;hb=06d422d1de5c505366f6a029d8af85548c2b646f;hp=22a3608b5b3e37c65ebd8788e1ece2d03170184e;hpb=02492357cce066201a11993255120119c2703af1;p=src%2Fapp-framework-binder.git diff --git a/include/local-def.h b/include/local-def.h index 22a3608b..edaf1bbc 100644 --- a/include/local-def.h +++ b/include/local-def.h @@ -63,6 +63,7 @@ #define DEFLT_CACHE_TIMEOUT 100000 // default Static File Chache [Client Side Cache 100000~=1day] #define DEFLT_AUTH_TOKEN NULL // expect for debug should == NULL #define DEFLT_HTTP_TIMEOUT 15 // Max MibMicroHttp timeout +#define AFB_MAX_PLUGINS 20 // Max number of plugins for a given binder typedef int BOOL; #ifndef FALSE @@ -97,6 +98,7 @@ extern char *ERROR_LABEL[]; typedef json_object* (*AFB_apiCB)(); +typedef void (*AFB_freeCtxCB)(void*, void*, char*); // Error code are requested through function to manage json usage count typedef struct { @@ -169,7 +171,7 @@ typedef struct { int localhostOnly; int httpdPort; char *smack; // smack label - char *plugins; // list of requested plugins + char *ldpaths; // list of plugins directories char *rootdir; // base dir for httpd file download char *rootbase; // Angular HTML5 base URL char *rootapi; // Base URL for REST APIs @@ -181,6 +183,7 @@ typedef struct { int cacheTimeout; int apiTimeout; int cntxTimeout; // Client Session Context timeout + int pluginCount; // loaded plugins count AFB_aliasdir *aliasdir; // alias mapping for icons,apps,... } AFB_config; @@ -217,31 +220,32 @@ typedef struct { AFB_restapi *apis; void *handle; int ctxCount; - AFB_apiCB freeCtxCB; // callback to free application context [null for standard free] + AFB_freeCtxCB freeCtxCB; // callback to free application context [null for standard free] } AFB_plugin; // User Client Session Context typedef struct { - int cid; // index 0 if global char uuid[37]; // long term authentication of remote client char token[37]; // short term authentication of remote client time_t timeStamp; // last time token was refresh int restfull; // client does not use cookie - void *ctx; // application specific context - AFB_plugin *plugin; // provide callback and easy access to plugin + void **contexts; // application specific context [one per plugin]] + AFB_plugin **plugins; // we need plugins reference to cleanup session outside of call context } AFB_clientCtx; // MHD_lookup_connection_value(connection, MHD_GET_ARGUMENT_KIND, "value"); typedef struct { + const char *uuid; const char *url; - char *plugin; + char *prefix; // plugin convivial name char *api; AFB_PostRequest *post; json_object *jresp; - AFB_clientCtx *client; // needed because libmicrohttp cannot create an empty response - int restfull; // request is resfull [uuid token provided] - int errcode; // http error code + void *context; // Hold Client Context when using session + void *handle; // provide callback and easy access to plugin + int restfull; // request is resfull [uuid token provided] + int errcode; // http error code sigjmp_buf checkPluginCall; // context save for timeout set/longjmp AFB_config *config; // plugin may need access to config struct MHD_Connection *connection; @@ -261,7 +265,6 @@ typedef struct { int fakemod; // respond to GET/POST request without interacting with sndboard int forceexit; // when autoconfig from script force exit before starting server AFB_plugin **plugins; // pointer to REST/API plugins - int pluginCount; // loaded plugins count magic_t magic; // Mime type file magic lib sigjmp_buf restartCkpt; // context save for restart set/longjmp } AFB_session;