#!/bin/sh # Copyright (C) 2015 PIVA Software # Author: Anis Ellouze DOWNLOAD_DIR="/tmp/easycwmp_download" # Fault codes E_REQUEST_DENIED="1" E_INTERNAL_ERROR="2" E_INVALID_ARGUMENTS="3" E_RESOURCES_EXCEEDED="4" E_INVALID_PARAMETER_NAME="5" E_INVALID_PARAMETER_TYPE="6" E_INVALID_PARAMETER_VALUE="7" E_NON_WRITABLE_PARAMETER="8" E_NOTIFICATION_REJECTED="9" E_DOWNLOAD_FAILURE="10" E_UPLOAD_FAILURE="11" E_FILE_TRANSFER_AUTHENTICATION_FAILURE="12" E_FILE_TRANSFER_UNSUPPORTED_PROTOCOL="13" E_DOWNLOAD_FAIL_MULTICAST_GROUP="14" E_DOWNLOAD_FAIL_CONTACT_SERVER="15" E_DOWNLOAD_FAIL_ACCESS_FILE="16" E_DOWNLOAD_FAIL_COMPLETE_DOWNLOAD="17" E_DOWNLOAD_FAIL_FILE_CORRUPTED="18" E_DOWNLOAD_FAIL_FILE_AUTHENTICATION="19" UCI_COMMIT="/sbin/uci -q ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} commit" action="$1" file_type="$2" dw_url="$3" file_size="$4" user_name="$5" password="$6" debug() { echo "$1" >&2 } download() { dl_size=`df |grep "/tmp$" | awk '{print $4;}'` [ -n "$dl_size" ] && dl_size_byte=$((${dl_size}*1024)) if [ -n "$dl_size" -a "$dl_size_byte" -lt "$file_size" ]; then let fault_code=9000+$E_DOWNLOAD_FAILURE echo "$fault_code" else rm -rf $DOWNLOAD_DIR 2> /dev/null mkdir -p $DOWNLOAD_DIR local url="$dw_url" [ "$user_name" != "" -o "$password" != "" ] && dw_url=`echo "$url" | sed -e "s@://@://$user_name:$password\@@g"` wget -P $DOWNLOAD_DIR "$dw_url" fault_code="$?" if [ "$fault_code" != "0" ]; then rm -rf $DOWNLOAD_DIR 2> /dev/null let fault_code=9000+$E_DOWNLOAD_FAILURE echo "$fault_code" else echo "0" fi fi } apply_download() { if [ "$file_type" = "3 Vendor Configuration File" ]; then dwfile=`ls $DOWNLOAD_DIR` if [ "$dwfile" != "" ]; then dwfile="$DOWNLOAD_DIR/$dwfile" /sbin/sysupgrade --restore-backup $dwfile >/dev/null 2>&1 fault_code="$?" if [ "$fault_code" != "0" ]; then let fault_code=$E_DOWNLOAD_FAILURE+9000 echo "$fault_code" else $UCI_COMMIT sync reboot echo "0" fi else let fault_code=$E_DOWNLOAD_FAILURE+9000 echo "$fault_code" fi elif [ "$file_type" = "1 Firmware Upgrade Image" ]; then local gr_backup=`grep "^/etc/easycwmp/\.backup\.xml" /etc/sysupgrade.conf` [ -z $gr_backup ] && echo "/etc/easycwmp/.backup.xml" >> /etc/sysupgrade.conf dwfile=`ls $DOWNLOAD_DIR` if [ "$dwfile" != "" ]; then dwfile="$DOWNLOAD_DIR/$dwfile" /sbin/sysupgrade $dwfile fault_code="$?" if [ "$fault_code" != "0" ]; then let fault_code=$E_DOWNLOAD_FAIL_FILE_CORRUPTED+9000 echo "$fault_code" else echo "0" fi else let fault_code=$E_DOWNLOAD_FAILURE+9000 echo "" "$fault_code" fi else echo "$(($E_INVALID_ARGUMENTS+9000))" fi rm -rf $DOWNLOAD_DIR 2> /dev/null } [ "$action" == "download" ] && { download; exit 0; } 2>/dev/null [ "$action" = "apply_download" ] && { apply_download; exit 0; } 2>/dev/null