void audiod_status_dump(void)
{
- static char *p_ts, *p_us, *p_as, *p_df;
struct timeval *t = wstime();
- char *us, *tmp = get_time_string(t);
-
- if (tmp && (!p_ts || strcmp(tmp, p_ts)))
- stat_client_write(tmp, SI_PLAY_TIME);
- free(p_ts);
- p_ts = tmp;
+ char *old, *new, *tmp;
+
+ old = stat_task->stat_item_values[SI_PLAY_TIME];
+ new = get_time_string(t);
+ if (new) {
+ if (!old || strcmp(old, new)) {
+ free(old);
+ stat_client_write(new, SI_PLAY_TIME);
+ stat_task->stat_item_values[SI_PLAY_TIME] = new;
+ } else
+ free(new);
+ }
- us = uptime_str();
- tmp = make_message("%s:%s\n", status_item_list[SI_AUDIOD_UPTIME], us);
- free(us);
- if (!p_us || strcmp(p_us, tmp))
+ new = uptime_str();
+ old = stat_task->stat_item_values[SI_AUDIOD_UPTIME];
+ if (!old || strcmp(old, new)) {
+ free(old);
+ tmp = make_message("%s:%s\n",
+ status_item_list[SI_AUDIOD_UPTIME], new);
stat_client_write(tmp, SI_AUDIOD_UPTIME);
- free(p_us);
- p_us = tmp;
-
- tmp = audiod_status_string();
- if (!p_as || strcmp(p_as, tmp))
- stat_client_write(tmp, SI_AUDIOD_STATUS);
- free(p_as);
- p_as = tmp;
-
- tmp = decoder_flags();
- if (!p_df || strcmp(p_df, tmp))
- stat_client_write(tmp, SI_DECODER_FLAGS);
- free(p_df);
- p_df = tmp;
+ free(tmp);
+ stat_task->stat_item_values[SI_AUDIOD_UPTIME] = new;
+ } else
+ free(new);
+
+ old = stat_task->stat_item_values[SI_AUDIOD_STATUS];
+ new = audiod_status_string();
+ if (!old || strcmp(old, new)) {
+ free(old);
+ stat_client_write(new, SI_AUDIOD_STATUS);
+ stat_task->stat_item_values[SI_AUDIOD_STATUS] = new;
+ } else
+ free(new);
+
+ old = stat_task->stat_item_values[SI_DECODER_FLAGS];
+ new = decoder_flags();
+ if (!old || strcmp(old, new)) {
+ stat_client_write(new, SI_DECODER_FLAGS);
+ stat_task->stat_item_values[SI_DECODER_FLAGS] = new;
+ } else
+ free(new);
}
+/**
+ * send empty status list
+ *
+ * Send to each connected client the full status item list
+ * with empty values.
+ */
+void dump_empty_status(void)
+{
+ int i;
+
+ FOR_EACH_STAT_ITEM(i) {
+ char *tmp = make_message("%s:\n", status_item_list[i]);
+ stat_client_write(tmp, i);
+ free(tmp);
+ free(stat_task->stat_item_values[i]);
+ stat_task->stat_item_values[i] = NULL;
+ }
+}
int stat_line_valid(const char *);
void stat_client_write(char *msg, int itemnum);
int stat_client_add(int fd, long unsigned mask);
-void dump_empty_status(void);
unsigned for_each_line(char *, int, void (*)(char *));
+#define FOR_EACH_STAT_ITEM(i) for (i = 0; i < NUM_STAT_ITEMS; i++)
struct stat_item_data {
const char *prefix, *postfix;
[SI_AUDIOD_UPTIME] = "audiod_uptime",
[SI_SELECTOR] = "dbtool"
};
-#define FOR_EACH_STAT_ITEM(i) for (i = 0; i < NUM_STAT_ITEMS; i++)
static void dump_stat_client_list(void)
{
PARA_DEBUG_LOG("%d client(s)\n", num_clients);
}
-/**
- * send empty status list
- *
- * Send to each connected client the full status item list
- * with empty values.
- */
-void dump_empty_status(void)
-{
- int i;
-
- if (!initialized)
- return;
- FOR_EACH_STAT_ITEM(i) {
- char *tmp = make_message("%s:\n", status_item_list[i]);
- stat_client_write(tmp, i);
- free(tmp);
- }
-}
/**
* check if string is a known status item.