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"
}
func (router_info *RouterInfo) AddAddress(address *RouterAddress) {
router_info.addresses = append(router_info.addresses, address)
}
// ReadRouterInfo returns RouterInfo from a []byte.
// The remaining bytes after the specified length are also returned.
// Returns a list of errors that occurred during parsing.

View File

@ -6,6 +6,7 @@ import (
"time"
"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/sirupsen/logrus"
@ -68,6 +69,7 @@ func CreateRouter(cfg *config.RouterConfig) (*Router, error) {
b32PubHash := base32.EncodeToString(pubHash[:])
log.Debug("Router public key hash:", b32PubHash)
}
ri, err := r.RouterInfoKeystore.ConstructRouterInfo(nil)
if err != nil {
log.WithError(err).Error("Failed to construct RouterInfo")
@ -77,7 +79,26 @@ func CreateRouter(cfg *config.RouterConfig) (*Router, error) {
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
}

View File

@ -149,3 +149,11 @@ func NewNoiseTransportSession(ri router_info.RouterInfo) (transport.TransportSes
log.Error("Failed to create NoiseTransportSession, all addresses failed")
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 {
sync.Mutex
router_info.RouterInfo
transportStyle string
Listener net.Listener
peerConnections map[data.Hash]transport.TransportSession
transportStyle string
Listener net.Listener
//peerConnections map[data.Hash]transport.TransportSession
peerConnections map[data.Hash]*NoiseSession
}
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")
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")
return noopt.peerConnections[hash], err
}
@ -160,7 +161,7 @@ func (noopt *NoiseTransport) Close() error {
func NewNoiseTransport(netSocket net.Listener) *NoiseTransport {
log.WithField("listener_addr", netSocket.Addr().String()).Debug("Creating new NoiseTransport")
return &NoiseTransport{
peerConnections: make(map[data.Hash]transport.TransportSession),
peerConnections: make(map[data.Hash]*NoiseSession),
Listener: netSocket,
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/transport"
"github.com/go-i2p/go-i2p/lib/transport/noise"
"github.com/go-i2p/go-i2p/lib/util/time/sntp"
)
const (
@ -24,6 +25,8 @@ var exampleNTCPTransport transport.Transport = &NTCP2Transport{}
// NTCP2Transport is an ntcp2 transport implementing transport.NTCP2Transport interface
type NTCP2Transport struct {
*noise.NoiseTransport
*sntp.RouterTimestamper
transportStyle string
}
func (t *NTCP2Transport) Name() string {