/* Parse a device message from the daemon. */ static int _parse_message(struct dm_event_daemon_message *msg, char **dso_name, char **uuid, enum dm_event_mask *evmask) { char *id = NULL; char *p = msg->data; if ((id = _fetch_string(&p, ' ')) && (*dso_name = _fetch_string(&p, ' ')) && (*uuid = _fetch_string(&p, ' '))) { *evmask = atoi(p); dm_free(id); return 0; } if (id) dm_free(id); return -ENOMEM; }
/* Parse a register message from the client. */ static int _parse_message(struct message_data *message_data) { int ret = 0; char *p = message_data->msg->data; struct dm_event_daemon_message *msg = message_data->msg; if (!msg->data) return 0; /* * Retrieve application identifier, mapped device * path and events # string from message. */ if (_fetch_string(&message_data->id, &p, ' ') && _fetch_string(&message_data->dso_name, &p, ' ') && _fetch_string(&message_data->device_uuid, &p, ' ') && _fetch_string(&message_data->events.str, &p, ' ') && _fetch_string(&message_data->timeout.str, &p, ' ')) { if (message_data->events.str) { enum dm_event_mask i = atoi(message_data->events.str); /* * Free string representaion of events. * Not needed an more. */ dm_free(message_data->events.str); message_data->events.field = i; } if (message_data->timeout.str) { uint32_t secs = atoi(message_data->timeout.str); dm_free(message_data->timeout.str); message_data->timeout.secs = secs ? secs : DM_EVENT_DEFAULT_TIMEOUT; } ret = 1; } dm_free(msg->data); msg->data = NULL; msg->size = 0; return ret; };