- May
- 523
- 2
PingVPNMonitor.btm
Tim
Code:
@echo off
setlocal
REM Use ping interval to keep internet connection alive and to monitor
REM VPN connection status by pinging a VPN host name. The use of the
REM OSD command requires TCMD and not TCC/LE. The VPN status is indicated
REM by OSD text during a disconnect and briefly on reconnect. Also, a
REM message dialog is displayed when a disconnect is first detected.
REM The batch file can be started with this command:
REM start /inv %_cmdspec /c C:\PathToBatch\PingVPNMonitor.btm
set PingHost=hostname
set PingErr=N
set PingInterval=30
set ErrorText=VPN Not Connected
set OkayText=VPN Connected
set OSDClear=osd /c 2> nul
set OSDError=osd /n /top /hcenter /font=36 /rgb=255,0,0 /time=5 %ErrorText
set OSDOkay=osd /n /top /hcenter /font=36 /rgb=0,255,0 /time=5 %OkayText
set ShowErrDlg=Y
REM Deleting the log file will stop the background process in case
REM it needs to be restarted
set LogFile=%@path[%@full[%_batchname]]%@name[%_batchname].log
echo %_date %_time %@name[%_batchname] Started > %LogFile
REM wait for VPN connect
do while %@ping[%PingHost,5] LT 0 (delay %PingInterval)
echo %_date %_time VPN Connected >> %LogFile
REM track VPN disconnect
REM gosubs are separate as the first may change the interval of the second
do forever (gosub TestPing & gosub PingIntervalDelay)
goto end
:TestPing
REM Check for shutdown request of deleted log file
if not exist %LogFile exit
set val=%@ping[%PingHost,1]
iff %Val LT 0 then
REM disconnect detected
echo %_date %_time Ping response: %Val -- %ErrorText >> %LogFile
set PingErr=Y
set PingInterval=5
%OSDClear
%OSDError
REM Only show dialog on first failure
iff %ShowErrDlg EQ Y then
set ShowErrDlg=N
echo %_date %_time Show error dialog >> %LogFile
msgbox /t60 /s /m /o OK "Error" Ping response: %Val^N^N%ErrorText
echo %_date %_time Exit error dialog >> %LogFile
endiff
elseiff %PingErr EQ Y then
REM reconnect detected
echo %_date %_time %OkayText >> %LogFile
%OSDClear
%OSDOkay
set PingErr=N
set PingInterval=30
set ShowErrDlg=Y
endiff
return
:PingIntervalDelay
delay %PingInterval
return
:end
Tim