Fixed Client Session Context by Plugin
[src/app-framework-binder.git] / include / local-def.h
index 021ef13..edaf1bb 100644 (file)
@@ -18,6 +18,8 @@
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 */
+#ifndef LOCAL_DEF_H
+#define LOCAL_DEF_H
 
 #ifndef _GNU_SOURCE
   #define _GNU_SOURCE
@@ -61,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
@@ -74,10 +77,12 @@ typedef int BOOL;
 #define STATIC    static
 #define FAILED    -1
 
+#define AUDIO_BUFFER "/tmp/buf"
+
 extern int verbose;  // this is the only global variable
 
 // Plugin Type
-typedef enum  {AFB_PLUGIN_JSON=123456789, AFB_PLUGIN_JSCRIPT=987654321,  AFB_PLUGIN_RAW=987123546} AFB_pluginT;
+typedef enum  {AFB_PLUGIN_JSON=123456789, AFB_PLUGIN_JSCRIPT=987654321,  AFB_PLUGIN_RAW=987123546} AFB_pluginE;
 
 // prebuild json error are constructed in config.c
 typedef enum  { AFB_FALSE, AFB_TRUE, AFB_FATAL, AFB_FAIL, AFB_WARNING, AFB_EMPTY, AFB_SUCCESS, AFB_DONE, AFB_UNAUTH} AFB_error;
@@ -93,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 {
@@ -103,6 +109,14 @@ typedef struct {
 
 typedef enum  {AFB_POST_NONE=0, AFB_POST_JSON, AFB_POST_FORM} AFB_PostType;
 
+// Post Upload File Handle
+typedef struct {
+   int   fd; 
+   char *path; 
+   int  errcode;
+   json_object* jresp;
+} AFB_PostCtx;
+
 typedef  struct {
     int  len;   // post element size
     char *data; // post data in raw format
@@ -116,7 +130,7 @@ typedef struct {
   int    uid;               // post uid for debug
   AFB_PostType type;        // JSON or FORM
   AFB_apiCB  completeCB;    // callback when post is completed
-  void   *private;          // use internally to keep track or partial buffer
+  char   *private;          // use internally to keep track or partial buffer
   struct MHD_PostProcessor *pp; // iterator handle
 } AFB_PostHandle;
 
@@ -157,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
@@ -169,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;
 
@@ -183,9 +198,13 @@ typedef struct {
      size_t  len;
 } AFB_redirect_msg;
 
+// Enum for Session/Token/Authentication middleware
+typedef enum  {AFB_SESSION_NONE, AFB_SESSION_CREATE, AFB_SESSION_CLOSE, AFB_SESSION_RENEW, AFB_SESSION_CHECK} AFB_sessionE;
+
 // API definition
 typedef struct {
   char *name;
+  AFB_sessionE session;
   AFB_apiCB callback;
   char *info;
   AFB_privateApi *private;
@@ -193,7 +212,7 @@ typedef struct {
 
 // Plugin definition
 typedef struct {
-  AFB_pluginT type;  
+  AFB_pluginE type;  
   char *info;
   char *prefix;
   size_t prefixlen;
@@ -201,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;
@@ -252,3 +272,5 @@ typedef struct {
 
 
 #include "proto-def.h"
+
+#endif /* LOCAL_DEF_H */