summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/handle_client.c')
-rw-r--r--src/server/handle_client.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/server/handle_client.c b/src/server/handle_client.c
index 5212440..a213fe2 100644
--- a/src/server/handle_client.c
+++ b/src/server/handle_client.c
@@ -15,12 +15,68 @@
#include <relabsd/debug.h>
#include <relabsd/server.h>
+#include <relabsd/device/virtual_device.h>
+#include <relabsd/device/axis.h>
+
#include <relabsd/config/parameters.h>
/******************************************************************************/
/**** LOCAL FUNCTIONS *********************************************************/
/******************************************************************************/
+static void propagate_changes
+(
+ struct relabsd_server server [const static 1]
+)
+{
+ struct relabsd_axis * axis;
+ int i;
+ int virtual_device_is_dirty;
+
+ virtual_device_is_dirty = 0;
+
+ for (i = 0; i < RELABSD_AXIS_VALID_AXES_COUNT; ++i)
+ {
+ axis =
+ relabsd_parameters_get_axis
+ (
+ (enum relabsd_axis_name) i,
+ &(server->parameters)
+ );
+
+ if (relabsd_axis_attributes_are_dirty(axis))
+ {
+ (void) relabsd_virtual_device_update_axis_absinfo
+ (
+ (enum relabsd_axis_name) i,
+ axis,
+ &(server->virtual_device)
+ );
+
+ relabsd_axis_set_attributes_are_dirty(0, axis);
+
+ virtual_device_is_dirty = 1;
+ }
+ }
+
+ if (relabsd_parameters_device_name_is_dirty(&(server->parameters)))
+ {
+ (void) relabsd_virtual_device_rename
+ (
+ &(server->parameters),
+ &(server->virtual_device)
+ );
+
+ relabsd_parameters_clean_device_name(&(server->parameters));
+ virtual_device_is_dirty = 1;
+ }
+
+ if (virtual_device_is_dirty)
+ {
+ (void) relabsd_virtual_device_recreate(&(server->virtual_device));
+ }
+}
+
/******************************************************************************/
/**** EXPORTED FUNCTIONS ******************************************************/
/******************************************************************************/
@@ -54,6 +110,7 @@ int relabsd_server_handle_client
socket_as_file,
&(server->parameters)
);
+ propagate_changes(server);
pthread_mutex_unlock(&(server->mutex));
/* This also closes 'socket' */