From 75c97cfd449b2bac8e61af1017a83bdf43f5e8fe Mon Sep 17 00:00:00 2001 From: Samuel Mendoza-Jonas Date: Wed, 14 Dec 2016 14:44:23 +1100 Subject: discover: Maintain a backlog of status updates Add status updates to a persistent list in the discover_server struct, and send each client the backlog on connect. This avoids clients missing useful messages from early init. Clients will only show this in the backlog screen to avoid flooding the client's status line. Signed-off-by: Samuel Mendoza-Jonas --- lib/pb-protocol/pb-protocol.c | 10 +++++++++- lib/types/types.h | 6 ++++++ 2 files changed, 15 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pb-protocol/pb-protocol.c b/lib/pb-protocol/pb-protocol.c index 8bc8820..65a1e93 100644 --- a/lib/pb-protocol/pb-protocol.c +++ b/lib/pb-protocol/pb-protocol.c @@ -217,8 +217,9 @@ int pb_protocol_boot_len(const struct boot_command *boot) int pb_protocol_boot_status_len(const struct status *status) { - return 4 + + return 4 + /* type */ 4 + optional_strlen(status->message) + + 4 + /* backlog */ 4; } @@ -410,6 +411,9 @@ int pb_protocol_serialise_boot_status(const struct status *status, pos += pb_protocol_serialise_string(pos, status->message); + *(bool *)pos = __cpu_to_be32(status->backlog); + pos += sizeof(bool); + assert(pos <= buf + buf_len); (void)buf_len; @@ -847,6 +851,10 @@ int pb_protocol_deserialise_boot_status(struct status *status, if (read_string(status, &pos, &len, &status->message)) goto out; + /* backlog */ + status->backlog = *(bool *)pos; + pos += sizeof(status->backlog); + rc = 0; out: diff --git a/lib/types/types.h b/lib/types/types.h index 506510b..63f1b21 100644 --- a/lib/types/types.h +++ b/lib/types/types.h @@ -76,6 +76,12 @@ struct status { STATUS_ERROR, } type; char *message; + bool backlog; +}; + +struct statuslog_entry { + struct status *status; + struct list_item list; }; struct interface_info { -- cgit v1.2.1