mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-06-21 21:46:39 +00:00

* [NOD-1147] Implement address exchange * [NOD-1147] Put placeholder for source address * [NOD-1147] Fix tests * [NOD-1147] Add comment * [NOD-1147] Remove needAddresses from MsgGetAddr * [NOD-1147] Use rand.Shuffle * [NOD-1147] Remove redundant const * [NOD-1147] Move defer to its correct place * [NOD-1147] Fix typo * [NOD-1147] Use EnqueueWithTimeout for outgoingRoute * [NOD-1147] Rename MsgGetAddr->MsgGetAddresses * [NOD-1147] Rename MsgGetAddr->MsgGetAddresses * [NOD-1147] Rename MsgAddr->MsgAddresses * [NOD-1147] Rename fakeSrcAddr->fakeSourceAddress * [NOD-1147] Remove redundant files * [NOD-1147] CmdAddr -> CmdAddress * [NOD-1147] Rename addr to address in protocol package
74 lines
2.1 KiB
Go
74 lines
2.1 KiB
Go
package sendversion
|
|
|
|
import (
|
|
"github.com/kaspanet/kaspad/blockdag"
|
|
"github.com/kaspanet/kaspad/config"
|
|
"github.com/kaspanet/kaspad/netadapter"
|
|
"github.com/kaspanet/kaspad/netadapter/router"
|
|
"github.com/kaspanet/kaspad/version"
|
|
"github.com/kaspanet/kaspad/wire"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
// userAgentName is the user agent name and is used to help identify
|
|
// ourselves to other kaspa peers.
|
|
userAgentName = "kaspad"
|
|
|
|
// userAgentVersion is the user agent version and is used to help
|
|
// identify ourselves to other kaspa peers.
|
|
userAgentVersion = version.Version()
|
|
|
|
// defaultServices describes the default services that are supported by
|
|
// the server.
|
|
defaultServices = wire.SFNodeNetwork | wire.SFNodeBloom | wire.SFNodeCF
|
|
|
|
// defaultRequiredServices describes the default services that are
|
|
// required to be supported by outbound peers.
|
|
defaultRequiredServices = wire.SFNodeNetwork
|
|
)
|
|
|
|
const timeout = 30 * time.Second
|
|
|
|
// SendVersion sends a version to a peer and waits for verack.
|
|
func SendVersion(incomingRoute *router.Route, outgoingRoute *router.Route, netAdapter *netadapter.NetAdapter,
|
|
dag *blockdag.BlockDAG) (routeClosed bool, err error) {
|
|
|
|
selectedTipHash := dag.SelectedTipHash()
|
|
subnetworkID := config.ActiveConfig().SubnetworkID
|
|
|
|
// Version message.
|
|
localAddress, err := netAdapter.GetBestLocalAddress()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
msg := wire.NewMsgVersion(localAddress, netAdapter.ID(), selectedTipHash, subnetworkID)
|
|
msg.AddUserAgent(userAgentName, userAgentVersion, config.ActiveConfig().UserAgentComments...)
|
|
|
|
// Advertise the services flag
|
|
msg.Services = defaultServices
|
|
|
|
// Advertise our max supported protocol version.
|
|
msg.ProtocolVersion = wire.ProtocolVersion
|
|
|
|
// Advertise if inv messages for transactions are desired.
|
|
msg.DisableRelayTx = config.ActiveConfig().BlocksOnly
|
|
|
|
isOpen, err := outgoingRoute.EnqueueWithTimeout(msg, timeout)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
if !isOpen {
|
|
return true, nil
|
|
}
|
|
|
|
_, isOpen, err = incomingRoute.DequeueWithTimeout(timeout)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
if !isOpen {
|
|
return true, nil
|
|
}
|
|
return false, nil
|
|
}
|