- 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)
-{
- int i, argc, ret, clifd = -1;
- char *cmd = NULL, *p, *buf = para_calloc(MAXLINE), **argv = NULL;
- struct sockaddr_un unix_addr;