WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Affero General Public License for more details.
-
+
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ SPDX-License-Identifier: AGPL3.0-or-later
*/
/**
* @file transport/plugin_transport_tcp.c
* Our external IP address/port mapping has changed.
*
* @param cls closure, the `struct Plugin`
+ * @param app_ctx[in,out] location where the app can store stuff
+ * on add and retrieve it on remove
* @param add_remove #GNUNET_YES to mean the new public IP address, #GNUNET_NO to mean
* the previous (now invalid) one
* @param ac address class the address belongs to
*/
static void
tcp_nat_port_map_callback (void *cls,
+ void **app_ctx,
int add_remove,
enum GNUNET_NAT_AddressClass ac,
const struct sockaddr *addr,
void *arg;
size_t args;
+ (void) app_ctx;
LOG (GNUNET_ERROR_TYPE_INFO,
"NAT notification to %s address `%s'\n",
(GNUNET_YES == add_remove) ? "add" : "remove",
args = sizeof (t4);
break;
case AF_INET6:
+ if (IN6_IS_ADDR_LINKLOCAL (&((struct sockaddr_in6 *) addr)->sin6_addr))
+ {
+ /* skip link local, we don't allow them in
+ #tcp_plugin_check_address() */
+ return;
+ }
GNUNET_assert(addrlen == sizeof(struct sockaddr_in6));
memset (&t6, 0, sizeof(t6));
GNUNET_memcpy (&t6.ipv6_addr,