aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2016-04-01 18:01:26 +0200
committerJosé Bollo <jose.bollo@iot.bzh>2016-04-01 18:01:26 +0200
commit70558f02b1c030c4290a0146313e3052fc0ea715 (patch)
tree3212b6c0c4a7e89ebc780a0be4a5a9c6b151688d /include
parentdde70b62b09f49ad672c104a3f81714bf11047be (diff)
work in progress (tbf)
Change-Id: I1c4b48bc56a17b7351b57c3d4da53bd89465fff4 Signed-off-by: José Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'include')
-rw-r--r--include/afb-req-itf.h31
-rw-r--r--include/local-def.h191
-rw-r--r--include/proto-def.h40
3 files changed, 19 insertions, 243 deletions
diff --git a/include/afb-req-itf.h b/include/afb-req-itf.h
index eea78317..c593440b 100644
--- a/include/afb-req-itf.h
+++ b/include/afb-req-itf.h
@@ -15,6 +15,8 @@
* limitations under the License.
*/
+struct json_object;
+
struct afb_arg {
const char *name;
const char *value;
@@ -26,12 +28,13 @@ struct afb_req_itf {
struct afb_arg (*get)(void *data, const char *name);
void (*iterate)(void *data, int (*iterator)(void *closure, struct afb_arg arg), void *closure);
void (*fail)(void *data, const char *status, const char *info);
- void (*success)(void *data, json_object *obj, const char *info);
+ void (*success)(void *data, struct json_object *obj, const char *info);
};
struct afb_req {
const struct afb_req_itf *itf;
void *data;
+ void **context;
};
static inline struct afb_arg afb_req_get(struct afb_req req, const char *name)
@@ -54,15 +57,24 @@ static inline void afb_req_iterate(struct afb_req req, int (*iterator)(void *clo
req.itf->iterate(req.data, iterator, closure);
}
-#include <stdarg.h>
-#include <stdlib.h>
-#include <stdio.h>
-
static inline void afb_req_fail(struct afb_req req, const char *status, const char *info)
{
req.itf->fail(req.data, status, info);
}
+static inline void afb_req_success(struct afb_req req, struct json_object *obj, const char *info)
+{
+ req.itf->success(req.data, obj, info);
+}
+
+#if !defined(_GNU_SOURCE)
+# error "_GNU_SOURCE must be defined for using vasprintf"
+#endif
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+
static inline void afb_req_fail_v(struct afb_req req, const char *status, const char *info, va_list args)
{
char *message;
@@ -80,12 +92,7 @@ static inline void afb_req_fail_f(struct afb_req req, const char *status, const
va_end(args);
}
-static inline void afb_req_success(struct afb_req req, json_object *obj, const char *info)
-{
- req.itf->success(req.data, obj, info);
-}
-
-static inline void afb_req_success_v(struct afb_req req, json_object *obj, const char *info, va_list args)
+static inline void afb_req_success_v(struct afb_req req, struct json_object *obj, const char *info, va_list args)
{
char *message;
if (info == NULL || vasprintf(&message, info, args) < 0)
@@ -94,7 +101,7 @@ static inline void afb_req_success_v(struct afb_req req, json_object *obj, const
free(message);
}
-static inline void afb_req_success_f(struct afb_req req, json_object *obj, const char *info, ...)
+static inline void afb_req_success_f(struct afb_req req, struct json_object *obj, const char *info, ...)
{
va_list args;
va_start(args, info);
diff --git a/include/local-def.h b/include/local-def.h
deleted file mode 100644
index f46dd97c..00000000
--- a/include/local-def.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- local-def.h -- provide a REST/HTTP interface
-
- Copyright (C) 2015, Fulup Ar Foll
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-#ifndef LOCAL_DEF_H
-#define LOCAL_DEF_H
-
-#include <json.h>
-#include <magic.h>
-#include <microhttpd.h>
-
-/* other definitions --------------------------------------------------- */
-
-// Note: because of a bug in libmagic MAGIC_DB NULL should not be used for default
-#define OPA_INDEX "index.html"
-#define MAX_ALIAS 10 // max number of aliases
-#define COOKIE_NAME "afb-session"
-
-#define DEFLT_CNTX_TIMEOUT 3600 // default Client Connection Timeout
-#define DEFLT_API_TIMEOUT 0 // default Plugin API Timeout [0=NoLimit for Debug Only]
-#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
-#define AFB_MAX_PLUGINS 20 // Max number of plugins for a given binder
-
-#ifndef FALSE
- #define FALSE 0
-#endif
-#ifndef TRUE
- #define TRUE 1
-#endif
-
-#define PUBLIC
-#define STATIC static
-#define FAILED -1
-
-#define AUDIO_BUFFER "/tmp/buf"
-
-extern int verbose; // this is the only global variable
-
-// prebuild json error are constructed in helper-api.c
-typedef enum { AFB_FALSE, AFB_TRUE, AFB_FATAL, AFB_FAIL, AFB_WARNING, AFB_EMPTY, AFB_SUCCESS, AFB_DONE, AFB_UNAUTH} AFB_error;
-
-#define MAX_POST_SIZE 4096 // maximum size for POST data
-#define CTX_NBCLIENTS 10 // allow a default of 10 authenticated clients
-
-
-
-
-
-
-
-
-// Plugin Type
-enum AFB_pluginE
-{
- AFB_PLUGIN_JSON = 123456789,
- AFB_PLUGIN_JSCRIPT = 987654321,
- AFB_PLUGIN_RAW = 987123546
-};
-
-// Enum for Session/Token/Authentication middleware
-enum AFB_sessionE
-{
- AFB_SESSION_NONE,
- AFB_SESSION_CREATE,
- AFB_SESSION_CLOSE,
- AFB_SESSION_RENEW,
- AFB_SESSION_CHECK
-};
-
-// API definition
-struct AFB_restapi
-{
- const char *name;
- enum AFB_sessionE session;
- struct json_object* (*callback)();
- const char *info;
-};
-
-// Plugin definition
-struct AFB_plugin
-{
- enum AFB_pluginE type;
- const char *info;
- const char *prefix;
- const struct AFB_restapi *apis;
- void (*freeCtxCB)(void*); // callback to free application context [null for standard free]
-};
-
-typedef enum AFB_pluginE AFB_pluginE;
-typedef enum AFB_sessionE AFB_sessionE;
-typedef struct json_object* (*AFB_apiCB)();
-typedef void (*AFB_freeCtxCB)(void*);
-typedef struct AFB_restapi AFB_restapi;
-typedef struct AFB_plugin AFB_plugin;
-
-
-
-
-
-
-
-
-
-
-typedef enum {AFB_MODE_LOCAL=0, AFB_MODE_REMOTE, AFB_MODE_GLOBAL} AFB_Mode;
-
-
-typedef struct {
- char *url;
- char *path;
- size_t len;
-} AFB_aliasdir;
-
-// main config structure
-struct AFB_config
-{
- char *console; // console device name (can be a file or a tty)
- int httpdPort;
- 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
- char *sessiondir; // where to store mixer session files
- char *token; // initial authentication token [default NULL no session]
- int cacheTimeout;
- int apiTimeout;
- int cntxTimeout; // Client Session Context timeout
- AFB_Mode mode; // mode of listening
- AFB_aliasdir *aliasdir; // alias mapping for icons,apps,...
-};
-
-// MHD_lookup_connection_value(connection, MHD_GET_ARGUMENT_KIND, "value");
-typedef struct {
- const char *uuid;
- const char *url;
- const char *prefix; // plugin convivial name
- const char *method;
-/*
- AFB_PostRequest *post;
-*/
- struct json_object *jresp;
- void *context; // Hold Client Context when using session
- int restfull; // request is resfull [uuid token provided]
- int errcode; // http error code
- struct AFB_config *config; // plugin may need access to config
- struct afb_req *areq;
-} AFB_request;
-
-struct afb_hsrv_handler;
-struct MHD_Daemon;
-
-struct AFB_session
-{
- struct AFB_config *config; // pointer to current config
- // List of commands to execute
- int background; // run in backround mode
- int foreground; // run in forground mode
- char *cacheTimeout; // http require timeout to be a string
- struct MHD_Daemon *httpd; // structure for httpd handler
- int fakemod; // respond to GET/POST request without interacting with sndboard
- int readyfd; // a #fd to signal when ready to serve
- magic_t magic; // Mime type file magic lib
- struct afb_hsrv_handler *handlers;
-};
-
-
-typedef struct AFB_config AFB_config;
-typedef struct AFB_session AFB_session;
-
-#include "proto-def.h"
-
-#endif /* LOCAL_DEF_H */
diff --git a/include/proto-def.h b/include/proto-def.h
deleted file mode 100644
index e2190eb1..00000000
--- a/include/proto-def.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- proto-def.h -- provide a REST/HTTP interface
-
- Copyright (C) 2015, Fulup Ar Foll
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-// helper-api
-extern const char* getQueryValue (const AFB_request * request, const char *name);
-extern size_t getQueryAll(AFB_request * request, char *query, size_t len);
-/*
-extern json_object* getPostFile (AFB_request *request, AFB_PostItem *item, char* destination) ;
-extern char* getPostPath (AFB_request *request);
-*/
-
-extern json_object *jsonNewMessage (AFB_error level, char* format, ...);
-
-
-// Httpd server
-extern AFB_error httpdStart (AFB_session *session);
-extern AFB_error httpdLoop (AFB_session *session);
-extern void httpdStop (AFB_session *session);
-
-
-
-