X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-hsrv.c;h=61e5c3c2e7a361315a387e5bd9d89dacb94f8d56;hb=65353dce81a629e042800bb7b86fcd869a76727e;hp=2a08a2e34726be1279c3db95ce2995a100e88281;hpb=c31411aaba6c8bd04f68bfdb1f042d018e677790;p=src%2Fapp-framework-binder.git diff --git a/src/afb-hsrv.c b/src/afb-hsrv.c index 2a08a2e3..61e5c3c2 100644 --- a/src/afb-hsrv.c +++ b/src/afb-hsrv.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016, 2017, 2018 "IoT.bzh" + * Copyright (C) 2015-2020 "IoT.bzh" * Author: José Bollo * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -42,11 +42,11 @@ #include "afb-hsrv.h" #include "afb-fdev.h" #include "afb-socket.h" + #include "fdev.h" #include "verbose.h" #include "locale-root.h" - -#include "afb-systemd.h" +#include "systemd.h" #include "jobs.h" #define JSON_CONTENT "application/json" @@ -56,7 +56,7 @@ struct hsrv_itf { struct hsrv_itf *next; struct afb_hsrv *hsrv; struct fdev *fdev; - char uri[1]; + char uri[]; }; struct hsrv_handler { @@ -533,20 +533,26 @@ static int hsrv_itf_connect(struct hsrv_itf *itf) char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV]; int rgni; - itf->fdev = afb_socket_open_fdev(itf->uri, 1); + itf->fdev = afb_socket_open_fdev_scheme(itf->uri, 1, "tcp"); if (!itf->fdev) { ERROR("can't create socket %s", itf->uri); return 0; } fdev_set_events(itf->fdev, EPOLLIN); fdev_set_callback(itf->fdev, hsrv_itf_callback, itf); + memset(&addr, 0, sizeof addr); lenaddr = (socklen_t)sizeof addr; getsockname(fdev_fd(itf->fdev), &addr, &lenaddr); - rgni = getnameinfo(&addr, lenaddr, hbuf, sizeof hbuf, sbuf, sizeof sbuf, NI_NUMERICSERV); - if (rgni != 0) { - ERROR("getnameinfo returned %d: %s", rgni, gai_strerror(rgni)); - hbuf[0] = sbuf[0] = '?'; - hbuf[1] = sbuf[1] = 0; + if (addr.sa_family == AF_INET && !((struct sockaddr_in*)&addr)->sin_addr.s_addr) { + strncpy(hbuf, "*", NI_MAXHOST); + sprintf(sbuf, "%d", (int)ntohs(((struct sockaddr_in*)&addr)->sin_port)); + } else { + rgni = getnameinfo(&addr, lenaddr, hbuf, sizeof hbuf, sbuf, sizeof sbuf, NI_NUMERICSERV); + if (rgni != 0) { + ERROR("getnameinfo returned %d: %s", rgni, gai_strerror(rgni)); + hbuf[0] = sbuf[0] = '?'; + hbuf[1] = sbuf[1] = 0; + } } NOTICE("Listening interface %s:%s", hbuf, sbuf); return 1; @@ -556,7 +562,7 @@ int afb_hsrv_add_interface(struct afb_hsrv *hsrv, const char *uri) { struct hsrv_itf *itf; - itf = malloc(sizeof *itf + strlen(uri)); + itf = malloc(sizeof *itf + 1 + strlen(uri)); if (itf == NULL) return -1; @@ -583,4 +589,4 @@ int afb_hsrv_add_interface_tcp(struct afb_hsrv *hsrv, const char *itf, uint16_t return 0; } return afb_hsrv_add_interface(hsrv, buffer); -} \ No newline at end of file +}