diff options
author | José Bollo <jose.bollo@iot.bzh> | 2017-03-31 16:11:07 +0200 |
---|---|---|
committer | José Bollo <jose.bollo@iot.bzh> | 2017-03-31 16:14:02 +0200 |
commit | 6797f9722dd3e5463e0f7c118397955bb59a40c7 (patch) | |
tree | 05f6aaf980d4080f871fc368509ff0156eaaec3b /src/afb-xreq.h | |
parent | 20ea5089d0e5526afaa5231f30add7b25b2499bd (diff) |
Factorize common code for handling requests
The common code for session handling is
shared using struct afb_xreq. At the moment
only hreq leverages the new feature.
The objective is double: make the work of
writing new internal requests more easy and
prepare to check permissions.
Change-Id: If3ca311d68c2d8c427d1125f31a2704b150c2c94
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'src/afb-xreq.h')
-rw-r--r-- | src/afb-xreq.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/afb-xreq.h b/src/afb-xreq.h new file mode 100644 index 00000000..42824d7d --- /dev/null +++ b/src/afb-xreq.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2017 "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. + */ + +#pragma once + + +#define NO_BINDING_VERBOSE_MACRO +#include <afb/afb-binding.h> +#include "afb-context.h" +#include "afb-evt.h" + +struct json_object; +struct afb_evt_listener; + +struct afb_xreq_query_itf { + struct json_object *(*json)(void *closure); + struct afb_arg (*get)(void *closure, const char *name); + void (*success)(void *closure, struct json_object *obj, const char *info); + void (*fail)(void *closure, const char *status, const char *info); + void (*reply)(void *closure, struct json_object *obj); + void (*unref)(void *closure); + int (*subscribe)(void *closure, struct afb_event event); + int (*unsubscribe)(void *closure, struct afb_event event); + void (*subcall)(void *closure, const char *api, const char *verb, struct json_object *args, void (*callback)(void*, int, struct json_object*), void *cb_closure); +}; + + +/** + * Internal data for requests + */ +struct afb_xreq +{ + struct afb_context context; /**< context of the request */ + char *api; /**< the requested API */ + char *verb; /**< the requested VERB */ + void *query; /**< closure for the query */ + const struct afb_xreq_query_itf *queryitf; + int refcount; /**< current ref count */ + int replied; /**< is replied? */ + int timeout; /**< timeout */ + int sessionflags; /**< flags to check */ + void *group; + void (*callback)(struct afb_req req); + struct afb_evt_listener *listener; +}; + +extern void afb_xreq_addref(struct afb_xreq *xreq); +extern void afb_xreq_unref(struct afb_xreq *xreq); +extern void afb_xreq_fail_f(struct afb_xreq *xreq, const char *status, const char *info, ...); +extern void afb_xreq_success_f(struct afb_xreq *xreq, struct json_object *obj, const char *info, ...); +extern void afb_xreq_call(struct afb_xreq *xreq); + |