diff options
author | José Bollo <jose.bollo@iot.bzh> | 2018-12-18 10:58:25 +0100 |
---|---|---|
committer | José Bollo <jose.bollo@iot.bzh> | 2018-12-18 11:04:53 +0100 |
commit | f8b04951b4ccafdf28b875825edd46316fafb519 (patch) | |
tree | e86e965cd77f375fa1aee9858b56f34e7682a441 /src/wgtpkg-unit.c | |
parent | a8ffd5216cf61aa3dbf97d442e0e3184763d773f (diff) |
afm-unit: Fix http port multi allocation
When serveral targets were set in the widget file, the
framework allocated the same HTTP port to each. This
lead to impossibility to run all targets or to a
systemd conflict.
This should fix the issue by allocating an HTTP port for
each target installed by the widget. To achieves that goal,
the afm-unit.conf tag for the port is moved from
'#metadata.http-port' to '#metatarget.http-port'.
Bug-AGL: SPEC-2068
Change-Id: I5376d6f052e0ffc5c77cc80041528637777aed1e
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'src/wgtpkg-unit.c')
-rw-r--r-- | src/wgtpkg-unit.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/wgtpkg-unit.c b/src/wgtpkg-unit.c index 89d1473..cca718f 100644 --- a/src/wgtpkg-unit.c +++ b/src/wgtpkg-unit.c @@ -28,7 +28,7 @@ #include <limits.h> #include <json-c/json.h> - + #include "verbose.h" #include "utils-file.h" @@ -38,6 +38,7 @@ #include "utils-systemd.h" #include "wgtpkg-unit.h" +#include "wgt-strings.h" #if 0 #include <ctype.h> @@ -54,7 +55,7 @@ static char *template; * 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. */ @@ -373,13 +374,26 @@ int unit_generator_open_template(const char *filename) static int add_metadata(struct json_object *jdesc, const struct unitconf *conf) { + struct json_object *targets, *targ; char portstr[30]; + int port, 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); + port = conf->port(); + if (port < 0) + return port; + sprintf(portstr, "%d", port); + if (!j_add_string_m(targ, "#metatarget.http-port", portstr)) + return -1; + } + } - sprintf(portstr, "%d", conf->port); return j_add_many_strings_m(jdesc, "#metadata.install-dir", conf->installdir, "#metadata.icons-dir", conf->icondir, - "#metadata.http-port", portstr, NULL) ? 0 : -1; } |