aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMattias Andrée <maandree@operamail.com>2014-05-07 18:27:17 +0200
committerMattias Andrée <maandree@operamail.com>2014-05-07 18:27:17 +0200
commit0617f29955a1c7ce712c875d6216de8544ec7249 (patch)
tree9e7ea8a2aa2e04f92cafe7db5ea0e1f2c4c87f8b /src
parentsort interceptors by priority (diff)
downloadmds-0617f29955a1c7ce712c875d6216de8544ec7249.tar.gz
mds-0617f29955a1c7ce712c875d6216de8544ec7249.tar.bz2
mds-0617f29955a1c7ce712c875d6216de8544ec7249.tar.xz
send to clients (does not implement modifiers yet)
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to 'src')
-rw-r--r--src/mds-server.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/src/mds-server.c b/src/mds-server.c
index 8f0e8fe..7bd79df 100644
--- a/src/mds-server.c
+++ b/src/mds-server.c
@@ -1045,7 +1045,35 @@ void multicast_message(char* message, size_t length)
/* Sort interceptors. */
qsort(interceptions, interceptions_count, sizeof(queued_interception_t), cmp_queued_interception);
- /* TODO */
+ /* Send message to interceptors. */
+ for (i = 0; i < interceptions_count; i++)
+ {
+ queued_interception_t client_ = interceptions[i];
+ client_t* client = client_.client;
+ char* msg = message;
+ size_t sent;
+ n = length;
+
+ with_mutex(client->mutex,
+ while (n > 0)
+ {
+ sent = send_message(client->socket_fd, msg, n);
+ if ((sent < n) && (errno != EINTR)) /* Ignore EINTR */
+ {
+ perror(*argv);
+ break;
+ }
+ n -= sent;
+ msg += sent;
+ }
+ );
+
+ if ((n > 0) && client_.modifying)
+ {
+ /* TODO */
+ }
+ }
+
errno = 0;
fail: /* This is done before this function returns even if there was no error. */