mirror of
https://github.com/urbit/shrub.git
synced 2024-10-26 21:09:47 +03:00
Merge remote-tracking branch 'origin/next/kelvin/411' into lf/back-to-school-arc
This commit is contained in:
commit
a382f168fd
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b9a127ab9bfce5f2bbca0158453da89ca6fc75435c73500b3724ceaee815354b
|
||||
size 9939814
|
||||
oid sha256:aec86e0302887b93c51695a08d1383257c5d54e87961a2e859b977fed2f6cdfa
|
||||
size 9965085
|
||||
|
@ -346,6 +346,7 @@
|
||||
++ on-poke
|
||||
|= [=mark =vase]
|
||||
^- (quip card _this)
|
||||
?> (team:title [our src]:bowl)
|
||||
=^ cards state
|
||||
?+ mark (on-poke:def mark vase)
|
||||
%acme-order (poke-acme-order:ac !<((set turf) vase))
|
||||
|
@ -80,6 +80,7 @@
|
||||
::
|
||||
++ on-poke
|
||||
|= [=mark =vase]
|
||||
?> (team:title [our src]:bowl)
|
||||
^- step:agent:gall
|
||||
=^ cards state
|
||||
?+ mark ~|([%aqua-bad-mark mark] !!)
|
||||
|
@ -52,7 +52,7 @@
|
||||
(handle-http-request id req)
|
||||
::
|
||||
%azimuth-action
|
||||
?> (team:title our.bowl src.bowl)
|
||||
?> (team:title [our src]:bowl)
|
||||
=+ !<([%disconnect bind=binding:eyre] vase)
|
||||
~& >>> "disconnecting at {<bind>}"
|
||||
:_ this
|
||||
|
@ -121,6 +121,7 @@
|
||||
::
|
||||
++ on-poke
|
||||
|= [=mark =vase]
|
||||
?> (team:title [our src]:bowl)
|
||||
?. ?=(%azimuth-tracker-poke mark)
|
||||
(on-poke:def mark vase)
|
||||
=+ !<(poke=poke-data vase)
|
||||
|
@ -208,6 +208,7 @@
|
||||
++ on-poke
|
||||
|= [=mark =vase]
|
||||
^- (quip card _this)
|
||||
?> (team:title [our src]:bowl)
|
||||
?: =(%noun mark)
|
||||
?+ q.vase !!
|
||||
[%refresh-rate @]
|
||||
|
@ -31,6 +31,7 @@
|
||||
++ on-poke
|
||||
|= [=mark =vase]
|
||||
^- (quip card _this)
|
||||
?> (team:title [our src]:bowl)
|
||||
?. ?=(%noun mark) [~ this]
|
||||
?^ in-progress
|
||||
~& %still-running-please-try-again-later
|
||||
|
@ -773,7 +773,7 @@
|
||||
'next'^(numb next)
|
||||
::
|
||||
:- 'unsent-messages' :: as byte sizes
|
||||
(set-array unsent-messages (cork (cury met 3) numb))
|
||||
(set-array unsent-messages (cork jam (cork (cury met 3) numb)))
|
||||
::
|
||||
'unsent-fragments'^(numb (lent unsent-fragments)) :: as lent
|
||||
::
|
||||
|
@ -807,7 +807,7 @@
|
||||
::
|
||||
++ dy-run-generator
|
||||
!.
|
||||
|= [cay=cage cig=dojo-config]
|
||||
|= [cay=cage cig=dojo-config =desk]
|
||||
^+ +>+>
|
||||
?. (~(nest ut [%cell [%atom %$ ~] %noun]) | p.q.cay)
|
||||
:: naked generator; takes one argument
|
||||
@ -850,7 +850,7 @@
|
||||
|. ^- vase
|
||||
=/ gat=vase (slot 3 q.cay)
|
||||
=/ som=vase (slot 6 gat)
|
||||
=/ ven=vase !>([now=now.hid eny=eny.hid bec=he-beak])
|
||||
=/ ven=vase !>([now=now.hid eny=eny.hid bec=he-beak(q.dir desk)])
|
||||
=/ poz=vase (dy-sore p.cig)
|
||||
=/ kev=vase
|
||||
=/ kuv=(unit vase) (slew 7 som)
|
||||
@ -990,7 +990,7 @@
|
||||
%te (dy-wool-poke p.bil q.bil)
|
||||
%ex (dy-mere p.bil)
|
||||
%dv (dy-sing hand+q.bil %a p.bil (snoc q.bil %hoon))
|
||||
%ge (dy-run-generator (dy-cage p.p.p.bil) q.p.bil)
|
||||
%ge (dy-run-generator (dy-cage p.p.p.bil) q.p.bil desk.q.p.p.bil)
|
||||
%sa
|
||||
=/ has-mark .?((get-fit:clay he-beak %mar p.bil))
|
||||
?. has-mark
|
||||
@ -1748,6 +1748,7 @@
|
||||
++ on-poke
|
||||
|= [=mark =vase]
|
||||
^- (quip card:agent:gall _..on-init)
|
||||
?> (team:title [our src]:hid)
|
||||
=^ moves state
|
||||
^- (quip card:agent:gall house)
|
||||
?+ mark ~|([%dojo-poke-bad-mark mark] !!)
|
||||
|
@ -58,6 +58,7 @@
|
||||
++ on-poke
|
||||
|= [=mark =vase]
|
||||
^- (quip card _this)
|
||||
?> (team:title [our src]:bowl)
|
||||
?. ?=(%noun mark) [~ this]
|
||||
=/ =command !<(command vase)
|
||||
?- -.command
|
||||
|
@ -327,6 +327,7 @@
|
||||
::
|
||||
++ on-poke
|
||||
|= [=mark =vase]
|
||||
?> (team:title [our src]:bowl)
|
||||
?: ?=(%noun mark)
|
||||
~& state
|
||||
`this
|
||||
|
@ -81,6 +81,7 @@
|
||||
++ on-poke
|
||||
|= [=mark =vase]
|
||||
^- (quip card:agent:gall _this)
|
||||
?> (team:title [our src]:bowl)
|
||||
:_ this
|
||||
:_ ~
|
||||
?+ mark ~|([%unexpected-mark mark] !!)
|
||||
|
@ -77,6 +77,7 @@
|
||||
^+ on-poke:*agent:gall
|
||||
|= [=mark =vase]
|
||||
^- (quip card _this)
|
||||
?> (team:title [our src]:bowl)
|
||||
=^ cards state
|
||||
?+ mark (on-poke:def mark vase)
|
||||
%language-server-rpc-notification
|
||||
|
@ -50,6 +50,7 @@
|
||||
^- (quip card:agent:gall _this)
|
||||
::
|
||||
?: &(?=(%noun mark) ?=(%cancel q.vase))
|
||||
?> (team:title [our src]:bowl)
|
||||
~& %lens-cancel
|
||||
[~ this(job.state ~)]
|
||||
::
|
||||
|
@ -36,21 +36,23 @@
|
||||
[%http until=@da]
|
||||
[%waiting until=@da]
|
||||
==
|
||||
+$ state-1
|
||||
$: %1
|
||||
+$ state-2
|
||||
$: %2
|
||||
ships=(set ship)
|
||||
nonce=@ud
|
||||
$= plan
|
||||
$~ [%nat ~]
|
||||
$% [%nat ~]
|
||||
[%pub ip=(unit @t)]
|
||||
[%off ~]
|
||||
[%one ~]
|
||||
==
|
||||
==
|
||||
--
|
||||
::
|
||||
%- agent:dbug
|
||||
::
|
||||
=| state=state-1
|
||||
=| state=state-2
|
||||
=> |%
|
||||
:: Bind for the the writer monad on (quip effect state)
|
||||
::
|
||||
@ -73,6 +75,7 @@
|
||||
:: and sponsorship changes
|
||||
::
|
||||
++ ships
|
||||
=| force=_|
|
||||
|%
|
||||
++ rind (^rind card state)
|
||||
++ kick
|
||||
@ -88,8 +91,8 @@
|
||||
:: behavior here.
|
||||
::
|
||||
=/ new-ships (~(gas in *(set ship)) (saxo:title our now our))
|
||||
=/ removed (~(dif in ships.state) new-ships)
|
||||
=/ added (~(dif in new-ships) ships.state)
|
||||
=/ removed (~(dif in ships.state) new-ships)
|
||||
=/ added (~(dif in new-ships) ships.state)
|
||||
;< new-state=_state rind
|
||||
?~ removed `state
|
||||
[[%pass /jael %arvo %j %nuke removed]~ state]
|
||||
@ -102,7 +105,7 @@
|
||||
::
|
||||
:: Kick even if ships weren't added or removed
|
||||
::
|
||||
(kick-pings our now new-ships)
|
||||
(kick-pings our now new-ships force)
|
||||
::
|
||||
:: Kick whenever we get a response. We really care about
|
||||
:: breaches and sponsorship changes.
|
||||
@ -115,24 +118,28 @@
|
||||
^- (quip card _state)
|
||||
[[%pass /jael/delay %arvo %b %wait now]~ state]
|
||||
::
|
||||
++ take-delay kick
|
||||
++ take-delay %*(kick ships force %.y)
|
||||
--
|
||||
::
|
||||
:: Starts pinging a new set of `ships`.
|
||||
::
|
||||
++ kick-pings
|
||||
|= [our=@p now=@da ships=(set ship)]
|
||||
|= [our=@p now=@da ships=(set ship) force=?]
|
||||
^- (quip card _state)
|
||||
=: nonce.state +(nonce.state)
|
||||
ships.state ships
|
||||
==
|
||||
::
|
||||
?: ?=(%nat -.plan.state)
|
||||
(kick:nat our)
|
||||
(kick:pub our now)
|
||||
?: force (kick:nat our)
|
||||
?- -.plan.state
|
||||
%off `state
|
||||
%nat (kick:nat our)
|
||||
%one (kick:one our)
|
||||
%pub (kick:pub our now)
|
||||
==
|
||||
::
|
||||
:: Subsystem for pinging our sponsors when we might be behind a NAT
|
||||
::
|
||||
:: XX no longer true if using STUN-enabled vere 2.XX
|
||||
:: Ping each ship every 25 seconds to keep the pinhole open.
|
||||
:: This is expensive, but if you don't do it and you are behind a
|
||||
:: NAT, you will stop receiving packets from other ships except
|
||||
@ -270,6 +277,26 @@
|
||||
::
|
||||
(set-timer now)
|
||||
--
|
||||
:: Subsystem for formally acknowledging a change in our IP:PORT
|
||||
::
|
||||
:: If our sponsor sends a STUN response, with an IP different than what
|
||||
:: we had previously cached, we formally acknowledge this change by
|
||||
:: sending one %poke to every ship in the sponsorship chain.
|
||||
::
|
||||
++ one
|
||||
?> ?=(%one -.plan.state)
|
||||
|%
|
||||
++ kick
|
||||
|= our=@p
|
||||
^- (quip card _state)
|
||||
:_ state
|
||||
%- ~(rep in ships.state)
|
||||
|= [=ship cards=(list card)]
|
||||
?: =(our ship) cards
|
||||
=/ wire /one/(scot %uw nonce.state)/ping/(scot %p ship)
|
||||
:_ cards ^- card
|
||||
[%pass wire %agent [ship %ping] %poke %noun !>(~)]
|
||||
--
|
||||
--
|
||||
%+ verb |
|
||||
^- agent:gall
|
||||
@ -291,18 +318,33 @@
|
||||
|^
|
||||
=/ old !<(state-any old-vase)
|
||||
=? old ?=(%0 -.old) (state-0-to-1 old)
|
||||
?> ?=(%1 -.old)
|
||||
=? old ?=(%1 -.old) (state-1-to-2 old)
|
||||
?> ?=(%2 -.old)
|
||||
=. state old
|
||||
=^ cards state (kick:ships our.bowl now.bowl)
|
||||
[cards this]
|
||||
::
|
||||
+$ state-any $%(state-0 state-1)
|
||||
+$ state-0 [%0 ships=(map ship [=rift =ship-state])]
|
||||
+$ state-any $%(state-0 state-1 state-2)
|
||||
+$ state-0 [%0 ships=(map ship [=rift =ship-state])]
|
||||
+$ state-1
|
||||
$: %1
|
||||
ships=(set ship)
|
||||
nonce=@ud
|
||||
$= plan
|
||||
$~ [%nat ~]
|
||||
$% [%nat ~]
|
||||
[%pub ip=(unit @t)]
|
||||
== ==
|
||||
::
|
||||
++ state-0-to-1
|
||||
|= old=state-0
|
||||
^- state-1
|
||||
[%1 ~ 0 %nat ~]
|
||||
::
|
||||
++ state-1-to-2
|
||||
|= old=state-1
|
||||
^- state-2
|
||||
old(- %2)
|
||||
--
|
||||
:: +on-poke: positively acknowledge pokes
|
||||
::
|
||||
@ -311,8 +353,39 @@
|
||||
?. =(our src):bowl :: don't crash, this is where pings are handled
|
||||
`this
|
||||
::
|
||||
~& mark^vase
|
||||
=^ cards state
|
||||
?: =(q.vase %kick) :: NB: ames calls this on %born
|
||||
?: ?=([%kick ?] q.vase)
|
||||
:: NB: ames calls this on %born (with fail=%.n) and after not hearing STUN
|
||||
:: responses for more than ~s5 (with fail=%.y)
|
||||
::
|
||||
:: if %ping was turned off (due to a successfull STUN) but we failed
|
||||
:: to get a STUN response in time switch to %nat and start a ~s25 timer
|
||||
::
|
||||
:: if the %kick has fail=%.n (e.g. for every %born), the plan will remain
|
||||
:: unchanged, but we will innitiate a new round of %poke pings with
|
||||
:: increasing nonce.
|
||||
::
|
||||
:: if we get repeated [%stun fail=&], but we are already in either %nat
|
||||
:: or %pub, do nothing, since there are already timers in place to %ping
|
||||
:: repeatedly.
|
||||
::
|
||||
=/ stun-failed=? &(?=([%off ~] plan.state) =(+.q.vase %.y))
|
||||
?: &(?=([%off ~] plan.state) =(+.q.vase %.n))
|
||||
:: ignore restarts if we were already STUNning, if ip:port changed
|
||||
:: %once will trigger one formal %ping
|
||||
::
|
||||
`state
|
||||
=? plan.state stun-failed
|
||||
[%nat ~]
|
||||
?: &(!stun-failed =(+.q.vase %.y))
|
||||
`state
|
||||
(kick:ships our.bowl now.bowl)
|
||||
?: =(q.vase %stop) :: NB: ames calls this on [%stun fail=%.n]
|
||||
=. plan.state [%off ~]
|
||||
(kick:ships our.bowl now.bowl)
|
||||
?: &(=(q.vase %once) =(%off -.plan.state)) :: NB: ames calls this on %once
|
||||
=. plan.state [%one ~]
|
||||
(kick:ships our.bowl now.bowl)
|
||||
?: =(q.vase %nat)
|
||||
=. plan.state [%nat ~]
|
||||
@ -345,6 +418,12 @@
|
||||
?. ?=(%pub -.plan.state) `state
|
||||
?. ?=(%poke-ack -.sign) `state
|
||||
(take-pings:pub wire p.sign)
|
||||
::
|
||||
[%one *]
|
||||
?. ?=(%one -.plan.state) `state
|
||||
?: ?=(%poke-ack -.sign) `state
|
||||
:: XX handle error?
|
||||
`state
|
||||
==
|
||||
[cards this]
|
||||
:: +on-arvo: handle timer firing
|
||||
|
@ -214,6 +214,7 @@
|
||||
~/ %on-poke
|
||||
|= [=mark =vase]
|
||||
^- (quip card _this)
|
||||
?> (team:title [our src]:bowl)
|
||||
?: ?=(%spider-kill mark)
|
||||
(on-load on-save)
|
||||
=^ cards state
|
||||
|
@ -25,6 +25,7 @@
|
||||
++ on-poke
|
||||
|= [=mark =vase]
|
||||
^- [(list card) _this]
|
||||
?> (team:title [our src]:bowl)
|
||||
|^
|
||||
=+ !<(=test vase)
|
||||
?- test
|
||||
|
@ -15,6 +15,7 @@
|
||||
++ on-load _on-init
|
||||
++ on-poke
|
||||
|= [=mark =vase]
|
||||
?> (team:title [our src]:bowl)
|
||||
?+ mark !!
|
||||
%noun :_ this
|
||||
[%pass /(scot %da now.bowl) %arvo %b %wait `@da`+(now.bowl)]~
|
||||
|
@ -352,7 +352,9 @@
|
||||
?~ dat=(rof lyc pov u.mon) ~
|
||||
?~ u.dat [~ ~]
|
||||
=* vax q.u.u.dat
|
||||
?. ?& ?=(^ ref)
|
||||
?. => [ref=ref vax=p=p.vax hoon-version=hoon-version wa=wa worm=worm]
|
||||
~> %memo./arvo/look :: with memoization
|
||||
?& ?=(^ ref)
|
||||
=(hoon-version -.ref)
|
||||
-:(~(nets wa *worm) +.ref p.vax)
|
||||
==
|
||||
|
@ -217,6 +217,7 @@
|
||||
:: computes the axis of {b} within axis {a}.
|
||||
|= [a=@ b=@]
|
||||
?< =(0 a)
|
||||
?< =(0 b)
|
||||
:: a composed axis
|
||||
^- @
|
||||
?- b
|
||||
@ -7260,10 +7261,10 @@
|
||||
=(0 p.wux)
|
||||
&(!=(0 p.wux) (lte p.wux p.yoz))
|
||||
==
|
||||
|- ?| =(%$ p.yoz)
|
||||
=(%$ p.wux)
|
||||
?& =((end 3 p.yoz) (end 3 p.wux))
|
||||
$(p.yoz (rsh 3 p.yoz), p.wux (rsh 3 p.wux))
|
||||
|- ?| =(%$ q.yoz)
|
||||
=(%$ q.wux)
|
||||
?& =((end 3 q.yoz) (end 3 q.wux))
|
||||
$(q.yoz (rsh 3 q.yoz), q.wux (rsh 3 q.wux))
|
||||
==
|
||||
==
|
||||
==
|
||||
|
@ -772,6 +772,7 @@
|
||||
:: %kroc: request to delete specific message flows, from their bones
|
||||
:: %plea: request to send message
|
||||
:: %deep: deferred calls to %ames, from itself
|
||||
:: %stun: STUN response (or failure), from unix
|
||||
::
|
||||
:: Remote Scry Tasks
|
||||
::
|
||||
@ -803,12 +804,13 @@
|
||||
[%kroc bones=(list [ship bone])]
|
||||
$>(%plea vane-task)
|
||||
[%deep =deep]
|
||||
[%stun =stun]
|
||||
::
|
||||
[%keen sec=(unit [idx=@ key=@]) spar]
|
||||
[%chum spar]
|
||||
[%yawn spar]
|
||||
[%wham spar]
|
||||
[%plug vane=term =path]
|
||||
[%plug =path]
|
||||
::
|
||||
$>(%born vane-task)
|
||||
$>(%init vane-task)
|
||||
@ -839,6 +841,7 @@
|
||||
:: System and Lifecycle Gifts
|
||||
::
|
||||
:: %turf: domain report, relayed from jael
|
||||
:: %saxo: our sponsor list report
|
||||
::
|
||||
+$ gift
|
||||
$% [%boon payload=*]
|
||||
@ -853,6 +856,7 @@
|
||||
[%tune spar roar=(unit roar)]
|
||||
::
|
||||
[%turf turfs=(list turf)]
|
||||
[%saxo sponsors=(list ship)]
|
||||
==
|
||||
::
|
||||
:::: :: (1a2)
|
||||
@ -910,6 +914,12 @@
|
||||
:: payload: semantic message contents
|
||||
::
|
||||
+$ plea [vane=@tas =path payload=*]
|
||||
::
|
||||
+$ message
|
||||
$% [%plea plea]
|
||||
[%boon payload=*]
|
||||
[%naxplanation =message-num =error]
|
||||
==
|
||||
:: $spar: pair of $ship and $path
|
||||
::
|
||||
:: Instead of fully qualifying a scry path, ames infers rift and
|
||||
@ -919,12 +929,21 @@
|
||||
:: $deep: deferred %ames call, from self, to keep +abet cores pure
|
||||
::
|
||||
+$ deep
|
||||
$% [%nack =ship =nack=bone =message-blob]
|
||||
$% [%nack =ship =nack=bone =message]
|
||||
[%sink =ship =target=bone naxplanation=[=message-num =error]]
|
||||
[%drop =ship =nack=bone =message-num]
|
||||
[%cork =ship =bone]
|
||||
[%kill =ship =bone]
|
||||
==
|
||||
:: $stun: STUN notifications, from unix
|
||||
::
|
||||
:: .lane is the latest cached lane in vere, from the point of view of .ship
|
||||
::
|
||||
+$ stun
|
||||
$% [%stop =ship =lane] :: succesful STUN response, stop %ping app
|
||||
[%fail =ship =lane] :: failure to STUN, re-enable %ping app
|
||||
[%once =ship =lane] :: new lane discovered, notify ping %app
|
||||
==
|
||||
:: +| %atomics
|
||||
::
|
||||
+$ bone @udbone
|
||||
@ -1168,7 +1187,7 @@
|
||||
$+ message-pump-state
|
||||
$: current=_`message-num`1
|
||||
next=_`message-num`1
|
||||
unsent-messages=(qeu message-blob)
|
||||
unsent-messages=(qeu message)
|
||||
unsent-fragments=(list static-fragment)
|
||||
queued-message-acks=(map message-num ack)
|
||||
=packet-pump-state
|
||||
|
@ -198,7 +198,7 @@
|
||||
(cue (rep packet-size (flop sorted)))
|
||||
:: +jim: caching +jam
|
||||
::
|
||||
++ jim |=(n=* ~+((jam n)))
|
||||
++ jim |=(n=* ~>(%memo./ames/jam (jam n)))
|
||||
++ spit
|
||||
|= =path
|
||||
^- [pat=@t wid=@ud]
|
||||
@ -532,6 +532,11 @@
|
||||
peer-state
|
||||
peer-state(direct.u.route %.n)
|
||||
::
|
||||
++ poke-ping-app
|
||||
|= [=duct our=ship poke=?(%stop %once [%kick fail=?])]
|
||||
^- move
|
||||
[duct %pass /ping %g %deal [our our /ames] %ping %poke noun+!>(poke)]
|
||||
::
|
||||
+| %atomics
|
||||
::
|
||||
+$ private-key @uwprivatekey
|
||||
@ -614,7 +619,7 @@
|
||||
:: dead: dead flow consolidation timer and recork timer, if set
|
||||
::
|
||||
+$ ames-state
|
||||
$+ ames-state
|
||||
$+ ames-state-19
|
||||
$: peers=(map ship ship-state)
|
||||
=unix=duct
|
||||
=life
|
||||
@ -630,25 +635,8 @@
|
||||
==
|
||||
::
|
||||
=chain
|
||||
atlas=(map path @ud)
|
||||
==
|
||||
::
|
||||
+$ ames-state-17
|
||||
$+ ames-state-17
|
||||
$: peers=(map ship ship-state-17)
|
||||
=unix=duct
|
||||
=life
|
||||
=rift
|
||||
crypto-core=acru:ames
|
||||
=bug
|
||||
snub=[form=?(%allow %deny) ships=(set ship)]
|
||||
cong=[msg=_5 mem=_100.000]
|
||||
::
|
||||
$= dead
|
||||
$: flow=[%flow (unit dead-timer)]
|
||||
cork=[%cork (unit dead-timer)]
|
||||
== ==
|
||||
::
|
||||
+$ dead-timer [=duct =wire date=@da]
|
||||
+$ azimuth-state [=symmetric-key =life =rift =public-key sponsor=ship]
|
||||
+$ azimuth-state-6 [=symmetric-key =life =public-key sponsor=ship]
|
||||
@ -1166,6 +1154,55 @@
|
||||
--
|
||||
--
|
||||
::
|
||||
+$ ames-state-18 ames-state-17
|
||||
+$ ames-state-17
|
||||
$+ ames-state-17
|
||||
$: peers=(map ship ship-state-17)
|
||||
=unix=duct
|
||||
=life
|
||||
=rift
|
||||
crypto-core=acru:ames
|
||||
=bug
|
||||
snub=[form=?(%allow %deny) ships=(set ship)]
|
||||
cong=[msg=_5 mem=_100.000]
|
||||
::
|
||||
$= dead
|
||||
$: flow=[%flow (unit dead-timer)]
|
||||
cork=[%cork (unit dead-timer)]
|
||||
== ==
|
||||
+$ ship-state-17
|
||||
$+ ship-state-17
|
||||
$% [%alien alien-agenda-17]
|
||||
[%known peer-state-17]
|
||||
==
|
||||
+$ peer-state-17
|
||||
$+ peer-state-17
|
||||
$: $: =symmetric-key
|
||||
=life
|
||||
=rift
|
||||
=public-key
|
||||
sponsor=ship
|
||||
==
|
||||
route=(unit [direct=? =lane])
|
||||
=qos
|
||||
=ossuary
|
||||
snd=(map bone message-pump-state-17)
|
||||
rcv=(map bone message-sink-state)
|
||||
nax=(set [=bone =message-num])
|
||||
heeds=(set duct)
|
||||
closing=(set bone)
|
||||
corked=(set bone)
|
||||
keens=(map path keen-state)
|
||||
==
|
||||
+$ message-pump-state-17
|
||||
$+ message-pump-state-17
|
||||
$: current=_`message-num`1
|
||||
next=_`message-num`1
|
||||
unsent-messages=(qeu message-blob)
|
||||
unsent-fragments=(list static-fragment)
|
||||
queued-message-acks=(map message-num ack)
|
||||
=packet-pump-state
|
||||
==
|
||||
+$ ames-state-14 ames-state-16
|
||||
+$ ames-state-15 ames-state-16
|
||||
+$ ames-state-16
|
||||
@ -1179,30 +1216,6 @@
|
||||
snub=[form=?(%allow %deny) ships=(set ship)]
|
||||
cong=[msg=@ud mem=@ud]
|
||||
==
|
||||
+$ ship-state-17
|
||||
$% [%alien alien-agenda-17]
|
||||
[%known peer-state-17]
|
||||
==
|
||||
::
|
||||
+$ peer-state-17
|
||||
$+ peer-state
|
||||
$: $: =symmetric-key
|
||||
=life
|
||||
=rift
|
||||
=public-key
|
||||
sponsor=ship
|
||||
==
|
||||
route=(unit [direct=? =lane])
|
||||
=qos
|
||||
=ossuary
|
||||
snd=(map bone message-pump-state)
|
||||
rcv=(map bone message-sink-state)
|
||||
nax=(set [=bone =message-num])
|
||||
heeds=(set duct)
|
||||
closing=(set bone)
|
||||
corked=(set bone)
|
||||
keens=(map path keen-state)
|
||||
==
|
||||
::
|
||||
+$ alien-agenda-17
|
||||
$+ alien-agenda
|
||||
@ -1285,7 +1298,26 @@
|
||||
$% [%kroc dry=?]
|
||||
[%keen spar]
|
||||
[%snub ships=(list ship)]
|
||||
$<(?(%snub %kroc %keen) task)
|
||||
$<(?(%snub %kroc) task-17)
|
||||
==
|
||||
::
|
||||
+$ task-17
|
||||
$+ task-17
|
||||
$% $<(?(%deep %keen) task)
|
||||
[%keen spar]
|
||||
$: %deep
|
||||
$% [%nack =ship =nack=bone =message-blob]
|
||||
[%sink =ship =target=bone naxplanation=[=message-num =error]]
|
||||
[%drop =ship =nack=bone =message-num]
|
||||
[%cork =ship =bone]
|
||||
[%kill =ship =bone]
|
||||
== ==
|
||||
==
|
||||
::
|
||||
+$ queued-event-17
|
||||
$+ queued-event-17
|
||||
$% [%call =duct wrapped-task=(hobo task-17)]
|
||||
[%take =wire =duct =sign]
|
||||
==
|
||||
::
|
||||
+$ queued-event-16
|
||||
@ -1297,20 +1329,7 @@
|
||||
+$ task-16
|
||||
$+ task-16
|
||||
$% [%kroc dry=?]
|
||||
[%keen spar]
|
||||
$<(?(%kroc %keen) task)
|
||||
==
|
||||
::
|
||||
+$ queued-event-17
|
||||
$+ queued-event-17
|
||||
$% [%call =duct wrapped-task=(hobo task-17)]
|
||||
[%take =wire =duct =sign]
|
||||
==
|
||||
::
|
||||
+$ task-17
|
||||
$+ task-17
|
||||
$% [%keen spar]
|
||||
$<(%keen task)
|
||||
$<(%kroc task-17)
|
||||
==
|
||||
:: $bug: debug printing configuration
|
||||
::
|
||||
@ -1406,7 +1425,7 @@
|
||||
:: %wake: handle timer firing
|
||||
::
|
||||
+$ message-pump-task
|
||||
$% [%memo =message-blob]
|
||||
$% [%memo =message]
|
||||
[%hear =message-num =ack-meat]
|
||||
[%near =naxplanation]
|
||||
[%prod ~]
|
||||
@ -1463,7 +1482,8 @@
|
||||
[%15 ames-state-15]
|
||||
[%16 ames-state-16]
|
||||
[%17 ames-state-17]
|
||||
[%18 ^ames-state]
|
||||
[%18 ames-state-17]
|
||||
[%19 ^ames-state]
|
||||
==
|
||||
::
|
||||
|= [now=@da eny=@ rof=roof]
|
||||
@ -1586,7 +1606,7 @@
|
||||
:: lifecycle arms; mostly pass-throughs to the contained adult ames
|
||||
::
|
||||
++ scry scry:adult-core
|
||||
++ stay [%18 %larva queued-events ames-state.adult-gate]
|
||||
++ stay [%19 %larva queued-events ames-state.adult-gate]
|
||||
++ load
|
||||
|= $= old
|
||||
$% $: %4
|
||||
@ -1688,6 +1708,13 @@
|
||||
[%adult state=ames-state-17]
|
||||
== ==
|
||||
$: %18
|
||||
$% $: %larva
|
||||
events=(qeu queued-event-17)
|
||||
state=ames-state-18
|
||||
==
|
||||
[%adult state=ames-state-18]
|
||||
== ==
|
||||
$: %19
|
||||
$% $: %larva
|
||||
events=(qeu queued-event)
|
||||
state=_ames-state.adult-gate
|
||||
@ -1766,7 +1793,7 @@
|
||||
[%10 %larva *]
|
||||
~> %slog.1^leaf/"ames: larva: load"
|
||||
=. cached-state `[%10 state.old]
|
||||
=. queued-events (event-11-to-18 events.old)
|
||||
=. queued-events (event-17-to-19 (event-11-to-17 events.old))
|
||||
larval-gate
|
||||
::
|
||||
[%11 %adult *]
|
||||
@ -1777,7 +1804,7 @@
|
||||
[%11 %larva *]
|
||||
~> %slog.1^leaf/"ames: larva: load"
|
||||
=. cached-state `[%11 state.old]
|
||||
=. queued-events (event-11-to-18 events.old)
|
||||
=. queued-events (event-17-to-19 (event-11-to-17 events.old))
|
||||
larval-gate
|
||||
::
|
||||
[%12 %adult *]
|
||||
@ -1788,7 +1815,7 @@
|
||||
[%12 %larva *]
|
||||
~> %slog.1^leaf/"ames: larva: load"
|
||||
=. cached-state `[%12 state.old]
|
||||
=. queued-events (event-16-to-18 events.old)
|
||||
=. queued-events (event-17-to-19 (event-16-to-17 events.old))
|
||||
larval-gate
|
||||
::
|
||||
[%13 %adult *]
|
||||
@ -1799,7 +1826,7 @@
|
||||
[%13 %larva *]
|
||||
~> %slog.1^leaf/"ames: larva: load"
|
||||
=. cached-state `[%13 state.old]
|
||||
=. queued-events (event-16-to-18 events.old)
|
||||
=. queued-events (event-17-to-19 (event-16-to-17 events.old))
|
||||
larval-gate
|
||||
::
|
||||
[%14 %adult *]
|
||||
@ -1810,7 +1837,7 @@
|
||||
[%14 %larva *]
|
||||
~> %slog.1^leaf/"ames: larva: load"
|
||||
=. cached-state `[%14 state.old]
|
||||
=. queued-events (event-16-to-18 events.old)
|
||||
=. queued-events (event-17-to-19 (event-16-to-17 events.old))
|
||||
larval-gate
|
||||
::
|
||||
[%15 %adult *]
|
||||
@ -1821,7 +1848,7 @@
|
||||
[%15 %larva *]
|
||||
~> %slog.1^leaf/"ames: larva: load"
|
||||
=. cached-state `[%15 state.old]
|
||||
=. queued-events (event-16-to-18 events.old)
|
||||
=. queued-events (event-17-to-19 (event-16-to-17 events.old))
|
||||
larval-gate
|
||||
::
|
||||
[%16 %adult *]
|
||||
@ -1832,7 +1859,7 @@
|
||||
[%16 %larva *]
|
||||
~> %slog.1^leaf/"ames: larva: load"
|
||||
=. cached-state `[%16 state.old]
|
||||
=. queued-events (event-16-to-18 events.old)
|
||||
=. queued-events (event-17-to-19 (event-16-to-17 events.old))
|
||||
larval-gate
|
||||
::
|
||||
[%17 %adult *]
|
||||
@ -1843,16 +1870,26 @@
|
||||
[%17 %larva *]
|
||||
~> %slog.1^leaf/"ames: larva: load"
|
||||
=. cached-state `[%17 state.old]
|
||||
=. queued-events (event-17-to-18 events.old)
|
||||
=. queued-events (event-17-to-19 events.old)
|
||||
larval-gate
|
||||
|
||||
::
|
||||
[%18 %adult *] (load:adult-core %18 state.old)
|
||||
[%18 %adult *]
|
||||
=. cached-state `[%18 state.old]
|
||||
~> %slog.0^leaf/"ames: larva reload"
|
||||
larval-gate
|
||||
::
|
||||
[%18 %larva *]
|
||||
~> %slog.1^leaf/"ames: larva: load"
|
||||
=. cached-state `[%18 state.old]
|
||||
=. queued-events (event-17-to-19 events.old)
|
||||
larval-gate
|
||||
::
|
||||
[%19 %adult *] (load:adult-core %19 state.old)
|
||||
::
|
||||
[%19 %larva *]
|
||||
~> %slog.1^leaf/"ames: larva: load"
|
||||
=. queued-events events.old
|
||||
=. adult-gate (load:adult-core %18 state.old)
|
||||
=. adult-gate (load:adult-core %19 state.old)
|
||||
larval-gate
|
||||
==
|
||||
::
|
||||
@ -1870,12 +1907,12 @@
|
||||
wrapped-task ?.(?=(%snub -.task) task [%snub %deny ships.task])
|
||||
==
|
||||
::
|
||||
++ event-11-to-18
|
||||
++ event-11-to-17
|
||||
|= events=(qeu queued-event-11-and-16)
|
||||
^- (qeu queued-event)
|
||||
^- (qeu queued-event-17)
|
||||
%- ~(rep in events)
|
||||
|= [e=queued-event-11-and-16 q=(qeu queued-event)]
|
||||
%- ~(put to q) ^- queued-event
|
||||
|= [e=queued-event-11-and-16 q=(qeu queued-event-17)]
|
||||
%- ~(put to q) ^- queued-event-17
|
||||
?. ?=(%call -.e) e
|
||||
=/ task=task-11-and-16 ((harden task-11-and-16) wrapped-task.e)
|
||||
%= e
|
||||
@ -1883,28 +1920,26 @@
|
||||
?+ -.task task
|
||||
%snub [%snub %deny ships.task]
|
||||
%kroc [%kroc ~]
|
||||
%keen [%keen ~ +.task]
|
||||
==
|
||||
==
|
||||
::
|
||||
++ event-16-to-18
|
||||
++ event-16-to-17
|
||||
|= events=(qeu queued-event-16)
|
||||
^- (qeu queued-event)
|
||||
^- (qeu queued-event-17)
|
||||
%- ~(rep in events)
|
||||
|= [e=queued-event-16 q=(qeu queued-event)]
|
||||
%- ~(put to q) ^- queued-event
|
||||
|= [e=queued-event-16 q=(qeu queued-event-17)]
|
||||
%- ~(put to q) ^- queued-event-17
|
||||
?. ?=(%call -.e) e
|
||||
=/ task=task-16 ((harden task-16) wrapped-task.e)
|
||||
%= e
|
||||
wrapped-task
|
||||
^- ^task
|
||||
^- task-17
|
||||
?+ -.task task
|
||||
%kroc [%kroc ~]
|
||||
%keen [%keen ~ +.task]
|
||||
==
|
||||
==
|
||||
::
|
||||
++ event-17-to-18
|
||||
++ event-17-to-19
|
||||
|= events=(qeu queued-event-17)
|
||||
^- (qeu queued-event)
|
||||
%- ~(rep in events)
|
||||
@ -1912,8 +1947,17 @@
|
||||
%- ~(put to q) ^- queued-event
|
||||
?. ?=(%call -.e) e
|
||||
=/ task=task-17 ((harden task-17) wrapped-task.e)
|
||||
%= e
|
||||
wrapped-task ?.(?=(%keen -.task) task [%keen ~ +.task])
|
||||
%= e
|
||||
wrapped-task
|
||||
?: ?=(%keen -.task)
|
||||
[%keen ~ +.task]
|
||||
?. ?=([%deep %nack *] task) task
|
||||
=/ msg =>([cue=cue arg=message-blob.task] ~+((cue arg)))
|
||||
=/ hed
|
||||
?: =(1 (end 0 nack-bone.task)) %plea
|
||||
?: =(0 (end 0 (rsh 0 nack-bone.task))) %boon
|
||||
%naxplanation
|
||||
[%deep %nack ship.task nack-bone.task ;;(message [hed msg])]
|
||||
==
|
||||
--
|
||||
:: +molt: re-evolve to adult-ames
|
||||
@ -1951,7 +1995,7 @@
|
||||
17+(state-16-to-17:load:adult-core +.u.cached-state)
|
||||
=^ moz u.cached-state
|
||||
?. ?=(%17 -.u.cached-state) [~ u.cached-state]
|
||||
:_ 18+(state-17-to-18:load:adult-core +.u.cached-state)
|
||||
:_ [%18 +.u.cached-state]
|
||||
~> %slog.0^leaf/"ames: init dead flow consolidation timer"
|
||||
:- [[/ames]~ %pass /dead-flow %b %wait `@da`(add now ~m2)]
|
||||
?^ moz moz :: if we have just added the timer in state-7-to-8, skip
|
||||
@ -1965,7 +2009,16 @@
|
||||
(rof ~ /ames %bx [[our %$ da+now] /debug/timers])
|
||||
|=([@da =duct] ?=([[%ames %recork *] *] duct))
|
||||
::
|
||||
?> ?=(%18 -.u.cached-state)
|
||||
=^ moz u.cached-state
|
||||
?. ?=(%17 -.u.cached-state) [~ u.cached-state]
|
||||
:_ [%18 +.u.cached-state]
|
||||
~> %slog.0^leaf/"ames: fetching our public keys"
|
||||
^- (list move)
|
||||
[[[/ames]~ %pass /public-keys %j %public-keys [n=our ~ ~]] moz]
|
||||
::
|
||||
=? u.cached-state ?=(%18 -.u.cached-state)
|
||||
19+(state-18-to-19:load:adult-core +.u.cached-state)
|
||||
?> ?=(%19 -.u.cached-state)
|
||||
=. ames-state.adult-gate +.u.cached-state
|
||||
[moz larval-core(cached-state ~)]
|
||||
--
|
||||
@ -2022,6 +2075,11 @@
|
||||
*peer-state
|
||||
+.u.ship-state
|
||||
::
|
||||
++ get-sponsors
|
||||
;; (list ship)
|
||||
=< q.q %- need %- need
|
||||
(rof ~ /ames %j `beam`[[our %saxo %da now] /(scot %p our)])
|
||||
::
|
||||
+| %tasks
|
||||
:: +on-take-flub: vane not ready to process message, pretend it
|
||||
:: was never delivered
|
||||
@ -2100,12 +2158,11 @@
|
||||
::
|
||||
=/ failed=message-num
|
||||
last-acked:(~(got by rcv.peer-state.peer-core) bone)
|
||||
=/ =naxplanation [failed error]
|
||||
=/ =message-blob (jam naxplanation)
|
||||
=/ =message [%naxplanation failed error]
|
||||
:: send nack-trace message on associated .nack-bone
|
||||
::
|
||||
=/ nack-bone=^bone (mix 0b10 bone)
|
||||
abet:(call:(abed:mu:peer-core nack-bone) %memo message-blob)
|
||||
abet:(call:(abed:mu:peer-core nack-bone) %memo message)
|
||||
--
|
||||
:: +on-sift: handle request to filter debug output by ship
|
||||
::
|
||||
@ -2432,7 +2489,7 @@
|
||||
=. peers.ames-state
|
||||
(~(put by peers.ames-state) sndr.shot %known peer-state)
|
||||
::
|
||||
=. event-core
|
||||
=. event-core
|
||||
%- emit
|
||||
:* unix-duct.ames-state %give %nail sndr.shot
|
||||
(get-forward-lanes our peer-state peers.ames-state)
|
||||
@ -2545,7 +2602,7 @@
|
||||
%- %^ ev-trace odd.veb her
|
||||
|.("parsing old wire: {(spud wire)}")
|
||||
peer-core
|
||||
abet:(on-memo:peer-core bone payload %boon)
|
||||
abet:(on-memo:peer-core bone [%boon payload])
|
||||
:: +on-plea: handle request to send message
|
||||
::
|
||||
++ on-plea
|
||||
@ -2567,7 +2624,7 @@
|
||||
=/ sndr [our our-life.channel.peer-core]
|
||||
=/ rcvr [ship her-life.channel.peer-core]
|
||||
"plea {<sndr rcvr bone=bone vane.plea path.plea>}"
|
||||
abet:(on-memo:peer-core bone plea %plea)
|
||||
abet:(on-memo:peer-core bone [%plea plea])
|
||||
:: +on-tame: handle request to delete a route
|
||||
::
|
||||
++ on-tame
|
||||
@ -2654,7 +2711,7 @@
|
||||
=/ sndr [our our-life.channel.peer-core]
|
||||
=/ rcvr [ship her-life.channel.peer-core]
|
||||
"cork plea {<sndr rcvr bone=bone vane.plea path.plea>}"
|
||||
abet:(on-memo:(on-cork-flow:peer-core bone) bone plea %plea)
|
||||
abet:(on-memo:(on-cork-flow:peer-core bone) bone [%plea plea])
|
||||
:: +on-kroc: cork all stale flows from failed subscriptions
|
||||
::
|
||||
++ on-kroc
|
||||
@ -2676,7 +2733,7 @@
|
||||
?> ?=([~ %known *] ship-state)
|
||||
=+ peer-core=(abed-peer:pe ship.deep +.u.ship-state)
|
||||
|^ ?- -.deep
|
||||
%nack abet:(send-nack-trace [nack-bone message-blob]:deep)
|
||||
%nack abet:(send-nack-trace [nack-bone message]:deep)
|
||||
%sink abet:(sink-naxplanation [target-bone naxplanation]:deep)
|
||||
%drop abet:(clear-nack [nack-bone message-num]:deep)
|
||||
%cork =~((cork-bone bone.deep) (emit duct %give %done ~))
|
||||
@ -2684,8 +2741,8 @@
|
||||
==
|
||||
::
|
||||
++ send-nack-trace
|
||||
|= [=nack=bone =message-blob]
|
||||
abet:(call:(abed:mu:peer-core nack-bone) %memo message-blob)
|
||||
|= [=nack=bone =message]
|
||||
abet:(call:(abed:mu:peer-core nack-bone) %memo message)
|
||||
::
|
||||
++ sink-naxplanation
|
||||
|= [=target=bone =naxplanation]
|
||||
@ -2706,13 +2763,22 @@
|
||||
++ cork-bone |=(=bone abet:(on-cork-flow:peer-core bone))
|
||||
++ kill-bone |=(=bone abet:(on-kill-flow:peer-core bone))
|
||||
--
|
||||
:: +on-stun: poke %ping app when hearing a STUN response
|
||||
::
|
||||
++ on-stun
|
||||
|= =stun
|
||||
^+ event-core
|
||||
%- emit
|
||||
%^ poke-ping-app unix-duct.ames-state our
|
||||
?. ?=(%fail -.stun) -.stun
|
||||
[%kick fail=%.y]
|
||||
:: +set-dead-flow-timer: set dead flow timer and corresponding ames state
|
||||
::
|
||||
++ set-dead-flow-timer
|
||||
^+ event-core
|
||||
=. flow.dead.ames-state.event-core
|
||||
flow/`[~[/ames] /dead-flow `@da`(add now ~m2)]
|
||||
(emit:event-core ~[/ames] %pass /dead-flow %b %wait `@da`(add now ~m2))
|
||||
(emit ~[/ames] %pass /dead-flow %b %wait `@da`(add now ~m2))
|
||||
:: +wake-dead-flows: call on-wake on all dead flows, discarding any
|
||||
:: ames-state changes
|
||||
::
|
||||
@ -2924,6 +2990,11 @@
|
||||
:* unix-duct.ames-state %give %nail ship
|
||||
(get-forward-lanes our peer-state peers.ames-state)
|
||||
==
|
||||
:: if one of our sponsors breached, give the updated list to vere
|
||||
::
|
||||
=/ sponsors (~(gas in *(set ^ship)) get-sponsors)
|
||||
=? event-core (~(has in sponsors) ship)
|
||||
(emit unix-duct.ames-state %give %saxo ~(tap in sponsors))
|
||||
::
|
||||
event-core
|
||||
:: +on-publ-rekey: handle new key for peer
|
||||
@ -2969,7 +3040,7 @@
|
||||
^+ event-core
|
||||
::
|
||||
?: =(our ship)
|
||||
event-core
|
||||
(emit unix-duct.ames-state %give %saxo get-sponsors)
|
||||
::
|
||||
?~ sponsor
|
||||
%- (slog leaf+"ames: {(scow %p ship)} lost sponsor, ignoring" ~)
|
||||
@ -3000,10 +3071,12 @@
|
||||
::
|
||||
=+ ^- [=ship =point] i.points
|
||||
::
|
||||
?: =(our ship)
|
||||
=. rift.ames-state rift.point
|
||||
$(points t.points)
|
||||
=? rift.ames-state =(our ship)
|
||||
rift.point
|
||||
::
|
||||
:: XX not needed?
|
||||
:: =? event-core =(our ship)
|
||||
:: (emit unix-duct.ames-state %give %saxo get-sponsors)
|
||||
?. (~(has by keys.point) life.point)
|
||||
$(points t.points)
|
||||
::
|
||||
@ -3068,9 +3141,8 @@
|
||||
++ on-publ-rift
|
||||
|= [=ship =rift]
|
||||
^+ event-core
|
||||
?: =(our ship)
|
||||
=. rift.ames-state rift
|
||||
event-core
|
||||
=? rift.ames-state =(our ship)
|
||||
rift
|
||||
?~ ship-state=(~(get by peers.ames-state) ship)
|
||||
:: print error here? %rift was probably called before %keys
|
||||
::
|
||||
@ -3151,14 +3223,15 @@
|
||||
cork-moves
|
||||
^- (list move)
|
||||
:~ [duct %give %turf turfs]
|
||||
[duct %pass /ping %g %deal [our our /ames] %ping %poke %noun !>(%kick)]
|
||||
[duct %give %saxo get-sponsors]
|
||||
(poke-ping-app duct our %kick fail=%.n)
|
||||
==
|
||||
:: +on-vega: handle kernel reload
|
||||
::
|
||||
++ on-vega event-core
|
||||
:: +on-plug: handle key reservation
|
||||
++ on-plug
|
||||
|= [vane=term =path]
|
||||
|= =path
|
||||
^+ event-core
|
||||
=/ key=@ (shaz eny) :: TODO: check key width
|
||||
=/ num=@ud
|
||||
@ -3518,10 +3591,10 @@
|
||||
:: +on-memo: handle request to send message
|
||||
::
|
||||
++ on-memo
|
||||
|= [=bone payload=* valence=?(%plea %boon)]
|
||||
|= [=bone =message]
|
||||
^+ peer-core
|
||||
?: ?& (~(has in closing.peer-state) bone)
|
||||
!=(payload [%$ /flow %cork ~])
|
||||
!=(message [%plea %$ /flow %cork ~])
|
||||
==
|
||||
~> %slog.0^leaf/"ames: ignoring message on closing bone {<bone>}"
|
||||
peer-core
|
||||
@ -3529,10 +3602,9 @@
|
||||
~> %slog.0^leaf/"ames: ignoring message on corked bone {<bone>}"
|
||||
peer-core
|
||||
::
|
||||
=/ =message-blob (dedup-message (jim payload))
|
||||
=. peer-core abet:(call:(abed:mu bone) %memo message-blob)
|
||||
=. peer-core abet:(call:(abed:mu bone) %memo message)
|
||||
::
|
||||
?: ?& =(%boon valence)
|
||||
?: ?& ?=(%boon -.message)
|
||||
(gte now (add ~s30 last-contact.qos.peer-state))
|
||||
==
|
||||
check-clog
|
||||
@ -3664,38 +3736,6 @@
|
||||
recork-one
|
||||
::
|
||||
+| %implementation
|
||||
:: +dedup-message: replace with any existing copy of this message
|
||||
::
|
||||
++ dedup-message
|
||||
|= =message-blob
|
||||
^+ message-blob
|
||||
?: (lte (met 13 message-blob) 1)
|
||||
message-blob
|
||||
=/ peers-l=(list [=ship =ship-state]) ~(tap by peers.ames-state)
|
||||
|- ^+ message-blob
|
||||
=* peer-loop $
|
||||
?~ peers-l
|
||||
message-blob
|
||||
?. ?=(%known -.ship-state.i.peers-l)
|
||||
peer-loop(peers-l t.peers-l)
|
||||
=/ snd-l=(list [=bone =message-pump-state])
|
||||
~(tap by snd.ship-state.i.peers-l)
|
||||
|- ^+ message-blob
|
||||
=* bone-loop $
|
||||
?~ snd-l peer-loop(peers-l t.peers-l)
|
||||
=* unsent-fragments unsent-fragments.message-pump-state.i.snd-l
|
||||
=/ blob-l=(list ^message-blob)
|
||||
~(tap to unsent-messages.message-pump-state.i.snd-l)
|
||||
|- ^+ message-blob
|
||||
=* blob-loop $
|
||||
?^ blob-l
|
||||
?: =(i.blob-l message-blob)
|
||||
i.blob-l
|
||||
blob-loop(blob-l t.blob-l)
|
||||
?~ unsent-fragments bone-loop(snd-l t.snd-l)
|
||||
?: =(message-blob fragment.i.unsent-fragments)
|
||||
`@`fragment.i.unsent-fragments
|
||||
bone-loop(snd-l t.snd-l)
|
||||
:: +check-clog: notify clients if peer has stopped responding
|
||||
::
|
||||
++ check-clog
|
||||
@ -3738,7 +3778,7 @@
|
||||
=. mem
|
||||
%+ add
|
||||
%- ~(rep in unsent-messages.i.pumps)
|
||||
|=([a=@ b=_mem] (add b (met 3 a)))
|
||||
|=([m=message b=_mem] (add b (met 3 (jim m))))
|
||||
?~ unsent-fragments.i.pumps 0
|
||||
(met 3 fragment.i.unsent-fragments.i.pumps)
|
||||
?: (gte mem mem.cong.ames-state)
|
||||
@ -3791,8 +3831,9 @@
|
||||
::
|
||||
:: TODO use +trace
|
||||
~> %slog.0^leaf/"ames: recork {<her i.boz>}"
|
||||
=/ =plea [%$ /flow [%cork ~]]
|
||||
(on-memo i.boz plea %plea)
|
||||
=/ =plea [%$ /flow [%cork ~]]
|
||||
=/ =message [%plea plea]
|
||||
(on-memo i.boz message)
|
||||
:: +handle-cork: handle flow kill after server ames has taken %done
|
||||
::
|
||||
++ handle-cork
|
||||
@ -3890,7 +3931,7 @@
|
||||
^+ pump
|
||||
::
|
||||
?- -.task
|
||||
%memo (on-memo message-blob.task)
|
||||
%memo (on-memo message.task)
|
||||
%prod abet:(call:packet-pump %prod ~)
|
||||
%wake abet:(call:packet-pump %wake current.state)
|
||||
%near %- on-done
|
||||
@ -3925,8 +3966,8 @@
|
||||
:: +on-memo: handle request to send a message
|
||||
::
|
||||
++ on-memo
|
||||
|= blob=message-blob
|
||||
pump(unsent-messages.state (~(put to unsent-messages.state) blob))
|
||||
|= =message
|
||||
pump(unsent-messages.state (~(put to unsent-messages.state) message))
|
||||
:: +on-hear: handle packet acknowledgment
|
||||
::
|
||||
++ on-hear
|
||||
@ -4051,11 +4092,11 @@
|
||||
?~(unsent feed-packets pump)
|
||||
:: .unsent-messages is nonempty; pop a message off and feed it
|
||||
::
|
||||
=^ =message-blob unsent-messages.state
|
||||
=^ =message unsent-messages.state
|
||||
~(get to unsent-messages.state)
|
||||
:: break .message into .chunks and set as .unsent-fragments
|
||||
::
|
||||
=. unsent-fragments.state (split-message next.state message-blob)
|
||||
=. unsent-fragments.state (split-message next.state (jim +.message))
|
||||
:: try to feed packets from the next message
|
||||
::
|
||||
=. next.state +(next.state)
|
||||
@ -4704,13 +4745,13 @@
|
||||
|.("sink plea {<dat>}")
|
||||
?. ok
|
||||
=/ nack-bone=^bone (mix 0b10 bone)
|
||||
=/ =message-blob (jam [message-num *error])
|
||||
=/ =^message [%naxplanation message-num *error]
|
||||
=/ =wire (make-bone-wire her her-rift.channel nack-bone)
|
||||
:: send nack-trace with blank .error for security
|
||||
::
|
||||
=. peer-core
|
||||
%+ pe-emit duct
|
||||
[%pass wire %a %deep %nack her nack-bone message-blob]
|
||||
[%pass wire %a %deep %nack her nack-bone message]
|
||||
::
|
||||
(done ok=%.n)
|
||||
::
|
||||
@ -5314,7 +5355,8 @@
|
||||
%tame (on-tame:event-core ship.task)
|
||||
%kroc (on-kroc:event-core bones.task)
|
||||
%deep (on-deep:event-core deep.task)
|
||||
%plug (on-plug:event-core [vane path]:task)
|
||||
%stun (on-stun:event-core stun.task)
|
||||
%plug (on-plug:event-core +.task)
|
||||
::
|
||||
%keen (on-keen:event-core +.task)
|
||||
%chum (on-chum:event-core +.task)
|
||||
@ -5356,15 +5398,15 @@
|
||||
[moves ames-gate]
|
||||
:: +stay: extract state before reload
|
||||
::
|
||||
++ stay [%18 %adult ames-state]
|
||||
++ stay [%19 %adult ames-state]
|
||||
:: +load: load in old state after reload
|
||||
::
|
||||
++ load
|
||||
=< |= $= old-state
|
||||
$% [%18 ^ames-state]
|
||||
$% [%19 ^ames-state]
|
||||
==
|
||||
^+ ames-gate
|
||||
?> ?=(%18 -.old-state)
|
||||
?> ?=(%19 -.old-state)
|
||||
ames-gate(ames-state +.old-state)
|
||||
:: all state transitions are called from larval ames
|
||||
::
|
||||
@ -5559,7 +5601,7 @@
|
||||
::
|
||||
++ message-pump-16-to-17
|
||||
|= pump=message-pump-state-16
|
||||
^- message-pump-state
|
||||
^- message-pump-state-17
|
||||
%= pump
|
||||
metrics.packet-pump-state
|
||||
[rto rtt rttvar ssthresh cwnd counter]:metrics.packet-pump-state.pump
|
||||
@ -5595,24 +5637,45 @@
|
||||
==
|
||||
--
|
||||
==
|
||||
++ state-17-to-18
|
||||
|= old=ames-state-17
|
||||
++ state-18-to-19
|
||||
|= old=ames-state-18
|
||||
^- ^ames-state
|
||||
%= old
|
||||
dead [dead.old ~ ~]
|
||||
::
|
||||
dead [dead.old ~]
|
||||
::
|
||||
peers
|
||||
%- ~(run by peers.old)
|
||||
|= ship-state=ship-state-17
|
||||
^- ^ship-state
|
||||
?. ?=(%known -.ship-state)
|
||||
%= ship-state
|
||||
keens [keens.ship-state ~]
|
||||
|= s=ship-state-17
|
||||
^- ship-state
|
||||
?: ?=(%alien -.s)
|
||||
%= s
|
||||
keens [keens.s ~]
|
||||
==
|
||||
%= ship-state
|
||||
keens [keens.ship-state ~]
|
||||
==
|
||||
==
|
||||
%= s
|
||||
::
|
||||
keens [keens.s ~]
|
||||
::
|
||||
snd.+
|
||||
%- malt
|
||||
%+ turn
|
||||
~(tap by snd.+.s)
|
||||
|= [=bone m=message-pump-state-17]
|
||||
:- bone
|
||||
%= m
|
||||
unsent-messages
|
||||
%- ~(gas to *(qeu message))
|
||||
%+ turn
|
||||
~(tap to unsent-messages.m)
|
||||
|= b=message-blob
|
||||
^- message
|
||||
=/ hed
|
||||
?: =(1 (end 0 bone)) %plea
|
||||
?: =(0 (end 0 (rsh 0 bone))) %boon
|
||||
%naxplanation
|
||||
=/ msg =>([cue=cue arg=b] ~+((cue arg)))
|
||||
;;(message [hed msg])
|
||||
== == ==
|
||||
--
|
||||
:: +scry: dereference namespace
|
||||
::
|
||||
|
@ -459,8 +459,6 @@
|
||||
name.focus();
|
||||
}
|
||||
function doEauth() {
|
||||
console.log('mb get value from event', event);
|
||||
console.log('compare', name.value, our);
|
||||
if (name.value == our) {
|
||||
event.preventDefault();
|
||||
goLocal();
|
||||
@ -471,10 +469,6 @@
|
||||
;body
|
||||
=class "{?:(=(`& eauth) "eauth" "local")}"
|
||||
=onload "setup({?:(=(`& eauth) "true" "false")})"
|
||||
;nav
|
||||
;div.local(onclick "goLocal()"):"Local"
|
||||
;div.eauth(onclick "goEauth()"):"EAuth"
|
||||
==
|
||||
;div#local
|
||||
;p:"Urbit ID"
|
||||
;input(value "{(scow %p our)}", disabled "true", class "mono");
|
||||
@ -528,16 +522,11 @@
|
||||
==
|
||||
==
|
||||
;* ?: ?=(%ours -.identity) ~
|
||||
=+ id=(trim 29 (scow %p who.identity))
|
||||
=+ as="proceed as{?:(?=(%fake -.identity) " guest" "")}"
|
||||
;+ ;span.guest.mono
|
||||
; Or
|
||||
; Or try to
|
||||
;a/"{(trip (fall redirect-url '/'))}":"{as}"
|
||||
; :
|
||||
;br;
|
||||
; {p.id}
|
||||
;br;
|
||||
; {q.id}
|
||||
; .
|
||||
==
|
||||
==
|
||||
;script:'''
|
||||
@ -2973,6 +2962,7 @@
|
||||
=* session-id session-id.u.connection-state
|
||||
=* sessions sessions.auth.state
|
||||
=* inbound inbound-request.u.connection-state
|
||||
=* headers headers.response-header.http-event
|
||||
::
|
||||
?. (~(has by sessions) session-id)
|
||||
:: if the session has expired since the request was opened,
|
||||
@ -2983,9 +2973,14 @@
|
||||
|= =session
|
||||
session(expiry-time (add now session-timeout))
|
||||
=- response-header.http-event(headers -)
|
||||
%^ set-header:http 'set-cookie'
|
||||
(session-cookie-string session-id &)
|
||||
headers.response-header.http-event
|
||||
=/ cookie=(pair @t @t)
|
||||
['set-cookie' (session-cookie-string session-id &)]
|
||||
|-
|
||||
?~ headers
|
||||
[cookie ~]
|
||||
?: &(=(key.i.headers p.cookie) =(value.i.headers q.cookie))
|
||||
headers
|
||||
[i.headers $(headers t.headers)]
|
||||
::
|
||||
=* connection u.connection-state
|
||||
::
|
||||
|
@ -341,8 +341,7 @@
|
||||
:: remember to duplicate version tag changes here to $egg-any:gall in lull
|
||||
::
|
||||
+$ spore
|
||||
$: %16
|
||||
system-duct=duct
|
||||
$: system-duct=duct
|
||||
outstanding=(map [wire duct] (qeu remote-request))
|
||||
contacts=(set ship)
|
||||
eggs=(map term egg)
|
||||
@ -350,6 +349,7 @@
|
||||
=bug
|
||||
leaves=(unit [=duct =wire date=@da])
|
||||
==
|
||||
+$ spore-16 [%16 spore]
|
||||
--
|
||||
:: adult gall vane interface, for type compatibility with pupa
|
||||
::
|
||||
@ -1236,7 +1236,12 @@
|
||||
++ ap-serve-brood
|
||||
|= [=ship =(pole knot)]
|
||||
^- [(unit (unit brood)) _mo-core]
|
||||
?. ?=([%$ rest=*] pole)
|
||||
~& pole/pole
|
||||
?. ?=([%$ ver=@ rest=*] pole)
|
||||
~& bad-pole/pole
|
||||
`ap-abet
|
||||
?. =(1 (slav %ud ver.pole))
|
||||
~& bad-version/pole
|
||||
`ap-abet
|
||||
?~ cop=(ap-match-coop rest.pole)
|
||||
~& no-match-coop/rest.pole
|
||||
@ -1325,7 +1330,7 @@
|
||||
=? gem.yoke &(!exists ?=(~ pen))
|
||||
(~(put by gem.yoke) coop ~)
|
||||
=/ =wire (welp /key/[agent-name]/[run-nonce.yoke]/pug coop)
|
||||
(ap-move [hen %pass wire %a %plug %g [%g %x agent-name %$ coop]]~)
|
||||
(ap-move [hen %pass wire %a %plug [%g %x agent-name %$ '1' coop]]~)
|
||||
::
|
||||
++ ap-stub
|
||||
|= [=coop num=@ud key=@]
|
||||
@ -1399,9 +1404,26 @@
|
||||
%. sky.yoke
|
||||
%+ trace odd.veb.bug.state
|
||||
[leaf+"gall: {<agent-name>}: cull {<[case spur]>} no-op"]~
|
||||
%- need
|
||||
?~ las=(ram:on-path fan.u.old)
|
||||
%. sky.yoke
|
||||
%+ trace &
|
||||
[leaf+"gall: {<agent-name>}: cull {<[case spur]>} no paths"]~
|
||||
=/ fis (need (pry:on-path fan.u.old))
|
||||
?. &((gte yon key.fis) (lte yon key.u.las))
|
||||
%. sky.yoke
|
||||
%+ trace &
|
||||
:_ ~
|
||||
:- %leaf
|
||||
%+ weld
|
||||
"gall: {<agent-name>}: cull {<[case spur]>} out of range, "
|
||||
"min: {<key.fis>}, max: {<key.u.las>}"
|
||||
=; nex=(unit farm)
|
||||
?^ nex u.nex
|
||||
%. sky.yoke
|
||||
%+ trace &
|
||||
[leaf+"gall: {<agent-name>}: cull {<[case spur]>} invalid path structure"]~
|
||||
%+ ~(put of-farm sky.yoke) spur :: delete all older paths
|
||||
[`yon (lot:on-path fan.u.old `+(yon) ~)]
|
||||
[`yon (lot:on-path fan.u.old `yon ~)]
|
||||
:: +ap-from-internal: internal move to move.
|
||||
::
|
||||
:: We convert from cards to duct-indexed moves when resolving
|
||||
@ -2299,33 +2321,33 @@
|
||||
::
|
||||
++ load
|
||||
|^ |= old=spore-any
|
||||
=? old ?=(%7 -.old) (spore-7-to-8 old)
|
||||
=? old ?=(%8 -.old) (spore-8-to-9 old)
|
||||
=? old ?=(%9 -.old) (spore-9-to-10 old)
|
||||
=? old ?=(%10 -.old) (spore-10-to-11 old)
|
||||
=? old ?=(%11 -.old) (spore-11-to-12 old)
|
||||
=? old ?=(%12 -.old) (spore-12-to-13 old)
|
||||
=? old ?=(%13 -.old) (spore-13-to-14 old)
|
||||
=? old ?=(%14 -.old) (spore-14-to-15 old)
|
||||
=? old ?=(%15 -.old) (spore-15-to-16 old)
|
||||
=? old ?=(%7 -.old) (spore-7-to-8 +.old)
|
||||
=? old ?=(%8 -.old) (spore-8-to-9 +.old)
|
||||
=? old ?=(%9 -.old) (spore-9-to-10 +.old)
|
||||
=? old ?=(%10 -.old) (spore-10-to-11 +.old)
|
||||
=? old ?=(%11 -.old) (spore-11-to-12 +.old)
|
||||
=? old ?=(%12 -.old) (spore-12-to-13 +.old)
|
||||
=? old ?=(%13 -.old) (spore-13-to-14 +.old)
|
||||
=? old ?=(%14 -.old) (spore-14-to-15 +.old)
|
||||
=? old ?=(%15 -.old) (spore-15-to-16 +.old)
|
||||
?> ?=(%16 -.old)
|
||||
gall-payload(state old)
|
||||
::
|
||||
+$ spore-any
|
||||
$% spore
|
||||
spore-7
|
||||
spore-8
|
||||
spore-9
|
||||
spore-10
|
||||
spore-11
|
||||
spore-12
|
||||
spore-13
|
||||
spore-14
|
||||
spore-15
|
||||
$% [%16 spore]
|
||||
[%7 spore-7]
|
||||
[%8 spore-8]
|
||||
[%9 spore-9]
|
||||
[%10 spore-10]
|
||||
[%11 spore-11]
|
||||
[%12 spore-12]
|
||||
[%13 spore-13]
|
||||
[%14 spore-14]
|
||||
[%15 spore-15]
|
||||
==
|
||||
+$ spore-15
|
||||
$: %15
|
||||
system-duct=duct
|
||||
+$ spore-15
|
||||
$+ spore-15
|
||||
$: system-duct=duct
|
||||
outstanding=(map [wire duct] (qeu remote-request))
|
||||
contacts=(set ship)
|
||||
eggs=(map term egg-15)
|
||||
@ -2334,8 +2356,7 @@
|
||||
leaves=(unit [=duct =wire date=@da])
|
||||
==
|
||||
+$ spore-14
|
||||
$: %14
|
||||
system-duct=duct
|
||||
$: system-duct=duct
|
||||
outstanding=(map [wire duct] (qeu remote-request))
|
||||
contacts=(set ship)
|
||||
eggs=(map term egg-15)
|
||||
@ -2344,8 +2365,7 @@
|
||||
==
|
||||
::
|
||||
+$ spore-13
|
||||
$: %13
|
||||
system-duct=duct
|
||||
$: system-duct=duct
|
||||
outstanding=(map [wire duct] (qeu remote-request))
|
||||
contacts=(set ship)
|
||||
eggs=(map term egg-15)
|
||||
@ -2358,8 +2378,7 @@
|
||||
attributing=ship
|
||||
==
|
||||
+$ spore-12
|
||||
$: %12
|
||||
system-duct=duct
|
||||
$: system-duct=duct
|
||||
outstanding=(map [wire duct] (qeu remote-request))
|
||||
contacts=(set ship)
|
||||
eggs=(map term egg-12)
|
||||
@ -2383,8 +2402,7 @@
|
||||
sky=(map spur farm)
|
||||
== ==
|
||||
+$ spore-11
|
||||
$: %11
|
||||
system-duct=duct
|
||||
$: system-duct=duct
|
||||
outstanding=(map [wire duct] (qeu remote-request))
|
||||
contacts=(set ship)
|
||||
eggs=(map term egg-11)
|
||||
@ -2405,8 +2423,7 @@
|
||||
marks=(map duct mark)
|
||||
==
|
||||
+$ spore-10
|
||||
$: %10
|
||||
system-duct=duct
|
||||
$: system-duct=duct
|
||||
outstanding=(map [wire duct] (qeu remote-request))
|
||||
contacts=(set ship)
|
||||
eggs=(map term egg-10)
|
||||
@ -2427,8 +2444,7 @@
|
||||
marks=(map duct mark)
|
||||
==
|
||||
+$ spore-9
|
||||
$: %9
|
||||
system-duct=duct
|
||||
$: system-duct=duct
|
||||
outstanding=(map [wire duct] (qeu remote-request-9))
|
||||
contacts=(set ship)
|
||||
eggs=(map term egg-10)
|
||||
@ -2439,8 +2455,7 @@
|
||||
+$ remote-request-9 ?(remote-request %cork)
|
||||
::
|
||||
+$ spore-8
|
||||
$: %8
|
||||
system-duct=duct
|
||||
$: system-duct=duct
|
||||
outstanding=(map [wire duct] (qeu remote-request-9))
|
||||
contacts=(set ship)
|
||||
eggs=(map term egg-8)
|
||||
@ -2459,8 +2474,7 @@
|
||||
+$ watches-8 [inbound=bitt outbound=boat-8]
|
||||
+$ boat-8 (map [wire ship term] [acked=? =path])
|
||||
+$ spore-7
|
||||
$: %7
|
||||
wipe-eyre-subs=_| ::NOTE band-aid for #3196
|
||||
$: wipe-eyre-subs=_| ::NOTE band-aid for #3196
|
||||
system-duct=duct
|
||||
outstanding=(map [wire duct] (qeu remote-request-9))
|
||||
contacts=(set ship)
|
||||
@ -2470,20 +2484,22 @@
|
||||
::
|
||||
++ spore-7-to-8
|
||||
|= old=spore-7
|
||||
^- spore-8
|
||||
^- spore-any
|
||||
:- %8
|
||||
^- spore-8
|
||||
=. eggs.old
|
||||
%- ~(urn by eggs.old)
|
||||
|= [a=term e=egg-8]
|
||||
:: kiln will kick off appropriate app revival
|
||||
::
|
||||
e(old-state [%| p.old-state.e])
|
||||
+>.old
|
||||
+.old
|
||||
::
|
||||
++ spore-8-to-9
|
||||
|= old=spore-8
|
||||
:- %9
|
||||
^- spore-9
|
||||
=- old(- %9, eggs -, blocked [blocked.old *bug])
|
||||
=- old(eggs -, blocked [blocked.old *bug])
|
||||
%- ~(run by eggs.old)
|
||||
|= =egg-8
|
||||
^- egg-10
|
||||
@ -2506,7 +2522,9 @@
|
||||
::
|
||||
++ spore-9-to-10
|
||||
|= old=spore-9
|
||||
=- old(- %10, outstanding -)
|
||||
:- %10
|
||||
^- spore-10
|
||||
=- old(outstanding -)
|
||||
%- ~(run by outstanding.old)
|
||||
|= q=(qeu remote-request-9)
|
||||
%- ~(gas to *(qeu remote-request))
|
||||
@ -2519,9 +2537,9 @@
|
||||
::
|
||||
++ spore-10-to-11
|
||||
|= old=spore-10
|
||||
:- %11
|
||||
^- spore-11
|
||||
%= old
|
||||
- %11
|
||||
eggs
|
||||
%- ~(urn by eggs.old)
|
||||
|= [a=term e=egg-10]
|
||||
@ -2533,9 +2551,9 @@
|
||||
::
|
||||
++ spore-11-to-12
|
||||
|= old=spore-11
|
||||
:- %12
|
||||
^- spore-12
|
||||
%= old
|
||||
- %12
|
||||
eggs
|
||||
%- ~(urn by eggs.old)
|
||||
|= [a=term e=egg-11]
|
||||
@ -2547,9 +2565,9 @@
|
||||
::
|
||||
++ spore-12-to-13
|
||||
|= old=spore-12
|
||||
:- %13
|
||||
^- spore-13
|
||||
%= old
|
||||
- %13
|
||||
eggs
|
||||
%- ~(urn by eggs.old)
|
||||
|= [a=term e=egg-12]
|
||||
@ -2557,27 +2575,12 @@
|
||||
?: ?=(%nuke -.e) e
|
||||
!! :: e(sky [sky.e ken:*$>(%live egg-13)])
|
||||
==
|
||||
:: added provenance path to routes
|
||||
++ spore-15-to-16
|
||||
|= old=spore-15
|
||||
^- spore
|
||||
%= old
|
||||
- %16
|
||||
::
|
||||
eggs
|
||||
%- ~(run by eggs.old)
|
||||
|= egg=egg-15
|
||||
?: ?=(%nuke -.egg)
|
||||
egg
|
||||
egg(sky (migrate:of-farm sky.egg), ken [ken.egg ~ ~])
|
||||
==
|
||||
::
|
||||
++ spore-13-to-14
|
||||
|= old=spore-13
|
||||
:- %14
|
||||
^- spore-14
|
||||
%= old
|
||||
- %14
|
||||
::
|
||||
blocked
|
||||
^- (map term (qeu blocked-move))
|
||||
%- ~(run by blocked.old)
|
||||
@ -2594,8 +2597,45 @@
|
||||
::
|
||||
++ spore-14-to-15
|
||||
|= old=spore-14
|
||||
:- %15
|
||||
^- spore-15
|
||||
old(- %15, bug [bug.old ~])
|
||||
old(bug [bug.old ~])
|
||||
:: convert to versioned sky
|
||||
::
|
||||
++ spore-15-to-16
|
||||
|= old=spore-15
|
||||
^- spore-16
|
||||
:- %16
|
||||
%= old
|
||||
eggs
|
||||
%- ~(urn by eggs.old)
|
||||
|= [=term e=egg-15]
|
||||
^- egg
|
||||
?: ?=(%nuke -.e) e(sky *(map spur @ud))
|
||||
%= e
|
||||
ken [ken.e ~ ~]
|
||||
::
|
||||
sky
|
||||
=| =farm
|
||||
=/ ski ~(tap by sky.e)
|
||||
|- ^+ farm
|
||||
?~ ski
|
||||
farm
|
||||
=/ [=spur p=plot] i.ski
|
||||
=; new
|
||||
?~ nex=(~(put of-farm farm) spur new)
|
||||
~& %weird
|
||||
!! :: shouldn't continue else loss of ref integrity
|
||||
:: $(ski t.ski)
|
||||
$(farm u.nex, ski t.ski)
|
||||
:- ~
|
||||
=/ m ~(val by fan.p)
|
||||
%+ gas:on-path *_fan.p
|
||||
%+ turn (gulf 1 ~(wyt by fan.p))
|
||||
|= a=@ud
|
||||
[a (snag (dec a) m)]
|
||||
==
|
||||
==
|
||||
--
|
||||
:: +scry: standard scry
|
||||
::
|
||||
@ -2702,19 +2742,22 @@
|
||||
p.agent.u.yok
|
||||
on-save:p.agent.u.yok
|
||||
==
|
||||
``noun+!>([-:*spore egg])
|
||||
``noun+!>(`egg-any`[-:*spore-16 egg])
|
||||
::
|
||||
?: ?& =(%w care)
|
||||
=([%$ %da now] coin)
|
||||
=(our ship)
|
||||
?=([%'1' *] path)
|
||||
==
|
||||
=> .(path t.path)
|
||||
=/ yok (~(get by yokes.state) q.bem)
|
||||
?. ?=([~ %live *] yok) [~ ~]
|
||||
?~ ski=(~(get of-farm sky.u.yok) path) [~ ~]
|
||||
?~ las=(ram:on-path fan.u.ski) [~ ~]
|
||||
``case/!>(ud/key.u.las)
|
||||
::
|
||||
?: ?=(%x care)
|
||||
?: &(?=(%x care) ?=([%'1' *] path))
|
||||
=> .(path t.path)
|
||||
?. =(p.bem our) ~
|
||||
::
|
||||
?: ?=(%$ q.bem) :: app %$ reserved
|
||||
@ -2767,7 +2810,9 @@
|
||||
?: ?& =(%t care)
|
||||
=([%$ %da now] coin)
|
||||
=(our ship)
|
||||
?=([%'1' *] path)
|
||||
==
|
||||
=> .(path t.path)
|
||||
=/ yok (~(get by yokes.state) q.bem)
|
||||
?. ?=([~ %live *] yok) ~
|
||||
:^ ~ ~ %file-list !> ^- (list ^path)
|
||||
@ -2779,7 +2824,9 @@
|
||||
::
|
||||
?: ?& =(%z care)
|
||||
=(our ship)
|
||||
?=([%'1' *] path)
|
||||
==
|
||||
=> .(path t.path)
|
||||
=/ yok (~(get by yokes.state) q.bem)
|
||||
?. ?=([~ %live *] yok) ~
|
||||
?~ ski=(~(get of-farm sky.u.yok) path) ~
|
||||
@ -2798,7 +2845,7 @@
|
||||
:: TODO: superfluous? see +molt
|
||||
::
|
||||
++ stay
|
||||
^- spore
|
||||
^- spore-16
|
||||
=; eggs=(map term egg) state(yokes eggs)
|
||||
%- ~(run by yokes.state)
|
||||
|= =yoke
|
||||
|
@ -4298,8 +4298,11 @@
|
||||
~&(%base-64-padding-err-two ~)
|
||||
=/ len (sub (mul 3 (div (add lat dif) 4)) dif)
|
||||
:+ ~ len
|
||||
%+ swp 3
|
||||
(rep [0 6] (flop (weld dat (reap dif 0))))
|
||||
=/ res (rsh [1 dif] (rep [0 6] (flop dat)))
|
||||
=/ amt (met 3 res)
|
||||
:: left shift trailing zeroes in after byte swap
|
||||
=/ trl ?: (lth len amt) 0 (sub len amt)
|
||||
(lsh [3 trl] (swp 3 res))
|
||||
--
|
||||
--
|
||||
::
|
||||
@ -4777,7 +4780,7 @@
|
||||
=+ spa=;~(pose comt whit)
|
||||
%+ knee *manx |. ~+
|
||||
%+ ifix
|
||||
[;~(plug (punt decl) (star spa)) (star spa)]
|
||||
[;~(plug (more spa decl) (star spa)) (star spa)]
|
||||
;~ pose
|
||||
%+ sear |=([a=marx b=marl c=mane] ?.(=(c n.a) ~ (some [a b])))
|
||||
;~(plug head many tail)
|
||||
|
@ -80,10 +80,11 @@
|
||||
=/ deks
|
||||
?~ desks
|
||||
%+ sort
|
||||
(sort ~(tap in -.prep) |=([[a=@ *] b=@ *] !(aor a b)))
|
||||
(sort ~(tap by -.prep) |=([[a=@ *] b=@ *] !(aor a b)))
|
||||
|=([[a=@ *] [b=@ *]] ?|(=(a %kids) =(b %base)))
|
||||
%+ skip ~(tap in -.prep)
|
||||
%+ skip ~(tap by -.prep)
|
||||
|=([syd=@tas *] =(~ (find ~[syd] desks)))
|
||||
=. deks (skim deks |=([=desk *] ((sane %tas) desk)))
|
||||
?: =(filt %blocking)
|
||||
=/ base-wic
|
||||
%+ sort ~(tap by wic:(~(got by -.prep) %base))
|
||||
@ -147,6 +148,8 @@
|
||||
^- tank
|
||||
=/ ego (scot %p our)
|
||||
=/ wen (scot %da now)
|
||||
?. ((sane %tas) syd)
|
||||
leaf+"insane desk: {<syd>}"
|
||||
=+ .^(=cass %cw /[ego]/[syd]/[wen])
|
||||
?: =(ud.cass 0)
|
||||
leaf+"desk does not yet exist: {<syd>}"
|
||||
|
@ -38,7 +38,7 @@
|
||||
:_ this
|
||||
?: ?=(%keen -.action)
|
||||
=/ =path
|
||||
%+ welp /g/x/(scot %ud case.action)/[dap.bowl]
|
||||
%+ welp /g/x/(scot %ud case.action)/[dap.bowl]//1
|
||||
path.action
|
||||
[%pass /keen %keen & ship.action path]~
|
||||
[%pass /foo action]~
|
||||
|
41
tests/sys/hoon/nest.hoon
Normal file
41
tests/sys/hoon/nest.hoon
Normal file
@ -0,0 +1,41 @@
|
||||
/+ *test
|
||||
|%
|
||||
++ test-fitz
|
||||
;: weld
|
||||
%+ expect-eq
|
||||
!> %.y
|
||||
!> (fitz ~. ~.tas)
|
||||
::
|
||||
%+ expect-eq
|
||||
!> %.y
|
||||
!> (fitz ~.ud ~.)
|
||||
::
|
||||
%+ expect-eq
|
||||
!> %.n
|
||||
!> (fitz ~.p ~.q)
|
||||
::
|
||||
%+ expect-eq
|
||||
!> %.n
|
||||
!> (fitz ~.ux ~.ud)
|
||||
::
|
||||
%+ expect-eq
|
||||
!> %.y
|
||||
!> (fitz ~.tas ~.ta)
|
||||
::
|
||||
%+ expect-eq
|
||||
!> %.n
|
||||
!> (fitz 'uvD' 'uvE')
|
||||
::
|
||||
%+ expect-eq
|
||||
!> %.y
|
||||
!> (fitz 'uvE' 'uvD')
|
||||
::
|
||||
%+ expect-eq
|
||||
!> %.n
|
||||
!> (fitz 'AD' 'CB')
|
||||
::
|
||||
%+ expect-eq
|
||||
!> %.n
|
||||
!> (fitz 'AC' 'CB')
|
||||
==
|
||||
--
|
Loading…
Reference in New Issue
Block a user