From b4cd5273bccc8ae09da2a60a11a7c9946fc2d9db Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Mon, 19 May 2014 21:40:23 +0200 Subject: add broadcast support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- doc/messages | 8 +++++++- src/mds-server/mds-server.c | 12 +++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/doc/messages b/doc/messages index 48c6b73..8dd583c 100644 --- a/doc/messages +++ b/doc/messages @@ -105,8 +105,14 @@ assumed that the client's ID is 0:0. Clients automatically receives messages that is -addressed to them with priority zero and mark that +addressed to them with priority zero with a mark that it will not modify the message. To address a message to client include the header ‘To’ with the client's ID [that the message is addressed to] as the value. +Furthermore, client's automatically receives messages +that include the header ‘To: all’ — a broadcast. Since +servers are clients too they will also receive these +messages; there are two exceptions, the kernel and +the master server, neither of which are servers proper, +but rather a dual-layer kernel. diff --git a/src/mds-server/mds-server.c b/src/mds-server/mds-server.c index 55db770..3179ee7 100644 --- a/src/mds-server/mds-server.c +++ b/src/mds-server/mds-server.c @@ -259,13 +259,19 @@ void* slave_loop(void* data) size_t information_address = fd_table_get(&client_map, (size_t)socket_fd); client_t* information = (client_t*)(void*)information_address; char* msgbuf = NULL; + char buf[] = "To: all"; size_t n; int r; - /* Intiailsie the client. */ - if (information == NULL) - fail_if ((information = initialise_client(socket_fd)) == NULL); + if (information == NULL) /* Did not re-exec. */ + { + /* Initialise the client. */ + fail_if ((information = initialise_client(socket_fd)) == NULL); + + /* Register client to receive broadcasts. */ + add_intercept_condition(information, buf, 0, 0, 0); + } /* Store slave thread and create mutexes and conditions. */ fail_if (client_initialise_threading(information)); -- cgit v1.2.3-70-g09d2