start building NTCP2 addresses

This commit is contained in:
eyedeekay
2025-02-26 19:13:05 -05:00
parent 18b2afe828
commit 3d6a08a76b
5 changed files with 43 additions and 6 deletions

View File

@@ -224,6 +224,10 @@ func (router_info RouterInfo) Network() string {
return "i2p" return "i2p"
} }
func (router_info *RouterInfo) AddAddress(address *RouterAddress) {
router_info.addresses = append(router_info.addresses, address)
}
// ReadRouterInfo returns RouterInfo from a []byte. // ReadRouterInfo returns RouterInfo from a []byte.
// The remaining bytes after the specified length are also returned. // The remaining bytes after the specified length are also returned.
// Returns a list of errors that occurred during parsing. // Returns a list of errors that occurred during parsing.

View File

@@ -6,6 +6,7 @@ import (
"time" "time"
"github.com/go-i2p/go-i2p/lib/common/base32" "github.com/go-i2p/go-i2p/lib/common/base32"
"github.com/go-i2p/go-i2p/lib/transport/ntcp"
"github.com/go-i2p/logger" "github.com/go-i2p/logger"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@@ -68,6 +69,7 @@ func CreateRouter(cfg *config.RouterConfig) (*Router, error) {
b32PubHash := base32.EncodeToString(pubHash[:]) b32PubHash := base32.EncodeToString(pubHash[:])
log.Debug("Router public key hash:", b32PubHash) log.Debug("Router public key hash:", b32PubHash)
} }
ri, err := r.RouterInfoKeystore.ConstructRouterInfo(nil) ri, err := r.RouterInfoKeystore.ConstructRouterInfo(nil)
if err != nil { if err != nil {
log.WithError(err).Error("Failed to construct RouterInfo") log.WithError(err).Error("Failed to construct RouterInfo")
@@ -77,7 +79,26 @@ func CreateRouter(cfg *config.RouterConfig) (*Router, error) {
log.Debug("RouterInfo:", ri) log.Debug("RouterInfo:", ri)
} }
r.TransportMuxer = transport.Mux() // we have our keystore and our routerInfo,, so now let's set up transports
// add NTCP2 transport
ntcp2, err := ntcp.NewNTCP2Transport(ri)
if err != nil {
log.WithError(err).Error("Failed to create NTCP2 transport")
return nil, err
} else {
log.Debug("NTCP2 transport created successfully")
}
r.TransportMuxer = transport.Mux(ntcp2)
ntcpaddr, err := ntcp2.Address()
if err != nil {
log.WithError(err).Error("Failed to get NTCP2 address")
return nil, err
} else {
log.Debug("NTCP2 address:", ntcpaddr)
}
ri.AddAddress(ntcpaddr)
// create a transport address
return r, err return r, err
} }

View File

@@ -149,3 +149,11 @@ func NewNoiseTransportSession(ri router_info.RouterInfo) (transport.TransportSes
log.Error("Failed to create NoiseTransportSession, all addresses failed") log.Error("Failed to create NoiseTransportSession, all addresses failed")
return nil, fmt.Errorf("Transport constructor error") return nil, fmt.Errorf("Transport constructor error")
} }
func NewNoiseSession(ri router_info.RouterInfo) (*NoiseSession, error) {
ns, err := NewNoiseTransportSession(ri)
if err != nil {
return nil, err
}
return ns.(*NoiseSession), err
}

View File

@@ -25,9 +25,10 @@ const NOISE_PROTOCOL_NAME = "NOISE"
type NoiseTransport struct { type NoiseTransport struct {
sync.Mutex sync.Mutex
router_info.RouterInfo router_info.RouterInfo
transportStyle string transportStyle string
Listener net.Listener Listener net.Listener
peerConnections map[data.Hash]transport.TransportSession //peerConnections map[data.Hash]transport.TransportSession
peerConnections map[data.Hash]*NoiseSession
} }
func (noopt *NoiseTransport) Compatible(routerInfo router_info.RouterInfo) bool { func (noopt *NoiseTransport) Compatible(routerInfo router_info.RouterInfo) bool {
@@ -107,7 +108,7 @@ func (noopt *NoiseTransport) GetSession(routerInfo router_info.RouterInfo) (tran
} }
log.Debug("NoiseTransport: Creating new session") log.Debug("NoiseTransport: Creating new session")
var err error var err error
if noopt.peerConnections[hash], err = NewNoiseTransportSession(routerInfo); err != nil { if noopt.peerConnections[hash], err = NewNoiseSession(routerInfo); err != nil {
log.WithError(err).Error("NoiseTransport: Failed to create new session") log.WithError(err).Error("NoiseTransport: Failed to create new session")
return noopt.peerConnections[hash], err return noopt.peerConnections[hash], err
} }
@@ -160,7 +161,7 @@ func (noopt *NoiseTransport) Close() error {
func NewNoiseTransport(netSocket net.Listener) *NoiseTransport { func NewNoiseTransport(netSocket net.Listener) *NoiseTransport {
log.WithField("listener_addr", netSocket.Addr().String()).Debug("Creating new NoiseTransport") log.WithField("listener_addr", netSocket.Addr().String()).Debug("Creating new NoiseTransport")
return &NoiseTransport{ return &NoiseTransport{
peerConnections: make(map[data.Hash]transport.TransportSession), peerConnections: make(map[data.Hash]*NoiseSession),
Listener: netSocket, Listener: netSocket,
transportStyle: NOISE_PROTOCOL_NAME, transportStyle: NOISE_PROTOCOL_NAME,
} }

View File

@@ -11,6 +11,7 @@ import (
"github.com/go-i2p/go-i2p/lib/common/router_info" "github.com/go-i2p/go-i2p/lib/common/router_info"
"github.com/go-i2p/go-i2p/lib/transport" "github.com/go-i2p/go-i2p/lib/transport"
"github.com/go-i2p/go-i2p/lib/transport/noise" "github.com/go-i2p/go-i2p/lib/transport/noise"
"github.com/go-i2p/go-i2p/lib/util/time/sntp"
) )
const ( const (
@@ -24,6 +25,8 @@ var exampleNTCPTransport transport.Transport = &NTCP2Transport{}
// NTCP2Transport is an ntcp2 transport implementing transport.NTCP2Transport interface // NTCP2Transport is an ntcp2 transport implementing transport.NTCP2Transport interface
type NTCP2Transport struct { type NTCP2Transport struct {
*noise.NoiseTransport *noise.NoiseTransport
*sntp.RouterTimestamper
transportStyle string
} }
func (t *NTCP2Transport) Name() string { func (t *NTCP2Transport) Name() string {