audio: moved code to output_command.c

The output_command library provides a command interface to the audio
outputs.  It assumes the input comes from an untrusted source
(i.e. the client) and verifies all parameters.
This commit is contained in:
Max Kellermann 2009-02-11 18:02:45 +01:00
parent 3bc4224bfd
commit 9d447dda1d
6 changed files with 122 additions and 50 deletions

View File

@ -45,6 +45,7 @@ mpd_headers = \
output_control.h \
output_state.h \
output_print.h \
output_command.h \
output/shout_plugin.h \
buffer2array.h \
command.h \
@ -146,6 +147,7 @@ mpd_SOURCES = \
output_control.c \
output_state.c \
output_print.c \
output_command.c \
output_init.c \
output/null_plugin.c \
buffer2array.c \

View File

@ -19,12 +19,8 @@
#include "audio.h"
#include "audio_format.h"
#include "audio_parser.h"
#include "output_api.h"
#include "output_control.h"
#include "output_internal.h"
#include "output_all.h"
#include "path.h"
#include "idle.h"
#include "mixer_api.h"
#include <glib.h>
@ -63,37 +59,6 @@ void finishAudioConfig(void)
audio_format_clear(&configured_audio_format);
}
int enableAudioDevice(unsigned int device)
{
struct audio_output *ao;
if (device >= audio_output_count())
return -1;
ao = audio_output_get(device);
ao->reopen_after = 0;
ao->enabled = true;
idle_add(IDLE_OUTPUT);
return 0;
}
int disableAudioDevice(unsigned int device)
{
struct audio_output *ao;
if (device >= audio_output_count())
return -1;
ao = audio_output_get(device);
ao->enabled = false;
idle_add(IDLE_OUTPUT);
return 0;
}
bool mixer_control_setvol(unsigned int device, int volume, int rel)
{
struct audio_output *output;

View File

@ -31,12 +31,6 @@ void initAudioConfig(void);
void finishAudioConfig(void);
/* these functions are called in the main parent process while the child
process is busy playing to the audio */
int enableAudioDevice(unsigned int device);
int disableAudioDevice(unsigned int device);
bool mixer_control_setvol(unsigned int device, int volume, int rel);
bool mixer_control_getvol(unsigned int device, int *volume);

View File

@ -34,7 +34,7 @@
#include "log.h"
#include "stored_playlist.h"
#include "ack.h"
#include "audio.h"
#include "output_command.h"
#include "output_print.h"
#include "locate.h"
#include "dbUtils.h"
@ -1306,34 +1306,38 @@ static enum command_return
handle_enableoutput(struct client *client, G_GNUC_UNUSED int argc, char *argv[])
{
unsigned device;
int ret;
bool ret;
if (!check_unsigned(client, &device, argv[1]))
return COMMAND_RETURN_ERROR;
ret = enableAudioDevice(device);
if (ret == -1)
ret = audio_output_enable_index(device);
if (!ret) {
command_error(client, ACK_ERROR_NO_EXIST,
"No such audio output");
return COMMAND_RETURN_ERROR;
}
return ret;
return COMMAND_RETURN_OK;
}
static enum command_return
handle_disableoutput(struct client *client, G_GNUC_UNUSED int argc, char *argv[])
{
unsigned device;
int ret;
bool ret;
if (!check_unsigned(client, &device, argv[1]))
return COMMAND_RETURN_ERROR;
ret = disableAudioDevice(device);
if (ret == -1)
ret = audio_output_disable_index(device);
if (!ret) {
command_error(client, ACK_ERROR_NO_EXIST,
"No such audio output");
return COMMAND_RETURN_ERROR;
}
return ret;
return COMMAND_RETURN_OK;
}
static enum command_return

62
src/output_command.c Normal file
View File

@ -0,0 +1,62 @@
/*
* Copyright (C) 2003-2009 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
* Glue functions for controlling the audio outputs over the MPD
* protocol. These functions perform extra validation on all
* parameters, because they might be from an untrusted source.
*
*/
#include "output_command.h"
#include "output_all.h"
#include "output_internal.h"
#include "idle.h"
bool
audio_output_enable_index(unsigned idx)
{
struct audio_output *ao;
if (idx >= audio_output_count())
return false;
ao = audio_output_get(idx);
ao->reopen_after = 0;
ao->enabled = true;
idle_add(IDLE_OUTPUT);
return true;
}
bool
audio_output_disable_index(unsigned idx)
{
struct audio_output *ao;
if (idx >= audio_output_count())
return false;
ao = audio_output_get(idx);
ao->enabled = false;
idle_add(IDLE_OUTPUT);
return true;
}

45
src/output_command.h Normal file
View File

@ -0,0 +1,45 @@
/*
* Copyright (C) 2003-2009 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
* Glue functions for controlling the audio outputs over the MPD
* protocol. These functions perform extra validation on all
* parameters, because they might be from an untrusted source.
*
*/
#ifndef OUTPUT_COMMAND_H
#define OUTPUT_COMMAND_H
#include <stdbool.h>
/**
* Enables an audio output. Returns false if the specified output
* does not exist.
*/
bool
audio_output_enable_index(unsigned idx);
/**
* Disables an audio output. Returns false if the specified output
* does not exist.
*/
bool
audio_output_disable_index(unsigned idx);
#endif