| | |
| | | |
| | | abort @1 :Exception; |
| | | # Sent when a connection is being aborted due to an unrecoverable error. This could be e.g. |
| | | # because the sender received an invalid or nonsensical message or because the sender had an |
| | | # internal error. The sender will shut down the outgoing half of the connection after `abort` |
| | | # and will completely close the connection shortly thereafter (it's up to the sender how much |
| | | # of a time buffer they want to offer for the client to receive the `abort` before the |
| | | # connection is reset). |
| | | # because the sender received an invalid or nonsensical message (`isCallersFault` is true) or |
| | | # because the sender had an internal error (`isCallersFault` is false). The sender will shut |
| | | # down the outgoing half of the connection after `abort` and will completely close the |
| | | # connection shortly thereafter (it's up to the sender how much of a time buffer they want to |
| | | # offer for the client to receive the `abort` before the connection is reset). |
| | | |
| | | # Level 0 features ----------------------------------------------- |
| | | |
| | |
| | | # in the calls so that the results need not pass back through Vat B. |
| | | # |
| | | # For example: |
| | | # - Alice, in Vat A, calls foo() on Bob in Vat B. |
| | | # - Alice, in Vat A, call foo() on Bob in Vat B. |
| | | # - Alice makes a pipelined call bar() on the promise returned by foo(). |
| | | # - Later on, Bob resolves the promise from foo() to point at Carol, who lives in Vat A (next |
| | | # to Alice). |
| | | # - Vat B dutifully forwards the bar() call to Carol. Let us call this forwarded call bar'(). |
| | | # Notice that bar() and bar'() are travelling in opposite directions on the same network |
| | | # link. |
| | | # - The `Call` for bar'() has `sendResultsTo` set to `yourself`. |
| | | # - Vat B sends a `Return` for bar() with `takeFromOtherQuestion` set in place of the results, |
| | | # with the value set to the question ID of bar'(). Vat B does not wait for bar'() to return, |
| | | # as doing so would introduce unnecessary round trip latency. |
| | | # - The `Call` for bar'() has `sendResultsTo` set to `yourself`, with the value being the |
| | | # question ID originally assigned to the bar() call. |
| | | # - Vat A receives bar'() and delivers it to Carol. |
| | | # - When bar'() returns, Vat A sends a `Return` for bar'() to Vat B, with `resultsSentElsewhere` |
| | | # set in place of results. |
| | | # - Vat A sends a `Finish` for the bar() call to Vat B. |
| | | # - Vat B receives the `Finish` for bar() and sends a `Finish` for bar'(). |
| | | # - When bar'() returns, Vat A immediately takes the results and returns them from bar(). |
| | | # - Meanwhile, Vat A sends a `Return` for bar'() to Vat B, with `resultsSentElsewhere` set in |
| | | # place of results. |
| | | # - Vat A sends a `Finish` for that call to Vat B. |
| | | # - Vat B receives the `Return` for bar'() and sends a `Return` for bar(), with |
| | | # `receivedFromYourself` set in place of the results. |
| | | # - Vat B receives the `Finish` for bar() and sends a `Finish` to bar'(). |
| | | |
| | | thirdParty @7 :RecipientId; |
| | | # **(level 3)** |
| | |
| | | takeFromOtherQuestion @6 :QuestionId; |
| | | # The sender has also sent (before this message) a `Call` with the given question ID and with |
| | | # `sendResultsTo.yourself` set, and the results of that other call should be used as the |
| | | # results here. `takeFromOtherQuestion` can only used once per question. |
| | | # results here. |
| | | |
| | | acceptFromThirdParty @7 :ThirdPartyCapId; |
| | | # **(level 3)** |
| | |
| | | # Message type sent to pick up a capability hosted by the receiving vat and provided by a third |
| | | # party. The third party previously designated the capability using `Provide`. |
| | | # |
| | | # This message is also used to pick up a redirected return -- see `Return.acceptFromThirdParty`. |
| | | # This message is also used to pick up a redirected return -- see `Return.redirect`. |
| | | |
| | | questionId @0 :QuestionId; |
| | | # A new question ID identifying this accept message, which will eventually receive a Return |
| | |
| | | # Hopefully this is unusual. |
| | | |
| | | senderHosted @1 :ExportId; |
| | | # The ID of a capability in the sender's export table (receiver's import table). It may be a |
| | | # newly allocated table entry, or an existing entry (increments the reference count). |
| | | # A capability newly exported by the sender. This is the ID of the new capability in the |
| | | # sender's export table (receiver's import table). |
| | | |
| | | senderPromise @2 :ExportId; |
| | | # A promise that the sender will resolve later. The sender will send exactly one Resolve |
| | |
| | | # The information that must be sent in an `Accept` message to identify the object being accepted. |
| | | # |
| | | # In a network where each vat has a public/private key pair, this could simply be the public key |
| | | # fingerprint of the provider vat along with a nonce matching the one in the `RecipientId` used |
| | | # in the `Provide` message sent from that provider. |
| | | # fingerprint of the provider vat along with the question ID used in the `Provide` message sent from |
| | | # that provider. |
| | | |
| | | using RecipientId = AnyPointer; |
| | | # **(level 3)** |
| | |
| | | # capability. |
| | | # |
| | | # In a network where each vat has a public/private key pair, this could simply be the public key |
| | | # fingerprint of the recipient along with a nonce matching the one in the `ProvisionId`. |
| | | # fingerprint of the recipient. (CapTP also calls for a nonce to identify the object. In our |
| | | # case, the `Provide` message's `questionId` can serve as the nonce.) |
| | | |
| | | using ThirdPartyCapId = AnyPointer; |
| | | # **(level 3)** |
| | |
| | | # |
| | | # In a network where each vat has a public/private key pair, this could be a combination of the |
| | | # third party's public key fingerprint, hints on how to connect to the third party (e.g. an IP |
| | | # address), and the nonce used in the corresponding `Provide` message's `RecipientId` as sent |
| | | # to that third party (used to identify which capability to pick up). |
| | | # address), and the question ID used in the corresponding `Provide` message sent to that third party |
| | | # (used to identify which capability to pick up). |
| | | |
| | | using JoinKeyPart = AnyPointer; |
| | | # **(level 4)** |