Merge branch 'GermanAizek-master'
This commit is contained in:
@@ -161,7 +161,7 @@ int zts_start_with_identity(const char *key_pair_str, uint16_t key_buf_len,
|
|||||||
|
|
||||||
serviceParameters *params = new serviceParameters();
|
serviceParameters *params = new serviceParameters();
|
||||||
params->port = port;
|
params->port = port;
|
||||||
params->path = "";
|
params->path.clear();
|
||||||
|
|
||||||
Identity id;
|
Identity id;
|
||||||
if ((strlen(key_pair_str) > 32) && (key_pair_str[10] == ':')) {
|
if ((strlen(key_pair_str) > 32) && (key_pair_str[10] == ':')) {
|
||||||
@@ -285,6 +285,7 @@ int zts_start(const char *path, void (*callback)(void *), uint16_t port)
|
|||||||
params->path = std::string(path);
|
params->path = std::string(path);
|
||||||
|
|
||||||
if (params->path.length() == 0) {
|
if (params->path.length() == 0) {
|
||||||
|
delete params;
|
||||||
return ZTS_ERR_ARG;
|
return ZTS_ERR_ARG;
|
||||||
}
|
}
|
||||||
int err;
|
int err;
|
||||||
|
|||||||
@@ -394,9 +394,10 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(std::vector< std::pair< uint64_t,std::pair< std::vector<MulticastGroup>,std::vector<MulticastGroup> > > >::iterator c(mgChanges.begin());c!=mgChanges.end();++c) {
|
for(std::vector< std::pair< uint64_t,std::pair< std::vector<MulticastGroup>,std::vector<MulticastGroup> > > >::iterator c(mgChanges.begin());c!=mgChanges.end();++c) {
|
||||||
for(std::vector<MulticastGroup>::iterator m(c->second.first.begin());m!=c->second.first.end();++m)
|
auto mgpair = c->second;
|
||||||
|
for(std::vector<MulticastGroup>::iterator m(mgpair.first.begin());m!= mgpair.first.end();++m)
|
||||||
_node->multicastSubscribe((void *)0,c->first,m->mac().toInt(),m->adi());
|
_node->multicastSubscribe((void *)0,c->first,m->mac().toInt(),m->adi());
|
||||||
for(std::vector<MulticastGroup>::iterator m(c->second.second.begin());m!=c->second.second.end();++m)
|
for(std::vector<MulticastGroup>::iterator m(mgpair.second.begin());m!= mgpair.second.end();++m)
|
||||||
_node->multicastUnsubscribe(c->first,m->mac().toInt(),m->adi());
|
_node->multicastUnsubscribe(c->first,m->mac().toInt(),m->adi());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -823,39 +824,40 @@ public:
|
|||||||
// Generate messages to be dequeued by the callback message thread
|
// Generate messages to be dequeued by the callback message thread
|
||||||
Mutex::Lock _l(_nets_m);
|
Mutex::Lock _l(_nets_m);
|
||||||
for(std::map<uint64_t,NetworkState>::iterator n(_nets.begin());n!=_nets.end();++n) {
|
for(std::map<uint64_t,NetworkState>::iterator n(_nets.begin());n!=_nets.end();++n) {
|
||||||
int mostRecentStatus = n->second.config.status;
|
auto netState = n->second;
|
||||||
VirtualTap *tap = n->second.tap;
|
int mostRecentStatus = netState.config.status;
|
||||||
|
VirtualTap *tap = netState.tap;
|
||||||
// uint64_t nwid = n->first;
|
// uint64_t nwid = n->first;
|
||||||
if (n->second.tap->_networkStatus == mostRecentStatus) {
|
if (netState.tap->_networkStatus == mostRecentStatus) {
|
||||||
continue; // No state change
|
continue; // No state change
|
||||||
}
|
}
|
||||||
switch (mostRecentStatus) {
|
switch (mostRecentStatus) {
|
||||||
case ZT_NETWORK_STATUS_NOT_FOUND:
|
case ZT_NETWORK_STATUS_NOT_FOUND:
|
||||||
_enqueueEvent(ZTS_EVENT_NETWORK_NOT_FOUND, (void*)prepare_network_details_msg(n->second));
|
_enqueueEvent(ZTS_EVENT_NETWORK_NOT_FOUND, (void*)prepare_network_details_msg(netState));
|
||||||
break;
|
break;
|
||||||
case ZT_NETWORK_STATUS_CLIENT_TOO_OLD:
|
case ZT_NETWORK_STATUS_CLIENT_TOO_OLD:
|
||||||
_enqueueEvent(ZTS_EVENT_NETWORK_CLIENT_TOO_OLD, (void*)prepare_network_details_msg(n->second));
|
_enqueueEvent(ZTS_EVENT_NETWORK_CLIENT_TOO_OLD, (void*)prepare_network_details_msg(netState));
|
||||||
break;
|
break;
|
||||||
case ZT_NETWORK_STATUS_REQUESTING_CONFIGURATION:
|
case ZT_NETWORK_STATUS_REQUESTING_CONFIGURATION:
|
||||||
_enqueueEvent(ZTS_EVENT_NETWORK_REQ_CONFIG, (void*)prepare_network_details_msg(n->second));
|
_enqueueEvent(ZTS_EVENT_NETWORK_REQ_CONFIG, (void*)prepare_network_details_msg(netState));
|
||||||
break;
|
break;
|
||||||
case ZT_NETWORK_STATUS_OK:
|
case ZT_NETWORK_STATUS_OK:
|
||||||
if (tap->hasIpv4Addr() && _lwip_is_netif_up(tap->netif4)) {
|
if (tap->hasIpv4Addr() && _lwip_is_netif_up(tap->netif4)) {
|
||||||
_enqueueEvent(ZTS_EVENT_NETWORK_READY_IP4, (void*)prepare_network_details_msg(n->second));
|
_enqueueEvent(ZTS_EVENT_NETWORK_READY_IP4, (void*)prepare_network_details_msg(netState));
|
||||||
}
|
}
|
||||||
if (tap->hasIpv6Addr() && _lwip_is_netif_up(tap->netif6)) {
|
if (tap->hasIpv6Addr() && _lwip_is_netif_up(tap->netif6)) {
|
||||||
_enqueueEvent(ZTS_EVENT_NETWORK_READY_IP6, (void*)prepare_network_details_msg(n->second));
|
_enqueueEvent(ZTS_EVENT_NETWORK_READY_IP6, (void*)prepare_network_details_msg(netState));
|
||||||
}
|
}
|
||||||
// In addition to the READY messages, send one OK message
|
// In addition to the READY messages, send one OK message
|
||||||
_enqueueEvent(ZTS_EVENT_NETWORK_OK, (void*)prepare_network_details_msg(n->second));
|
_enqueueEvent(ZTS_EVENT_NETWORK_OK, (void*)prepare_network_details_msg(netState));
|
||||||
break;
|
break;
|
||||||
case ZT_NETWORK_STATUS_ACCESS_DENIED:
|
case ZT_NETWORK_STATUS_ACCESS_DENIED:
|
||||||
_enqueueEvent(ZTS_EVENT_NETWORK_ACCESS_DENIED, (void*)prepare_network_details_msg(n->second));
|
_enqueueEvent(ZTS_EVENT_NETWORK_ACCESS_DENIED, (void*)prepare_network_details_msg(netState));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
n->second.tap->_networkStatus = mostRecentStatus;
|
netState.tap->_networkStatus = mostRecentStatus;
|
||||||
}
|
}
|
||||||
bool bShouldCopyPeerInfo = false;
|
bool bShouldCopyPeerInfo = false;
|
||||||
int eventCode = 0;
|
int eventCode = 0;
|
||||||
@@ -1395,7 +1397,7 @@ void *_runNodeService(void *arg)
|
|||||||
service = NodeService::newInstance(params->path.c_str(),params->port);
|
service = NodeService::newInstance(params->path.c_str(),params->port);
|
||||||
service->_userProvidedPort = params->port;
|
service->_userProvidedPort = params->port;
|
||||||
service->_userProvidedPath = params->path;
|
service->_userProvidedPath = params->path;
|
||||||
if (strlen(params->publicIdentityStr) > 0 && strlen(params->secretIdentityStr) > 0 && params->path.length() == 0) {
|
if (params->publicIdentityStr[0] != '\0' && params->secretIdentityStr[0] != '\0' && params->path.length() == 0) {
|
||||||
memcpy(service->_userProvidedPublicIdentity, params->publicIdentityStr, strlen(params->publicIdentityStr));
|
memcpy(service->_userProvidedPublicIdentity, params->publicIdentityStr, strlen(params->publicIdentityStr));
|
||||||
memcpy(service->_userProvidedSecretIdentity, params->secretIdentityStr, strlen(params->secretIdentityStr));
|
memcpy(service->_userProvidedSecretIdentity, params->secretIdentityStr, strlen(params->secretIdentityStr));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -180,8 +180,8 @@ bool VirtualTap::addIp(const InetAddress &ip)
|
|||||||
bool VirtualTap::removeIp(const InetAddress &ip)
|
bool VirtualTap::removeIp(const InetAddress &ip)
|
||||||
{
|
{
|
||||||
Mutex::Lock _l(_ips_m);
|
Mutex::Lock _l(_ips_m);
|
||||||
std::vector<InetAddress>::iterator i(std::find(_ips.begin(),_ips.end(),ip));
|
|
||||||
if (std::find(_ips.begin(),_ips.end(),ip) != _ips.end()) {
|
if (std::find(_ips.begin(),_ips.end(),ip) != _ips.end()) {
|
||||||
|
std::vector<InetAddress>::iterator i(std::find(_ips.begin(), _ips.end(), ip));
|
||||||
_lwip_remove_address_from_netif((void*)this, ip);
|
_lwip_remove_address_from_netif((void*)this, ip);
|
||||||
_ips.erase(i);
|
_ips.erase(i);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user