All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.wavesplatform.settings.NetworkSettings.scala Maven / Gradle / Ivy

The newest version!
package com.wavesplatform.settings

import com.wavesplatform.network.TrafficLogger
import com.wavesplatform.utils.*
import java.io.File
import java.net.{InetSocketAddress, URI}
import scala.concurrent.duration.FiniteDuration
import scala.util.Random

case class UPnPSettings(enable: Boolean, gatewayTimeout: FiniteDuration, discoverTimeout: FiniteDuration)

case class NetworkSettings(
    file: Option[File],
    bindAddress: Option[String],
    port: Option[Int],
    declaredAddress: Option[String],
    nodeName: Option[String],
    nonce: Option[Long],
    knownPeers: Seq[String],
    peersDataResidenceTime: FiniteDuration,
    blackListResidenceTime: FiniteDuration,
    breakIdleConnectionsTimeout: FiniteDuration,
    maxInboundConnections: Int,
    maxOutboundConnections: Int,
    maxSingleHostConnections: Int,
    minConnections: Option[Int],
    connectionTimeout: FiniteDuration,
    maxUnverifiedPeers: Int,
    enablePeersExchange: Boolean,
    enableBlacklisting: Boolean,
    peersBroadcastInterval: FiniteDuration,
    handshakeTimeout: FiniteDuration,
    suspensionResidenceTime: FiniteDuration,
    receivedTxsCacheTimeout: FiniteDuration,
    upnp: UPnPSettings,
    trafficLogger: TrafficLogger.Settings
) {

  val derivedDeclaredAddress: Option[InetSocketAddress] = declaredAddress.map { address =>
    val uri = new URI(s"my://$address")
    new InetSocketAddress(uri.getHost, uri.getPort)
  }

  val derivedNonce: Long = nonce.getOrElse(NetworkSettings.randomNonce)

  val derivedNodeName: String = nodeName.getOrElse(s"Node-$derivedNonce")
  require(
    derivedNodeName.utf8Bytes.length <= NetworkSettings.MaxNodeNameBytesLength,
    s"Node name should have length less than ${NetworkSettings.MaxNodeNameBytesLength} bytes"
  )

  val derivedBindAddress: Option[InetSocketAddress] = for {
    addr <- bindAddress
    p    <- port
  } yield new InetSocketAddress(addr, p)

  val maxConnectionsPerHost: Int = maxSingleHostConnections

  val uPnPSettings: UPnPSettings = upnp
}

object NetworkSettings {
  val MaxNodeNameBytesLength = 127

  def randomNonce: Long = {
    val base = 1000
    (Random.nextInt(base) + base) * Random.nextInt(base) + Random.nextInt(base)
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy