summaryrefslogtreecommitdiffstats
path: root/src/wgtpkg-unit.c
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2018-12-18 10:58:25 +0100
committerJosé Bollo <jose.bollo@iot.bzh>2018-12-18 11:04:53 +0100
commitf8b04951b4ccafdf28b875825edd46316fafb519 (patch)
treee86e965cd77f375fa1aee9858b56f34e7682a441 /src/wgtpkg-unit.c
parenta8ffd5216cf61aa3dbf97d442e0e3184763d773f (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.c22
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;
}