Hack --plugins=path
[src/app-framework-binder.git] / include / local-def.h
index 2f8fd20..8f297c5 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
@@ -60,6 +62,7 @@
 #define DEFLT_API_TIMEOUT   0      // default Plugin API Timeout
 #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
 
 typedef int BOOL;
 #ifndef FALSE
@@ -73,11 +76,12 @@ typedef int BOOL;
 #define STATIC    static
 #define FAILED    -1
 
-extern int verbose;  // this is the only global variable
+#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;
@@ -87,6 +91,7 @@ extern char *ERROR_LABEL[];
 
 #define BANNER "<html><head><title>Application Framework Binder</title></head><body>Application Framework </body></html>"
 #define JSON_CONTENT  "application/json"
+#define FORM_CONTENT "multipart/form-data"
 #define MAX_POST_SIZE  4096   // maximum size for POST data
 #define CTX_NBCLIENTS   10   // allow a default of 10 authenticated clients
 
@@ -100,12 +105,42 @@ typedef struct {
   json_object *json;
 } AFB_errorT;
 
+typedef enum  {AFB_POST_NONE=0, AFB_POST_JSON, AFB_POST_FORM} AFB_PostType;
+
+// Post Upload File Handle
+typedef struct {
+   int   fd; 
+   char *path; 
+   json_object* jerror;
+} AFB_PostCtx;
+
+typedef  struct {
+    int  len;   // post element size
+    char *data; // post data in raw format
+    AFB_PostType type; // Json type
+} AFB_PostRequest;
+  
 // Post handler
 typedef struct {
-  char* data;
-  int   len;
-  int   uid;
-} AFB_HttpPost;
+  void*  ctx;               // Application context
+  int    len;               // current len for post
+  int    uid;               // post uid for debug
+  AFB_PostType type;        // JSON or FORM
+  AFB_apiCB  completeCB;    // callback when post is completed
+  char   *private;          // use internally to keep track or partial buffer
+  struct MHD_PostProcessor *pp; // iterator handle
+} AFB_PostHandle;
+
+typedef struct {
+    enum MHD_ValueKind kind; // kind type of the value
+    const char *key;         // key 0-terminated key for the value
+    const char *filename;    // filename of the uploaded file, NULL if not known
+    const char *mimetype;    // content_type mime-type of the data, NULL if not known
+    const char *encoding;    // transfer_encoding encoding of the data, NULL if not known
+    const char *data;        // data pointer to size bytes of data at the specified offset
+    uint64_t   offset;       // offset of data in the overall value
+    size_t     len;          // number of bytes in data available
+} AFB_PostItem;
 
 typedef struct {
   char  path[512];
@@ -148,8 +183,6 @@ typedef struct {
   AFB_aliasdir *aliasdir;  // alias mapping for icons,apps,...
 } AFB_config;
 
-
-
 typedef struct {
   int  len;        // command number within application
   json_object *jtype;
@@ -161,9 +194,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;
@@ -171,7 +208,7 @@ typedef struct {
 
 // Plugin definition
 typedef struct {
-  AFB_pluginT type;  
+  AFB_pluginE type;  
   char *info;
   char *prefix;
   size_t prefixlen;
@@ -199,7 +236,7 @@ typedef struct {
   const char *url;
   char *plugin;
   char *api;
-  char *post;
+  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]
@@ -207,6 +244,7 @@ typedef struct {
   sigjmp_buf checkPluginCall; // context save for timeout set/longjmp
   AFB_config *config;         // plugin may need access to config
   struct MHD_Connection *connection;
+  AFB_plugin **plugins;
 } AFB_request;
 
 
@@ -216,7 +254,6 @@ typedef struct {
   int  killPrevious;
   int  background;        // run in backround mode
   int  foreground;        // run in forground mode
-  int  checkAlsa;         // Display active Alsa Board
   int  configsave;        // Save config on disk on start
   char *cacheTimeout;     // http require timeout to be a string
   void *httpd;            // anonymous structure for httpd handler
@@ -230,3 +267,5 @@ typedef struct {
 
 
 #include "proto-def.h"
+
+#endif /* LOCAL_DEF_H */