| 1431 | } |
| 1432 | |
| 1433 | void ThreadOpenAddedConnections() |
| 1434 | { |
| 1435 | { |
| 1436 | LOCK(cs_vAddedNodes); |
| 1437 | vAddedNodes = mapMultiArgs["-addnode"]; |
| 1438 | } |
| 1439 | |
| 1440 | if (HaveNameProxy()) { |
| 1441 | while(true) { |
| 1442 | list<string> lAddresses(0); |
| 1443 | { |
| 1444 | LOCK(cs_vAddedNodes); |
| 1445 | BOOST_FOREACH(string& strAddNode, vAddedNodes) |
| 1446 | lAddresses.push_back(strAddNode); |
| 1447 | } |
| 1448 | BOOST_FOREACH(string& strAddNode, lAddresses) { |
| 1449 | CAddress addr; |
| 1450 | CSemaphoreGrant grant(*semOutbound); |
| 1451 | OpenNetworkConnection(addr, false, &grant, strAddNode.c_str()); |
| 1452 | MilliSleep(500); |
| 1453 | } |
| 1454 | MilliSleep(120000); // Retry every 2 minutes |
| 1455 | } |
| 1456 | } |
| 1457 | |
| 1458 | for (unsigned int i = 0; true; i++) |
| 1459 | { |
| 1460 | list<string> lAddresses(0); |
| 1461 | { |
| 1462 | LOCK(cs_vAddedNodes); |
| 1463 | BOOST_FOREACH(string& strAddNode, vAddedNodes) |
| 1464 | lAddresses.push_back(strAddNode); |
| 1465 | } |
| 1466 | |
| 1467 | list<vector<CService> > lservAddressesToAdd(0); |
| 1468 | BOOST_FOREACH(string& strAddNode, lAddresses) |
| 1469 | { |
| 1470 | vector<CService> vservNode(0); |
| 1471 | if(Lookup(strAddNode.c_str(), vservNode, Params().GetDefaultPort(), fNameLookup, 0)) |
| 1472 | { |
| 1473 | lservAddressesToAdd.push_back(vservNode); |
| 1474 | { |
| 1475 | LOCK(cs_setservAddNodeAddresses); |
| 1476 | BOOST_FOREACH(CService& serv, vservNode) |
| 1477 | setservAddNodeAddresses.insert(serv); |
| 1478 | } |
| 1479 | } |
| 1480 | } |
| 1481 | // Attempt to connect to each IP for each addnode entry until at least one is successful per addnode entry |
| 1482 | // (keeping in mind that addnode entries can have many IPs if fNameLookup) |
| 1483 | { |
| 1484 | LOCK(cs_vNodes); |
| 1485 | BOOST_FOREACH(CNode* pnode, vNodes) |
| 1486 | for (list<vector<CService> >::iterator it = lservAddressesToAdd.begin(); it != lservAddressesToAdd.end(); it++) |
| 1487 | BOOST_FOREACH(CService& addrNode, *(it)) |
| 1488 | if (pnode->addr == addrNode) |
| 1489 | { |
| 1490 | it = lservAddressesToAdd.erase(it); |
nothing calls this directly
no test coverage detected