aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2010-12-07 22:40:45 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2010-12-07 22:40:45 +0000
commit8a10a34503a46d64fac46ade2390b53ab64b71da (patch)
treeda0bd84534b37e04a94c7038e268a37841b64bce
parent7d93d5e0c7a8f89dc0e0748fc225f48d81b4ac55 (diff)
Merged revisions 297818 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r297818 | tilghman | 2010-12-07 16:35:50 -0600 (Tue, 07 Dec 2010) | 4 lines Use non-deprecated APIs for CoreAudio Review: https://reviewboard.asterisk.org/r/1040/ ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.2@297819 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--Makefile9
-rw-r--r--contrib/init.d/org.asterisk.muted.plist33
-rw-r--r--utils/muted.c76
3 files changed, 100 insertions, 18 deletions
diff --git a/Makefile b/Makefile
index 709e87d21..0c6f71fae 100644
--- a/Makefile
+++ b/Makefile
@@ -836,8 +836,13 @@ config:
elif [ -f /etc/arch-release -o -f /etc/arch-release ]; then \
cat contrib/init.d/rc.archlinux.asterisk | sed 's|__ASTERISK_ETC_DIR__|$(ASTETCDIR)|;s|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;' > $(DESTDIR)/etc/rc.d/asterisk ;\
chmod 755 $(DESTDIR)/etc/rc.d/asterisk;\
- elif [ -d $(DESTDIR)/Library/LaunchDaemons -a ! -f $(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist ]; then \
- $(INSTALL) -m 644 contrib/init.d/org.asterisk.asterisk.plist $(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist; \
+ elif [ -d $(DESTDIR)/Library/LaunchDaemons ]; then \
+ if [ ! -f $(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist ]; then \
+ $(INSTALL) -m 644 contrib/init.d/org.asterisk.asterisk.plist $(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist; \
+ fi; \
+ if [ ! -f $(DESTDIR)/Library/LaunchDaemons/org.asterisk.muted.plist ]; then \
+ $(INSTALL) -m 644 contrib/init.d/org.asterisk.muted.plist $(DESTDIR)/Library/LaunchDaemons/org.asterisk.muted.plist; \
+ fi; \
elif [ -f /etc/slackware-version ]; then \
echo "Slackware is not currently supported, although an init script does exist for it."; \
else \
diff --git a/contrib/init.d/org.asterisk.muted.plist b/contrib/init.d/org.asterisk.muted.plist
new file mode 100644
index 000000000..b9f1ecf81
--- /dev/null
+++ b/contrib/init.d/org.asterisk.muted.plist
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>Label</key>
+ <string>org.asterisk.muted</string>
+ <key>Disabled</key>
+ <true/>
+ <key>UserName</key>
+ <string>asterisk</string>
+ <key>GroupName</key>
+ <string>asterisk</string>
+ <key>KeepAlive</key>
+ <true/>
+ <key>RunAtLoad</key>
+ <true/>
+ <key>Umask</key>
+ <integer>7</integer><!-- 0007 -->
+ <key>Program</key>
+ <string>/usr/sbin/muted</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>/usr/sbin/muted</string>
+ <string>-f</string>
+ </array>
+ <key>StandardInPath</key>
+ <string>/dev/null</string>
+ <key>StandardOutPath</key>
+ <string>/dev/null</string>
+ <key>StandardErrorPath</key>
+ <string>/dev/null</string>
+</dict>
+</plist>
diff --git a/utils/muted.c b/utils/muted.c
index fa3928f20..e31e016b9 100644
--- a/utils/muted.c
+++ b/utils/muted.c
@@ -39,6 +39,9 @@
#ifdef __Darwin__
#include <CoreAudio/AudioHardware.h>
+#include <sys/types.h>
+#include <pwd.h>
+#include <sys/stat.h>
#elif defined(__linux__) || defined(__FreeBSD__)
#include <sys/soundcard.h>
#endif
@@ -54,7 +57,9 @@
#include <netinet/in.h>
#include <arpa/inet.h>
-static char *config = "/etc/muted.conf";
+#define ast_strlen_zero(a) (!(*(a)))
+
+static char *config = "/etc/asterisk/muted.conf";
static char host[256] = "";
static char user[256] = "";
@@ -349,17 +354,25 @@ static float getvol(void)
AudioDeviceID device;
UInt32 size;
UInt32 channels[2];
+ AudioObjectPropertyAddress OutputAddr = { kAudioHardwarePropertyDefaultOutputDevice, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster };
+ AudioObjectPropertyAddress ChannelAddr = { kAudioDevicePropertyPreferredChannelsForStereo, kAudioDevicePropertyScopeOutput, kAudioObjectPropertyElementWildcard };
+ AudioObjectPropertyAddress VolumeAddr = { kAudioDevicePropertyVolumeScalar, kAudioDevicePropertyScopeOutput, };
size = sizeof(device);
- err = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &size, &device);
+ err = AudioObjectGetPropertyData(kAudioObjectSystemObject, &OutputAddr, 0, NULL, &size, &device);
size = sizeof(channels);
- if (!err)
- err = AudioDeviceGetProperty(device, 0, false, kAudioDevicePropertyPreferredChannelsForStereo, &size, &channels);
+ if (!err) {
+ err = AudioObjectGetPropertyData(device, &ChannelAddr, 0, NULL, &size, &channels);
+ }
size = sizeof(vol);
- if (!err)
- err = AudioDeviceGetProperty(device, channels[0], false, kAudioDevicePropertyVolumeScalar, &size, &volumeL);
- if (!err)
- err = AudioDeviceGetProperty(device, channels[1], false, kAudioDevicePropertyVolumeScalar, &size, &volumeR);
+ if (!err) {
+ VolumeAddr.mElement = channels[0];
+ err = AudioObjectGetPropertyData(device, &VolumeAddr, 0, NULL, &size, &volumeL);
+ }
+ if (!err) {
+ VolumeAddr.mElement = channels[1];
+ err = AudioObjectGetPropertyData(device, &VolumeAddr, 0, NULL, &size, &volumeR);
+ }
if (!err)
vol = (volumeL < volumeR) ? volumeR : volumeL;
else {
@@ -385,16 +398,23 @@ static int setvol(float vol)
AudioDeviceID device;
UInt32 size;
UInt32 channels[2];
+ AudioObjectPropertyAddress OutputAddr = { kAudioHardwarePropertyDefaultOutputDevice, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster };
+ AudioObjectPropertyAddress ChannelAddr = { kAudioDevicePropertyPreferredChannelsForStereo, kAudioDevicePropertyScopeOutput, kAudioObjectPropertyElementWildcard };
+ AudioObjectPropertyAddress VolumeAddr = { kAudioDevicePropertyVolumeScalar, kAudioDevicePropertyScopeOutput, };
size = sizeof(device);
- err = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &size, &device);
+ err = AudioObjectGetPropertyData(kAudioObjectSystemObject, &OutputAddr, 0, NULL, &size, &device);
size = sizeof(channels);
- err = AudioDeviceGetProperty(device, 0, false, kAudioDevicePropertyPreferredChannelsForStereo, &size, &channels);
+ err = AudioObjectGetPropertyData(device, &ChannelAddr, 0, NULL, &size, &channels);
size = sizeof(vol);
- if (!err)
- err = AudioDeviceSetProperty(device, 0, channels[0], false, kAudioDevicePropertyVolumeScalar, size, &volumeL);
- if (!err)
- err = AudioDeviceSetProperty(device, 0, channels[1], false, kAudioDevicePropertyVolumeScalar, size, &volumeR);
+ if (!err) {
+ VolumeAddr.mElement = channels[0];
+ err = AudioObjectSetPropertyData(device, &VolumeAddr, 0, NULL, size, &volumeL);
+ }
+ if (!err) {
+ VolumeAddr.mElement = channels[1];
+ err = AudioObjectSetPropertyData(device, &VolumeAddr, 0, NULL, size, &volumeR);
+ }
if (err) {
#endif
@@ -691,9 +711,33 @@ int main(int argc, char *argv[])
exit(1);
}
#else
- fprintf(stderr, "Mac OS X detected. Use 'launchd -d muted -f' to launch.\n");
+ const char *found = NULL, *paths[] = {
+ "/Library/LaunchAgents/org.asterisk.muted.plist",
+ "/Library/LaunchDaemons/org.asterisk.muted.plist",
+ "contrib/init.d/org.asterisk.muted.plist",
+ "<path-to-asterisk-source>/contrib/init.d/org.asterisk.muted.plist" };
+ char userpath[256];
+ struct stat unused;
+ struct passwd *pwd = getpwuid(getuid());
+ int i;
+
+ snprintf(userpath, sizeof(userpath), "%s%s", pwd->pw_dir, paths[0]);
+ if (!stat(userpath, &unused)) {
+ found = userpath;
+ }
+
+ if (!found) {
+ for (i = 0; i < 3; i++) {
+ if (!stat(paths[i], &unused)) {
+ found = paths[i];
+ break;
+ }
+ }
+ }
+
+ fprintf(stderr, "Mac OS X detected. Use 'launchctl load -w %s' to launch.\n", found ? found : paths[3]);
exit(1);
-#endif
+#endif /* !defined(HAVE_SBIN_LAUNCHD */
}
for(;;) {
if (wait_event()) {