@@ -318,19 +318,44 @@ static struct io_plan *handshake_in_success(struct io_conn *conn,
318318 node_id_from_pubkey (& id , id_key );
319319 status_peer_debug (& id , "Connect IN" );
320320
321+ // Retrieve and print local addresses and ports
322+ struct sockaddr_in local_addr ;
323+ socklen_t addr_len = sizeof (struct sockaddr_in );
324+
325+ // Get local address and port
326+ if (getsockname (io_conn_fd (conn ), (struct sockaddr * )& local_addr , & addr_len ) == -1 ) {
327+ perror ("getsockname failed" );
328+ } else {
329+ fprintf (stderr , "--> Listening on %s:%d\n" ,
330+ inet_ntoa (local_addr .sin_addr ),
331+ ntohs (local_addr .sin_port ));
332+ }
333+
321334 /* Confirm that peer connects to the alt-bind-addr you sent */
322335 if (daemon -> alt_bind_addr ) {
323- char * incoming_addr = fmt_wireaddr_internal (tmpctx , addr );
324- fprintf (stderr , "--> incoming connection addr: '%s'\n" , incoming_addr );
325-
326- char * bind_addrs = tal_strdup (NULL , (char * )daemon -> alt_bind_addr );
336+ char listening_addr [INET_ADDRSTRLEN ];
337+ inet_ntop (AF_INET , & (local_addr .sin_addr ), listening_addr , INET_ADDRSTRLEN );
338+ int listening_port = ntohs (local_addr .sin_port );
339+
340+ // Create a string with the full address including port
341+ char full_listening_addr [INET_ADDRSTRLEN + 6 ]; // Extra space for ':port'
342+ snprintf (full_listening_addr ,
343+ sizeof (full_listening_addr ),
344+ "%s:%d" ,
345+ listening_addr ,
346+ listening_port );
347+
348+ char * bind_addrs = tal_strdup (tmpctx , (char * )daemon -> alt_bind_addr );
327349 char * token = strtok (bind_addrs , "," );
328350
329351 while (token != NULL ) {
330- fprintf (stderr , "--> comparing '%s' with token '%s'\n" , incoming_addr , token );
331- if (strcmp (incoming_addr , token ) == 0 ) {
352+ fprintf (stderr , "--> comparing '%s' with token '%s'\n" , full_listening_addr , token );
353+ if (strcmp (full_listening_addr , token ) == 0 ) {
354+ char * whitelist_addr = tal_strdup (tmpctx , full_listening_addr );
332355 fprintf (stderr , "--> INSIDE\n" );
333- towire_connectd_alt_addr_whitelist (tmpctx , id_key , (u8 * )incoming_addr );
356+ u8 * msg = towire_connectd_alt_addr_whitelist (NULL , id_key , (u8 * )whitelist_addr );
357+ daemon_conn_send (daemon -> master , take (msg ));
358+ tal_free (whitelist_addr );
334359 break ;
335360 }
336361 token = strtok (NULL , "," );
@@ -533,18 +558,18 @@ static struct io_plan *connection_in(struct io_conn *conn,
533558
534559void handle_peer_alt_addr (struct peer * peer , const u8 * msg )
535560{
536- u8 * peer_alt_addr ;
561+ u8 * peer_alt_addrs ;
537562 struct pubkey peer_id ;
538563 /* FIXME(maxrantil): u32 *timestamp = NULL; */
539564
540- if (!fromwire_peer_alt_addr (peer , msg , & peer_id , & peer_alt_addr /* FIXME(maxrantil): , timestamp */ )) {
565+ if (!fromwire_peer_alt_addr (peer , msg , & peer_id , & peer_alt_addrs /* FIXME(maxrantil): , timestamp */ )) {
541566 master_badmsg (WIRE_PEER_ALT_ADDR , msg );
542567 }
543568
544- u8 * fwd_msg = towire_connectd_alt_addr ( NULL , & peer_id , peer_alt_addr );
569+ u8 * fwd_msg = towire_connectd_peer_alt_addr ( tmpctx , & peer_id , peer_alt_addrs );
545570 daemon_conn_send (peer -> daemon -> master , take (fwd_msg ));
546571
547- tal_free (peer_alt_addr ); /* FIXME(maxrantil): Investigare further on freeing like this */
572+ tal_free (peer_alt_addrs ); /* FIXME(maxrantil): Investigare further on freeing like this */
548573}
549574
550575/*~ <hello>I speak web socket</hello>.
@@ -2135,14 +2160,17 @@ static void handle_alt_addr_whitelist_reply(struct daemon *daemon, const u8 *msg
21352160 u8 * incoming_addr ;
21362161 bool is_whitelisted ;
21372162
2138- fprintf (stderr , "INSIDE WHITELIST\n" );
2139-
21402163 if (!fromwire_connectd_alt_addr_whitelist_reply (tmpctx ,
2141- msg , & p_pk , & incoming_addr , & is_whitelisted )) {
2164+ msg ,
2165+ & p_pk ,
2166+ & incoming_addr ,
2167+ & is_whitelisted )) {
21422168 master_badmsg (WIRE_CONNECTD_ALT_ADDR_WHITELIST_REPLY , msg );
21432169 return ;
21442170 }
21452171
2172+ fprintf (stderr , "INSIDE handle_alt_addr_whitelist_reply\n" );
2173+
21462174 struct node_id id ;
21472175 node_id_from_pubkey (& id , & p_pk );
21482176 peer = peer_htable_get (daemon -> peers , & id );
@@ -2155,12 +2183,14 @@ static void handle_alt_addr_whitelist_reply(struct daemon *daemon, const u8 *msg
21552183
21562184 if (is_whitelisted ) {
21572185 status_peer_unusual (& peer -> id ,
2158- "Peer's address %s is in the whitelist. Accepting connection." ,
2159- incoming_addr );
2186+ "Peer's address %s is in the whitelist. Accepting connection." ,
2187+ incoming_addr );
2188+ fprintf (stderr , "END GOAL! YES\n" );
21602189 } else {
21612190 status_peer_unusual (& peer -> id ,
2162- "Connection attempt from address %s which is not in the whitelist. The peer has not received an alternative address from me. Closing connection." ,
2163- incoming_addr );
2191+ "Connection attempt from address %s which is not in the whitelist. The peer has not received an alternative address from me. Closing connection." ,
2192+ incoming_addr );
2193+ fprintf (stderr , "END GOAL! NO\n" );
21642194 io_close (peer -> to_peer );
21652195 }
21662196}
@@ -2267,7 +2297,7 @@ static struct io_plan *recv_req(struct io_conn *conn,
22672297 case WIRE_CONNECTD_CUSTOMMSG_IN :
22682298 case WIRE_CONNECTD_PEER_DISCONNECT_DONE :
22692299 case WIRE_CONNECTD_START_SHUTDOWN_REPLY :
2270- case WIRE_CONNECTD_ALT_ADDR :
2300+ case WIRE_CONNECTD_PEER_ALT_ADDR :
22712301 case WIRE_CONNECTD_ALT_ADDR_WHITELIST :
22722302 break ;
22732303 }
0 commit comments