ames: updates forward-lane scry-handling to match +send-blob
~ ``noun+!>(u.peer)
::
[%forward-lane ~]
- :: find lane for u.who, or their galaxy
+ ::
+ :: this duplicates the routing hack from +send-blob:event-core
+ :: so long as neither the peer nor the peer's sponsoring galaxy is us:
+ ::
+ :: - no route to the peer: send to the peer's sponsoring galaxy
+ :: - direct route to the peer: use that
+ :: - indirect route to the peer: send to both that route and the
+ :: the peer's sponsoring galaxy
::
:^ ~ ~ %noun
!> ^- (list lane)
- =/ ship-state (~(get by peers.ames-state) u.who)
- ?. ?=([~ %known *] ship-state)
+ ?. ?& ?=([~ %known *] peer)
+ !=(our u.who)
+ ==
+ ~
+ =; zar=(trap (list lane))
+ ?~ route.u.peer $:zar
+ =* rot u.route.u.peer
+ ?:(direct.rot [lane.rot ~] [lane.rot $:zar])
+ ::
+ |. ^- (list lane)
+ ?: ?=(%czar (clan:title sponsor.u.peer))
+ ?: =(our sponsor.u.peer)
~
- =/ peer-state +.u.ship-state
- ?. =(~ route.peer-state) ::NOTE avoid tmi
- [lane:(need route.peer-state)]~
- |- ^- (list lane)
- ?: ?=(%czar (clan:title sponsor.peer-state))
- [%& sponsor.peer-state]~
- =/ next (~(get by peers.ames-state) sponsor.peer-state)
+ [%& sponsor.u.peer]~
+ =/ next (~(get by peers.ames-state) sponsor.u.peer)
?. ?=([~ %known *] next)
~
- $(peer-state +.u.next)
+ $(peer next)
==
::
[%bones @ ~]
