replace buggy CreateOutboundRoute that refused to work without target key
This commit is contained in:
parent
5d65ad3e4b
commit
1af0aacf96
3 changed files with 26 additions and 2 deletions
|
|
@ -26,7 +26,7 @@ func NewLuxHost(hostname string, hostKey crypto.LuxKey, ks crypto.LuxKeyStore) L
|
||||||
}
|
}
|
||||||
|
|
||||||
func (host *LuxHost) AddNode(node proto.LuxID, udpAddr string) error {
|
func (host *LuxHost) AddNode(node proto.LuxID, udpAddr string) error {
|
||||||
return host.router.CreateOutboundRoute(node, net.LuxChannelExterior, udpAddr)
|
return host.router.AddOutboundRoute(node, net.LuxRouteFromSource, net.LuxChannelExterior, udpAddr)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (host *LuxHost) AddOptionProvider(provider LuxOptionProvider) {
|
func (host *LuxHost) AddOptionProvider(provider LuxOptionProvider) {
|
||||||
|
|
|
||||||
|
|
@ -135,6 +135,9 @@ func (r *LuxRouter) addInboundChannel(ch LuxChannel) *LuxChannel {
|
||||||
|
|
||||||
// the ID is not destination, but rather peer associated for this route, like source ID.
|
// the ID is not destination, but rather peer associated for this route, like source ID.
|
||||||
// Destination router always know who is he, therefore we dont need target ID.
|
// Destination router always know who is he, therefore we dont need target ID.
|
||||||
|
|
||||||
|
// Deprecated: this function is source of many bugs and culprits. The major issue is route type determination,
|
||||||
|
// since not all hosts or nodes have destination key, as they may use LuxRouteTypeFromSource
|
||||||
func (r *LuxRouter) CreateOutboundRoute(id proto.LuxID, chType LuxChannelType, udpAddr string, params ...bool) error {
|
func (r *LuxRouter) CreateOutboundRoute(id proto.LuxID, chType LuxChannelType, udpAddr string, params ...bool) error {
|
||||||
// we gonna look up key by id from key store
|
// we gonna look up key by id from key store
|
||||||
key, ok := r.keyStore.Get(id)
|
key, ok := r.keyStore.Get(id)
|
||||||
|
|
@ -178,6 +181,27 @@ func (r *LuxRouter) CreateOutboundRoute(id proto.LuxID, chType LuxChannelType, u
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// However, you still may need both keys for target and source ID
|
||||||
|
func (r *LuxRouter) AddOutboundRoute(target proto.LuxID, routeType LuxRouteType, chType LuxChannelType, udpAddr string) error {
|
||||||
|
channel, err := NewLuxOutboundChannel(udpAddr, chType)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
route := &LuxRoute{
|
||||||
|
Type: routeType,
|
||||||
|
Target: target,
|
||||||
|
Source: r.thisKey.Id,
|
||||||
|
Destination: channel.Address,
|
||||||
|
Associated: r.addOutboundChannel(channel),
|
||||||
|
Nonces: NewLuxNonceList(),
|
||||||
|
}
|
||||||
|
r.routes[target] = route
|
||||||
|
|
||||||
|
log.Debugf("outbound route: %s", route.String())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (r *LuxRouter) CreateInboundChannel(chType LuxChannelType, udpAddr string) error {
|
func (r *LuxRouter) CreateInboundChannel(chType LuxChannelType, udpAddr string) error {
|
||||||
channel, err := NewLuxInboundChannel(udpAddr, chType)
|
channel, err := NewLuxInboundChannel(udpAddr, chType)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ func (node *LuxNode) AddNeighbor(id proto.LuxID, udpAddr string) error {
|
||||||
|
|
||||||
if node.router.HasKeyFor(id) {
|
if node.router.HasKeyFor(id) {
|
||||||
// we have key for this node, so we can route
|
// we have key for this node, so we can route
|
||||||
err = node.router.CreateOutboundRoute(id, net.LuxChannelInterior, udpAddr, true)
|
err = node.router.AddOutboundRoute(id, net.LuxRouteFromSource, net.LuxChannelInterior, udpAddr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue