#!/bin/bash
#
# Nyquist C4000 7.0.1.535 Patch 2 update script
#
# (C) Copyright 2026, Bogen Communications LLC. All rights reserved.
#
PRODUCT_NAME=nyquist
PRODUCT_TYPE=c4000
PRODUCT=$PRODUCT_NAME
NYQUIST_VERSION=7.0.1
BOGEN_ROOT=/opt/bogen
VERSION_SRC=$BOGEN_ROOT/version
VERSION_DST=/etc/asterisk/version
NYQUIST_CORE=$BOGEN_ROOT/$PRODUCT
NYQUIST_SCRIPTS=$NYQUIST_CORE/scripts
UPDATE_LOG=$NYQUIST_CORE/c4000-7.0.1.535-patch2-log-$(date +%F-%R).txt
UPDATE_STATUS_LOG=$BOGEN_ROOT/last-update-status.txt
unset LICINFO_DEBUG
export RLM_ACT_TIMEOUT=300
export PATH=/usr/bin:/bin:/sbin/:/usr/sbin:/usr/local/bin

#
# The following { encapsulates output to log file (see last line of script)
#
{

rm -f /usr/lib/sysctl.d/protect-links.conf
echo "fs.protected_regular = 0" > /etc/sysctl.d/99-protect-links.conf
sysctl -w fs.protected_regular=0

# Exit if patch is not for the installed Nyquist release
read -r -d : VERNUM < /etc/asterisk/version
if [ "$VERNUM" != "$NYQUIST_VERSION" ]; then
   if [ "$VERNUM" != "7.0.0" ]; then
      exit 1
   fi
fi

# Update pjsip.conf
cp $NYQUIST_CORE/etc/asterisk/pjsip.conf /etc/asterisk/pjsip.conf

# Update weather-alert
if [ ! -e /usr/local/bin/weather-alert_v7 ]; then
   cp /usr/local/bin/weather-alert /usr/local/bin/weather-alert_v7
fi
cp $NYQUIST_SCRIPTS/weather-alert /usr/local/bin/weather-alert

# Update HA scripts
cp $NYQUIST_SCRIPTS/ha-config /usr/local/bin/ha-config
cp $NYQUIST_SCRIPTS/ha-destroy-cluster /usr/local/bin/ha-destroy-cluster

# Copy release notes
cp $BOGEN_ROOT/Release-Notes-7.0.1.535-patch2.txt /srv/tftp
chown www-data:www-data /srv/tftp/Release-Notes-7.0.1.535-patch2.txt
chmod 664 /srv/tftp/Release-Notes-7.0.1.535-patch2.txt

cp -f /opt/bogen/Release-Notes-Firmware_Ver.5.3.9.txt /srv/tftp
chown www-data:www-data /srv/tftp/Release-Notes-Firmware_Ver.5.3.9.txt
chmod 664 /srv/tftp/Release-Notes-Firmware_Ver.5.3.9.txt

#
# Add support for NQ-ZPMS-G2
#
FANVIL_CFG_SCRIPT=/usr/local/bin/create-fanvil-cfg
if [ -e $FANVIL_CFG_SCRIPT ]; then

   echo "Enabling support for NQ-ZPMS-G2 (menus, opus, video calling)"

   sed -i 's#<DialerCallSoftkey>mwi;contact;history;cfwd;redial;</DialerCallSoftkey>#<DialerCallSoftkey>send;mwi;contact;video;history;cfwd;redial;</DialerCallSoftkey>#g' $FANVIL_CFG_SCRIPT
   sed -i 's#<TalkingSoftkey>conf;hold;end;xfer;new;dialpad;</TalkingSoftkey>#<TalkingSoftkey>conf;hold;end;xfer;dialpad;mute;new</TalkingSoftkey>#g' $FANVIL_CFG_SCRIPT
   sed -i "s#UPDATE ps_endpoints SET message_context='messages'#UPDATE ps_endpoints SET allow='opus;g722;h264', message_context='messages'#" $FANVIL_CFG_SCRIPT
   sed -i 's#<AudioCodecSets>G722,PCMA,PCMU</AudioCodecSets>#<AudioCodecSets>OPUS,G722,PCMA,PCMU</AudioCodecSets>\n            <VideoCodecSets>H264</VideoCodecSets>#' $FANVIL_CFG_SCRIPT
   sed -i -z -E 's#<VoiceCodecMap>G722,PCMA,PCMU</VoiceCodecMap>[[:space:]]*<VideoCodecMap></VideoCodecMap>#<VoiceCodecMap>OPUS,G722,PCMA,PCMU</VoiceCodecMap>\n            <VideoCodecMap>H264</VideoCodecMap>#g' $FANVIL_CFG_SCRIPT
   sed -i 's#<VoiceCodec>G722</VoiceCodec>#<VoiceCodec>OPUS,G722</VoiceCodec>#g' $FANVIL_CFG_SCRIPT

   sync

   /usr/local/bin/update-all-fanvil-phones

   sync
fi

#
# Update firmware
#
/usr/local/bin/update-firmware -c -u -s /opt/bogen/nyquist/firmware

VERSTR=$(< /etc/asterisk/version)
VERSTR=${VERSTR/7.0.0/7.0.1}
PATCHSTR=$(grep Patch /etc/asterisk/version)
if [ -z "$PATCHSTR" ]; then
   echo "7.0.1:535 - Patch numbers applied: 2" > /etc/asterisk/version
else
   if [ "$VERSTR" = "7.0.1:535 - Patch numbers applied: 1,2" ]; then
      touch /etc/asterisk/version
   else
        if [ "$VERSTR" = "7.0.1:535 - Patch numbers applied: 2" ]; then
                touch /etc/asterisk/version
        else
                echo "$VERSTR,2" > /etc/asterisk/version
        fi
   fi
fi

echo "Update RLM info"

trycount=1
while [ $trycount -le 5 ]
do
   ARET=$(/usr/local/bin/licinfo -U 2>/dev/null)
   if [ "$ARET" = "0" ]; then
      ((trycount++))
      sleep 15
      /bin/ping -c 1 -W 60 hostedactivation.com > /dev/null 2>&1
   else
		trycount=6
	fi
done

echo "$(date): Nyquist 7.0.1.535 Patch 2 Successful" >> $UPDATE_STATUS_LOG

} > $UPDATE_LOG 2>&1

exit 0
