Add local address information to edges.
In addition to the remote address, each edge now stores the local address from the point of view of the "from" node. This information is then made available to other nodes through a backwards-compatible extension to ADD_EDGE messages. This information can be used in future code to improve packet routing.
This commit is contained in:
parent
762db91ef7
commit
bfce56d473
5 changed files with 36 additions and 11 deletions
|
|
@ -822,6 +822,16 @@ bool ack_h(connection_t *c, const char *request) {
|
|||
sockaddr2str(&c->address, &hisaddress, NULL);
|
||||
c->edge->address = str2sockaddr(hisaddress, hisport);
|
||||
free(hisaddress);
|
||||
sockaddr_t local_sa;
|
||||
socklen_t local_salen = sizeof local_sa;
|
||||
if (getsockname(c->socket, &local_sa.sa, &local_salen) < 0)
|
||||
logger(DEBUG_ALWAYS, LOG_WARNING, "Could not get local socket address for connection with %s", c->name);
|
||||
else {
|
||||
char *local_address;
|
||||
sockaddr2str(&local_sa, &local_address, NULL);
|
||||
c->edge->local_address = str2sockaddr(local_address, myport);
|
||||
free(local_address);
|
||||
}
|
||||
c->edge->weight = (weight + c->estimated_weight) / 2;
|
||||
c->edge->connection = c;
|
||||
c->edge->options = c->options;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue