| 1047 | } |
| 1048 | |
| 1049 | void ThreadOpenAddedConnections() { |
| 1050 | { |
| 1051 | LOCK(cs_vAddedNodes); |
| 1052 | vAddedNodes = SysCfg().GetMultiArgs("-addnode"); |
| 1053 | } |
| 1054 | |
| 1055 | if (HaveNameProxy()) { |
| 1056 | while (true) { |
| 1057 | list<string> lAddresses(0); |
| 1058 | { |
| 1059 | LOCK(cs_vAddedNodes); |
| 1060 | for (auto& strAddNode : vAddedNodes) |
| 1061 | lAddresses.push_back(strAddNode); |
| 1062 | } |
| 1063 | for (auto& strAddNode : lAddresses) { |
| 1064 | CAddress addr; |
| 1065 | CSemaphoreGrant grant(*semOutbound); |
| 1066 | OpenNetworkConnection(addr, &grant, strAddNode.c_str()); |
| 1067 | MilliSleep(500); |
| 1068 | } |
| 1069 | MilliSleep(120000); // Retry every 2 minutes |
| 1070 | } |
| 1071 | } |
| 1072 | |
| 1073 | for (uint32_t i = 0; true; i++) { |
| 1074 | list<string> lAddresses(0); |
| 1075 | { |
| 1076 | LOCK(cs_vAddedNodes); |
| 1077 | for (auto& strAddNode : vAddedNodes) |
| 1078 | lAddresses.push_back(strAddNode); |
| 1079 | } |
| 1080 | |
| 1081 | list<vector<CService> > lservAddressesToAdd(0); |
| 1082 | for (auto& strAddNode : lAddresses) { |
| 1083 | vector<CService> vservNode(0); |
| 1084 | if (Lookup(strAddNode.c_str(), vservNode, SysCfg().GetDefaultPort(), fNameLookup, 0)) { |
| 1085 | lservAddressesToAdd.push_back(vservNode); |
| 1086 | { |
| 1087 | LOCK(cs_setservAddNodeAddresses); |
| 1088 | for (auto& serv : vservNode) |
| 1089 | setservAddNodeAddresses.insert(serv); |
| 1090 | } |
| 1091 | } |
| 1092 | } |
| 1093 | // Attempt to connect to each IP for each addnode entry until at least one is successful per addnode entry |
| 1094 | // (keeping in mind that addnode entries can have many IPs if fNameLookup) |
| 1095 | { |
| 1096 | LOCK(cs_vNodes); |
| 1097 | for (auto pNode : vNodes) |
| 1098 | for (list<vector<CService> >::iterator it = lservAddressesToAdd.begin(); |
| 1099 | it != lservAddressesToAdd.end(); it++) |
| 1100 | for (auto& addrNode : *(it)) |
| 1101 | if (pNode->addr == addrNode) { |
| 1102 | it = lservAddressesToAdd.erase(it); |
| 1103 | it--; |
| 1104 | break; |
| 1105 | } |
| 1106 | } |
nothing calls this directly
no test coverage detected