diff options
5 files changed, 27 insertions, 2 deletions
diff --git a/ctrl/facemgr/src/facelet.c b/ctrl/facemgr/src/facelet.c index 929005f57..a6231f457 100644 --- a/ctrl/facemgr/src/facelet.c +++ b/ctrl/facemgr/src/facelet.c @@ -998,7 +998,8 @@ facelet_snprintf(char * s, size_t size, const facelet_t * facelet) assert(facelet); /* Header + key attributes (netdevice + family) */ - rc = snprintf(cur, s + size - cur, "<Facelet %s %s (%s)", + rc = snprintf(cur, s + size - cur, "<Facelet [%d] %s %s (%s)", + facelet->id, facelet_status_str[facelet->status], facelet_get_error(facelet) ? "/!\\" : "", (facelet->family == AF_INET) ? "AF_INET" : @@ -1208,6 +1209,15 @@ int facelet_snprintf_json(char * s, size_t size, const facelet_t * facelet, int if (cur >= s + size) return cur - s; + /* id */ + rc = snprintf(cur, s + size - cur, "%*s%s: %d,\n", 4 * (indent+1), "", "\"id\"", + facelet->id); + if (rc < 0) + return rc; + cur += rc; + if (cur >= s + size) + return cur - s; + /* Status */ rc = snprintf(cur, s + size - cur, "%*s%s: \"%s\",\n", 4 * (indent+1), "", "\"status\"", facelet_status_str[facelet->status]); diff --git a/libtransport/src/hicn/transport/core/udp_socket_connector.cc b/libtransport/src/hicn/transport/core/udp_socket_connector.cc index 38945e755..99f47fedf 100644 --- a/libtransport/src/hicn/transport/core/udp_socket_connector.cc +++ b/libtransport/src/hicn/transport/core/udp_socket_connector.cc @@ -62,7 +62,13 @@ void UdpSocketConnector::send(const uint8_t *packet, std::size_t len, }); } else { if (state_ == ConnectorState::CONNECTED) { - socket_.send(asio::buffer(packet, len)); + try { + socket_.send(asio::buffer(packet, len)); + } catch (std::system_error &err) { + TRANSPORT_LOGE( + "Sending of disconnect message to forwarder failed. Reason: %s", + err.what()); + } } } } diff --git a/libtransport/src/hicn/transport/interfaces/socket.h b/libtransport/src/hicn/transport/interfaces/socket.h index f0194880a..4c9bda7df 100644 --- a/libtransport/src/hicn/transport/interfaces/socket.h +++ b/libtransport/src/hicn/transport/interfaces/socket.h @@ -78,6 +78,8 @@ class Socket { virtual void connect() = 0; + virtual bool isRunning() = 0; + protected: virtual ~Socket(){}; diff --git a/libtransport/src/hicn/transport/interfaces/socket_consumer.h b/libtransport/src/hicn/transport/interfaces/socket_consumer.h index eceee2d34..0f83fd38f 100644 --- a/libtransport/src/hicn/transport/interfaces/socket_consumer.h +++ b/libtransport/src/hicn/transport/interfaces/socket_consumer.h @@ -159,6 +159,11 @@ class ConsumerSocket : public BaseSocket { void connect() override; /** + * @brief Check whether consumer socket is active or not. + */ + bool isRunning() override { return transport_protocol_->isRunning(); } + + /** * Retrieve a content using the protocol specified in the constructor. * This function blocks until the whole content is downloaded. * For monitoring the status of the download, the application MUST set the diff --git a/libtransport/src/hicn/transport/interfaces/socket_producer.h b/libtransport/src/hicn/transport/interfaces/socket_producer.h index 1f1acd401..83d0f73f3 100644 --- a/libtransport/src/hicn/transport/interfaces/socket_producer.h +++ b/libtransport/src/hicn/transport/interfaces/socket_producer.h @@ -51,6 +51,8 @@ class ProducerSocket : public Socket<BasePortal>, void connect() override; + bool isRunning() override { return !io_service_.stopped(); }; + uint32_t produce(Name content_name, const uint8_t *buffer, size_t buffer_size, bool is_last = true, uint32_t start_offset = 0) { return produce(content_name, utils::MemBuf::copyBuffer(buffer, buffer_size), |