protected void updateRegistrationData(Map<String, Object> payload) {
    int puncher_num = 0;

    int num_registered = 0;

    for (DHTNATPuncher nat_ipv4 : nat_punchers_ipv4) {

      DHTTransportContact rend = nat_ipv4.getRendezvous();
      DHTTransportContact lc = nat_ipv4.getLocalContact();

      if (rend != null && lc != null) {

        puncher_num++;

        InetSocketAddress rend_address = rend.getTransportAddress();

        num_registered++;

        payload.put(
            "rc_v4-" + puncher_num,
            rend_address.getAddress().getHostAddress() + ":" + rend_address.getPort());

        if (puncher_num == 1) {

          payload.put(
              "rl_v4",
              lc.getExternalAddress().getAddress().getHostAddress()
                  + ":"
                  + lc.getAddress().getPort());
        }
      }
    }

    puncher_num = 0;

    for (DHTNATPuncher nat_ipv6 : nat_punchers_ipv6) {

      DHTTransportContact rend = nat_ipv6.getRendezvous();
      DHTTransportContact lc = nat_ipv6.getLocalContact();

      if (rend != null && lc != null) {

        puncher_num++;

        InetSocketAddress rend_address = rend.getTransportAddress();

        num_registered++;

        payload.put(
            "rc_v6-" + puncher_num,
            rend_address.getAddress().getHostAddress() + ":" + rend_address.getPort());

        if (puncher_num == 1) {

          payload.put(
              "rl_v6",
              lc.getExternalAddress().getAddress().getHostAddress()
                  + ":"
                  + lc.getAddress().getPort());
        }
      }
    }

    if (num_registered != last_punchers_registered) {

      last_punchers_registered = num_registered;

      manager.updateSRPState();
    }
  }