summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/erebos/network.h3
-rw-r--r--src/main.cpp17
-rw-r--r--src/network.cpp7
-rw-r--r--test/attach.test18
-rw-r--r--test/discovery.test10
-rw-r--r--test/sync.test18
6 files changed, 50 insertions, 23 deletions
diff --git a/include/erebos/network.h b/include/erebos/network.h
index 252c3c7..07ae586 100644
--- a/include/erebos/network.h
+++ b/include/erebos/network.h
@@ -6,6 +6,8 @@
#include <functional>
#include <typeinfo>
+struct sockaddr_in;
+
namespace erebos {
class Server
@@ -54,6 +56,7 @@ public:
std::string name() const;
std::optional<Identity> identity() const;
+ const struct sockaddr_in & address() const;
bool hasChannel() const;
bool send(UUID, const Ref &) const;
diff --git a/src/main.cpp b/src/main.cpp
index a3805e0..b061747 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -4,6 +4,10 @@
#include <erebos/storage.h>
#include <erebos/sync.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+
#include <filesystem>
#include <functional>
#include <future>
@@ -140,11 +144,16 @@ void startServer(const vector<string> &)
server->peerList().onUpdate([](size_t idx, const Peer * peer) {
ostringstream ss;
- ss << "peer " << idx;
+ ss << "peer " << idx + 1;
if (peer) {
- ss << " " << peer->name();
- if (peer->identity() && peer->identity()->name())
- ss << " " << *peer->identity()->name();
+ if (peer->identity()) {
+ ss << " id";
+ for (auto idt = peer->identity(); idt; idt = idt->owner())
+ ss << " " << (idt->name() ? *idt->name() : "<unnamed>");
+ } else {
+ const auto & paddr = peer->address();
+ ss << " addr " << inet_ntoa(paddr.sin_addr) << " " << ntohs(paddr.sin_port);
+ }
} else {
ss << " deleted";
}
diff --git a/src/network.cpp b/src/network.cpp
index 1d38bdd..b735262 100644
--- a/src/network.cpp
+++ b/src/network.cpp
@@ -116,6 +116,13 @@ optional<Identity> Peer::identity() const
return nullopt;
}
+const sockaddr_in & Peer::address() const
+{
+ if (auto speer = p->speer.lock())
+ return speer->addr;
+ throw runtime_error("Server no longer running");
+}
+
void Peer::Priv::notifyWatchers()
{
if (auto slist = list.lock()) {
diff --git a/test/attach.test b/test/attach.test
index 4e2238e..7115b55 100644
--- a/test/attach.test
+++ b/test/attach.test
@@ -7,19 +7,23 @@ test:
send "watch-local-identity" to p2
send "start-server" to p1
send "start-server" to p2
- expect /local-identity Device1 Owner/ from p1
- expect /local-identity Device2/ from p2
- expect /peer [0-9]+ 192.168.0.12:29665/ from p1
- expect /peer [0-9]+ 192.168.0.11:29665/ from p2
- expect /peer [0-9]+ Device2 Device2/ from p1
- expect /peer [0-9]+ Owner Device1/ from p2
+ expect from p1:
+ /local-identity Device1 Owner/
+ /peer 1 addr 192.168.0.12 29665/
+ /peer 1 id Device2/
+ expect from p2:
+ /local-identity Device2/
+ /peer 1 addr 192.168.0.11 29665/
+ /peer 1 id Device1 Owner/
+
send "attach Owner" to p2
expect /attach-confirm .*/ from p1
expect /attach-confirm .*/ from p2
# TODO: check code match
+
send "attach-accept Device2 1" to p1
send "attach-accept Owner 1" to p2
expect /attach-result Device2 1/ from p1
expect /attach-result Owner 1/ from p2
expect /local-identity Device2 Owner/ from p2
- expect /peer [0-9]+ Owner Device2/ from p1
+ expect /peer 1 id Device2 Owner/ from p1
diff --git a/test/discovery.test b/test/discovery.test
index aba6b15..60db1dc 100644
--- a/test/discovery.test
+++ b/test/discovery.test
@@ -5,7 +5,9 @@ test:
send "create-identity Device2" to p2
send "start-server" to p1
send "start-server" to p2
- expect /peer [0-9]+ 192.168.0.12:29665/ from p1
- expect /peer [0-9]+ 192.168.0.11:29665/ from p2
- expect /peer [0-9]+ Device2 Device2/ from p1
- expect /peer [0-9]+ Device1 Device1/ from p2
+ expect from p1:
+ /peer 1 addr 192.168.0.12 29665/
+ /peer 1 id Device2/
+ expect from p2:
+ /peer 1 addr 192.168.0.11 29665/
+ /peer 1 id Device1/
diff --git a/test/sync.test b/test/sync.test
index 2480ce9..8cf5b4d 100644
--- a/test/sync.test
+++ b/test/sync.test
@@ -9,13 +9,15 @@ test:
send "create-identity Device2" to p2
send "start-server" to p1
send "start-server" to p2
- expect /local-identity Device1 Owner/ from p1
- expect /local-identity Device2/ from p2
- expect /shared-identity Owner/ from p1
- expect /peer [0-9]+ 192.168.0.12:29665/ from p1
- expect /peer [0-9]+ 192.168.0.11:29665/ from p2
- expect /peer [0-9]+ Device2 Device2/ from p1
- expect /peer [0-9]+ Owner Device1/ from p2
+ expect from p1:
+ /local-identity Device1 Owner/
+ /shared-identity Owner/
+ /peer 1 addr 192.168.0.12 29665/
+ /peer 1 id Device2/
+ expect from p2:
+ /local-identity Device2/
+ /peer 1 addr 192.168.0.11 29665/
+ /peer 1 id Device1 Owner/
send "attach Owner" to p2
expect /attach-confirm .*/ from p1
@@ -28,7 +30,7 @@ test:
expect /attach-result Owner 1/ from p2
expect /local-identity Device2 Owner/ from p2
expect /shared-identity Owner/ from p2
- expect /peer [0-9]+ Owner Device2/ from p1
+ expect /peer 1 id Device2 Owner/ from p1
send "update-shared-identity NewOwner" to p1
expect /shared-identity NewOwner/ from p1