pushes our own address to a peer
| 178 | |
| 179 | // pushes our own address to a peer |
| 180 | void AdvertiseLocal(CNode *pnode) |
| 181 | { |
| 182 | if (fListen && pnode->fSuccessfullyConnected) |
| 183 | { |
| 184 | CAddress addrLocal = GetLocalAddress(&pnode->addr, pnode->GetLocalServices()); |
| 185 | if (gArgs.GetBoolArg("-addrmantest", false)) { |
| 186 | // use IPv4 loopback during addrmantest |
| 187 | addrLocal = CAddress(CService(LookupNumeric("127.0.0.1", GetListenPort())), pnode->GetLocalServices()); |
| 188 | } |
| 189 | // If discovery is enabled, sometimes give our peer the address it |
| 190 | // tells us that it sees us as in case it has a better idea of our |
| 191 | // address than we do. |
| 192 | if (IsPeerAddrLocalGood(pnode) && (!addrLocal.IsRoutable() || |
| 193 | GetRand((GetnScore(addrLocal) > LOCAL_MANUAL) ? 8:2) == 0)) |
| 194 | { |
| 195 | addrLocal.SetIP(pnode->GetAddrLocal()); |
| 196 | } |
| 197 | if (addrLocal.IsRoutable() || gArgs.GetBoolArg("-addrmantest", false)) |
| 198 | { |
| 199 | LogPrint(BCLog::NET, "AdvertiseLocal: advertising address %s\n", addrLocal.ToString()); |
| 200 | FastRandomContext insecure_rand; |
| 201 | pnode->PushAddress(addrLocal, insecure_rand); |
| 202 | } |
| 203 | } |
| 204 | } |
| 205 | |
| 206 | // learn a new local address |
| 207 | bool AddLocal(const CService& addr, int nScore) |