summaryrefslogtreecommitdiff
path: root/node/Node.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-04-06 18:27:24 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-04-06 18:27:24 -0700
commit51f46a009a7de20153ff9594a407c55684468a1e (patch)
treef247a785078edf5ee4336bc2d7657a6d389a5ef7 /node/Node.cpp
parent8001b2c0cb6d35bfbc7b7be78d1a8b6d0fafbd53 (diff)
downloadinfinitytier-51f46a009a7de20153ff9594a407c55684468a1e.tar.gz
infinitytier-51f46a009a7de20153ff9594a407c55684468a1e.zip
Multicast group join/leave and group membership announcement.
Diffstat (limited to 'node/Node.cpp')
-rw-r--r--node/Node.cpp22
1 files changed, 19 insertions, 3 deletions
diff --git a/node/Node.cpp b/node/Node.cpp
index 29262eda..2167d9c1 100644
--- a/node/Node.cpp
+++ b/node/Node.cpp
@@ -151,10 +151,18 @@ ZT1_ResultCode Node::leave(uint64_t nwid)
ZT1_ResultCode Node::multicastSubscribe(uint64_t nwid,uint64_t multicastGroup,unsigned long multicastAdi)
{
+ Mutex::Lock _l(_networks_m);
+ std::map< uint64_t,SharedPtr<Network> >::iterator nw(_networks.find(nwid));
+ if (nw != _networks.end())
+ nw->second->multicastSubscribe(MulticastGroup(MAC(multicastGroup,(uint32_t)(multicastAdi & 0xffffffff))));
}
ZT1_ResultCode Node::multicastUnsubscribe(uint64_t nwid,uint64_t multicastGroup,unsigned long multicastAdi)
{
+ Mutex::Lock _l(_networks_m);
+ std::map< uint64_t,SharedPtr<Network> >::iterator nw(_networks.find(nwid));
+ if (nw != _networks.end())
+ nw->second->multicastUnsubscribe(MulticastGroup(MAC(multicastGroup,(uint32_t)(multicastAdi & 0xffffffff))));
}
void Node::status(ZT1_NodeStatus *status)
@@ -167,9 +175,17 @@ ZT1_PeerList *Node::peers()
ZT1_VirtualNetworkConfig *Node::networkConfig(uint64_t nwid)
{
+ Mutex::Lock _l(_networks_m);
+ std::map< uint64_t,SharedPtr<Network> >::iterator nw(_networks.find(nwid));
+ if (nw != _networks.end()) {
+ ZT1_VirtualNetworkConfig *nc = (ZT1_VirtualNetworkConfig *)::malloc(sizeof(ZT1_VirtualNetworkConfig));
+ nw->second->externalConfig(nc);
+ return nc;
+ }
+ return (ZT1_VirtualNetworkConfig *)0;
}
-ZT1_VirtualNetworkList *Node::listNetworks()
+ZT1_VirtualNetworkList *Node::networks()
{
}
@@ -344,7 +360,7 @@ void ZT1_Node_status(ZT1_Node *node,ZT1_NodeStatus *status)
ZT1_PeerList *ZT1_Node_peers(ZT1_Node *node)
{
try {
- return reinterpret_cast<ZeroTier::Node *>(node)->peers();
+ return reinterpret_cast<ZeroTier::Node *>(node)->listPeers();
} catch ( ... ) {
return (ZT1_PeerList *)0;
}
@@ -359,7 +375,7 @@ ZT1_VirtualNetworkConfig *ZT1_Node_networkConfig(ZT1_Node *node,uint64_t nwid)
}
}
-ZT1_VirtualNetworkList *ZT1_Node_listNetworks(ZT1_Node *node)
+ZT1_VirtualNetworkList *ZT1_Node_networks(ZT1_Node *node)
{
try {
return reinterpret_cast<ZeroTier::Node *>(node)->listNetworks();