Add plugin handle into request, pass it to free callback
[src/app-framework-binder.git] / include / local-def.h
index 54f5ce0..843805f 100644 (file)
@@ -76,6 +76,8 @@ 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
@@ -95,6 +97,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 {
@@ -105,6 +108,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
@@ -171,6 +182,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;
 
@@ -207,34 +219,35 @@ 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
+  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;
+  AFB_plugin *plugin;        // provide callback and easy access to plugin
   AFB_plugin **plugins;
 } AFB_request;
 
@@ -259,4 +272,4 @@ typedef struct {
 
 #include "proto-def.h"
 
-#endif /* LOCAL_DEF_H */
\ No newline at end of file
+#endif /* LOCAL_DEF_H */