/*
- Copyright 2016, 2017 IoT.bzh
+ Copyright (C) 2015-2020 IoT.bzh
author: José Bollo <jose.bollo@iot.bzh>
#include <limits.h>
#include <json-c/json.h>
-
+
#include "verbose.h"
#include "utils-file.h"
#include "utils-systemd.h"
#include "wgtpkg-unit.h"
+#include "wgt-strings.h"
#if 0
#include <ctype.h>
* When returning 1 and 'after' isn't NULL, the pointer to the
* first character after the pettern in 'text' is stored in 'after'.
* The characters '\n' and ' ' have a special meaning in the search:
- * * '\n': matches any space or tabs (including none) followed
+ * * '\n': matches any space or tabs (including none) followed
* either by '\n' or '\0' (end of the string)
* * ' ': matches any space or tabs but at least one.
*/
/*
* Clear the unit generator
*/
-void unit_generator_off()
+void unit_generator_close_template()
{
free(template);
template = NULL;
* Initialises the unit generator with the content of the file of path 'filename'.
* Returns 0 in case of success or a negative number in case of error.
*/
-int unit_generator_on(const char *filename)
+int unit_generator_open_template(const char *filename)
{
size_t size;
char *tmp;
int rc;
- unit_generator_off();
+ unit_generator_close_template();
rc = getfile(filename ? : FWK_UNIT_CONF, &template, NULL);
if (!rc) {
size = pack(template, ';');
static int add_metadata(struct json_object *jdesc, const struct unitconf *conf)
{
- char portstr[30];
+ struct json_object *targets, *targ;
+ char portstr[30], afidstr[30];
+ int port, afid, i, n;
+
+ if (json_object_object_get_ex(jdesc, string_targets, &targets)) {
+ n = json_object_array_length(targets);
+ for (i = 0 ; i < n ; i++) {
+ targ = json_object_array_get_idx(targets, i);
+ if (!conf->new_afid) {
+ afid = 0;
+ port = 0;
+ } else {
+ afid = conf->new_afid();
+ if (afid < 0)
+ return afid;
+ port = conf->base_http_ports + afid;
+ }
+ sprintf(afidstr, "%d", afid);
+ sprintf(portstr, "%d", port);
+ if (!j_add_many_strings_m(targ,
+ "#metatarget.http-port", portstr,
+ "#metatarget.afid", afidstr,
+ NULL))
+ return -1;
+ }
+ }
- sprintf(portstr, "%d", conf->port);
return j_add_many_strings_m(jdesc,
"#metadata.install-dir", conf->installdir,
- "#metadata.app-data-dir", "%h/app-data",
"#metadata.icons-dir", conf->icondir,
- "#metadata.http-port", portstr,
NULL) ? 0 : -1;
}
* Applies the object 'jdesc' augmented of meta data coming
* from 'conf' to the current unit generator.
* The current unit generator will be set to the default one if not unit
- * was previously set using the function 'unit_generator_on'.
+ * was previously set using the function 'unit_generator_open_template'.
* The callback function 'process' is then called with the
* unit descriptors array and the expected closure.
* Return what returned process in case of success or a negative
if (rc)
ERROR("can't set the metadata. %m");
else {
- rc = template ? 0 : unit_generator_on(NULL);
+ rc = template ? 0 : unit_generator_open_template(NULL);
if (!rc) {
instance = NULL;
rc = apply_mustach(template, jdesc, &instance, &size);