From 1fd779ff9f7793d914a77ae5eef05864abed63ae Mon Sep 17 00:00:00 2001 From: chalith Date: Wed, 8 May 2024 07:47:43 +0530 Subject: [PATCH 1/2] Removed udp visa for peers --- src/p2p/peer_comm_server.cpp | 4 ++-- test/docker/Dockerfile.ubt.20.04-njs | 2 +- test/docker/build.sh | 4 ++-- test/docker/push.sh | 3 ++- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/p2p/peer_comm_server.cpp b/src/p2p/peer_comm_server.cpp index ea24b85f..1fe61564 100644 --- a/src/p2p/peer_comm_server.cpp +++ b/src/p2p/peer_comm_server.cpp @@ -18,7 +18,7 @@ namespace p2p peer_comm_server::peer_comm_server(const uint16_t port, const uint64_t (&metric_thresholds)[5], const uint64_t max_msg_size, const uint64_t max_in_connections, const uint64_t max_in_connections_per_host, const std::vector &req_known_remotes) - : comm::comm_server("Peer", port, metric_thresholds, max_msg_size, max_in_connections, max_in_connections_per_host, true, true), + : comm::comm_server("Peer", port, metric_thresholds, max_msg_size, max_in_connections, max_in_connections_per_host, true, false), req_known_remotes(req_known_remotes) // Copy over known peers into internal collection. { } @@ -171,7 +171,7 @@ namespace p2p const uint16_t port = peer.ip_port.port; LOG_DEBUG << "Trying to connect " << host << ":" << std::to_string(port); - std::variant client_result = hpws::client::connect(conf::ctx.hpws_exe_path, max_msg_size, host, port, "/", {}, util::fork_detach, true, conf::cfg.contract.id, [&]() -> bool + std::variant client_result = hpws::client::connect(conf::ctx.hpws_exe_path, max_msg_size, host, port, "/", {}, util::fork_detach, true, visa_required ? conf::cfg.contract.id : "", [&]() -> bool { return is_shutting_down; }); if (std::holds_alternative(client_result)) diff --git a/test/docker/Dockerfile.ubt.20.04-njs b/test/docker/Dockerfile.ubt.20.04-njs index 3ca8ebef..d03b3e65 100644 --- a/test/docker/Dockerfile.ubt.20.04-njs +++ b/test/docker/Dockerfile.ubt.20.04-njs @@ -1,6 +1,6 @@ # HotPocket (Ubuntu 20.04) + NodeJs -FROM evernode/hotpocket:%ver%-ubt.20.04 +FROM evernode/hotpocket:test-ubt.20.04 # Copy the node binary from build context to the container image. COPY node /usr/bin/ \ No newline at end of file diff --git a/test/docker/build.sh b/test/docker/build.sh index 6dfaa004..f8c112a0 100755 --- a/test/docker/build.sh +++ b/test/docker/build.sh @@ -17,7 +17,7 @@ imgversion=$(echo "${hpversion% }") # imgversion="latest" # Ubuntu base image -docker build -t "$img:$imgversion-ubt.20.04" -t "$img:latest-ubt.20.04" -f ./$basefile $tmp/ +docker build -t "$img:test-ubt.20.04" -f ./$basefile $tmp/ rm -r $tmp/* # NodeJs image @@ -27,6 +27,6 @@ tar -xvJf $tmp/nodejs.tar.xz --strip-components=2 -C $tmp/ node-v20.4.0-linux-x6 rm $tmp/nodejs.tar.xz cp ./$njsfile $tmp/ sed -i "s/%ver%/$imgversion/g" $tmp/$njsfile -docker build -t "$img:$imgversion-ubt.20.04-njs.20" -t "$img:latest-ubt.20.04-njs.20" -f $tmp/$njsfile $tmp +docker build -t "$img:test-ubt.20.04-njs.20" -f $tmp/$njsfile $tmp rm -r $tmp \ No newline at end of file diff --git a/test/docker/push.sh b/test/docker/push.sh index 1cefd176..c631c8f7 100755 --- a/test/docker/push.sh +++ b/test/docker/push.sh @@ -3,4 +3,5 @@ img=evernode/hotpocket -docker image push --all-tags $img \ No newline at end of file +docker image push "$img:test-ubt.20.04" +docker image push "$img:test-ubt.20.04-njs.20" \ No newline at end of file From 7c97aaa18f4a9c8890aa2e965eba4747412077d2 Mon Sep 17 00:00:00 2001 From: Kithmini Gunawardhana Date: Fri, 2 Aug 2024 12:41:26 +0530 Subject: [PATCH 2/2] Modified HPWS binary (with usage of cert chain file) (#398) --- test/bin/hpws | Bin 96512 -> 96608 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/test/bin/hpws b/test/bin/hpws index aa5e24d582416203e54cbc4e6baafcc72439624f..9aca1fdbb4493062b2ed62879578d1d094ec072f 100755 GIT binary patch delta 25372 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