155 lines
4.4 KiB
Bash
Executable File
155 lines
4.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#Zaptel strings to be replaced during patch
|
|
ZAPTEL_C_SEARCH_STR="chan->writen\[chan->inwritebuf\] = amnt;"
|
|
ZAPTEL_C_PATCH="if ((chan->flags \& ZT_FLAG_HDLC) \&\& chan->span->ioctl != NULL){\n\
|
|
if (chan->span->ioctl(chan, ZT_DCHAN_TX_V2, amnt)==0){\n\
|
|
return amnt;\n\
|
|
}\n\
|
|
}\n\
|
|
chan->writen[chan->inwritebuf] = amnt;"
|
|
|
|
# D channel patching for zaptel version 1.2.17.1/1.4.2.1 or above
|
|
ZAPTEL_C_SEARCH_STR_NEW="chan->writen\[res\] = amnt;"
|
|
ZAPTEL_C_PATCH_NEW="if ((chan->flags \& ZT_FLAG_HDLC) \&\& chan->span->ioctl != NULL){\n\
|
|
if (chan->span->ioctl(chan, ZT_DCHAN_TX_V2, amnt)==0){\n\
|
|
return amnt;\n\
|
|
}\n\
|
|
}\n\
|
|
chan->writen[res] = amnt;"
|
|
|
|
#NOTE1: the 'sed' command does NOT work on more than one line, so the
|
|
#closing '*/' will be pushed AFTER the inserted strings.
|
|
|
|
ZAPTEL_H_SEARCH_STR=" \* 80-85 are reserved for dynamic span stuff"
|
|
ZAPTEL_H_PATCH=\
|
|
" \* 80-85 are reserved for dynamic span stuff\n\
|
|
\*\/\n\
|
|
#define ZT_DCHAN_TX _IOR (ZT_CODE, 60, int)\n\
|
|
#define ZT_DCHAN_TX_V1 ZT_DCHAN_TX\n\
|
|
#define ZT_DCHAN_TX_V2 ZT_DCHAN_TX\n\/\*"
|
|
|
|
|
|
ZAPTEL_C_FILE=zaptel.c
|
|
|
|
tdmv_apply_zaptel_dchan_patch ()
|
|
{
|
|
lhome=`pwd`
|
|
|
|
cd $ZAPTEL_DIR
|
|
if [ -e $ZAPTEL_DIR/zaptel-base.c ]; then
|
|
ZAPTEL_C_FILE=zaptel-base.c
|
|
fi
|
|
|
|
eval "grep \"ZT_DCHAN_TX_V2\" $ZAPTEL_C_FILE > /dev/null 2> /dev/null"
|
|
if [ $? -eq 0 ]; then
|
|
echo " Zaptel DCHAN patch V.02 already installed"
|
|
cd $lhome
|
|
return 1
|
|
fi
|
|
|
|
# patch zaptel.h
|
|
eval "search_and_replace zaptel.h zaptel.h \"$ZAPTEL_H_SEARCH_STR\" \"$ZAPTEL_H_PATCH\""
|
|
if [ $? -ne 0 ]; then
|
|
echo "search_and_replace(zaptel.h) failed"
|
|
cd $lhome
|
|
return 2
|
|
else
|
|
echo "search_and_replace(zaptel.h) succeeded"
|
|
fi
|
|
|
|
|
|
# patch $ZAPTEL_C_FILE
|
|
eval "grep \"$ZAPTEL_C_SEARCH_STR\" $ZAPTEL_C_FILE > /dev/null 2> /dev/null"
|
|
if [ $? -eq 0 ]; then
|
|
eval "search_and_replace $ZAPTEL_C_FILE $ZAPTEL_C_FILE \"$ZAPTEL_C_SEARCH_STR\" \"$ZAPTEL_C_PATCH\""
|
|
else
|
|
eval "search_and_replace $ZAPTEL_C_FILE $ZAPTEL_C_FILE \"$ZAPTEL_C_SEARCH_STR_NEW\" \"$ZAPTEL_C_PATCH_NEW\""
|
|
fi
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "search_and_replace($ZAPTEL_C_FILE) failed"
|
|
cd $lhome
|
|
return 2
|
|
else
|
|
echo "search_and_replace($ZAPTEL_C_FILE) succeeded"
|
|
fi
|
|
cd $lhome
|
|
return 0
|
|
}
|
|
|
|
|
|
search_and_replace()
|
|
{
|
|
local input_file_name=$1
|
|
local output_file_name=$2
|
|
local search_str="$3"
|
|
local replace_str="$4"
|
|
local tmp_file=output.tmp
|
|
|
|
#echo "input_file_name:$input_file_name"
|
|
#echo "output_file_name:$output_file_name"
|
|
#echo "search_str:$search_str"
|
|
#echo "replace_str:$replace_str"
|
|
|
|
eval "grep '$search_str' $input_file_name > /dev/null 2> /dev/null"
|
|
|
|
if [ $? -ne 0 ]; then
|
|
#echo "Did NOT find the seached str:$search_str"
|
|
return 1
|
|
else
|
|
#echo "Found the seached str"
|
|
eval "sed 's/'\"$search_str\"'/'\"$replace_str\"'/' $input_file_name > $tmp_file"
|
|
mv $tmp_file $output_file_name
|
|
fi
|
|
|
|
return $?
|
|
}
|
|
|
|
ZAPTEL_DIR=$1;
|
|
if [ "$ZAPTEL_DIR" == "" ]; then
|
|
echo "Zaptel source directory not specified, using source in /usr/src/zaptel"
|
|
echo " "
|
|
ZAPTEL_DIR=/usr/src/zaptel
|
|
fi
|
|
|
|
cd $ZAPTEL_DIR
|
|
|
|
if [ -d kernel ]; then
|
|
ZAPTEL_DIR=$ZAPTEL_DIR/kernel
|
|
fi
|
|
|
|
if [ -e $ZAPTEL_DIR/zaptel-base.c ]; then
|
|
ZAPTEL_C_FILE=$ZAPTEL_DIR/zaptel-base.c
|
|
fi
|
|
|
|
|
|
eval "grep hdlc_hard_xmit $ZAPTEL_C_FILE > /dev/null 2> /dev/null"
|
|
if [ $? -eq 0 ] ; then
|
|
if [ ! -e /etc/wanpipe ]; then
|
|
eval "\mkdir -p /etc/wanpipe 2> /dev/null"
|
|
fi
|
|
if [ -e /etc/wanpipe ]; then
|
|
touch /etc/wanpipe/.zaphdlc
|
|
fi
|
|
echo "Zaptel HW HDLC support detected"
|
|
echo
|
|
exit 10
|
|
else
|
|
if [ -e /etc/wanpipe/.zaphdlc ]; then
|
|
eval "rm -f /etc/wanpipe/.zaphdlc 2> /dev/null"
|
|
fi
|
|
fi
|
|
|
|
echo "Applying Sangoma DCHAN patch to $ZAPTEL_DIR"
|
|
echo " "
|
|
tdmv_apply_zaptel_dchan_patch
|
|
rc=$?
|
|
|
|
if [ $rc == 0 ]; then
|
|
echo "Please recompile and re-install ZAPTEL, zaptel source changed!"
|
|
fi
|
|
|
|
exit $rc
|
|
|