summaryrefslogtreecommitdiff
path: root/xpp/twinstar_hook
blob: 7b2101f2bf2e88437c1292db1ea9ed8c50944599 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#! /bin/sh
#
# Written by Oron Peled <oron@actcom.co.il>
# Copyright (C) 2009, Xorcom
#
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#

#
# This is an experimental script to activate an Astribank TwinStar
# during failover.
#
# The script assume that there is an /etc/dahdi/xpp_order file
# specifying the Astribanks' labels according to the required
# registration order.
#
# This file can be easily generated by running:
#    dahdi_genconf xpporder
# after the system is configured and working.
#

me=`basename $0`
dir=`dirname $0`
LOGGER="logger -i -t '$me'"

# Always redirect stderr somewhere, otherwise the shell script will die
# when it tries to do I/O related stuff on closed file descriptor.
# Our default is to throw it down the bit-bucket.
#exec 2> /dev/console
## If you wish to trace this script:
#exec 2> "/tmp/${me}_$XBUS_NAME" 1>&2

# Our directory in the beginning, so we can use local lab setup
PATH="$dir:/usr/sbin:/sbin:/usr/bin:/bin"

set -e

# For lab testing
liveconf="$dir/liveconf/dahdi"

if [ -d "$liveconf" ]; then
	dahdi_conf="$liveconf"
else
	dahdi_conf="/etc/dahdi"
fi

export XPPORDER_CONF="$dahdi_conf/xpp_order"
if [ ! -r "$XPPORDER_CONF" ]; then
	echo "Skip($ACTION): No '$XPPORDER_CONF'" | $LOGGER
	exit 0
fi
SYSTEMCONF="$dahdi_conf/system.conf"

TWS_DIR="/var/tmp"
TWS_PREFIX="$TWS_DIR/twinstar-"
LABELFILE="/sys/$DEVPATH/label"
export XBUS_SORT='SORT_LABEL'

echo "starting($ACTION): setup from $XPPORDER_CONF" | $LOGGER
STAMP="${TWS_PREFIX}${XBUS_NAME}"
TWS_TOTAL=`sed -e 's/#.*//' -e '/^[ 	]*$/d' -e 'y/\t/ /' "$XPPORDER_CONF" | wc -l`

case "$ACTION" in
online)
	if [ ! -f "$LABELFILE" ]; then
		echo "Missing labelfile '$LABELFILE'" | $LOGGER
		exit 1
	fi
	LABEL=`cat $LABELFILE`
	TWS_LINE=`awk "/^$LABEL/" $XPPORDER_CONF`
	if [ "$TWS_LINE" = "" ]; then
		echo "online($XBUS_NAME): '$LABEL' is not in '$XPPORDER_CONF'" | $LOGGER
		exit 1
	fi
	echo "$LABEL" > "$STAMP"
	HOW_MANY=`ls ${TWS_PREFIX}* | wc -l`
	echo "online($XBUS_NAME): $LABEL (${HOW_MANY}/${TWS_TOTAL})" | $LOGGER
	twinstar enable-wd
	if [ "$HOW_MANY" -eq "$TWS_TOTAL" ]; then
		echo "online: GOT ALL $TWS_TOTAL" | $LOGGER
		dahdi_registration on
		dahdi_registration 2>&1 | tr '\t' ' ' | $LOGGER
		echo "Using '$SYSTEMCONF'" 2>&1 | $LOGGER
		dahdi_cfg -v -c "$SYSTEMCONF" 2>&1 | $LOGGER
		sleep 1	# Just for visual effect
		asterisk -rx 'module load chan_dahdi.so' 2>&1 | $LOGGER
		xpp_blink bzzt xpd "$XBUS_NUM"
		ports=`twinstar ports`
		if [ "$ports" = 0 ]; then
			play /usr/share/zaptel/primary-pbx-is-ready.wav || :
		elif [ "$ports" = 1 ]; then
			play /usr/share/zaptel/backup-pbx-is-ready.wav || :
		fi
		echo "online: READY" | $LOGGER
	fi
	;;
offline)
	LABEL=`cat $STAMP`
	TWS_LINE=`awk "/^$LABEL/" $XPPORDER_CONF`
	rm -f "$STAMP"
	if [ "$TWS_LINE" = "" ]; then
		echo "offline($XBUS_NAME): $LABEL is not in $XPPORDER_CONF" | $LOGGER
		exit 1
	fi
	echo "offline($XBUS_NAME): $LABEL" | $LOGGER
	twinstar disable-wd
	# If we want to disconnect everybody
	twinstar jump
	asterisk -rx 'module unload chan_dahdi.so'
	;;
*)
	echo "$0: Unknown ACTION='$ACTION'" | $LOGGER
	echo "$0: ARGS='$*'" | $LOGGER
	echo "$0: ENV:" | $LOGGER
	env | $LOGGER
	exit 1
esac