Fix incoming Ref rewriting

ehmry/xdg_open_ng#3
This commit is contained in:
Emery Hemingway 2022-03-18 19:10:50 -05:00
parent 4027da4c5f
commit 4454d19b60
1 changed files with 9 additions and 16 deletions

View File

@ -16,7 +16,7 @@ type Oid = sturdy.Oid
type
Assertion = Preserve[Ref]
WireRef = sturdy.WireRef[Ref]
WireRef = sturdy.WireRef[void]
WireAssertion = Preserve[WireRef]
Event = protocol.Event[WireRef]
TurnEvent = protocol.TurnEvent[WireRef]
@ -74,7 +74,7 @@ proc newSyncPeerEntity(r: Relay; p: Ref): SyncPeerEntity =
proc rewriteRefOut(relay: Relay; `ref`: Ref; transient: bool; exported: var seq[WireSymbol]): WireRef =
if `ref`.target of RelayEntity and `ref`.target.RelayEntity.relay == relay and `ref`.attenuation.len == 0:
WireRef(orKind: WireRefKind.yours, yours: WireRefYours[Ref](oid: `ref`.target.oid))
WireRef(orKind: WireRefKind.yours, yours: WireRefYours[void](oid: `ref`.target.oid))
else:
var ws = grab(relay.exported, `ref`)
if ws.isNil:
@ -179,18 +179,15 @@ proc rewriteRefIn(relay; facet; n: WireRef, imported: var seq[WireSymbol]): Ref
result = e.`ref`
of WireRefKind.yours:
let r = relay.lookupLocal(n.yours.oid)
if n.yours.attenuation.len == 0 or r.isInert:
result = r
else:
raiseAssert "attenuation not implemented"
if n.yours.attenuation.len == 0 or r.isInert: result = r
else: raiseAssert "attenuation not implemented"
proc rewriteIn(relay; facet; a: Preserve[WireRef]):
tuple[rewritten: Assertion; imported: seq[WireSymbol]] =
var
imported: seq[WireSymbol]
rewritten = mapEmbeds(a) do (wr: WireRef) -> Ref:
rewriteRefIn(relay, facet, wr, imported)
(rewritten, imported)
var imported: seq[WireSymbol]
result.rewritten = mapEmbeds(a) do (wr: WireRef) -> Ref:
rewriteRefIn(relay, facet, wr, imported)
result.imported = imported
proc close(r: Relay) = discard
@ -324,7 +321,7 @@ proc connectUnix*(turn: var Turn; path: string; cap: SturdyRef; bootProc: During
if buf.len == 0:
run(facet) do (turn: var Turn): stopActor(turn)
else:
var pr = parsePreserves(buf, sturdy.WireRef[void])
var pr = parsePreserves(buf, WireRef)
dispatch(relay, cast[Preserve[WireRef]](pr))
socket.recv(recvSize).addCallback(recvCb)
# TODO: should this need be callSoon?
@ -367,11 +364,7 @@ proc connectStdio*(ds: Ref; turn: var Turn) =
let
facet = turn.facet
asyncStdin = openAsync("/dev/stdin")
observer = observe(turn, ds, grab(), newRelayEntity("stdio", relay, Oid 1))
# publish an observe in the local dataspace
# so that everything is relayed to stdout
facet.actor.atExit do (turn: var Turn):
retract(turn, observer)
close(asyncStdin)
proc recvCb(pktFut: Future[string]) {.gcsafe.} =
if pktFut.failed: discard