From 48a6dcf5cee1e9438855f07599ea18c60411d736 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Mon, 16 Dec 2013 16:32:02 -0500 Subject: [PATCH] Change COnfig from using the subroutine symbol table to just using a global hash --- .../ZoneMinder/lib/ZoneMinder/Config.pm.in | 22 +- .../ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm | 14 +- scripts/ZoneMinder/lib/ZoneMinder/Database.pm | 6 +- scripts/ZoneMinder/lib/ZoneMinder/General.pm | 36 +- scripts/ZoneMinder/lib/ZoneMinder/Logger.pm | 34 +- scripts/zmaudit.pl.in | 20 +- scripts/zmcontrol.pl.in | 2 +- scripts/zmdc.pl.in | 10 +- scripts/zmfilter.pl.in | 132 +++--- scripts/zmpkg.pl.in | 26 +- scripts/zmupdate.pl.in | 74 ++-- scripts/zmvideo.pl.in | 6 +- scripts/zmwatch.pl.in | 6 +- src/zm_config_defines.h | 377 +++++++++--------- 14 files changed, 382 insertions(+), 383 deletions(-) diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in b/scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in index a840db080..cb6c1cbc2 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in +++ b/scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in @@ -33,6 +33,7 @@ require ZoneMinder::Base; our @ISA = qw(Exporter ZoneMinder::Base); +use vars qw( %Config ); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. @@ -40,7 +41,7 @@ our @ISA = qw(Exporter ZoneMinder::Base); # This allows declaration use ZoneMinder ':all'; # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK # will save memory. -our @EXPORT_CONFIG; # Get populated by BEGIN +our @EXPORT_CONFIG = qw( %Config ); # Get populated by BEGIN our %EXPORT_TAGS = ( 'constants' => [ qw( @@ -64,11 +65,9 @@ use Carp; # Load the config from the database into the symbol table BEGIN { - no strict 'refs'; - my $config_file = ZM_CONFIG; ( my $local_config_file = $config_file ) =~ s|^.*/|./|; - if ( -s $local_config_file && -r $local_config_file ) + if ( -s $local_config_file and -r $local_config_file ) { print( STDERR "Warning, overriding installed $local_config_file file with local copy\n" ); $config_file = $local_config_file; @@ -84,23 +83,20 @@ BEGIN next; } # end if $name =~ tr/a-z/A-Z/; - *{$name} = sub { $value }; - push( @EXPORT_CONFIG, $name ); + $Config{$name} = $value; } close( CONFIG ); use DBI; - my $dbh = DBI->connect( "DBI:mysql:database=".&ZM_DB_NAME.";host=".&ZM_DB_HOST, &ZM_DB_USER, &ZM_DB_PASS ); - my $sql = "select * from Config"; + my $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}.";host=".$Config{ZM_DB_HOST}, $Config{ZM_DB_USER}, $Config{ZM_DB_PASS} ) or croak( "Can't connect to db" ); + my $sql = 'select * from Config'; my $sth = $dbh->prepare_cached( $sql ) or croak( "Can't prepare '$sql': ".$dbh->errstr() ); my $res = $sth->execute() or croak( "Can't execute: ".$sth->errstr() ); - while( my $config = $sth->fetchrow_hashref() ) - { - *{$config->{Name}} = sub { $config->{Value} }; - push( @EXPORT_CONFIG, $config->{Name} ); + while( my $config = $sth->fetchrow_hashref() ) { + $Config{$config->{Name}} = $config->{Value}; } $sth->finish(); - $dbh->disconnect(); + #$dbh->disconnect(); } 1; diff --git a/scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm b/scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm index 8ee1ec82b..673e13c98 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm @@ -68,7 +68,7 @@ use Carp; sub loadConfigFromDB { print( "Loading config from DB\n" ); - my $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_HOST, ZM_DB_USER, ZM_DB_PASS ); + my $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}.";host=".$Config{ZM_DB_HOST}, $Config{ZM_DB_USER}, $Config{ZM_DB_PASS} ); if ( !$dbh ) { @@ -111,13 +111,19 @@ sub loadConfigFromDB sub saveConfigToDB { print( "Saving config to DB\n" ); - my $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_HOST, ZM_DB_USER, ZM_DB_PASS ); + my $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}.";host=".$Config{ZM_DB_HOST}, $Config{ZM_DB_USER}, $Config{ZM_DB_PASS} ); if ( !$dbh ) { print( "Error: unable to save options to database: $DBI::errstr\n" ); return( 0 ); } + + my $ac = $dbh->{AutoCommit}; + $dbh->{AutoCommit} = 0; + + $dbh->do('LOCK TABLE Config WRITE') or croak( "Can't lock Config table: " . $dbh->errstr() ); + my $sql = "delete from Config"; my $res = $dbh->do( $sql ) or croak( "Can't do '$sql': ".$dbh->errstr() ); @@ -149,6 +155,10 @@ sub saveConfigToDB my $res = $sth->execute( $option->{id}, $option->{name}, $option->{db_value}, $option->{db_type}, $option->{default}, $option->{db_hint}, $option->{db_pattern}, $option->{db_format}, $option->{description}, $option->{help}, $option->{category}, $option->{readonly}?1:0, $option->{db_requires} ) or croak( "Can't execute: ".$sth->errstr() ); } $sth->finish(); + + $dbh->do('UNLOCK TABLES'); + $dbh->{AutoCommit} = $ac; + $dbh->disconnect(); } diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Database.pm b/scripts/ZoneMinder/lib/ZoneMinder/Database.pm index d0bae5dde..29b3c8b2a 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Database.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Database.pm @@ -79,15 +79,15 @@ sub zmDbConnect( ;$ ) } if ( !defined( $dbh ) ) { - my ( $host, $port ) = ( ZM_DB_HOST =~ /^([^:]+)(?::(.+))?$/ ); + my ( $host, $port ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ ); if ( defined($port) ) { - $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".$host.";port=".$port, ZM_DB_USER, ZM_DB_PASS ); + $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}.";host=".$host.";port=".$port, $Config{ZM_DB_USER}, $Config{ZM_DB_PASS} ); } else { - $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_HOST, ZM_DB_USER, ZM_DB_PASS ); + $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}.";host=".$Config{ZM_DB_HOST}, $Config{ZM_DB_USER}, $Config{ZM_DB_PASS} ); } $dbh->trace( 0 ); } diff --git a/scripts/ZoneMinder/lib/ZoneMinder/General.pm b/scripts/ZoneMinder/lib/ZoneMinder/General.pm index 5af7150a8..4d60852a7 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/General.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/General.pm @@ -95,7 +95,7 @@ sub getCmdFormat() Debug( "Testing valid shell syntax\n" ); my ( $name ) = getpwuid( $> ); - if ( $name eq ZM_WEB_USER ) + if ( $name eq $Config{ZM_WEB_USER} ) { Debug( "Running as '$name', su commands not needed\n" ); return( "" ); @@ -103,7 +103,7 @@ sub getCmdFormat() my $null_command = "true"; - my $prefix = "sudo -u ".ZM_WEB_USER." "; + my $prefix = "sudo -u ".$Config{ZM_WEB_USER}." "; my $suffix = ""; my $command = $prefix.$null_command.$suffix; Debug( "Testing \"$command\"\n" ); @@ -120,7 +120,7 @@ sub getCmdFormat() chomp( $output ); Debug( "Test failed, '$output'\n" ); - $prefix = "su ".ZM_WEB_USER." --shell=/bin/sh --command='"; + $prefix = "su ".$Config{ZM_WEB_USER}." --shell=/bin/sh --command='"; $suffix = "'"; $command = $prefix.$null_command.$suffix; Debug( "Testing \"$command\"\n" ); @@ -136,7 +136,7 @@ sub getCmdFormat() chomp( $output ); Debug( "Test failed, '$output'\n" ); - $prefix = "su ".ZM_WEB_USER." -c '"; + $prefix = "su ".$Config{ZM_WEB_USER}." -c '"; $suffix = "'"; $command = $prefix.$null_command.$suffix; Debug( "Testing \"$command\"\n" ); @@ -172,7 +172,7 @@ sub runCommand( $ ) } my $command = shift; - $command = ZM_PATH_BIN."/".$command; + $command = $Config{ZM_PATH_BIN}."/".$command; if ( $cmdPrefix ) { $command = $cmdPrefix.$command.$cmdSuffix; @@ -201,15 +201,15 @@ sub getEventPath( $ ) my $event = shift; my $event_path = ""; - if ( ZM_USE_DEEP_STORAGE ) + if ( $Config{ZM_USE_DEEP_STORAGE} ) { - $event_path = ZM_DIR_EVENTS.'/'.$event->{MonitorId}.'/'.strftime( "%y/%m/%d/%H/%M/%S", localtime($event->{Time}) ); + $event_path = $Config{ZM_DIR_EVENTS}.'/'.$event->{MonitorId}.'/'.strftime( "%y/%m/%d/%H/%M/%S", localtime($event->{Time}) ); } else { - $event_path = ZM_DIR_EVENTS.'/'.$event->{MonitorId}.'/'.$event->{Id}; + $event_path = $Config{ZM_DIR_EVENTS}.'/'.$event->{MonitorId}.'/'.$event->{Id}; } - $event_path = ZM_PATH_WEB.'/'.$event_path if ( index(ZM_DIR_EVENTS,'/') != 0 ); + $event_path = $Config{ZM_PATH_WEB}.'/'.$event_path if ( index($Config{ZM_DIR_EVENTS},'/') != 0 ); return( $event_path ); } @@ -219,10 +219,10 @@ sub createEventPath( $ ) # WARNING assumes running from events directory # my $event = shift; - my $eventRootPath = (ZM_DIR_EVENTS=~m|/|)?ZM_DIR_EVENTS:(ZM_PATH_WEB.'/'.ZM_DIR_EVENTS); + my $eventRootPath = ($Config{ZM_DIR_EVENTS}=~m|/|)?$Config{ZM_DIR_EVENTS}:($Config{ZM_PATH_WEB}.'/'.$Config{ZM_DIR_EVENTS}); my $eventPath = $eventRootPath.'/'.$event->{MonitorId}; - if ( ZM_USE_DEEP_STORAGE ) + if ( $Config{ZM_USE_DEEP_STORAGE} ) { my @startTime = localtime( $event->{StartTime} ); @@ -277,10 +277,10 @@ sub _checkProcessOwner() if ( !defined($_setFileOwner) ) { my ( $processOwner ) = getpwuid( $> ); - if ( $processOwner ne ZM_WEB_USER ) + if ( $processOwner ne $Config{ZM_WEB_USER} ) { # Not running as web user, so should be root in whch case chown the temporary directory - ( my $ownerName, my $ownerPass, $_ownerUid, $_ownerGid ) = getpwnam( ZM_WEB_USER ) or Fatal( "Can't get user details for web user '".ZM_WEB_USER."': $!" ); + ( my $ownerName, my $ownerPass, $_ownerUid, $_ownerGid ) = getpwnam( $Config{ZM_WEB_USER} ) or Fatal( "Can't get user details for web user '".$Config{ZM_WEB_USER}."': $!" ); $_setFileOwner = 1; } else @@ -297,7 +297,7 @@ sub setFileOwner( $ ) if ( _checkProcessOwner() ) { - chown( $_ownerUid, $_ownerGid, $file ) or Fatal( "Can't change ownership of file '$file' to '".ZM_WEB_USER.":".ZM_WEB_GROUP."': $!" ); + chown( $_ownerUid, $_ownerGid, $file ) or Fatal( "Can't change ownership of file '$file' to '".$Config{ZM_WEB_USER}.":".$Config{ZM_WEB_GROUP}."': $!" ); } } @@ -434,12 +434,12 @@ sub createEvent( $;$ ) #$frame->{FrameId} = $dbh->{mysql_insertid}; if ( $frame->{imagePath} ) { - $frame->{capturePath} = sprintf( "%s/%0".ZM_EVENT_IMAGE_DIGITS."d-capture.jpg", $eventPath, $frame->{FrameId} ); + $frame->{capturePath} = sprintf( "%s/%0".$Config{ZM_EVENT_IMAGE_DIGITS}."d-capture.jpg", $eventPath, $frame->{FrameId} ); rename( $frame->{imagePath}, $frame->{capturePath} ) or Fatal( "Can't copy ".$frame->{imagePath}." to ".$frame->{capturePath}.": $!" ); setFileOwner( $frame->{capturePath} ); - if ( 0 && ZM_CREATE_ANALYSIS_IMAGES ) + if ( 0 && $Config{ZM_CREATE_ANALYSIS_IMAGES} ) { - $frame->{analysePath} = sprintf( "%s/%0".ZM_EVENT_IMAGE_DIGITS."d-analyse.jpg", $eventPath, $frame->{FrameId} ); + $frame->{analysePath} = sprintf( "%s/%0".$Config{ZM_EVENT_IMAGE_DIGITS}."d-analyse.jpg", $eventPath, $frame->{FrameId} ); link( $frame->{capturePath}, $frame->{analysePath} ) or Fatal( "Can't link ".$frame->{capturePath}." to ".$frame->{analysePath}.": $!" ); setFileOwner( $frame->{analysePath} ); } @@ -497,7 +497,7 @@ sub deleteEventFiles( $;$ ) my $monitor_id = shift; $monitor_id = '*' if ( !defined($monitor_id) ); - if ( ZM_USE_DEEP_STORAGE ) + if ( $Config{ZM_USE_DEEP_STORAGE} ) { my $link_path = $monitor_id."/*/*/*/.".$event_id; #Debug( "LP1:$link_path" ); diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Logger.pm b/scripts/ZoneMinder/lib/ZoneMinder/Logger.pm index 46095be2e..5b4438c72 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Logger.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Logger.pm @@ -150,7 +150,7 @@ sub new $this->{hasTerm} = -t STDERR; ( $this->{fileName} = $0 ) =~ s|^.*/||; - $this->{logPath} = ZM_PATH_LOGS; + $this->{logPath} = $Config{ZM_PATH_LOGS}; $this->{logFile} = $this->{logPath}."/".$this->{id}.".log"; $this->{trace} = 0; @@ -163,7 +163,7 @@ sub BEGIN { # Fake the config variables that are used in case they are not defined yet # Only really necessary to support upgrade from previous version - if ( !eval('defined(ZM_LOG_DEBUG)') ) + if ( !eval('defined($Config{ZM_LOG_DEBUG})') ) { no strict 'subs'; no strict 'refs'; @@ -221,7 +221,7 @@ sub initialise( @ ) } else { - $tempDatabaseLevel = ZM_LOG_LEVEL_DATABASE; + $tempDatabaseLevel = $Config{ZM_LOG_LEVEL_DATABASE}; } if ( defined($options{fileLevel}) ) { @@ -229,7 +229,7 @@ sub initialise( @ ) } else { - $tempFileLevel = ZM_LOG_LEVEL_FILE; + $tempFileLevel = $Config{ZM_LOG_LEVEL_FILE}; } if ( defined($options{syslogLevel}) ) { @@ -237,7 +237,7 @@ sub initialise( @ ) } else { - $tempSyslogLevel = ZM_LOG_LEVEL_SYSLOG; + $tempSyslogLevel = $Config{ZM_LOG_LEVEL_SYSLOG}; } if ( defined($ENV{'LOG_PRINT'}) ) @@ -253,18 +253,18 @@ sub initialise( @ ) $tempFileLevel = $level if ( defined($level = $this->getTargettedEnv('LOG_LEVEL_FILE')) ); $tempSyslogLevel = $level if ( defined($level = $this->getTargettedEnv('LOG_LEVEL_SYSLOG')) ); - if ( ZM_LOG_DEBUG ) + if ( $Config{ZM_LOG_DEBUG} ) { - foreach my $target ( split( /\|/, ZM_LOG_DEBUG_TARGET ) ) + foreach my $target ( split( /\|/, $Config{ZM_LOG_DEBUG_TARGET} ) ) { if ( $target eq $this->{id} || $target eq "_".$this->{id} || $target eq $this->{idRoot} || $target eq "_".$this->{idRoot} || $target eq "" ) { - if ( ZM_LOG_DEBUG_LEVEL > NOLOG ) + if ( $Config{ZM_LOG_DEBUG_LEVEL} > NOLOG ) { - $tempLevel = $this->limit( ZM_LOG_DEBUG_LEVEL ); - if ( ZM_LOG_DEBUG_FILE ne "" ) + $tempLevel = $this->limit( $Config{ZM_LOG_DEBUG_LEVEL} ); + if ( $Config{ZM_LOG_DEBUG_FILE} ne "" ) { - $tempLogFile = ZM_LOG_DEBUG_FILE; + $tempLogFile = $Config{ZM_LOG_DEBUG_FILE}; $tempFileLevel = $tempLevel; } } @@ -447,20 +447,20 @@ sub databaseLevel( ;$ ) { if ( !$this->{dbh} ) { - my ( $host, $port ) = ( ZM_DB_HOST =~ /^([^:]+)(?::(.+))?$/ ); + my ( $host, $port ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ ); if ( defined($port) ) { - $this->{dbh} = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".$host.";port=".$port, ZM_DB_USER, ZM_DB_PASS ); + $this->{dbh} = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}.";host=".$host.";port=".$port, $Config{ZM_DB_USER}, $Config{ZM_DB_PASS} ); } else { - $this->{dbh} = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_HOST, ZM_DB_USER, ZM_DB_PASS ); + $this->{dbh} = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}.";host=".$Config{ZM_DB_HOST}, $Config{ZM_DB_USER}, $Config{ZM_DB_PASS} ); } if ( !$this->{dbh} ) { $databaseLevel = NOLOG; - Error( "Unable to write log entries to DB, can't connect to database '".ZM_DB_NAME."' on host '".ZM_DB_HOST."'" ); + Error( "Unable to write log entries to DB, can't connect to database '".$Config{ZM_DB_NAME}."' on host '".$Config{ZM_DB_HOST}."'" ); } else { @@ -553,8 +553,8 @@ sub openFile() { LOGFILE->autoflush() if ( $this->{autoFlush} ); - my $webUid = (getpwnam( ZM_WEB_USER ))[2]; - my $webGid = (getgrnam( ZM_WEB_GROUP ))[2]; + my $webUid = (getpwnam( $Config{ZM_WEB_USER} ))[2]; + my $webGid = (getgrnam( $Config{ZM_WEB_GROUP} ))[2]; if ( $> == 0 ) { chown( $webUid, $webGid, $this->{logFile} ) or Fatal( "Can't change permissions on log file '".$this->{logFile}."': $!" ) diff --git a/scripts/zmaudit.pl.in b/scripts/zmaudit.pl.in index 955198c9f..64a992196 100644 --- a/scripts/zmaudit.pl.in +++ b/scripts/zmaudit.pl.in @@ -57,8 +57,8 @@ use File::Find; use Time::HiRes qw/gettimeofday/; use Getopt::Long; -use constant IMAGE_PATH => ZM_PATH_WEB.'/'.ZM_DIR_IMAGES; -use constant EVENT_PATH => (ZM_DIR_EVENTS=~m|/|)?ZM_DIR_EVENTS:(ZM_PATH_WEB.'/'.ZM_DIR_EVENTS); +use constant IMAGE_PATH => $Config{ZM_PATH_WEB}.'/'.$Config{ZM_DIR_IMAGES}; +use constant EVENT_PATH => ($Config{ZM_DIR_EVENTS}=~m|/|)?$Config{ZM_DIR_EVENTS}:($Config{ZM_PATH_WEB}.'/'.$Config{ZM_DIR_EVENTS}); $| = 1; @@ -107,7 +107,7 @@ chdir( EVENT_PATH ); my $max_image_age = 6/24; # 6 hours my $max_swap_age = 24/24; # 24 hours my $image_path = IMAGE_PATH; -my $swap_image_path = ZM_PATH_SWAP; +my $swap_image_path = $Config{ZM_PATH_SWAP}; my $loop = 1; my $cleaned = 0; @@ -142,7 +142,7 @@ MAIN: while( $loop ) my $fs_events = $fs_monitors->{$monitor} = {}; ( my $monitor_dir ) = ( $monitor =~ /^(.*)$/ ); # De-taint - if ( ZM_USE_DEEP_STORAGE ) + if ( $Config{ZM_USE_DEEP_STORAGE} ) { foreach my $day_dir ( <$monitor_dir/*/*/*> ) { @@ -399,9 +399,9 @@ MAIN: while( $loop ) File::Find::find( { wanted=>\&deleteSwapImage, untaint=>1 }, $swap_image_root ); # Prune the Logs table if required - if ( ZM_LOG_DATABASE_LIMIT ) + if ( $Config{ZM_LOG_DATABASE_LIMIT} ) { - if ( ZM_LOG_DATABASE_LIMIT =~ /^\d+$/ ) + if ( $Config{ZM_LOG_DATABASE_LIMIT} =~ /^\d+$/ ) { # Number of rows my $selectLogRowCountSql = "select count(*) as Rows from Logs"; @@ -410,18 +410,18 @@ MAIN: while( $loop ) my $row = $selectLogRowCountSth->fetchrow_hashref(); my $logRows = $row->{Rows}; $selectLogRowCountSth->finish(); - if ( $logRows > ZM_LOG_DATABASE_LIMIT ) + if ( $logRows > $Config{ZM_LOG_DATABASE_LIMIT} ) { my $deleteLogByRowsSql = "delete low_priority from Logs order by TimeKey asc limit ?"; my $deleteLogByRowsSth = $dbh->prepare_cached( $deleteLogByRowsSql ) or Fatal( "Can't prepare '$deleteLogByRowsSql': ".$dbh->errstr() ); - $res = $deleteLogByRowsSth->execute( $logRows - ZM_LOG_DATABASE_LIMIT ) or Fatal( "Can't execute: ".$deleteLogByRowsSth->errstr() ); + $res = $deleteLogByRowsSth->execute( $logRows - $Config{ZM_LOG_DATABASE_LIMIT} ) or Fatal( "Can't execute: ".$deleteLogByRowsSth->errstr() ); aud_print( "Deleted ".$deleteLogByRowsSth->rows()." log table entries by count\n" ) if ( $deleteLogByRowsSth->rows() ); } } else { # Time of record - my $deleteLogByTimeSql = "delete low_priority from Logs where TimeKey < unix_timestamp(now() - interval ".ZM_LOG_DATABASE_LIMIT.")"; + my $deleteLogByTimeSql = "delete low_priority from Logs where TimeKey < unix_timestamp(now() - interval ".$Config{ZM_LOG_DATABASE_LIMIT}.")"; my $deleteLogByTimeSth = $dbh->prepare_cached( $deleteLogByTimeSql ) or Fatal( "Can't prepare '$deleteLogByTimeSql': ".$dbh->errstr() ); $res = $deleteLogByTimeSth->execute() or Fatal( "Can't execute: ".$deleteLogByTimeSth->errstr() ); aud_print( "Deleted ".$deleteLogByTimeSth->rows()." log table entries by time\n" ) if ( $deleteLogByTimeSth->rows() ); @@ -429,7 +429,7 @@ MAIN: while( $loop ) } $loop = $continuous; - sleep( ZM_AUDIT_CHECK_INTERVAL ) if ( $continuous ); + sleep( $Config{ZM_AUDIT_CHECK_INTERVAL} ) if $continuous; }; exit( 0 ); diff --git a/scripts/zmcontrol.pl.in b/scripts/zmcontrol.pl.in index aba203614..77283acc9 100644 --- a/scripts/zmcontrol.pl.in +++ b/scripts/zmcontrol.pl.in @@ -88,7 +88,7 @@ if ( !$id || !$options{command} ) Debug( $arg_string ); -my $sock_file = ZM_PATH_SOCKS.'/zmcontrol-'.$id.'.sock'; +my $sock_file = $Config{ZM_PATH_SOCKS}.'/zmcontrol-'.$id.'.sock'; socket( CLIENT, PF_UNIX, SOCK_STREAM, 0 ) or Fatal( "Can't open socket: $!" ); diff --git a/scripts/zmdc.pl.in b/scripts/zmdc.pl.in index 47e50cc39..c891553d5 100644 --- a/scripts/zmdc.pl.in +++ b/scripts/zmdc.pl.in @@ -51,7 +51,7 @@ use Socket; use IO::Handle; use Data::Dumper; -use constant SOCK_FILE => ZM_PATH_SOCKS.'/zmdc.sock'; +use constant SOCK_FILE => $Config{ZM_PATH_SOCKS}.'/zmdc.sock'; $| = 1; @@ -437,7 +437,7 @@ sub start if ( $daemon =~ /^${daemon_patt}$/ ) { - $daemon = ZM_PATH_BIN.'/'.$1; + $daemon = $Config{ZM_PATH_BIN}.'/'.$1; } else { @@ -645,7 +645,7 @@ sub reaper if ( $process->{keepalive} ) { - if ( !$process->{delay} || ($process->{runtime} > ZM_MAX_RESTART_DELAY) ) + if ( !$process->{delay} || ($process->{runtime} > $Config{ZM_MAX_RESTART_DELAY} ) ) { #start( $process->{daemon}, @{$process->{args}} ); # Schedule for immediate restart @@ -659,9 +659,9 @@ sub reaper $process->{pending} = $process->{stopped}+$process->{delay}; $process->{delay} *= 2; # Limit the start delay to 15 minutes max - if ( $process->{delay} > ZM_MAX_RESTART_DELAY ) + if ( $process->{delay} > $Config{ZM_MAX_RESTART_DELAY} ) { - $process->{delay} = ZM_MAX_RESTART_DELAY; + $process->{delay} = $Config{ZM_MAX_RESTART_DELAY}; } } } diff --git a/scripts/zmfilter.pl.in b/scripts/zmfilter.pl.in index 19e7a8977..e0c425740 100644 --- a/scripts/zmfilter.pl.in +++ b/scripts/zmfilter.pl.in @@ -56,11 +56,11 @@ use constant EVENT_PATH => (ZM_DIR_EVENTS=~m|/|)?ZM_DIR_EVENTS:(ZM_PATH_WEB.'/'. logInit(); logSetSignal(); -if ( ZM_OPT_UPLOAD ) +if ( $Config{ZM_OPT_UPLOAD} ) { # Comment these out if you don't have them and don't want to upload # or don't want to use that format - if ( ZM_UPLOAD_ARCH_FORMAT eq "zip" ) + if ( $Config{ZM_UPLOAD_ARCH_FORMAT} eq "zip" ) { require Archive::Zip; import Archive::Zip qw( :ERROR_CODES :CONSTANTS ); @@ -69,7 +69,7 @@ if ( ZM_OPT_UPLOAD ) { require Archive::Tar; } - if ( ZM_UPLOAD_PROTOCOL eq "ftp" ) + if ( $Config{ZM_UPLOAD_PROTOCOL} eq "ftp" ) { require Net::FTP; } @@ -79,9 +79,9 @@ if ( ZM_OPT_UPLOAD ) } } -if ( ZM_OPT_EMAIL ) +if ( $Config{ZM_OPT_EMAIL} ) { - if ( ZM_NEW_MAIL_MODULES ) + if ( $Config{ZM_NEW_MAIL_MODULES} ) { require MIME::Lite; require Net::SMTP; @@ -92,9 +92,9 @@ if ( ZM_OPT_EMAIL ) } } -if ( ZM_OPT_MESSAGE ) +if ( $Config{ZM_OPT_MESSAGE} ) { - if ( ZM_NEW_MAIL_MODULES ) + if ( $Config{ZM_NEW_MAIL_MODULES} ) { require MIME::Lite; require Net::SMTP; @@ -112,7 +112,7 @@ $ENV{PATH} = '/bin:/usr/bin'; $ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL}; delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; -my $delay = ZM_FILTER_EXECUTE_INTERVAL; +my $delay = $Config{ZM_FILTER_EXECUTE_INTERVAL}; my $event_id = 0; my $filter_parm = ""; @@ -163,7 +163,7 @@ if ( !GetOptions( 'filter=s'=>\$filter_parm ) ) Usage(); } -chdir( EVENT_PATH ); +chdir( $Config{EVENT_PATH} ); my $dbh = zmDbConnect(); @@ -178,7 +178,7 @@ else if ( !$filter_parm ) { - sleep( START_DELAY ); + sleep( $Config{START_DELAY} ); } my $filters; @@ -186,7 +186,7 @@ my $last_action = 0; while( 1 ) { - if ( (time() - $last_action) > ZM_FILTER_RELOAD_DELAY ) + if ( (time() - $last_action) > $Config{ZM_FILTER_RELOAD_DELAY} ) { Debug( "Reloading filters\n" ); $last_action = time(); @@ -573,28 +573,28 @@ sub checkFilter my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); } - if ( ZM_OPT_FFMPEG && $filter->{AutoVideo} ) + if ( $Config{ZM_OPT_FFMPEG} && $filter->{AutoVideo} ) { if ( !$event->{Videoed} ) { $delete_ok = undef if ( !generateVideo( $filter, $event ) ); } } - if ( ZM_OPT_EMAIL && $filter->{AutoEmail} ) + if ( $Config{ZM_OPT_EMAIL} && $filter->{AutoEmail} ) { if ( !$event->{Emailed} ) { $delete_ok = undef if ( !sendEmail( $filter, $event ) ); } } - if ( ZM_OPT_MESSAGE && $filter->{AutoMessage} ) + if ( $Config{ZM_OPT_MESSAGE} && $filter->{AutoMessage} ) { if ( !$event->{Messaged} ) { $delete_ok = undef if ( !sendMessage( $filter, $event ) ); } } - if ( ZM_OPT_UPLOAD && $filter->{AutoUpload} ) + if ( $Config{ZM_OPT_UPLOAD} && $filter->{AutoUpload} ) { if ( !$event->{Uploaded} ) { @@ -618,7 +618,7 @@ sub checkFilter my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); - if ( !ZM_OPT_FAST_DELETE ) + if ( ! $Config{ZM_OPT_FAST_DELETE} ) { my $sql = "delete from Frames where EventId = ?"; my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); @@ -650,7 +650,7 @@ sub generateVideo my $scale = $event->{DefaultScale}/100; my $format; - my @ffmpeg_formats = split( /\s+/, ZM_FFMPEG_FORMATS ); + my @ffmpeg_formats = split( /\s+/, $Config{ZM_FFMPEG_FORMATS} ); my $default_video_format; my $default_phone_format; foreach my $ffmpeg_format( @ffmpeg_formats ) @@ -678,7 +678,7 @@ sub generateVideo $format = $ffmpeg_formats[0]; } - my $command = ZM_PATH_BIN."/zmvideo.pl -e ".$event->{Id}." -r ".$rate." -s ".$scale." -f ".$format; + my $command = $Config{ZM_PATH_BIN}."/zmvideo.pl -e ".$event->{Id}." -r ".$rate." -s ".$scale." -f ".$format; my $output = qx($command); chomp( $output ); my $status = $? >> 8; @@ -713,22 +713,22 @@ sub uploadArchFile my $filter = shift; my $event = shift; - if ( !ZM_UPLOAD_HOST ) + if ( ! $Config{ZM_UPLOAD_HOST} ) { Error( "Cannot upload archive as no upload host defined" ); return( 0 ); } my $archFile = $event->{MonitorName}.'-'.$event->{Id}; - my $archImagePath = getEventPath( $event )."/".((ZM_UPLOAD_ARCH_ANALYSE)?'{*analyse,*capture}':'*capture').".jpg"; + my $archImagePath = getEventPath( $event )."/".(( $Config{ZM_UPLOAD_ARCH_ANALYSE} )?'{*analyse,*capture}':'*capture').".jpg"; my @archImageFiles = glob($archImagePath); my $archLocPath; my $archError = 0; - if ( ZM_UPLOAD_ARCH_FORMAT eq "zip" ) + if ( $Config{ZM_UPLOAD_ARCH_FORMAT} eq "zip" ) { $archFile .= '.zip'; - $archLocPath = ZM_UPLOAD_LOC_DIR.'/'.$archFile; + $archLocPath = $Config{ZM_UPLOAD_LOC_DIR}.'/'.$archFile; my $zip = Archive::Zip->new(); Info( "Creating upload file '$archLocPath', ".int(@archImageFiles)." files\n" ); @@ -743,7 +743,7 @@ sub uploadArchFile $archError = 1; last; } - $member->desiredCompressionMethod( (ZM_UPLOAD_ARCH_COMPRESS)?&COMPRESSION_DEFLATED:&COMPRESSION_STORED ); + $member->desiredCompressionMethod( $Config{ZM_UPLOAD_ARCH_COMPRESS} ? &COMPRESSION_DEFLATED : &COMPRESSION_STORED ); } if ( !$archError ) { @@ -759,9 +759,9 @@ sub uploadArchFile Error( "Error adding images to zip archive $archLocPath, not writing" ); } } - elsif ( ZM_UPLOAD_ARCH_FORMAT eq "tar" ) + elsif ( $Config{ZM_UPLOAD_ARCH_FORMAT} eq "tar" ) { - if ( ZM_UPLOAD_ARCH_COMPRESS ) + if ( $Config{ZM_UPLOAD_ARCH_COMPRESS} ) { $archFile .= '.tar.gz'; } @@ -769,10 +769,10 @@ sub uploadArchFile { $archFile .= '.tar'; } - $archLocPath = ZM_UPLOAD_LOC_DIR.'/'.$archFile; + $archLocPath = $Config{ZM_UPLOAD_LOC_DIR}.'/'.$archFile; Info( "Creating upload file '$archLocPath', ".int(@archImageFiles)." files\n" ); - if ( $archError = !Archive::Tar->create_archive( $archLocPath, ZM_UPLOAD_ARCH_COMPRESS, @archImageFiles ) ) + if ( $archError = !Archive::Tar->create_archive( $archLocPath, $Config{ZM_UPLOAD_ARCH_COMPRESS}, @archImageFiles ) ) { Error( "Tar error: ".Archive::Tar->error()."\n " ); } @@ -784,39 +784,39 @@ sub uploadArchFile } else { - if ( ZM_UPLOAD_PROTOCOL eq "ftp" ) + if ( $Config{ZM_UPLOAD_PROTOCOL} eq "ftp" ) { - Info( "Uploading to ".ZM_UPLOAD_HOST." using FTP\n" ); - my $ftp = Net::FTP->new( ZM_UPLOAD_HOST, Timeout=>ZM_UPLOAD_TIMEOUT, Passive=>ZM_UPLOAD_FTP_PASSIVE, Debug=>ZM_UPLOAD_DEBUG ); + Info( "Uploading to ".$Config{ZM_UPLOAD_HOST}." using FTP\n" ); + my $ftp = Net::FTP->new( $Config{ZM_UPLOAD_HOST}, Timeout=>$Config{ZM_UPLOAD_TIMEOUT}, Passive=>$Config{ZM_UPLOAD_FTP_PASSIVE}, Debug=>$Config{ZM_UPLOAD_DEBUG} ); if ( !$ftp ) { Error( "Can't create FTP connection: $@" ); return( 0 ); } - $ftp->login( ZM_UPLOAD_USER, ZM_UPLOAD_PASS ) or Error( "FTP - Can't login" ); + $ftp->login( $Config{ZM_UPLOAD_USER}, $Config{ZM_UPLOAD_PASS} ) or Error( "FTP - Can't login" ); $ftp->binary() or Error( "FTP - Can't go binary" ); - $ftp->cwd( ZM_UPLOAD_REM_DIR ) or Error( "FTP - Can't cwd" ) if ( ZM_UPLOAD_REM_DIR ); + $ftp->cwd( $Config{ZM_UPLOAD_REM_DIR} ) or Error( "FTP - Can't cwd" ) if ( $Config{ZM_UPLOAD_REM_DIR} ); $ftp->put( $archLocPath ) or Error( "FTP - Can't upload '$archLocPath'" ); $ftp->quit() or Error( "FTP - Can't quit" ); } else { - my $host = ZM_UPLOAD_HOST; - $host .= ":".ZM_UPLOAD_PORT if ( ZM_UPLOAD_PORT ); + my $host = $Config{ZM_UPLOAD_HOST}; + $host .= ":".$Config{ZM_UPLOAD_PORT} if $Config{ZM_UPLOAD_PORT}; Info( "Uploading to ".$host." using SFTP\n" ); - my %sftpOptions = ( host=>ZM_UPLOAD_HOST, user=>ZM_UPLOAD_USER ); - $sftpOptions{password} = ZM_UPLOAD_PASS if ( ZM_UPLOAD_PASS ); - $sftpOptions{port} = ZM_UPLOAD_PORT if ( ZM_UPLOAD_PORT ); - $sftpOptions{timeout} = ZM_UPLOAD_TIMEOUT if ( ZM_UPLOAD_TIMEOUT ); + my %sftpOptions = ( host=>$Config{ZM_UPLOAD_HOST}, user=>$Config{ZM_UPLOAD_USER} ); + $sftpOptions{password} = $Config{ZM_UPLOAD_PASS} if $Config{ZM_UPLOAD_PASS}; + $sftpOptions{port} = $Config{ZM_UPLOAD_PORT} if $Config{ZM_UPLOAD_PORT}; + $sftpOptions{timeout} = $Config{ZM_UPLOAD_TIMEOUT} if $Config{ZM_UPLOAD_TIMEOUT}; $sftpOptions{more} = [ '-o'=>'StrictHostKeyChecking=no' ]; - $Net::SFTP::Foreign::debug = -1 if ( ZM_UPLOAD_DEBUG ); - my $sftp = Net::SFTP::Foreign->new( ZM_UPLOAD_HOST, %sftpOptions ); + $Net::SFTP::Foreign::debug = -1 if $Config{ZM_UPLOAD_DEBUG}; + my $sftp = Net::SFTP::Foreign->new( $Config{ZM_UPLOAD_HOST}, %sftpOptions ); if ( $sftp->error ) { Error( "Can't create SFTP connection: ".$sftp->error ); return( 0 ); } - $sftp->setcwd( ZM_UPLOAD_REM_DIR ) or Error( "SFTP - Can't setcwd: ".$sftp->error ) if ( ZM_UPLOAD_REM_DIR ); + $sftp->setcwd( $Config{ZM_UPLOAD_REM_DIR} ) or Error( "SFTP - Can't setcwd: ".$sftp->error ) if $Config{ZM_UPLOAD_REM_DIR}; $sftp->put( $archLocPath, $archFile ) or Error( "SFTP - Can't upload '$archLocPath': ".$sftp->error ); } unlink( $archLocPath ); @@ -908,18 +908,18 @@ sub substituteTags $text =~ s/%EPIM%/$url?view=frame&mid=$event->{MonitorId}&eid=$event->{Id}&fid=$max_alarm_frame->{FrameId}/g; if ( $attachments_ref && $text =~ s/%EI1%//g ) { - push( @$attachments_ref, { type=>"image/jpeg", path=>sprintf( "%s/%0".ZM_EVENT_IMAGE_DIGITS."d-capture.jpg", getEventPath( $event ), $first_alarm_frame->{FrameId} ) } ); + push( @$attachments_ref, { type=>"image/jpeg", path=>sprintf( "%s/%0".$Config{ZM_EVENT_IMAGE_DIGITS}."d-capture.jpg", getEventPath( $event ), $first_alarm_frame->{FrameId} ) } ); } if ( $attachments_ref && $text =~ s/%EIM%//g ) { # Don't attach the same image twice if ( !@$attachments_ref || ($first_alarm_frame->{FrameId} != $max_alarm_frame->{FrameId} ) ) { - push( @$attachments_ref, { type=>"image/jpeg", path=>sprintf( "%s/%0".ZM_EVENT_IMAGE_DIGITS."d-capture.jpg", getEventPath( $event ), $max_alarm_frame->{FrameId} ) } ); + push( @$attachments_ref, { type=>"image/jpeg", path=>sprintf( "%s/%0".$Config{ZM_EVENT_IMAGE_DIGITS}."d-capture.jpg", getEventPath( $event ), $max_alarm_frame->{FrameId} ) } ); } } } - if ( $attachments_ref && ZM_OPT_FFMPEG ) + if ( $attachments_ref && $Config{ZM_OPT_FFMPEG} ) { if ( $text =~ s/%EV%//g ) { @@ -952,12 +952,12 @@ sub sendEmail my $filter = shift; my $event = shift; - if ( !ZM_FROM_EMAIL ) + if ( ! $Config{ZM_FROM_EMAIL} ) { Error( "No 'from' email address defined, not sending email" ); return( 0 ); } - if ( !ZM_EMAIL_ADDRESS ) + if ( ! $Config{ZM_EMAIL_ADDRESS} ) { Error( "No email address defined, not sending email" ); return( 0 ); @@ -965,22 +965,22 @@ sub sendEmail Info( "Creating notification email\n" ); - my $subject = substituteTags( ZM_EMAIL_SUBJECT, $filter, $event ); + my $subject = substituteTags( $Config{ZM_EMAIL_SUBJECT}, $filter, $event ); return( 0 ) if ( !$subject ); my @attachments; - my $body = substituteTags( ZM_EMAIL_BODY, $filter, $event, \@attachments ); + my $body = substituteTags( $Config{ZM_EMAIL_BODY}, $filter, $event, \@attachments ); return( 0 ) if ( !$body ); Info( "Sending notification email '$subject'\n" ); eval { - if ( ZM_NEW_MAIL_MODULES ) + if ( $Config{ZM_NEW_MAIL_MODULES} ) { ### Create the multipart container my $mail = MIME::Lite->new ( - From => ZM_FROM_EMAIL, - To => ZM_EMAIL_ADDRESS, + From => $Config{ZM_FROM_EMAIL}, + To => $Config{ZM_EMAIL_ADDRESS}, Subject => $subject, Type => "multipart/mixed" ); @@ -1000,14 +1000,14 @@ sub sendEmail ); } ### Send the Message - MIME::Lite->send( "smtp", ZM_EMAIL_HOST, Timeout=>60 ); + MIME::Lite->send( "smtp", $Config{ZM_EMAIL_HOST}, Timeout=>60 ); $mail->send(); } else { my $mail = MIME::Entity->build( - From => ZM_FROM_EMAIL, - To => ZM_EMAIL_ADDRESS, + From => $Config{ZM_FROM_EMAIL}, + To => $Config{ZM_EMAIL_ADDRESS}, Subject => $subject, Type => (($body=~//)?'text/html':'text/plain'), Data => $body @@ -1022,7 +1022,7 @@ sub sendEmail Encoding => "base64" ); } - $mail->smtpsend( Host => ZM_EMAIL_HOST, MailFrom => ZM_FROM_EMAIL ); + $mail->smtpsend( Host => $Config{ZM_EMAIL_HOST}, MailFrom => $Config{ZM_FROM_EMAIL} ); } }; if ( $@ ) @@ -1046,12 +1046,12 @@ sub sendMessage my $filter = shift; my $event = shift; - if ( !ZM_FROM_EMAIL ) + if ( ! $Config{ZM_FROM_EMAIL} ) { Error( "No 'from' email address defined, not sending message" ); return( 0 ); } - if ( !ZM_MESSAGE_ADDRESS ) + if ( ! $Config{ZM_MESSAGE_ADDRESS} ) { Error( "No message address defined, not sending message" ); return( 0 ); @@ -1059,22 +1059,22 @@ sub sendMessage Info( "Creating notification message\n" ); - my $subject = substituteTags( ZM_MESSAGE_SUBJECT, $filter, $event ); + my $subject = substituteTags( $Config{ZM_MESSAGE_SUBJECT}, $filter, $event ); return( 0 ) if ( !$subject ); my @attachments; - my $body = substituteTags( ZM_MESSAGE_BODY, $filter, $event, \@attachments ); + my $body = substituteTags( $Config{ZM_MESSAGE_BODY}, $filter, $event, \@attachments ); return( 0 ) if ( !$body ); Info( "Sending notification message '$subject'\n" ); eval { - if ( ZM_NEW_MAIL_MODULES ) + if ( $Config{ZM_NEW_MAIL_MODULES} ) { ### Create the multipart container my $mail = MIME::Lite->new ( - From => ZM_FROM_EMAIL, - To => ZM_MESSAGE_ADDRESS, + From => $Config{ZM_FROM_EMAIL}, + To => $Config{ZM_MESSAGE_ADDRESS}, Subject => $subject, Type => "multipart/mixed" ); @@ -1094,14 +1094,14 @@ sub sendMessage ); } ### Send the Message - MIME::Lite->send( "smtp", ZM_EMAIL_HOST, Timeout=>60 ); + MIME::Lite->send( "smtp", $Config{ZM_EMAIL_HOST}, Timeout=>60 ); $mail->send(); } else { my $mail = MIME::Entity->build( - From => ZM_FROM_EMAIL, - To => ZM_MESSAGE_ADDRESS, + From => $Config{ZM_FROM_EMAIL}, + To => $Config{ZM_MESSAGE_ADDRESS}, Subject => $subject, Type => (($body=~//)?'text/html':'text/plain'), Data => $body @@ -1116,7 +1116,7 @@ sub sendMessage Encoding => "base64" ); } - $mail->smtpsend( Host => ZM_EMAIL_HOST, MailFrom => ZM_FROM_EMAIL ); + $mail->smtpsend( Host => $Config{ZM_EMAIL_HOST}, MailFrom => $Config{ZM_FROM_EMAIL} ); } }; if ( $@ ) diff --git a/scripts/zmpkg.pl.in b/scripts/zmpkg.pl.in index 25488636f..bfb87798c 100644 --- a/scripts/zmpkg.pl.in +++ b/scripts/zmpkg.pl.in @@ -84,7 +84,7 @@ if ( !$command || $command !~ /^(?:start|stop|restart|status|logrot)$/ ) } # Move to the right place -chdir( ZM_PATH_WEB ) or Fatal( "Can't chdir to '".ZM_PATH_WEB."': $!" ); +chdir( $Config{ZM_PATH_WEB} ) or Fatal( "Can't chdir to '".$Config{ZM_PATH_WEB}."': $!" ); my $dbg_id = ""; @@ -146,9 +146,9 @@ if ( $command =~ /^(?:start|restart)$/ ) if ( $status eq "stopped" ) { - if ( ZM_DYN_DB_VERSION && ZM_DYN_DB_VERSION ne ZM_VERSION ) + if ( $Config{ZM_DYN_DB_VERSION} and ( $Config{ZM_DYN_DB_VERSION} ne $Config{ZM_VERSION} ) ) { - Fatal( "Version mismatch, system is version ".ZM_VERSION.", database is ".ZM_DYN_DB_VERSION.", please run zmupdate.pl to update." ); + Fatal( "Version mismatch, system is version ".ZM_VERSION.", database is ".$Config{ZM_DYN_DB_VERSION}.", please run zmupdate.pl to update." ); exit( -1 ); } @@ -158,11 +158,11 @@ if ( $command =~ /^(?:start|restart)$/ ) Debug( "Recreating temporary directory '@ZM_TMPDIR@'" ); mkdir( "@ZM_TMPDIR@", 0700 ) or Fatal( "Can't create missing temporary directory '@ZM_TMPDIR@': $!" ); my ( $runName ) = getpwuid( $> ); - if ( $runName ne ZM_WEB_USER ) + if ( $runName ne $Config{ZM_WEB_USER} ) { # Not running as web user, so should be root in whch case chown the temporary directory - my ( $webName, $webPass, $webUid, $webGid ) = getpwnam( ZM_WEB_USER ) or Fatal( "Can't get user details for web user '".ZM_WEB_USER."': $!" ); - chown( $webUid, $webGid, "@ZM_TMPDIR@" ) or Fatal( "Can't change ownership of temporary directory '@ZM_TMPDIR@' to '".ZM_WEB_USER.":".ZM_WEB_GROUP."': $!" ); + my ( $webName, $webPass, $webUid, $webGid ) = getpwnam( $Config{ZM_WEB_USER} ) or Fatal( "Can't get user details for web user '".$Config{ZM_WEB_USER}."': $!" ); + chown( $webUid, $webGid, "@ZM_TMPDIR@" ) or Fatal( "Can't change ownership of temporary directory '@ZM_TMPDIR@' to '".$Config{ZM_WEB_USER}.":".$Config{ZM_WEB_GROUP}."': $!" ); } } zmMemTidy(); @@ -186,13 +186,13 @@ if ( $command =~ /^(?:start|restart)$/ ) } if ( $monitor->{Function} ne 'Monitor' ) { - if ( ZM_OPT_FRAME_SERVER ) + if ( $Config{ZM_OPT_FRAME_SERVER} ) { runCommand( "zmdc.pl start zmf -m $monitor->{Id}" ); } runCommand( "zmdc.pl start zma -m $monitor->{Id}" ); } - if ( ZM_OPT_CONTROL ) + if ( $Config{ZM_OPT_CONTROL} ) { if ( $monitor->{Function} eq 'Modect' || $monitor->{Function} eq 'Mocord' ) { @@ -208,20 +208,20 @@ if ( $command =~ /^(?:start|restart)$/ ) # This is now started unconditionally runCommand( "zmdc.pl start zmfilter.pl" ); - if ( ZM_RUN_AUDIT ) + if ( $Config{ZM_RUN_AUDIT} ) { runCommand( "zmdc.pl start zmaudit.pl -c" ); } - if ( ZM_OPT_TRIGGERS ) + if ( $Config{ZM_OPT_TRIGGERS} ) { runCommand( "zmdc.pl start zmtrigger.pl" ); } - if ( ZM_OPT_X10 ) + if ( $Config{ZM_OPT_X10} ) { runCommand( "zmdc.pl start zmx10.pl -c start" ); } runCommand( "zmdc.pl start zmwatch.pl" ); - if ( ZM_CHECK_FOR_UPDATES ) + if ( $Config{ZM_CHECK_FOR_UPDATES} ) { runCommand( "zmdc.pl start zmupdate.pl -c" ); } @@ -245,3 +245,5 @@ if ( $command eq "logrot" ) } exit( $retval ); + +__END__ diff --git a/scripts/zmupdate.pl.in b/scripts/zmupdate.pl.in index f9565abef..cc2e93467 100644 --- a/scripts/zmupdate.pl.in +++ b/scripts/zmupdate.pl.in @@ -54,7 +54,7 @@ use DBI; use Getopt::Long; use Data::Dumper; -use constant EVENT_PATH => (ZM_DIR_EVENTS=~m|/|)?ZM_DIR_EVENTS:(ZM_PATH_WEB.'/'.ZM_DIR_EVENTS); +use constant EVENT_PATH => ($Config{ZM_DIR_EVENTS}=~m|/|)?$Config{ZM_DIR_EVENTS}:($Config{ZM_PATH_WEB}.'/'.$Config{ZM_DIR_EVENTS}); $| = 1; @@ -62,7 +62,7 @@ $ENV{PATH} = '/bin:/usr/bin:/usr/local/bin'; $ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL}; delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; -my $web_uid = (getpwnam( ZM_WEB_USER ))[2]; +my $web_uid = (getpwnam( $Config{ZM_WEB_USER} ))[2]; my $use_log = (($> == 0) || ($> == $web_uid)); logInit( toFile=>$use_log?DEBUG:NOLOG ); @@ -75,8 +75,8 @@ my $rename = 0; my $zoneFix = 0; my $migrateEvents = 0; my $version = ''; -my $dbUser = ZM_DB_USER; -my $dbPass = ZM_DB_PASS; +my $dbUser = $Config{ZM_DB_USER}; +my $dbPass = $Config{ZM_DB_PASS}; my $updateDir = ''; sub Usage { @@ -99,14 +99,14 @@ if ( !GetOptions( 'check'=>\$check, 'freshen'=>\$freshen, 'rename'=>\$rename, 'z } my $dbh = zmDbConnect(); -*ZoneMinder::Database::ZM_DB_USER = sub { $dbUser } if ZoneMinder::Database::ZM_DB_USER ne $dbUser; -*ZoneMinder::Database::ZM_DB_PASS = sub { $dbPass } if ZoneMinder::Database::ZM_DB_PASS ne $dbPass; +$Config{ZM_DB_USER} = $dbUser; +$Config{ZM_DB_PASS} = $dbPass; if ( ! ($check || $freshen || $rename || $zoneFix || $migrateEvents || $version) ) { - if ( ZM_DYN_DB_VERSION ) + if ( $Config{ZM_DYN_DB_VERSION} ) { - $version = ZM_DYN_DB_VERSION; + $version = $Config{ZM_DYN_DB_VERSION}; } else { @@ -121,17 +121,17 @@ if ( ($check + $freshen + $rename + $zoneFix + $migrateEvents + ($version?1:0)) Usage(); } -if ( $check && ZM_CHECK_FOR_UPDATES ) +if ( $check && $Config{ZM_CHECK_FOR_UPDATES} ) { print( "Update agent starting at ".strftime( '%y/%m/%d %H:%M:%S', localtime() )."\n" ); - my $currVersion = ZM_DYN_CURR_VERSION; - my $lastVersion = ZM_DYN_LAST_VERSION; - my $lastCheck = ZM_DYN_LAST_CHECK; + my $currVersion = $Config{ZM_DYN_CURR_VERSION}; + my $lastVersion = $Config{ZM_DYN_LAST_VERSION}; + my $lastCheck = $Config{ZM_DYN_LAST_CHECK}; if ( !$currVersion ) { - $currVersion = ZM_VERSION; + $currVersion = $Config{ZM_VERSION}; my $sql = "update Config set Value = ? where Name = 'ZM_DYN_CURR_VERSION'"; my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); @@ -148,14 +148,8 @@ if ( $check && ZM_CHECK_FOR_UPDATES ) use LWP::UserAgent; my $ua = LWP::UserAgent->new; $ua->agent( "ZoneMinder Update Agent/".ZM_VERSION ); - if ( eval('defined(ZM_UPDATE_CHECK_PROXY)') ) - { - no strict 'subs'; - if ( ZM_UPDATE_CHECK_PROXY ) - { - $ua->proxy( "http", ZM_UPDATE_CHECK_PROXY ); - } - use strict 'subs'; + if ( $Config{ZM_UPDATE_CHECK_PROXY} ) { + $ua->proxy( "http", $Config{ZM_UPDATE_CHECK_PROXY} ); } my $req = HTTP::Request->new( GET=>'http://zoneminder.github.io/ZoneMinder/version.txt' ); my $res = $ua->request($req); @@ -247,12 +241,12 @@ if ( $zoneFix ) } if ( $migrateEvents ) { - my $webUid = (getpwnam( ZM_WEB_USER ))[2]; - my $webGid = (getgrnam( ZM_WEB_USER ))[2]; + my $webUid = (getpwnam( $Config{ZM_WEB_USER} ))[2]; + my $webGid = (getgrnam( $Config{ZM_WEB_USER} ))[2]; if ( !(($> == 0) || ($> == $webUid)) ) { - print( "Error, migrating events can only be done as user root or ".ZM_WEB_USER.".\n" ); + print( "Error, migrating events can only be done as user root or ".$Config{ZM_WEB_USER}.".\n" ); exit( -1 ); } @@ -276,7 +270,7 @@ if ( $migrateEvents ) { print( "Converting all events to deep storage.\n" ); - chdir( ZM_PATH_WEB ); + chdir( $Config{ZM_PATH_WEB} ); my $sql = "select *, unix_timestamp(StartTime) as UnixStartTime from Events"; my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); my $res = $sth->execute(); @@ -287,7 +281,7 @@ if ( $migrateEvents ) while( my $event = $sth->fetchrow_hashref() ) { - my $oldEventPath = ZM_DIR_EVENTS.'/'.$event->{MonitorId}.'/'.$event->{Id}; + my $oldEventPath = $Config{ZM_DIR_EVENTS}.'/'.$event->{MonitorId}.'/'.$event->{Id}; if ( !-d $oldEventPath ) { @@ -296,11 +290,11 @@ if ( $migrateEvents ) } print( "Converting event ".$event->{Id}."\n" ); - my $newDatePath = ZM_DIR_EVENTS.'/'.$event->{MonitorId}.'/'.strftime( "%y/%m/%d", localtime($event->{UnixStartTime}) ); + my $newDatePath = $Config{ZM_DIR_EVENTS}.'/'.$event->{MonitorId}.'/'.strftime( "%y/%m/%d", localtime($event->{UnixStartTime}) ); my $newTimePath = strftime( "%H/%M/%S", localtime($event->{UnixStartTime}) ); my $newEventPath = $newDatePath.'/'.$newTimePath; ( my $truncEventPath = $newEventPath ) =~ s|/\d+$||; - makePath( $truncEventPath, ZM_PATH_WEB ); + makePath( $truncEventPath, $Config{ZM_PATH_WEB} ); my $idLink = $newDatePath.'/.'.$event->{Id}; symlink( $newTimePath, $idLink ) or die( "Can't symlink $newTimePath -> $idLink: $!" ); rename( $oldEventPath, $newEventPath ) or die( "Can't move $oldEventPath -> $newEventPath: $!" ); @@ -366,9 +360,9 @@ if ( $version ) print( "\nInitiating database upgrade to version ".ZM_VERSION." from version $version\n" ); if ( $interactive ) { - if ( ZM_DYN_DB_VERSION && ZM_DYN_DB_VERSION ne $version ) + if ( $Config{ZM_DYN_DB_VERSION} && $Config{ZM_DYN_DB_VERSION} ne $version ) { - print( "\nWARNING - You have specified an upgrade from version $version but the database version found is ".ZM_DYN_DB_VERSION.". Is this correct?\nPress enter to continue or ctrl-C to abort : " ); + print( "\nWARNING - You have specified an upgrade from version $version but the database version found is ".$Config{ZM_DYN_DB_VERSION}.". Is this correct?\nPress enter to continue or ctrl-C to abort : " ); my $response = ; } @@ -387,7 +381,7 @@ if ( $version ) if ( $response =~ /^[yY]$/ ) { - my ( $host, $port ) = ( ZM_DB_HOST =~ /^([^:]+)(?::(.+))?$/ ); + my ( $host, $port ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ ); my $command = "mysqldump -h".$host; $command .= " -P".$port if defined($port); if ( $dbUser ) @@ -398,8 +392,8 @@ if ( $version ) $command .= " -p".$dbPass; } } - my $backup = "@ZM_TMPDIR@/".ZM_DB_NAME."-".$version.".dump"; - $command .= " --add-drop-table --databases ".ZM_DB_NAME." > ".$backup; + my $backup = "@ZM_TMPDIR@/".$Config{ZM_DB_NAME}."-".$version.".dump"; + $command .= " --add-drop-table --databases ".$Config{ZM_DB_NAME}." > ".$backup; print( "Creating backup to $backup. This may take several minutes.\n" ); print( "Executing '$command'\n" ) if ( logDebugging() ); my $output = qx($command); @@ -428,7 +422,7 @@ if ( $version ) my $dbh = shift; my $version = shift; - my ( $host, $port ) = ( ZM_DB_HOST =~ /^([^:]+)(?::(.+))?$/ ); + my ( $host, $port ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ ); my $command = "mysql -h".$host; $command .= " -P".$port if defined($port); if ( $dbUser ) @@ -439,14 +433,14 @@ if ( $version ) $command .= " -p".$dbPass; } } - $command .= " ".ZM_DB_NAME." < "; + $command .= " ".$Config{ZM_DB_NAME}." < "; if ( $updateDir ) { $command .= $updateDir; } else { - $command .= ZM_PATH_DATA."/db"; + $command .= $Config{ZM_PATH_DATA}."/db"; } $command .= "/zm_update-".$version.".sql"; @@ -727,7 +721,7 @@ if ( $version ) my ( $sql, $sth, $res ); if ( defined(&ZM_EMAIL_TEXT) && &ZM_EMAIL_TEXT ) { - my ( $email_subject, $email_body ) = ZM_EMAIL_TEXT =~ /subject\s*=\s*"([^\n]*)".*body\s*=\s*"(.*)"?$/ms; + my ( $email_subject, $email_body ) = $Config{ZM_EMAIL_TEXT} =~ /subject\s*=\s*"([^\n]*)".*body\s*=\s*"(.*)"?$/ms; $sql = "replace into Config set Id = 0, Name = 'ZM_EMAIL_SUBJECT', Value = '".$email_subject."', Type = 'string', DefaultValue = 'ZoneMinder: Alarm - %MN%-%EI% (%ESM% - %ESA% %EFA%)', Hint = 'string', Pattern = '(?-xism:^(.+)\$)', Format = ' \$1 ', Prompt = 'The subject of the email used to send matching event details', Help = 'This option is used to define the subject of the email that is sent for any events that match the appropriate filters.', Category = 'mail', Readonly = '0', Requires = 'ZM_OPT_EMAIL=1'"; $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() ); @@ -737,7 +731,7 @@ if ( $version ) } if ( defined(&ZM_MESSAGE_TEXT) && &ZM_MESSAGE_TEXT ) { - my ( $message_subject, $message_body ) = ZM_MESSAGE_TEXT =~ /subject\s*=\s*"([^\n]*)".*body\s*=\s*"(.*)"?$/ms; + my ( $message_subject, $message_body ) = $Config{ZM_MESSAGE_TEXT} =~ /subject\s*=\s*"([^\n]*)".*body\s*=\s*"(.*)"?$/ms; $sql = "replace into Config set Id = 0, Name = 'ZM_MESSAGE_SUBJECT', Value = '".$message_subject."', Type = 'string', DefaultValue = 'ZoneMinder: Alarm - %MN%-%EI%', Hint = 'string', Pattern = '(?-xism:^(.+)\$)', Format = ' \$1 ', Prompt = 'The subject of the message used to send matching event details', Help = 'This option is used to define the subject of the message that is sent for any events that match the appropriate filters.', Category = 'mail', Readonly = '0', Requires = 'ZM_OPT_MESSAGE=1'"; $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() ); @@ -871,7 +865,7 @@ if ( $version ) my $sql = "update Config set Value = ? where Name = 'ZM_JPEG_STREAM_QUALITY'"; my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( ZM_JPEG_IMAGE_QUALITY ) or die( "Can't execute: ".$sth->errstr() ); + my $res = $sth->execute( $Config{ZM_JPEG_IMAGE_QUALITY} ) or die( "Can't execute: ".$sth->errstr() ); } $cascade = !undef; } @@ -1007,7 +1001,7 @@ if ( $version ) if ( $version ge '1.26.0' ) { my @files; - $updateDir = ZM_PATH_DATA."/db" if ! $updateDir; + $updateDir = $Config{ZM_PATH_DATA}."/db" if ! $updateDir; opendir( my $dh, $updateDir ) || die "Can't open updateDir $!"; @files = sort grep { (!/^\./) && /^zm_update\-[\d\.]+\.sql$/ && -f "$updateDir/$_" } readdir($dh); closedir $dh; diff --git a/scripts/zmvideo.pl.in b/scripts/zmvideo.pl.in index 236e5d20c..46cf83998 100644 --- a/scripts/zmvideo.pl.in +++ b/scripts/zmvideo.pl.in @@ -56,7 +56,7 @@ my $fps = ''; my $size = ''; my $overwrite = 0; -my @formats = split( /\s+/, ZM_FFMPEG_FORMATS ); +my @formats = split( /\s+/, $Config{ZM_FFMPEG_FORMATS} ); for ( my $i = 0; $i < @formats; $i++ ) { if ( $i =~ /^(.+)\*$/ ) @@ -92,7 +92,7 @@ if ( !$event_id || $event_id < 0 ) Usage(); } -if ( !ZM_OPT_FFMPEG ) +if ( ! $Config{ZM_OPT_FFMPEG} ) { print( STDERR "Mpeg encoding is not currently enabled\n" ); exit(-1); @@ -221,7 +221,7 @@ if ( $overwrite || !-s $video_file ) $video_size = $size; } - my $command = ZM_PATH_FFMPEG." -y -r $frame_rate ".ZM_FFMPEG_INPUT_OPTIONS." -i %0".ZM_EVENT_IMAGE_DIGITS."d-capture.jpg -s $video_size ".ZM_FFMPEG_OUTPUT_OPTIONS." '$video_file' > ffmpeg.log 2>&1"; + my $command = $Config{ZM_PATH_FFMPEG}." -y -r $frame_rate ".$Config{ZM_FFMPEG_INPUT_OPTIONS}." -i %0".$Config{ZM_EVENT_IMAGE_DIGITS}."d-capture.jpg -s $video_size ".$Config{ZM_FFMPEG_OUTPUT_OPTIONS}." '$video_file' > ffmpeg.log 2>&1"; Debug( $command."\n" ); my $output = qx($command); diff --git a/scripts/zmwatch.pl.in b/scripts/zmwatch.pl.in index 4d50f0496..bfa8b54bd 100644 --- a/scripts/zmwatch.pl.in +++ b/scripts/zmwatch.pl.in @@ -90,7 +90,7 @@ while( 1 ) next if ( !defined($image_time) ); # Can't read from shared data next if ( !$image_time ); # We can't get the last capture time so can't be sure it's died. - my $max_image_delay = ($monitor->{MaxFPS}&&($monitor->{MaxFPS}>0)&&($monitor->{MaxFPS}<1))?(3/$monitor->{MaxFPS}):ZM_WATCH_MAX_DELAY; + my $max_image_delay = ($monitor->{MaxFPS}&&($monitor->{MaxFPS}>0)&&($monitor->{MaxFPS}<1))?(3/$monitor->{MaxFPS}):$Config{ZM_WATCH_MAX_DELAY}; my $image_delay = $now-$image_time; Debug( "Monitor $monitor->{Id} last captured $image_delay seconds ago, max is $max_image_delay\n" ); if ( $image_delay > $max_image_delay ) @@ -127,7 +127,7 @@ while( 1 ) next if ( !defined($image_time) ); # Can't read from shared data next if ( !$image_time ); # We can't get the last capture time so can't be sure it's died. - my $max_image_delay = ($monitor->{MaxFPS}&&($monitor->{MaxFPS}>0)&&($monitor->{MaxFPS}<1))?(3/$monitor->{MaxFPS}):ZM_WATCH_MAX_DELAY; + my $max_image_delay = ($monitor->{MaxFPS}&&($monitor->{MaxFPS}>0)&&($monitor->{MaxFPS}<1))?(3/$monitor->{MaxFPS}):$Config{ZM_WATCH_MAX_DELAY}; my $image_delay = $now-$image_time; Debug( "Monitor $monitor->{Id} last analysed $image_delay seconds ago, max is $max_image_delay\n" ); if ( $image_delay > $max_image_delay ) @@ -142,7 +142,7 @@ while( 1 ) # Prevent open handles building up if we have connect to shared memory zmMemInvalidate( $monitor ); } - sleep( ZM_WATCH_CHECK_INTERVAL ); + sleep( $Config{ZM_WATCH_CHECK_INTERVAL} ); } Info( "Watchdog exiting\n" ); exit(); diff --git a/src/zm_config_defines.h b/src/zm_config_defines.h index 572ee589f..4d3b9085a 100644 --- a/src/zm_config_defines.h +++ b/src/zm_config_defines.h @@ -30,196 +30,195 @@ #define ZM_CPU_EXTENSIONS 26 #define ZM_FAST_IMAGE_BLENDS 27 #define ZM_OPT_ADAPTIVE_SKIP 28 -#define ZM_BLEND_ALARMED_IMAGES 29 -#define ZM_MAX_SUSPEND_TIME 30 -#define ZM_OPT_REMOTE_CAMERAS 31 -#define ZM_NETCAM_REGEXPS 32 -#define ZM_HTTP_VERSION 33 -#define ZM_HTTP_UA 34 -#define ZM_HTTP_TIMEOUT 35 -#define ZM_MIN_RTP_PORT 36 -#define ZM_MAX_RTP_PORT 37 -#define ZM_OPT_FFMPEG 38 -#define ZM_PATH_FFMPEG 39 -#define ZM_FFMPEG_INPUT_OPTIONS 40 -#define ZM_FFMPEG_OUTPUT_OPTIONS 41 -#define ZM_FFMPEG_FORMATS 42 -#define ZM_LOG_LEVEL_SYSLOG 43 -#define ZM_LOG_LEVEL_FILE 44 -#define ZM_LOG_LEVEL_WEBLOG 45 -#define ZM_LOG_LEVEL_DATABASE 46 -#define ZM_LOG_DATABASE_LIMIT 47 -#define ZM_LOG_DEBUG 48 -#define ZM_LOG_DEBUG_TARGET 49 -#define ZM_LOG_DEBUG_LEVEL 50 -#define ZM_LOG_DEBUG_FILE 51 -#define ZM_LOG_CHECK_PERIOD 52 -#define ZM_LOG_ALERT_WAR_COUNT 53 -#define ZM_LOG_ALERT_ERR_COUNT 54 -#define ZM_LOG_ALERT_FAT_COUNT 55 -#define ZM_LOG_ALARM_WAR_COUNT 56 -#define ZM_LOG_ALARM_ERR_COUNT 57 -#define ZM_LOG_ALARM_FAT_COUNT 58 -#define ZM_RECORD_EVENT_STATS 59 -#define ZM_RECORD_DIAG_IMAGES 60 -#define ZM_DUMP_CORES 61 -#define ZM_PATH_MAP 62 -#define ZM_PATH_SOCKS 63 -#define ZM_PATH_LOGS 64 -#define ZM_PATH_SWAP 65 -#define ZM_WEB_TITLE_PREFIX 66 -#define ZM_WEB_RESIZE_CONSOLE 67 -#define ZM_WEB_POPUP_ON_ALARM 68 -#define ZM_OPT_X10 69 -#define ZM_X10_DEVICE 70 -#define ZM_X10_HOUSE_CODE 71 -#define ZM_X10_DB_RELOAD_INTERVAL 72 -#define ZM_WEB_SOUND_ON_ALARM 73 -#define ZM_WEB_ALARM_SOUND 74 -#define ZM_WEB_COMPACT_MONTAGE 75 -#define ZM_OPT_FAST_DELETE 76 -#define ZM_STRICT_VIDEO_CONFIG 77 -#define ZM_SIGNAL_CHECK_POINTS 78 -#define ZM_V4L_MULTI_BUFFER 79 -#define ZM_CAPTURES_PER_FRAME 80 -#define ZM_FILTER_RELOAD_DELAY 81 -#define ZM_FILTER_EXECUTE_INTERVAL 82 -#define ZM_OPT_UPLOAD 83 -#define ZM_UPLOAD_ARCH_FORMAT 84 -#define ZM_UPLOAD_ARCH_COMPRESS 85 -#define ZM_UPLOAD_ARCH_ANALYSE 86 -#define ZM_UPLOAD_PROTOCOL 87 -#define ZM_UPLOAD_FTP_HOST 88 -#define ZM_UPLOAD_HOST 89 -#define ZM_UPLOAD_PORT 90 -#define ZM_UPLOAD_FTP_USER 91 -#define ZM_UPLOAD_USER 92 -#define ZM_UPLOAD_FTP_PASS 93 -#define ZM_UPLOAD_PASS 94 -#define ZM_UPLOAD_FTP_LOC_DIR 95 -#define ZM_UPLOAD_LOC_DIR 96 -#define ZM_UPLOAD_FTP_REM_DIR 97 -#define ZM_UPLOAD_REM_DIR 98 -#define ZM_UPLOAD_FTP_TIMEOUT 99 -#define ZM_UPLOAD_TIMEOUT 100 -#define ZM_UPLOAD_FTP_PASSIVE 101 -#define ZM_UPLOAD_FTP_DEBUG 102 -#define ZM_UPLOAD_DEBUG 103 -#define ZM_OPT_EMAIL 104 -#define ZM_EMAIL_ADDRESS 105 -#define ZM_EMAIL_TEXT 106 -#define ZM_EMAIL_SUBJECT 107 -#define ZM_EMAIL_BODY 108 -#define ZM_OPT_MESSAGE 109 -#define ZM_MESSAGE_ADDRESS 110 -#define ZM_MESSAGE_TEXT 111 -#define ZM_MESSAGE_SUBJECT 112 -#define ZM_MESSAGE_BODY 113 -#define ZM_NEW_MAIL_MODULES 114 -#define ZM_EMAIL_HOST 115 -#define ZM_FROM_EMAIL 116 -#define ZM_URL 117 -#define ZM_MAX_RESTART_DELAY 118 -#define ZM_WATCH_CHECK_INTERVAL 119 -#define ZM_WATCH_MAX_DELAY 120 -#define ZM_RUN_AUDIT 121 -#define ZM_AUDIT_CHECK_INTERVAL 122 -#define ZM_FORCED_ALARM_SCORE 123 -#define ZM_BULK_FRAME_INTERVAL 124 -#define ZM_EVENT_CLOSE_MODE 125 -#define ZM_FORCE_CLOSE_EVENTS 126 -#define ZM_CREATE_ANALYSIS_IMAGES 127 -#define ZM_WEIGHTED_ALARM_CENTRES 128 -#define ZM_EVENT_IMAGE_DIGITS 129 -#define ZM_DEFAULT_ASPECT_RATIO 130 -#define ZM_USER_SELF_EDIT 131 -#define ZM_OPT_FRAME_SERVER 132 -#define ZM_FRAME_SOCKET_SIZE 133 -#define ZM_OPT_CONTROL 134 -#define ZM_OPT_TRIGGERS 135 -#define ZM_CHECK_FOR_UPDATES 136 -#define ZM_UPDATE_CHECK_PROXY 137 -#define ZM_SHM_KEY 138 -#define ZM_WEB_REFRESH_METHOD 139 -#define ZM_WEB_EVENT_SORT_FIELD 140 -#define ZM_WEB_EVENT_SORT_ORDER 141 -#define ZM_WEB_EVENTS_PER_PAGE 142 -#define ZM_WEB_LIST_THUMBS 143 -#define ZM_WEB_LIST_THUMB_WIDTH 144 -#define ZM_WEB_LIST_THUMB_HEIGHT 145 -#define ZM_WEB_USE_OBJECT_TAGS 146 -#define ZM_WEB_H_REFRESH_MAIN 147 -#define ZM_WEB_H_REFRESH_CYCLE 148 -#define ZM_WEB_H_REFRESH_IMAGE 149 -#define ZM_WEB_H_REFRESH_STATUS 150 -#define ZM_WEB_H_REFRESH_EVENTS 151 -#define ZM_WEB_H_CAN_STREAM 152 -#define ZM_WEB_H_STREAM_METHOD 153 -#define ZM_WEB_H_DEFAULT_SCALE 154 -#define ZM_WEB_H_DEFAULT_RATE 155 -#define ZM_WEB_H_VIDEO_BITRATE 156 -#define ZM_WEB_H_VIDEO_MAXFPS 157 -#define ZM_WEB_H_SCALE_THUMBS 158 -#define ZM_WEB_H_EVENTS_VIEW 159 -#define ZM_WEB_H_SHOW_PROGRESS 160 -#define ZM_WEB_H_AJAX_TIMEOUT 161 -#define ZM_WEB_M_REFRESH_MAIN 162 -#define ZM_WEB_M_REFRESH_CYCLE 163 -#define ZM_WEB_M_REFRESH_IMAGE 164 -#define ZM_WEB_M_REFRESH_STATUS 165 -#define ZM_WEB_M_REFRESH_EVENTS 166 -#define ZM_WEB_M_CAN_STREAM 167 -#define ZM_WEB_M_STREAM_METHOD 168 -#define ZM_WEB_M_DEFAULT_SCALE 169 -#define ZM_WEB_M_DEFAULT_RATE 170 -#define ZM_WEB_M_VIDEO_BITRATE 171 -#define ZM_WEB_M_VIDEO_MAXFPS 172 -#define ZM_WEB_M_SCALE_THUMBS 173 -#define ZM_WEB_M_EVENTS_VIEW 174 -#define ZM_WEB_M_SHOW_PROGRESS 175 -#define ZM_WEB_M_AJAX_TIMEOUT 176 -#define ZM_WEB_L_REFRESH_MAIN 177 -#define ZM_WEB_L_REFRESH_CYCLE 178 -#define ZM_WEB_L_REFRESH_IMAGE 179 -#define ZM_WEB_L_REFRESH_STATUS 180 -#define ZM_WEB_L_REFRESH_EVENTS 181 -#define ZM_WEB_L_CAN_STREAM 182 -#define ZM_WEB_L_STREAM_METHOD 183 -#define ZM_WEB_L_DEFAULT_SCALE 184 -#define ZM_WEB_L_DEFAULT_RATE 185 -#define ZM_WEB_L_VIDEO_BITRATE 186 -#define ZM_WEB_L_VIDEO_MAXFPS 187 -#define ZM_WEB_L_SCALE_THUMBS 188 -#define ZM_WEB_L_EVENTS_VIEW 189 -#define ZM_WEB_L_SHOW_PROGRESS 190 -#define ZM_WEB_L_AJAX_TIMEOUT 191 -#define ZM_WEB_P_CAN_STREAM 192 -#define ZM_WEB_P_STREAM_METHOD 193 -#define ZM_WEB_P_DEFAULT_SCALE 194 -#define ZM_WEB_P_DEFAULT_RATE 195 -#define ZM_WEB_P_VIDEO_BITRATE 196 -#define ZM_WEB_P_VIDEO_MAXFPS 197 -#define ZM_WEB_P_SCALE_THUMBS 198 -#define ZM_WEB_P_AJAX_TIMEOUT 199 -#define ZM_DYN_LAST_VERSION 200 -#define ZM_DYN_CURR_VERSION 201 -#define ZM_DYN_DB_VERSION 202 -#define ZM_DYN_LAST_CHECK 203 -#define ZM_DYN_NEXT_REMINDER 204 -#define ZM_DYN_DONATE_REMINDER_TIME 205 -#define ZM_DYN_SHOW_DONATE_REMINDER 206 -#define ZM_EYEZM_DEBUG 207 -#define ZM_EYEZM_LOG_TO_FILE 208 -#define ZM_EYEZM_LOG_FILE 209 -#define ZM_EYEZM_EVENT_VCODEC 210 -#define ZM_EYEZM_FEED_VCODEC 211 -#define ZM_EYEZM_H264_DEFAULT_BR 212 -#define ZM_EYEZM_H264_DEFAULT_EVBR 213 -#define ZM_EYEZM_H264_TIMEOUT 214 -#define ZM_EYEZM_SEG_DURATION 215 +#define ZM_MAX_SUSPEND_TIME 29 +#define ZM_OPT_REMOTE_CAMERAS 30 +#define ZM_NETCAM_REGEXPS 31 +#define ZM_HTTP_VERSION 32 +#define ZM_HTTP_UA 33 +#define ZM_HTTP_TIMEOUT 34 +#define ZM_MIN_RTP_PORT 35 +#define ZM_MAX_RTP_PORT 36 +#define ZM_OPT_FFMPEG 37 +#define ZM_PATH_FFMPEG 38 +#define ZM_FFMPEG_INPUT_OPTIONS 39 +#define ZM_FFMPEG_OUTPUT_OPTIONS 40 +#define ZM_FFMPEG_FORMATS 41 +#define ZM_LOG_LEVEL_SYSLOG 42 +#define ZM_LOG_LEVEL_FILE 43 +#define ZM_LOG_LEVEL_WEBLOG 44 +#define ZM_LOG_LEVEL_DATABASE 45 +#define ZM_LOG_DATABASE_LIMIT 46 +#define ZM_LOG_DEBUG 47 +#define ZM_LOG_DEBUG_TARGET 48 +#define ZM_LOG_DEBUG_LEVEL 49 +#define ZM_LOG_DEBUG_FILE 50 +#define ZM_LOG_CHECK_PERIOD 51 +#define ZM_LOG_ALERT_WAR_COUNT 52 +#define ZM_LOG_ALERT_ERR_COUNT 53 +#define ZM_LOG_ALERT_FAT_COUNT 54 +#define ZM_LOG_ALARM_WAR_COUNT 55 +#define ZM_LOG_ALARM_ERR_COUNT 56 +#define ZM_LOG_ALARM_FAT_COUNT 57 +#define ZM_RECORD_EVENT_STATS 58 +#define ZM_RECORD_DIAG_IMAGES 59 +#define ZM_DUMP_CORES 60 +#define ZM_PATH_MAP 61 +#define ZM_PATH_SOCKS 62 +#define ZM_PATH_LOGS 63 +#define ZM_PATH_SWAP 64 +#define ZM_WEB_TITLE_PREFIX 65 +#define ZM_WEB_RESIZE_CONSOLE 66 +#define ZM_WEB_POPUP_ON_ALARM 67 +#define ZM_OPT_X10 68 +#define ZM_X10_DEVICE 69 +#define ZM_X10_HOUSE_CODE 70 +#define ZM_X10_DB_RELOAD_INTERVAL 71 +#define ZM_WEB_SOUND_ON_ALARM 72 +#define ZM_WEB_ALARM_SOUND 73 +#define ZM_WEB_COMPACT_MONTAGE 74 +#define ZM_OPT_FAST_DELETE 75 +#define ZM_STRICT_VIDEO_CONFIG 76 +#define ZM_SIGNAL_CHECK_POINTS 77 +#define ZM_V4L_MULTI_BUFFER 78 +#define ZM_CAPTURES_PER_FRAME 79 +#define ZM_FILTER_RELOAD_DELAY 80 +#define ZM_FILTER_EXECUTE_INTERVAL 81 +#define ZM_OPT_UPLOAD 82 +#define ZM_UPLOAD_ARCH_FORMAT 83 +#define ZM_UPLOAD_ARCH_COMPRESS 84 +#define ZM_UPLOAD_ARCH_ANALYSE 85 +#define ZM_UPLOAD_PROTOCOL 86 +#define ZM_UPLOAD_FTP_HOST 87 +#define ZM_UPLOAD_HOST 88 +#define ZM_UPLOAD_PORT 89 +#define ZM_UPLOAD_FTP_USER 90 +#define ZM_UPLOAD_USER 91 +#define ZM_UPLOAD_FTP_PASS 92 +#define ZM_UPLOAD_PASS 93 +#define ZM_UPLOAD_FTP_LOC_DIR 94 +#define ZM_UPLOAD_LOC_DIR 95 +#define ZM_UPLOAD_FTP_REM_DIR 96 +#define ZM_UPLOAD_REM_DIR 97 +#define ZM_UPLOAD_FTP_TIMEOUT 98 +#define ZM_UPLOAD_TIMEOUT 99 +#define ZM_UPLOAD_FTP_PASSIVE 100 +#define ZM_UPLOAD_FTP_DEBUG 101 +#define ZM_UPLOAD_DEBUG 102 +#define ZM_OPT_EMAIL 103 +#define ZM_EMAIL_ADDRESS 104 +#define ZM_EMAIL_TEXT 105 +#define ZM_EMAIL_SUBJECT 106 +#define ZM_EMAIL_BODY 107 +#define ZM_OPT_MESSAGE 108 +#define ZM_MESSAGE_ADDRESS 109 +#define ZM_MESSAGE_TEXT 110 +#define ZM_MESSAGE_SUBJECT 111 +#define ZM_MESSAGE_BODY 112 +#define ZM_NEW_MAIL_MODULES 113 +#define ZM_EMAIL_HOST 114 +#define ZM_FROM_EMAIL 115 +#define ZM_URL 116 +#define ZM_MAX_RESTART_DELAY 117 +#define ZM_WATCH_CHECK_INTERVAL 118 +#define ZM_WATCH_MAX_DELAY 119 +#define ZM_RUN_AUDIT 120 +#define ZM_AUDIT_CHECK_INTERVAL 121 +#define ZM_FORCED_ALARM_SCORE 122 +#define ZM_BULK_FRAME_INTERVAL 123 +#define ZM_EVENT_CLOSE_MODE 124 +#define ZM_FORCE_CLOSE_EVENTS 125 +#define ZM_CREATE_ANALYSIS_IMAGES 126 +#define ZM_WEIGHTED_ALARM_CENTRES 127 +#define ZM_EVENT_IMAGE_DIGITS 128 +#define ZM_DEFAULT_ASPECT_RATIO 129 +#define ZM_USER_SELF_EDIT 130 +#define ZM_OPT_FRAME_SERVER 131 +#define ZM_FRAME_SOCKET_SIZE 132 +#define ZM_OPT_CONTROL 133 +#define ZM_OPT_TRIGGERS 134 +#define ZM_CHECK_FOR_UPDATES 135 +#define ZM_UPDATE_CHECK_PROXY 136 +#define ZM_SHM_KEY 137 +#define ZM_WEB_REFRESH_METHOD 138 +#define ZM_WEB_EVENT_SORT_FIELD 139 +#define ZM_WEB_EVENT_SORT_ORDER 140 +#define ZM_WEB_EVENTS_PER_PAGE 141 +#define ZM_WEB_LIST_THUMBS 142 +#define ZM_WEB_LIST_THUMB_WIDTH 143 +#define ZM_WEB_LIST_THUMB_HEIGHT 144 +#define ZM_WEB_USE_OBJECT_TAGS 145 +#define ZM_WEB_H_REFRESH_MAIN 146 +#define ZM_WEB_H_REFRESH_CYCLE 147 +#define ZM_WEB_H_REFRESH_IMAGE 148 +#define ZM_WEB_H_REFRESH_STATUS 149 +#define ZM_WEB_H_REFRESH_EVENTS 150 +#define ZM_WEB_H_CAN_STREAM 151 +#define ZM_WEB_H_STREAM_METHOD 152 +#define ZM_WEB_H_DEFAULT_SCALE 153 +#define ZM_WEB_H_DEFAULT_RATE 154 +#define ZM_WEB_H_VIDEO_BITRATE 155 +#define ZM_WEB_H_VIDEO_MAXFPS 156 +#define ZM_WEB_H_SCALE_THUMBS 157 +#define ZM_WEB_H_EVENTS_VIEW 158 +#define ZM_WEB_H_SHOW_PROGRESS 159 +#define ZM_WEB_H_AJAX_TIMEOUT 160 +#define ZM_WEB_M_REFRESH_MAIN 161 +#define ZM_WEB_M_REFRESH_CYCLE 162 +#define ZM_WEB_M_REFRESH_IMAGE 163 +#define ZM_WEB_M_REFRESH_STATUS 164 +#define ZM_WEB_M_REFRESH_EVENTS 165 +#define ZM_WEB_M_CAN_STREAM 166 +#define ZM_WEB_M_STREAM_METHOD 167 +#define ZM_WEB_M_DEFAULT_SCALE 168 +#define ZM_WEB_M_DEFAULT_RATE 169 +#define ZM_WEB_M_VIDEO_BITRATE 170 +#define ZM_WEB_M_VIDEO_MAXFPS 171 +#define ZM_WEB_M_SCALE_THUMBS 172 +#define ZM_WEB_M_EVENTS_VIEW 173 +#define ZM_WEB_M_SHOW_PROGRESS 174 +#define ZM_WEB_M_AJAX_TIMEOUT 175 +#define ZM_WEB_L_REFRESH_MAIN 176 +#define ZM_WEB_L_REFRESH_CYCLE 177 +#define ZM_WEB_L_REFRESH_IMAGE 178 +#define ZM_WEB_L_REFRESH_STATUS 179 +#define ZM_WEB_L_REFRESH_EVENTS 180 +#define ZM_WEB_L_CAN_STREAM 181 +#define ZM_WEB_L_STREAM_METHOD 182 +#define ZM_WEB_L_DEFAULT_SCALE 183 +#define ZM_WEB_L_DEFAULT_RATE 184 +#define ZM_WEB_L_VIDEO_BITRATE 185 +#define ZM_WEB_L_VIDEO_MAXFPS 186 +#define ZM_WEB_L_SCALE_THUMBS 187 +#define ZM_WEB_L_EVENTS_VIEW 188 +#define ZM_WEB_L_SHOW_PROGRESS 189 +#define ZM_WEB_L_AJAX_TIMEOUT 190 +#define ZM_WEB_P_CAN_STREAM 191 +#define ZM_WEB_P_STREAM_METHOD 192 +#define ZM_WEB_P_DEFAULT_SCALE 193 +#define ZM_WEB_P_DEFAULT_RATE 194 +#define ZM_WEB_P_VIDEO_BITRATE 195 +#define ZM_WEB_P_VIDEO_MAXFPS 196 +#define ZM_WEB_P_SCALE_THUMBS 197 +#define ZM_WEB_P_AJAX_TIMEOUT 198 +#define ZM_DYN_LAST_VERSION 199 +#define ZM_DYN_CURR_VERSION 200 +#define ZM_DYN_DB_VERSION 201 +#define ZM_DYN_LAST_CHECK 202 +#define ZM_DYN_NEXT_REMINDER 203 +#define ZM_DYN_DONATE_REMINDER_TIME 204 +#define ZM_DYN_SHOW_DONATE_REMINDER 205 +#define ZM_EYEZM_DEBUG 206 +#define ZM_EYEZM_LOG_TO_FILE 207 +#define ZM_EYEZM_LOG_FILE 208 +#define ZM_EYEZM_EVENT_VCODEC 209 +#define ZM_EYEZM_FEED_VCODEC 210 +#define ZM_EYEZM_H264_DEFAULT_BR 211 +#define ZM_EYEZM_H264_DEFAULT_EVBR 212 +#define ZM_EYEZM_H264_TIMEOUT 213 +#define ZM_EYEZM_SEG_DURATION 214 -#define ZM_MAX_CFG_ID 215 +#define ZM_MAX_CFG_ID 214 #define ZM_CFG_DECLARE_LIST \ const char *lang_default;\ @@ -251,7 +250,6 @@ bool cpu_extensions;\ bool fast_image_blends;\ bool opt_adaptive_skip;\ - bool blend_alarmed_images;\ int max_suspend_time;\ bool opt_remote_cameras;\ bool netcam_regexps;\ @@ -470,7 +468,6 @@ cpu_extensions = (bool)config.Item( ZM_CPU_EXTENSIONS );\ fast_image_blends = (bool)config.Item( ZM_FAST_IMAGE_BLENDS );\ opt_adaptive_skip = (bool)config.Item( ZM_OPT_ADAPTIVE_SKIP );\ - blend_alarmed_images = (bool)config.Item( ZM_BLEND_ALARMED_IMAGES );\ max_suspend_time = (int)config.Item( ZM_MAX_SUSPEND_TIME );\ opt_remote_cameras = (bool)config.Item( ZM_OPT_REMOTE_CAMERAS );\ netcam_regexps = (bool)config.Item( ZM_NETCAM_REGEXPS );\