-static int com_stat(int fd, __a_unused int argc, __a_unused char **argv)
-{
- int i, ret;
- char *buf = NULL;
- long unsigned mask = ~0LU;
-
- if (argc > 1) {
- mask = 0;
- for (i = 1; i < argc; i++) {
- ret = stat_item_valid(argv[i]);
- if (ret < 0)
- return ret;
- mask |= (1 << ret);
- }
- }
- PARA_INFO_LOG("mask: 0x%lx\n", mask);
- if (mask & (1 << SI_PLAY_TIME)) {
- struct timeval *t = wstime();
- char *ts = get_time_string(t);
- if (ts) {
- ret = client_write(fd, ts);
- if (ret < 0)
- goto out;
- free(ts);
- }
- }
- if (mask & (1 << SI_AUDIOD_UPTIME)) {
- char *tmp, *us = uptime_str();
- tmp = make_message("%s:%s\n",
- status_item_list[SI_AUDIOD_UPTIME], us);
- free(us);
- ret = client_write(fd, tmp);
- if (ret < 0)
- goto out;
- free(tmp);
- }
- if (mask & (1 << SI_AUDIOD_STATUS)) {
- char *s = audiod_status_string();
- ret = client_write(fd, s);
- if (ret < 0)
- goto out;
- free(s);
- }
- if (mask & (1 << SI_DECODER_FLAGS)) {
- char *df =decoder_flags();
- ret = client_write(fd, df);
- if (ret < 0)
- goto out;
- free(df);
- }
-
- for (i = 0; i < NUM_STAT_ITEMS; i++) {
- char *tmp, *v;
- if (!((1 << i) & mask))
- continue;
- v = stat_item_values[i];
- tmp = make_message("%s%s%s", buf? buf: "",
- v? v : "", v? "\n" : "");
- free(buf);
- buf = tmp;
- }
- ret = client_write(fd, buf);
-out:
- if (ret > 0)
- ret = stat_client_add(fd, mask);
- free(buf);
- return ret;
-}
-
-static int com_grab(int fd, char *cmdline)
-{
- struct grab_client *gc;
- struct filter_node *fn;
- int i, err;
- char *msg;
-
- gc = grab_client_new(fd, cmdline, &err);
- if (!gc)
- goto err_out;
- fn = find_filter_node(gc->conf->slot_arg, gc->audio_format_num, gc->conf->filter_num_arg);
- if (fn)
- activate_grab_client(gc, fn);
- return 1;
-err_out:
- if (err != -E_GC_HELP_GIVEN && err != -E_GC_VERSION_GIVEN)
- return err;
- if (err == -E_GC_HELP_GIVEN) {
- msg = make_message("%s\n\n", grab_client_args_info_usage);
- for (i = 0; grab_client_args_info_help[i]; i++) {
- char *tmp = make_message("%s%s\n", msg,
- grab_client_args_info_help[i]);
- free(msg);
- msg = tmp;
- }
- } else
- msg = make_message("%s %s\n",
- GRAB_CLIENT_CMDLINE_PARSER_PACKAGE,
- GRAB_CLIENT_CMDLINE_PARSER_VERSION);
- err = client_write(fd, msg);
- free(msg);
- if (err < 0)
- return err;
- close(fd);
- return 1;
-}
-
-static int __noreturn com_term(int fd, __a_unused int argc, __a_unused char **argv)
-{
- close(fd);
- clean_exit(EXIT_SUCCESS, "terminating on user request");
-}
-
-static int com_on(int fd, __a_unused int argc, __a_unused char **argv)
-{
- audiod_status = AUDIOD_ON;
- close(fd);
- return 1;
-}
-
-static int com_off(int fd, __a_unused int argc, __a_unused char **argv)
-{
- audiod_status = AUDIOD_OFF;
- close(fd);
- return 1;
-}
-
-static int com_sb(int fd, __a_unused int argc, __a_unused char **argv)
-{
- audiod_status = AUDIOD_STANDBY;
- close(fd);
- return 1;
-}
-
-static int com_cycle(int fd, int argc, char **argv)
-{
- switch (audiod_status) {
- case AUDIOD_ON:
- return com_sb(fd, argc, argv);
- break;
- case AUDIOD_OFF:
- return com_on(fd, argc, argv);
- break;
- case AUDIOD_STANDBY:
- return com_off(fd, argc, argv);
- break;
- }
- close(fd);
- return 1;
-}
-
-static int check_perms(uid_t uid)
-{
- int i;
-
- if (!conf.user_allow_given)
- return 1;
- for (i = 0; i < conf.user_allow_given; i++)
- if (uid == conf.user_allow_arg[i])
- return 1;
- return -E_UCRED_PERM;
-}
-
-static int handle_connect(void)