From 070ccac33d65c651c972dfab9c6148e43d8d5d8e Mon Sep 17 00:00:00 2001 From: fulup Date: Thu, 3 Aug 2017 12:00:41 +0200 Subject: Initial Working Version on Alsa Policy-Policy-Hook --- Alsa-Plugin/Alsa-Policy-Hook/README.md | 65 ++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Alsa-Plugin/Alsa-Policy-Hook/README.md (limited to 'Alsa-Plugin/Alsa-Policy-Hook/README.md') diff --git a/Alsa-Plugin/Alsa-Policy-Hook/README.md b/Alsa-Plugin/Alsa-Policy-Hook/README.md new file mode 100644 index 0000000..108c2b5 --- /dev/null +++ b/Alsa-Plugin/Alsa-Policy-Hook/README.md @@ -0,0 +1,65 @@ +Alsa-Hook-Plugin + +Object: Provide a Hook on Alsa PCM to check permission again AGL Advance Audio Agent +Status: Working Proof of Concept +Author: Fulup Ar Foll fulup@iot.bzh +Date : August-2017 + +Functionalities: + - Execute a set of websocket RPC request again AGL binders to allow/deny access + - Keep websocket open in an idepandant thread on order to monitor event receive from AGL audio agent + +Installation + - Alsaplugins are typically search in /usr/share/alsa-lib. Nevertheless a full path might be given + - This plugin implement a hook on a slave PCM. Typically this slave PCM is a dedicated virtual channel (eg: navigation, emergency,...) + - Config should be place in ~/.asoundrc (see config sample in PROJECT_ROOT/conf.d/alsa) + +Config +``` +# Define sharelib location and entry point +# ----------------------------------------- +pcm_hook_type.MyHookPlugin { + install "AlsaInstallHook" + lib "/home/fulup/Workspace/AGL-AppFW/audio-bindings-dev/build/Alsa-Plugin/Alsa-Hook-Callback/alsa_hook_cb.so" +} + +# Create PCM HOOK with corresponding request calls to AGL Audio Agent +# -------------------------------------------------------------------- +pcm.MyNavigationHook { + type hooks + slave.pcm "MyMixerPCM" # Target PCM to effectively play sound + + # Call request that should succeed before accessing slave PCM + hooks.0 { + type "MyHookPlugin" # Name=xxxx should match with pcm_hook_type.xxxx + hook_args { + + # URI to AGL-Advance-Audio-Agent binder + uri "ws://localhost:1234/api?token='audio-agent-token'" + + # Call request to send to binder (initial label is free, query is optional) + request { + MyFirstCheck { + api "alsacore" + verb "ping" + } + MySecondCheck { + api "alsacore" + verb "ucmset" + query "{'devid':'hw:v1340','verb':'Navigation','dev':'speakers'}" + } + } + } + } +} + +``` + +NOTE: + +* Hook plugin is loaded by Alsa libasound within player context. It inherits client process attributes, as UID/GID or +the SMACK label on AGL. This smack label is tested by AGL security framework when requested a call on the audio-agent binder. +As a result the call will only succeed it the permission attached the application in Cynara matches. + +* Hook plugin keep a connection with the Audio-Agent until PCM is closed by the application. This connection allow the +Audio-Agent to send events. eg: pause, quit, mute, ... \ No newline at end of file -- cgit 1.2.3-korg