#!/bin/sh /etc/rc.common # # Copyright 2011 Iordan Iordanov # # This file is part of luci-pbx. # # luci-pbx 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 3 of the License, or # (at your option) any later version. # # luci-pbx 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 luci-pbx. If not, see . . /etc/functions.sh START=60 # Some global variables MODULENAME=pbx USERAGENT="PBX" DEFAULTOUTCNTXT=default-outgoing-call-context HANGUPCNTXT=hangup GTALKUNVL=unavailable ASTUSER=nobody ASTGROUP=nogroup ASTDIRSRECURSIVE="/var/run/asterisk /var/log/asterisk /var/spool/asterisk" ASTDIRS="/usr/lib/asterisk" TEMPLATEDIR=/etc/${MODULENAME}-asterisk VMTEMPLATEDIR=/etc/${MODULENAME}-voicemail ASTERISKDIR=/etc/asterisk WORKDIR=/tmp/$MODULENAME.$$ MD5SUMSFILE=/tmp/$MODULENAME-sums.$$ TMPL_ASTERISK=$TEMPLATEDIR/asterisk.conf.TEMPLATE TMPL_GTALK=$TEMPLATEDIR/gtalk.conf.TEMPLATE TMPL_INDICATIONS=$TEMPLATEDIR/indications.conf.TEMPLATE TMPL_LOGGER=$TEMPLATEDIR/logger.conf.TEMPLATE TMPL_MANAGER=$TEMPLATEDIR/manager.conf.TEMPLATE TMPL_MODULES=$TEMPLATEDIR/modules.conf.TEMPLATE TMPL_RTP=$TEMPLATEDIR/rtp.conf.TEMPLATE TMPL_EXTCTHRUCHECKHDR=$TEMPLATEDIR/extensions_disa-check_header.conf.TEMPLATE TMPL_EXTCTHRUCHECK=$TEMPLATEDIR/extensions_disa-check.conf.TEMPLATE TMPL_EXTCTHRUCHECKFTR=$TEMPLATEDIR/extensions_disa-check_footer.conf.TEMPLATE TMPL_EXTCTHRUHDR=$TEMPLATEDIR/extensions_disa_header.conf.TEMPLATE TMPL_EXTCTHRU=$TEMPLATEDIR/extensions_disa.conf.TEMPLATE TMPL_EXTENSIONS=$TEMPLATEDIR/extensions.conf.TEMPLATE TMPL_EXTVMDISABLED=$TEMPLATEDIR/extensions_voicemail_disabled.conf.TEMPLATE TMPL_EXTVMENABLED=$TEMPLATEDIR/extensions_voicemail_enabled.conf.TEMPLATE TMPL_EXTBLKLIST=$TEMPLATEDIR/extensions_blacklist.conf.TEMPLATE TMPL_EXTBLKLISTFTR=$TEMPLATEDIR/extensions_blacklist_footer.conf.TEMPLATE TMPL_EXTBLKLISTHDR=$TEMPLATEDIR/extensions_blacklist_header.conf.TEMPLATE TMPL_EXTDEFAULT=$TEMPLATEDIR/extensions_default.conf.TEMPLATE TMPL_EXTDEFAULTUSER=$TEMPLATEDIR/extensions_default_user.conf.TEMPLATE TMPL_EXTINCNTXTSIP=$TEMPLATEDIR/extensions_incoming_context_sip.conf.TEMPLATE TMPL_EXTINCNTXTGTALKHDR=$TEMPLATEDIR/extensions_incoming_context_gtalk_header.conf.TEMPLATE TMPL_EXTINCNTXTGTALK=$TEMPLATEDIR/extensions_incoming_context_gtalk.conf.TEMPLATE TMPL_EXTUSERCNTXT=$TEMPLATEDIR/extensions_user_context.conf.TEMPLATE TMPL_EXTUSERCNTXTFTR=$TEMPLATEDIR/extensions_user_context_footer.conf.TEMPLATE TMPL_EXTUSERCNTXTHDR=$TEMPLATEDIR/extensions_user_context_header.conf.TEMPLATE TMPL_EXTOUTHDR=$TEMPLATEDIR/extensions_default_outgoing_header.conf.TEMPLATE TMPL_EXTOUTGTALK=$TEMPLATEDIR/extensions_outgoing_gtalk.conf.TEMPLATE TMPL_EXTOUTLOCAL=$TEMPLATEDIR/extensions_outgoing_dial_local_user.conf.TEMPLATE TMPL_EXTOUTSIP=$TEMPLATEDIR/extensions_outgoing_sip.conf.TEMPLATE TMPL_JABBER=$TEMPLATEDIR/jabber.conf.TEMPLATE TMPL_JABBERUSER=$TEMPLATEDIR/jabber_users.conf.TEMPLATE TMPL_SIP=$TEMPLATEDIR/sip.conf.TEMPLATE TMPL_SIPPEER=$TEMPLATEDIR/sip_peer.TEMPLATE TMPL_SIPREG=$TEMPLATEDIR/sip_registration.TEMPLATE TMPL_SIPUSR=$TEMPLATEDIR/sip_user.TEMPLATE TMPL_MSMTPDEFAULT=$VMTEMPLATEDIR/pbx-msmtprc-defaults.TEMPLATE TMPL_MSMTPACCOUNT=$VMTEMPLATEDIR/pbx-msmtprc-account.TEMPLATE TMPL_MSMTPAUTH=$VMTEMPLATEDIR/pbx-msmtprc-account-auth.TEMPLATE TMPL_MSMTPACCTDFLT=$VMTEMPLATEDIR/pbx-msmtprc-account-default.TEMPLATE INCLUDED_FILES="$WORKDIR/extensions_blacklist.conf $WORKDIR/extensions_callthrough.conf\ $WORKDIR/extensions_incoming.conf $WORKDIR/extensions_incoming_gtalk.conf\ $WORKDIR/extensions_user.conf $WORKDIR/jabber_users.conf\ $WORKDIR/sip_peers.conf $WORKDIR/sip_registrations.conf\ $WORKDIR/sip_users.conf $WORKDIR/extensions_voicemail.conf\ $WORKDIR/extensions_default.conf" # In this string, we concatenate all local users enabled to receive calls # readily formatted for the Dial command. localusers_to_ring="" # In this string, we keep a list of all users that are enabled for outgoing # calls. It is used at the end to create the user contexts. localusers_can_dial="" # In this string, we put together a space-separated list of provider names # (alphanumeric, with all non-alpha characters replaced with underscores), # which will be used to dial out by default (whose outgoing contexts will # be included in users' contexts by default. outbound_providers="" # Copies the template files which we don't edit. copy_unedited_templates_over() { cp $TMPL_ASTERISK $WORKDIR/asterisk.conf cp $TMPL_GTALK $WORKDIR/gtalk.conf cp $TMPL_INDICATIONS $WORKDIR/indications.conf cp $TMPL_LOGGER $WORKDIR/logger.conf cp $TMPL_MANAGER $WORKDIR/manager.conf cp $TMPL_MODULES $WORKDIR/modules.conf # If this file isn't present at this stage, voicemail is disabled. [ ! -f $WORKDIR/extensions_voicemail.conf ] && \ cp $TMPL_EXTVMDISABLED $WORKDIR/extensions_voicemail.conf } # Touches all the included files, to prevent asterisk from refusing to # start if a config item is missing and an included config file isn't created. create_included_files() { touch $INCLUDED_FILES } # Puts together all the extensions.conf related configuration. pbx_create_extensions_config() { local ringtime config_get ringtime advanced ringtime sed "s/|RINGTIME|/$ringtime/" $TMPL_EXTENSIONS > $WORKDIR/extensions.conf mv $WORKDIR/inext.TMP $WORKDIR/extensions_incoming.conf cp $TMPL_EXTINCNTXTGTALKHDR $WORKDIR/extensions_incoming_gtalk.conf cat $WORKDIR/outextgtalk.TMP >> $WORKDIR/extensions_incoming_gtalk.conf 2>/dev/null rm -f $WORKDIR/outextgtalk.TMP mv $WORKDIR/blacklist.TMP $WORKDIR/extensions_blacklist.conf mv $WORKDIR/userext.TMP $WORKDIR/extensions_user.conf cp $TMPL_EXTCTHRUHDR $WORKDIR/extensions_callthrough.conf cat $WORKDIR/callthrough.TMP >> $WORKDIR/extensions_callthrough.conf 2>/dev/null rm -f $WORKDIR/callthrough.TMP cat $TMPL_EXTCTHRUCHECKHDR >> $WORKDIR/extensions_callthrough.conf 2>/dev/null cat $WORKDIR/callthroughcheck.TMP >> $WORKDIR/extensions_callthrough.conf 2>/dev/null rm -f $WORKDIR/callthroughcheck.TMP cat $TMPL_EXTCTHRUCHECKFTR >> $WORKDIR/extensions_callthrough.conf 2>/dev/null rm -f $WORKDIR/outext-*.TMP rm -f $WORKDIR/localext.TMP sed "s/|LOCALUSERS|/$localusers_to_ring/g" $TMPL_EXTDEFAULT \ > $WORKDIR/extensions_default.conf cat $WORKDIR/inextuser.TMP >> $WORKDIR/extensions_default.conf rm -f $WORKDIR/inextuser.TMP } # Puts together all the sip.conf related configuration. pbx_create_sip_config() { mv $WORKDIR/sip_regs.TMP $WORKDIR/sip_registrations.conf mv $WORKDIR/sip_peers.TMP $WORKDIR/sip_peers.conf mv $WORKDIR/sip_users.TMP $WORKDIR/sip_users.conf } # Creates the jabber.conf related config pbx_create_jabber_config() { cp $TMPL_JABBER $WORKDIR/jabber.conf mv $WORKDIR/jabber.TMP $WORKDIR/jabber_users.conf } # Gets rid of any config files from $ASTERISKDIR not found in $WORKDIR. clean_up_asterisk_config_dir() { for f in $ASTERISKDIR/* ; do basef="`basename $f`" if [ ! -e "$WORKDIR/$basef" ] ; then rm -rf "$f" fi done } # Compares md5sums of the config files in $WORKDIR to those # in $ASTERISKDIR, and copies only changed files over to reduce # wear on flash in embedded devices. compare_configs_and_copy_changed() { # First, compute md5sums of the config files in $WORKDIR. cd $WORKDIR/ md5sum * > $MD5SUMSFILE # Now, check the files in $ASTERISKDIR against the md5sums. cd $ASTERISKDIR/ changed_files="`md5sum -c $MD5SUMSFILE 2>/dev/null | fgrep ": FAILED" | awk -F: '{print $1}'`" rm -f $MD5SUMSFILE [ -z "$changed_files" ] && return # Now copy over the changed files. for f in $changed_files ; do cp "$WORKDIR/$f" "$ASTERISKDIR/$f" done } # Calls the functions that create the final config files # Calls the function which compares which files have changed # Puts the final touches on $ASTERISKDIR # Gets rid of $WORKDIR pbx_assemble_and_copy_config() { mkdir -p $ASTERISKDIR copy_unedited_templates_over create_included_files pbx_create_extensions_config pbx_create_sip_config pbx_create_jabber_config touch $WORKDIR/features.conf # At this point, $WORKDIR should contain a complete, working config. clean_up_asterisk_config_dir compare_configs_and_copy_changed [ ! -d $ASTERISKDIR/manager.d ] && mkdir -p $ASTERISKDIR/manager.d/ # Get rid of the working directory rm -rf $WORKDIR/ } # Creates configuration for a user and adds it to the temporary file that holds # all users configured so far. pbx_add_user() { local fullname local defaultuser local secret local ring local can_call config_get fullname $1 fullname config_get defaultuser $1 defaultuser config_get secret $1 secret config_get ring $1 ring config_get can_call $1 can_call [ -z "$defaultuser" -o -z "$secret" ] && return [ -z "$fullname" ] && fullname="$defaultuser" sed "s/|DEFAULTUSER|/$defaultuser/g" $TMPL_SIPUSR > $WORKDIR/sip_user.tmp if [ "$can_call" = "yes" ] ; then # Add user to list of all users that are allowed to make calls. localusers_can_dial="$localusers_can_dial $defaultuser" sed -i "s/|CONTEXTNAME|/$defaultuser/g" $WORKDIR/sip_user.tmp else sed -i "s/|CONTEXTNAME|/$HANGUPCNTXT/g" $WORKDIR/sip_user.tmp fi # Add this user's configuration to the temp file containing all user configs. sed "s/|FULLNAME|/$fullname/" $WORKDIR/sip_user.tmp |\ sed "s/|SECRET|/$secret/g" >> $WORKDIR/sip_users.TMP if [ "$ring" = "yes" ] ; then if [ -z "$localusers_to_ring" ] ; then localusers_to_ring="SIP\/$defaultuser" else localusers_to_ring="$localusers_to_ring\&SIP\/$defaultuser" fi fi # Add configuration which allows local users to call each other. sed "s/|DEFAULTUSER|/$defaultuser/g" $TMPL_EXTOUTLOCAL >> $WORKDIR/localext.TMP # Add configuration which puts calls to users through the default # context, so that blacklists and voicemail take effect for this user. sed "s/|DEFAULTUSER|/$defaultuser/g" $TMPL_EXTDEFAULTUSER >> $WORKDIR/inextuser.TMP rm -f $WORKDIR/sip_user.tmp } # Creates configuration for a Google account, and adds it to the temporary file that holds # all accounts configured so far. # Also creates the outgoing extensions which are used in users' outgoing contexts. pbx_add_jabber() { local username local secret local numprefix local register local make_outgoing_calls local name local users_to_ring local status local statusmessage config_get username $1 username config_get secret $1 secret config_get numprefix $1 numprefix config_get register $1 register config_get make_outgoing_calls $1 make_outgoing_calls config_get name $1 name config_get status $1 status config_get statusmessage $1 statusmessage [ -z "$username" -o -z "$secret" ] && return # Construct a jabber entry for this provider. sed "s/|USERNAME|/$username/g" $TMPL_JABBERUSER |\ sed "s/|NAME|/$name/g" > $WORKDIR/jabber.tmp if [ "$register" = yes ] ; then # If this provider is enabled for incoming calls, we need to set the # status of the user to something other than unavailable in order to receive calls. sed -i "s/|STATUS|/$status/g" $WORKDIR/jabber.tmp sed -i "s/|STATUSMESSAGE|/\"$statusmessage\"/g" $WORKDIR/jabber.tmp users_to_ring="`uci -q get ${MODULENAME}-calls.incoming_calls.$name`" # If no users have been specified to ring, we ring all users enabled for incoming calls. if [ -z "$users_to_ring" ] ; then users_to_ring=$localusers_to_ring else # Else, we cook up a string formatted for the Dial command # with the specified users (SIP/user1&SIP/user2&...). We do it # with set, shift and a loop in order to be more tolerant of ugly whitespace # messes entered by users. set $users_to_ring users_to_ring="SIP\/$1" && shift for u in $@ ; do users_to_ring=$users_to_ring\\\&SIP\\\/$u ; done fi # Now, we add this account to the gtalk incoming context. sed "s/|USERNAME|/$username/g" $TMPL_EXTINCNTXTGTALK |\ sed "s/|LOCALUSERS|/$users_to_ring/g" >> $WORKDIR/outextgtalk.TMP else sed -i "s/|STATUS|/$GTALKUNVL/g" $WORKDIR/jabber.tmp sed -i "s/|STATUSMESSAGE|/\"\"/g" $WORKDIR/jabber.tmp fi # Add this account's configuration to the temp file containing all account configs. sed "s/|SECRET|/$secret/g" $WORKDIR/jabber.tmp >> $WORKDIR/jabber.TMP # If this provider is enabled for outgoing calls. if [ "$make_outgoing_calls" = "yes" ] ; then numprefix="`uci -q get ${MODULENAME}-calls.outgoing_calls.$name`" # If no prefixes are specified, then we use "X" which matches any prefix. [ -z "$numprefix" ] && numprefix="X" for p in $numprefix ; do sed "s/|NUMPREFIX|/$p/g" $TMPL_EXTOUTGTALK |\ sed "s/|NAME|/$name/g" >> $WORKDIR/outext-$name.TMP done # Add this provider to the list of enabled outbound providers. if [ -z "$outbound_providers" ] ; then outbound_providers="$name" else outbound_providers="$outbound_providers $name" fi fi rm -f $WORKDIR/jabber.tmp } # Creates configuration for a SIP provider account, and adds it to the temporary file that holds # all accounts configured so far. # Also creates the outgoing extensions which are used in users' outgoing contexts. pbx_add_peer() { local defaultuser local secret local host local fromdomain local register local numprefix local make_outgoing_calls local name local users_to_ring local port local outboundproxy config_get defaultuser $1 defaultuser config_get secret $1 secret config_get host $1 host config_get port $1 port config_get outbountproxy $1 outboundproxy config_get fromdomain $1 fromdomain config_get register $1 register config_get numprefix $1 numprefix config_get make_outgoing_calls $1 make_outgoing_calls config_get name $1 name [ -z "$defaultuser" -o -z "$secret" -o -z "$host" ] && return [ -z "$fromdomain" ] && fromdomain=$host [ -n "$port" ] && port="port=$port" [ -n "$outboundproxy" ] && outboundproxy="outboundproxy=$outboundproxy" # Construct a sip peer entry for this provider. sed "s/|DEFAULTUSER|/$defaultuser/" $TMPL_SIPPEER > $WORKDIR/sip_peer.tmp sed -i "s/|NAME|/$name/" $WORKDIR/sip_peer.tmp sed -i "s/|FROMUSER|/$defaultuser/" $WORKDIR/sip_peer.tmp sed -i "s/|SECRET|/$secret/" $WORKDIR/sip_peer.tmp sed -i "s/|HOST|/$host/" $WORKDIR/sip_peer.tmp sed -i "s/|PORT|/$port/" $WORKDIR/sip_peer.tmp sed -i "s/|OUTBOUNDPROXY|/$outboundproxy/" $WORKDIR/sip_peer.tmp # Add this account's configuration to the temp file containing all account configs. sed "s/|FROMDOMAIN|/$host/" $WORKDIR/sip_peer.tmp >> $WORKDIR/sip_peers.TMP # If this provider is enabled for incoming calls. if [ "$register" = "yes" ] ; then # Then we create a registration string for this provider. sed "s/|DEFAULTUSER|/$defaultuser/g" $TMPL_SIPREG > $WORKDIR/sip_reg.tmp sed -i "s/|SECRET|/$secret/g" $WORKDIR/sip_reg.tmp sed "s/|NAME|/$name/g" $WORKDIR/sip_reg.tmp >> $WORKDIR/sip_regs.TMP users_to_ring="`uci -q get ${MODULENAME}-calls.incoming_calls.$name`" # If no users have been specified to ring, we ring all users enabled for incoming calls. if [ -z "$users_to_ring" ] ; then users_to_ring=$localusers_to_ring else # Else, we cook up a string formatted for the Dial command # with the specified users (SIP/user1&SIP/user2&...). We do it # with set, shift and a loop in order to be more tolerant of ugly whitespace # messes entered by users. set $users_to_ring users_to_ring="SIP\/$1" && shift for u in $@ ; do users_to_ring=$users_to_ring\\\&SIP\\\/$u ; done fi # And we create an incoming calls context for this provider. sed "s/|NAME|/$name/g" $TMPL_EXTINCNTXTSIP |\ sed "s/|LOCALUSERS|/$users_to_ring/g" >> $WORKDIR/inext.TMP fi # If this provider is enabled for outgoing calls. if [ "$make_outgoing_calls" = "yes" ] ; then numprefix="`uci -q get ${MODULENAME}-calls.outgoing_calls.$name`" # If no prefixes are specified, then we use "X" which matches any prefix. [ -z "$numprefix" ] && numprefix="X" for p in $numprefix ; do sed "s/|NUMPREFIX|/$p/g" $TMPL_EXTOUTSIP |\ sed "s/|NAME|/$name/g" >> $WORKDIR/outext-$name.TMP done # Add this provider to the list of enabled outbound providers. if [ -z "$outbound_providers" ] ; then outbound_providers="$name" else outbound_providers="$outbound_providers $name" fi fi rm -f $WORKDIR/sip_peer.tmp rm -f $WORKDIR/sip_reg.tmp } # For all local users enabled for outbound calls, creates a context # containing the extensions for Google and SIP accounts this user is # allowed to use. pbx_create_user_contexts() { local providers for u in $localusers_can_dial ; do sed "s/|DEFAULTUSER|/$u/g" $TMPL_EXTUSERCNTXTHDR >> $WORKDIR/userext.TMP cat $WORKDIR/localext.TMP >> $WORKDIR/userext.TMP providers="`uci -q get ${MODULENAME}-calls.providers_user_can_use.$u`" [ -z "$providers" ] && providers="$outbound_providers" # For each provider, cat the contents of outext-$name.TMP into the user's outgoing calls extension for p in $providers ; do [ -f $WORKDIR/outext-$p.TMP ] && cat $WORKDIR/outext-$p.TMP >> $WORKDIR/userext.TMP done cat $TMPL_EXTUSERCNTXTFTR >> $WORKDIR/userext.TMP done } # Creates the blacklist context which hangs up on blacklisted numbers. pbx_add_blacklist() { local blacklist1 local blacklist2 config_get blacklist1 blacklisting blacklist1 config_get blacklist2 blacklisting blacklist2 # We create the blacklist context no matter whether the blacklist # actually contains entries or not, since the PBX will send calls # to the context for a check against the list anyway. cp $TMPL_EXTBLKLISTHDR $WORKDIR/blacklist.TMP for n in $blacklist1 $blacklist2 ; do sed "s/|BLACKLISTITEM|/$n/g" $TMPL_EXTBLKLIST >> $WORKDIR/blacklist.TMP done cat $TMPL_EXTBLKLISTFTR >> $WORKDIR/blacklist.TMP } # Creates the callthrough context which allows specified numbers to get # into the PBX and dial out as the configured user. pbx_add_callthrough() { local callthrough_number_list local defaultuser local pin local enabled config_get callthrough_number_list $1 callthrough_number_list config_get defaultuser $1 defaultuser config_get pin $1 pin config_get enabled $1 enabled [ "$enabled" = "no" ] && return [ "$defaultuser" = "" ] && return for callthrough_number in $callthrough_number_list ; do sed "s/|NUMBER|/$callthrough_number/g" $TMPL_EXTCTHRUCHECK >> $WORKDIR/callthroughcheck.TMP sed "s/|NUMBER|/$callthrough_number/g" $TMPL_EXTCTHRU |\ sed "s/|DEFAULTUSER|/$defaultuser/" |\ sed "s/|PIN|/$pin/" >> $WORKDIR/callthrough.TMP done } # Creates sip.conf from its template. pbx_cook_sip_template() { local useragent local externhost local bindport config_get useragent advanced useragent config_get externhost advanced externhost config_get bindport advanced bindport [ -z "$useragent" ] && useragent="$USERAGENT" sed "s/|USERAGENT|/$useragent/g" $TMPL_SIP > $WORKDIR/sip.conf if [ -z "$externhost" ] ; then sed -i "s/externhost=|EXTERNHOST|//g" $WORKDIR/sip.conf else sed -i "s/|EXTERNHOST|/$externhost/g" $WORKDIR/sip.conf fi if [ -z "$bindport" ] ; then sed -i "s/bindport=|BINDPORT|//g" $WORKDIR/sip.conf else sed -i "s/|BINDPORT|/$bindport/g" $WORKDIR/sip.conf fi } # Creates rtp.conf from its template. pbx_cook_rtp_template() { local rtpstart local rtpend config_get rtpstart advanced rtpstart config_get rtpend advanced rtpend sed "s/|RTPSTART|/$rtpstart/" $TMPL_RTP |\ sed "s/|RTPEND|/$rtpend/" > $WORKDIR/rtp.conf } # Makes sure the ownership of specified directories is proper. pbx_fix_ownership() { chown $ASTUSER:$ASTGROUP $ASTDIRS chown $ASTUSER:$ASTGROUP -R $ASTDIRSRECURSIVE } # Creates voicemail config if installed and enabled. pbx_configure_voicemail() { local enabled local global_timeout local global_email_addresses local smtp_tls local smtp_server local smtp_port local smtp_auth local smtp_user local smtp_password config_get enabled global_voicemail enabled # First check if voicemail is enabled. [ "$enabled" != "yes" ] && exit config_get global_timeout global_voicemail global_timeout #config_get global_email_addresses global_voicemail global_email_addresses config_get smtp_auth voicemail_smtp smtp_auth config_get smtp_tls voicemail_smtp smtp_tls config_get smtp_server voicemail_smtp smtp_server config_get smtp_port voicemail_smtp smtp_port config_get smtp_user voicemail_smtp smtp_user config_get smtp_password voicemail_smtp smtp_password sed "s/|AUTH|/$smtp_auth/" $TMPL_MSMTPDEFAULT |\ sed "s/|TLS|/$smtp_tls/" > $WORKDIR/pbx-msmtprc sed "s/|HOST|/$smtp_server/" $TMPL_MSMTPACCOUNT |\ sed "s/|PORT|/$smtp_port/" >> $WORKDIR/pbx-msmtprc if [ "$smtp_auth" = "on" ] ; then sed "s/|USER|/$smtp_user/" $TMPL_MSMTPAUTH |\ sed "s/|PASSWORD|/$smtp_password/" >> $WORKDIR/pbx-msmtprc fi cat $TMPL_MSMTPACCTDFLT >> $WORKDIR/pbx-msmtprc [ ! -f /etc/pbx-msmtprc ] && cp $WORKDIR/pbx-msmtprc /etc/pbx-msmtprc diff -q $WORKDIR/pbx-msmtprc /etc/pbx-msmtprc 1>/dev/null \ || mv $WORKDIR/pbx-msmtprc /etc/pbx-msmtprc chmod 600 /etc/pbx-msmtprc # Copy over the extensions file which has voicemail enabled. cp $TMPL_EXTVMENABLED $WORKDIR/extensions_voicemail.conf } start() { mkdir -p $WORKDIR # Create the users. config_load ${MODULENAME}-users config_foreach pbx_add_user local_user # Create configuration for each google account. config_unset config_load ${MODULENAME}-google config_foreach pbx_add_jabber gtalk_jabber # Create configuration for each voip provider. config_unset config_load ${MODULENAME}-voip config_foreach pbx_add_peer voip_provider # Create the user contexts, and phone blacklist. config_unset config_load ${MODULENAME}-calls pbx_create_user_contexts pbx_add_blacklist config_foreach pbx_add_callthrough callthrough_numbers # Prepare sip.conf using settings from the "advanced" section. config_unset config_load ${MODULENAME}-advanced pbx_cook_sip_template pbx_cook_rtp_template # Prepare sip.conf using settings from the "advanced" section. config_unset config_load ${MODULENAME}-voicemail pbx_configure_voicemail # Assemble the configuration, and copy changed files over. config_unset config_load ${MODULENAME}-advanced pbx_assemble_and_copy_config # Enforce ownership of specified files and directories. pbx_fix_ownership }