#!/bin/bash # Copyright (c) 2011-2014, Intel Corporation # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, this # list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation and/or # other materials provided with the distribution. # # 3. Neither the name of the copyright holder nor the names of its contributors # may be used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # This script generate an xml from a .pfw in an easy and fast way # It only works if you have an parameter running with criterion compatible # with the .pfw set -eu -o pipefail adbShell="adb shell" parameterCommandAccess="eval remote-process localhost 5000" parameter="$adbShell $parameterCommandAccess" tmpfile="/tmp/pfw_commands" target_tmpfile="/data/pfw_commands" adbShellForward () { echo 'echo $?; exit' >> "$1" # Send commands adb push "$1" "$target_tmpfile" $adbShell chmod 700 "$target_tmpfile" $adbShell "$target_tmpfile" | # keep only the -2 line, the output of "echo $?" tee /dev/stderr | tail -2 | sed '1{s/\r//;q}' | # stop if $? != 0 (as of set -e) xargs test 0 -eq 2> /dev/null } function parameterExecute () { echo " \$ $parameter $@" result="$($parameter $@ | sed 's/\r$//')" if [[ "$result" != "Done"* ]]; then echo "$result" return 2 fi return 0 } function log () { echo "$@" >&2 } # Clean tmp file echo > "${tmpfile}" ################# # Configure PFW # ################# echo "setTuningMode on" >> "${tmpfile}" echo "setAutoSync off" >> "${tmpfile}" log "Delete routing domains" for domain in $(parameterExecute listDomains |grep -io '^Routing.[^ ]*') do log "Will delete domain $domain" echo "deleteDomain $domain" >> "${tmpfile}" done ######################### # Generate PFW commands # ######################### log "Generate domain commands from file(s): $*" m4 "$@" \ | $(dirname $0)/PFWScriptGenerator.py --output-kind pfw >> "${tmpfile}" echo "setAutoSync off" >> "${tmpfile}" echo "setTuningMode off" >> "${tmpfile}" sed -i -e':a # look for line finishing with \ /\\$/{ # Delete the last char (\) s/\\$//; # Append the next line and delete the \n separator N; s/\n/ /; # Jump back to the expression beginning ta; }; # delete empty lines; /^$/d # delete leading space s/^ *// # delete multiple spaces s/ */ /g; # Prefix each line with "$parameterCommandAccess '"s/^/$parameterCommandAccess /" \ "${tmpfile}" echo "set -xeu" > "${tmpfile}2" cat "${tmpfile}" >> "${tmpfile}2" log "Execute commands" adbShellForward "${tmpfile}2" ##################### # Generate xml file # ##################### outputFilePath="domains.xml" if test $# -ne 0 then # Output file is the input file with the xml extension outputFilePath="${1%.*}.xml" if test "$outputFilePath" == "$1" then # There is a conflict outputFilePath="${1}.xml" fi fi log "Output file: $outputFilePath" parameter_execute_if_exist () { $parameter help | grep --quiet --word $1 || return $? $parameter $1 | sed 's/\r//' } parameter_execute_if_exist getDomainsWithSettingsXML > "$outputFilePath" || # Fall back on old command parameter_execute_if_exist getDomainsXML > "$outputFilePath" log "The media server PFW domains have been change, please restart it to restore old domains"