start building NTCP2 addresses
This commit is contained in:
@@ -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.
|
||||||
|
@@ -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
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
}
|
||||||
|
@@ -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,
|
||||||
}
|
}
|
||||||
|
@@ -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 {
|
||||||
|
Reference in New Issue
Block a user