MCPcopy Create free account
hub / github.com/ElementsProject/lightning / get_remote_address

Function get_remote_address

connectd/connectd.c:486–519  ·  view source on GitHub ↗

~ So, where are you from? */

Source from the content-addressed store, hash-verified

484
485/*~ So, where are you from? */
486static bool get_remote_address(struct io_conn *conn,
487 struct wireaddr_internal *addr)
488{
489 struct sockaddr_storage s = {};
490 socklen_t len = sizeof(s);
491
492 /* The cast here is a weird Berkeley sockets API feature... */
493 if (getpeername(io_conn_fd(conn), (struct sockaddr *)&s, &len) != 0) {
494 status_debug("Failed to get peername for incoming conn: %s",
495 strerror(errno));
496 return false;
497 }
498
499 if (s.ss_family == AF_INET6) {
500 struct sockaddr_in6 *s6 = (void *)&s;
501 addr->itype = ADDR_INTERNAL_WIREADDR;
502 wireaddr_from_ipv6(&addr->u.wireaddr.wireaddr,
503 &s6->sin6_addr, ntohs(s6->sin6_port));
504 } else if (s.ss_family == AF_INET) {
505 struct sockaddr_in *s4 = (void *)&s;
506 addr->itype = ADDR_INTERNAL_WIREADDR;
507 wireaddr_from_ipv4(&addr->u.wireaddr.wireaddr,
508 &s4->sin_addr, ntohs(s4->sin_port));
509 } else if (s.ss_family == AF_UNIX) {
510 struct sockaddr_un *sun = (void *)&s;
511 addr->itype = ADDR_INTERNAL_SOCKNAME;
512 memcpy(addr->u.sockname, sun->sun_path, sizeof(sun->sun_path));
513 } else {
514 status_broken("Unknown socket type %i for incoming conn",
515 s.ss_family);
516 return false;
517 }
518 return true;
519}
520
521/* Nagle had a good idea of making networking more efficient by
522 * inserting a delay, creating a trap for every author of network code

Callers 2

connection_inFunction · 0.85
websocket_connection_inFunction · 0.85

Calls 3

io_conn_fdFunction · 0.85
wireaddr_from_ipv6Function · 0.85
wireaddr_from_ipv4Function · 0.85

Tested by

no test coverage detected