aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2016-04-01 17:00:47 +0200
committerJosé Bollo <jose.bollo@iot.bzh>2016-04-01 17:00:47 +0200
commitdde70b62b09f49ad672c104a3f81714bf11047be (patch)
treede0af0b927b30dd612cb95f2d6095379a65ff38e /include
parentbbe18a624f4961165cf52d7f4c25de6f3a7ec012 (diff)
work in progress (tbf)
Change-Id: I01f72892530bb4ef14a7216a112812026a367bfa Signed-off-by: José Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'include')
-rw-r--r--include/afb-req-itf.h104
-rw-r--r--include/local-def.h54
2 files changed, 104 insertions, 54 deletions
diff --git a/include/afb-req-itf.h b/include/afb-req-itf.h
new file mode 100644
index 00000000..eea78317
--- /dev/null
+++ b/include/afb-req-itf.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2016 IoT.bzh
+ * Author: José Bollo <jose.bollo@iot.bzh>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+struct afb_arg {
+ const char *name;
+ const char *value;
+ size_t size;
+ int is_file;
+};
+
+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);
+};
+
+struct afb_req {
+ const struct afb_req_itf *itf;
+ void *data;
+};
+
+static inline struct afb_arg afb_req_get(struct afb_req req, const char *name)
+{
+ return req.itf->get(req.data, name);
+}
+
+static inline const char *afb_req_argument(struct afb_req req, const char *name)
+{
+ return afb_req_get(req, name).value;
+}
+
+static inline int afb_req_is_argument_file(struct afb_req req, const char *name)
+{
+ return afb_req_get(req, name).is_file;
+}
+
+static inline void afb_req_iterate(struct afb_req req, int (*iterator)(void *closure, struct afb_arg arg), void *closure)
+{
+ 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_fail_v(struct afb_req req, const char *status, const char *info, va_list args)
+{
+ char *message;
+ if (info == NULL || vasprintf(&message, info, args) < 0)
+ message = NULL;
+ afb_req_fail(req, status, message);
+ free(message);
+}
+
+static inline void afb_req_fail_f(struct afb_req req, const char *status, const char *info, ...)
+{
+ va_list args;
+ va_start(args, info);
+ afb_req_fail_v(req, status, info, args);
+ 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)
+{
+ char *message;
+ if (info == NULL || vasprintf(&message, info, args) < 0)
+ message = NULL;
+ afb_req_success(req, obj, message);
+ free(message);
+}
+
+static inline void afb_req_success_f(struct afb_req req, json_object *obj, const char *info, ...)
+{
+ va_list args;
+ va_start(args, info);
+ afb_req_success_v(req, obj, info, args);
+ va_end(args);
+}
+
diff --git a/include/local-def.h b/include/local-def.h
index 605c05a3..f46dd97c 100644
--- a/include/local-def.h
+++ b/include/local-def.h
@@ -124,60 +124,6 @@ typedef struct AFB_plugin AFB_plugin;
typedef enum {AFB_MODE_LOCAL=0, AFB_MODE_REMOTE, AFB_MODE_GLOBAL} AFB_Mode;
-#if 0
-
-typedef enum {AFB_POST_NONE=0, AFB_POST_JSON, AFB_POST_FORM, AFB_POST_EMPTY} AFB_PostType;
-
-
-
-// Post Upload File Handle
-typedef struct {
- int fd;
- char *path;
- int errcode;
- struct json_object* jresp;
-} 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 {
- 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 *privatebuf; // 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];
- int fd;
-} AFB_staticfile;
-
-typedef struct {
- char *msg;
- size_t len;
-} AFB_redirect_msg;
-
-#endif
-
typedef struct {
char *url;
char *path;