diff options
| author | eunhhu <[email protected]> | 2026-09-30 05:58:38 +0100 |
|---|---|---|
| committer | eunhhu <[email protected]> | 2026-09-30 05:58:38 +0100 |
| commit | 5ce7655d613689223050715ff3f8fe5c456ebf11 (patch) | |
| tree | 03c55f96e604f6d42a102cbea7de73bc040e5a1c /core/module-text.h | |
| parent | b0bec448d30f198dc4817d71fc8c72654907a3a9 (diff) | |
| download | pure-5ce7655d613689223050715ff3f8fe5c456ebf11.tar.gz pure-5ce7655d613689223050715ff3f8fe5c456ebf11.zip | |
Take a delivery's fields by name, dropping none
A message from another node was taken only in its input's exact shape
(the link's STREAM shape, fields and order alike; over HTTP, every
field). So a board whose nodes are upgraded one after the other stopped
both ways until both were, and an output and its input whose fields
differ only in order were refused for good (docs/design/014).
An input now takes a message when it has every field the sender sends,
by name, of the same type or one that holds its values (a u32 in a
number, text in bytes); a field only the input has is 0 or empty. One
that sends a field the input lacks is refused: taking it would drop the
value, and with its number heard the value would never come again (two
boards apart for good). So add fields to receivers first and take them
from senders first, and nothing stops or is lost.
The link carries a sender's fields in a new frame, FIELDS (0x0d: names,
shape, u8 count, each {type, name length, name}): after a REFUSED for
another shape the sender puts it in its packets (after OFFER, before
the records, so a receiver that knows no FIELDS reads what it read
before) until the stream is taken, the first time at once. A receiver
seeing another shape waits for the packet's FIELDS before refusing, and
asks its host with them (PureLinkHost.input takes them); REFUSED says 4
when the input lacks a field. Deliveries carry the fields and the host
lays each record out anew (pure_module_takes, pure_module_recast,
pure_module_fields, over pure_send_recast's rule). A stream whose sender
starts again in another shape lets go what it held; the sender sends it
again laid out anew. A refusal already queued for a stream now says the
last reason judged, not the first. Over HTTP a delivery (X-Pure-Source)
may lack fields; an unknown member is still refused.
test-link named: a stream of another shape naming its fields is taken,
200 stored in 47 ms with every delivery naming them; an input that does
not take them refuses (4) and the sender backs off. check.py
server_fields: five outputs, three linked and two over HTTP, fields in
another order taken, an input with a field more taking messages without
it, one lacking a field refusing until it starts again with it, then
taking all. server_upgrade's new receiver declares its fields in another
order. 012 names the frame and the rules.
Diffstat (limited to 'core/module-text.h')
0 files changed, 0 insertions, 0 deletions
