Converted to use dynamic configuration.

git-svn-id: http://svn.zoneminder.com/svn/zm/trunk@593 e3e1d417-86f3-4887-817a-d78f3d33393f
This commit is contained in:
stan 2003-07-04 12:31:36 +00:00
parent 22c107ddc8
commit 06c13211c7
20 changed files with 171 additions and 175 deletions

View File

@ -37,13 +37,28 @@
# ==========================================================================
use constant ZM_PATH_BIN => "<from zmconfig>";
use constant ZM_PATH_WEB => "<from zmconfig>";
use constant ZM_PATH_LOGS => "<from zmconfig>";
use constant ZM_DB_SERVER => "<from zmconfig>";
use constant ZM_DB_NAME => "<from zmconfig>";
use constant ZM_DB_USERA => "<from zmconfig>";
use constant ZM_DB_PASSA => "<from zmconfig>";
use constant ZM_DIR_IMAGES => "<from zmconfig>";
use constant ZM_DIR_EVENTS => "<from zmconfig>";
# Load the config from the database into the symbol table
BEGIN
{
use DBI;
no strict 'refs';
my $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_SERVER, ZM_DB_USERA, ZM_DB_PASSA );
my $sql = "select * from Config";
my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() );
my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() );
while( my $config = $sth->fetchrow_hashref() )
{
*{$config->{Name}} = sub { $config->{Value} };
}
$sth->finish();
$dbh->disconnect();
}
use constant IMAGE_PATH => ZM_PATH_WEB.'/'.ZM_DIR_IMAGES;
use constant EVENT_PATH => ZM_PATH_WEB.'/'.ZM_DIR_EVENTS;

View File

@ -34,9 +34,31 @@
#
# ==========================================================================
use constant ZM_PATH_BIN => "<from zmconfig>";
use constant ZM_PATH_SOCKS => "<from zmconfig>";
use constant ZM_PATH_LOGS => "<from zmconfig>";
use constant ZM_PATH_WEB => "<from zmconfig>";
use constant ZM_DB_SERVER => "<from zmconfig>";
use constant ZM_DB_NAME => "<from zmconfig>";
use constant ZM_DB_USERA => "<from zmconfig>";
use constant ZM_DB_PASSA => "<from zmconfig>";
# Load the config from the database into the symbol table
BEGIN
{
use DBI;
no strict 'refs';
my $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_SERVER, ZM_DB_USERA, ZM_DB_PASSA );
my $sql = "select * from Config";
my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() );
my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() );
while( my $config = $sth->fetchrow_hashref() )
{
*{$config->{Name}} = sub { $config->{Value} };
}
$sth->finish();
$dbh->disconnect();
}
use constant DC_SOCK_FILE => ZM_PATH_SOCKS.'/zmdc.sock';
use constant DC_LOG_FILE => ZM_PATH_LOGS.'/zmdc.log';

View File

@ -35,33 +35,28 @@ use strict;
use constant ZM_PATH_BIN => "<from zmconfig>";
use constant ZM_PATH_WEB => "<from zmconfig>";
use constant ZM_PATH_CGI => "<from zmconfig>";
use constant ZM_PATH_LOGS => "<from zmconfig>";
use constant ZM_DB_SERVER => "<from zmconfig>";
use constant ZM_DB_NAME => "<from zmconfig>";
use constant ZM_DB_USERA => "<from zmconfig>";
use constant ZM_DB_PASSA => "<from zmconfig>";
use constant ZM_DIR_EVENTS => "<from zmconfig>";
use constant ZM_SHM_KEY => <from zmconfig>;
use constant ZM_FILTER_RELOAD_DELAY => <from zmconfig>;
use constant ZM_OPT_UPLOAD => <from zmconfig>;
use constant ZM_UPLOAD_ARCH_FORMAT => <from zmconfig>;
use constant ZM_UPLOAD_ARCH_COMPRESS => <from zmconfig>;
use constant ZM_UPLOAD_ARCH_ANALYSE => <from zmconfig>;
use constant ZM_UPLOAD_FTP_HOST => "<from zmconfig>";
use constant ZM_UPLOAD_FTP_USER => "<from zmconfig>";
use constant ZM_UPLOAD_FTP_PASS => "<from zmconfig>";
use constant ZM_UPLOAD_FTP_LOC_DIR => "<from zmconfig>";
use constant ZM_UPLOAD_FTP_REM_DIR => "<from zmconfig>";
use constant ZM_UPLOAD_FTP_TIMEOUT => <from zmconfig>;
use constant ZM_UPLOAD_FTP_PASSIVE => <from zmconfig>;
use constant ZM_UPLOAD_FTP_DEBUG => <from zmconfig>;
use constant ZM_OPT_EMAIL => <from zmconfig>;
use constant ZM_EMAIL_ADDRESS => <from zmconfig>;
use constant ZM_OPT_MESSAGE => <from zmconfig>;
use constant ZM_MESSAGE_ADDRESS => <from zmconfig>;
use constant ZM_URL => <from zmconfig>;
use constant ZM_FROM_EMAIL => <from zmconfig>;
use constant ZM_OPT_MPEG => <from zmconfig>;
# Load the config from the database into the symbol table
BEGIN
{
use DBI;
no strict 'refs';
my $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_SERVER, ZM_DB_USERA, ZM_DB_PASSA );
my $sql = "select * from Config";
my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() );
my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() );
while( my $config = $sth->fetchrow_hashref() )
{
*{$config->{Name}} = sub { $config->{Value} };
}
$sth->finish();
$dbh->disconnect();
}
use constant EVENT_PATH => ZM_PATH_WEB.'/'.ZM_DIR_EVENTS;
use constant LOG_FILE => ZM_PATH_LOGS.'/zmfilter-%d.log';
@ -89,9 +84,7 @@ if ( ZM_OPT_EMAIL )
{
use MIME::Entity;
use constant ZM_EMAIL_FORMAT => "<from zmconfig>"; # File containing the contents of the email
( $email_subject, $email_body ) = ZM_EMAIL_FORMAT =~ /subject\s*=\s*"([^\n]*)".*body\s*=\s*"(.*)"/ms;
( $email_subject, $email_body ) = ZM_EMAIL_TEXT =~ /subject\s*=\s*"([^\n]*)".*body\s*=\s*"(.*)"/ms;
}
my $message_subject;
@ -100,9 +93,7 @@ if ( ZM_OPT_MESSAGE )
{
use MIME::Entity;
use constant ZM_MESSAGE_FORMAT => "<from zmconfig>"; # File containing the contents of the message
( $message_subject, $message_body ) = ZM_MESSAGE_FORMAT =~ /subject\s*=\s*"([^\n]*)".*body\s*=\s*"(.*)"/ms;
( $message_subject, $message_body ) = ZM_MESSAGE_TEXT =~ /subject\s*=\s*"([^\n]*)".*body\s*=\s*"(.*)"/ms;
}
# ==========================================================================
@ -202,7 +193,7 @@ my $filters = GetFilters( $monitor );
my $last_action = 0;
my $size = 24; # We only need the first 16 bytes really for the last event count
my $key = ZM_SHM_KEY|$monitor;
my $key = hex(ZM_SHM_KEY)|$monitor;
my $shmid = shmget( $key, $size, 0 ) || die( "Can't get shared memory id: $!" );
while( 1 )
@ -402,7 +393,7 @@ sub uploadArchFile
my $event = shift;
my $arch_file = ZM_UPLOAD_FTP_LOC_DIR.'/'.$filter->{MonitorName}.'-'.$event->{Id};
my $arch_image_path = "$filter->{MonitorName}/$event->{Id}/".(ZM_UPLOAD_ARCH_ANALYSE?'*':'capture*').".jpg";
my $arch_image_path = "$filter->{MonitorName}/$event->{Id}/".((ZM_UPLOAD_ARCH_ANALYSE)?'*':'capture*').".jpg";
my $arch_error;
if ( ZM_UPLOAD_ARCH_FORMAT eq "zip" )
@ -417,7 +408,7 @@ sub uploadArchFile
print( "Adding $image_file\n" );
my $member = $zip->addFile( $image_file );
last unless ( $member );
$member->desiredCompressionMethod( ZM_UPLOAD_ARCH_COMPRESS?COMPRESSION_DEFLATED:COMPRESSION_STORED );
$member->desiredCompressionMethod( (ZM_UPLOAD_ARCH_COMPRESS)?COMPRESSION_DEFLATED:COMPRESSION_STORED );
}
$status = $zip->writeToFileNamed( $arch_file );

View File

@ -34,17 +34,30 @@ use strict;
use constant ZM_PATH_BIN => "<from zmconfig>";
use constant ZM_PATH_WEB => "<from zmconfig>";
use constant ZM_PATH_CGI => "<from zmconfig>";
use constant ZM_PATH_LOGS => "<from zmconfig>";
use constant ZM_WEB_USER => "<from zmconfig>";
use constant ZM_WEB_GROUP => "<from zmconfig>";
use constant ZM_DB_SERVER => "<from zmconfig>";
use constant ZM_DB_NAME => "<from zmconfig>";
use constant ZM_DB_USERA => "<from zmconfig>";
use constant ZM_DB_PASSA => "<from zmconfig>";
use constant ZM_SHM_KEY => "<from zmconfig>";
use constant ZM_OPT_FAST_DELETE => "<from zmconfig>";
use constant ZM_OPT_X10 => "<from zmconfig>";
use constant ZM_OPT_FRAME_SERVER => "<from zmconfig>";
# Load the config from the database into the symbol table
BEGIN
{
use DBI;
no strict 'refs';
my $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_SERVER, ZM_DB_USERA, ZM_DB_PASSA );
my $sql = "select * from Config";
my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() );
my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() );
while( my $config = $sth->fetchrow_hashref() )
{
*{$config->{Name}} = sub { $config->{Value} };
}
$sth->finish();
$dbh->disconnect();
}
use constant LOG_FILE => ZM_PATH_LOGS.'/zmpkg.log';
use constant VERBOSE => 0; # Whether to output more verbose debug
@ -73,7 +86,7 @@ sub remove_shm
{
print( STDERR "Removing shared memory\n" );
# Find ZoneMinder shared memory
my $command = "ipcs -m | grep '^".substr( sprintf( "0x%x", ZM_SHM_KEY ), 0, -2 )."'";
my $command = "ipcs -m | grep '^".substr( sprintf( "0x%x", hex(ZM_SHM_KEY) ), 0, -2 )."'";
print( "Checking for shared memory with '$command'\n" ) if ( VERBOSE );
open( CMD, "$command |" ) or die( "Can't execute '$command': $!" );
while( <CMD> )

View File

@ -34,18 +34,28 @@ use strict;
use constant ZM_PATH_BIN => "<from zmconfig>";
use constant ZM_PATH_WEB => "<from zmconfig>";
use constant ZM_PATH_CGI => "<from zmconfig>";
use constant ZM_PATH_LOGS => "<from zmconfig>";
use constant ZM_PATH_NETPBM => "<from zmconfig>";
use constant ZM_OPT_MPEG => "<from zmconfig>";
use constant ZM_PATH_MPEG_ENCODE => "<from zmconfig>";
use constant ZM_PATH_FFMPEG => "<from zmconfig>";
use constant ZM_FFMPEG_OPTIONS => "<from zmconfig>";
use constant ZM_DB_SERVER => "<from zmconfig>";
use constant ZM_DB_NAME => "<from zmconfig>";
use constant ZM_DB_USERB => "<from zmconfig>";
use constant ZM_DB_PASSB => "<from zmconfig>";
use constant ZM_DIR_EVENTS => "<from zmconfig>";
use constant ZM_COLOUR_JPEG_FILES => "<from zmconfig>";
# Load the config from the database into the symbol table
BEGIN
{
use DBI;
no strict 'refs';
my $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_SERVER, ZM_DB_USERA, ZM_DB_PASSA );
my $sql = "select * from Config";
my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() );
my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() );
while( my $config = $sth->fetchrow_hashref() )
{
*{$config->{Name}} = sub { $config->{Value} };
}
$sth->finish();
$dbh->disconnect();
}
use constant LOG_FILE => ZM_PATH_LOGS.'/zmvideo.log';
use constant VERBOSE => 0; # Whether to output more verbose debug

View File

@ -33,13 +33,28 @@
# ==========================================================================
use constant ZM_PATH_BIN => "<from zmconfig>";
use constant ZM_PATH_LOGS => "<from zmconfig>";
use constant ZM_DB_SERVER => "<from zmconfig>";
use constant ZM_DB_NAME => "<from zmconfig>";
use constant ZM_DB_USERA => "<from zmconfig>";
use constant ZM_DB_PASSA => "<from zmconfig>";
use constant ZM_WATCH_CHECK_INTERVAL => <from zmconfig>;
use constant ZM_WATCH_MAX_DELAY => <from zmconfig>;
# Load the config from the database into the symbol table
BEGIN
{
use DBI;
no strict 'refs';
my $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_SERVER, ZM_DB_USERA, ZM_DB_PASSA );
my $sql = "select * from Config";
my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() );
my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() );
while( my $config = $sth->fetchrow_hashref() )
{
*{$config->{Name}} = sub { $config->{Value} };
}
$sth->finish();
$dbh->disconnect();
}
use constant WATCH_LOG_FILE => ZM_PATH_LOGS.'/zmwatch.log';
use constant START_DELAY => 30; # To give everything else time to start

View File

@ -32,17 +32,28 @@
# ==========================================================================
use constant ZM_PATH_BIN => "<from zmconfig>";
use constant ZM_PATH_SOCKS => "<from zmconfig>";
use constant ZM_PATH_LOGS => "<from zmconfig>";
use constant ZM_DB_SERVER => "<from zmconfig>";
use constant ZM_DB_NAME => "<from zmconfig>";
use constant ZM_DB_USERA => "<from zmconfig>";
use constant ZM_DB_PASSA => "<from zmconfig>";
use constant ZM_DIR_EVENTS => "<from zmconfig>";
use constant ZM_X10_DB_RELOAD_INTERVAL => 60;
use constant ZM_X10_DEVICE => '/dev/ttyS1';
use constant ZM_X10_HOUSE_CODE => 'K';
use constant ZM_SHM_KEY => 0x7a6d2000;
# Load the config from the database into the symbol table
BEGIN
{
use DBI;
no strict 'refs';
my $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_SERVER, ZM_DB_USERA, ZM_DB_PASSA );
my $sql = "select * from Config";
my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() );
my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() );
while( my $config = $sth->fetchrow_hashref() )
{
*{$config->{Name}} = sub { $config->{Value} };
}
$sth->finish();
$dbh->disconnect();
}
use constant X10_SOCK_FILE => ZM_PATH_SOCKS.'/zmx10.sock';
use constant X10_LOG_FILE => ZM_PATH_LOGS.'/zmx10.log';
@ -193,7 +204,7 @@ sub runServer
#print( "F:".fileno(SERVER)."\n" );
my $reload = undef;
my $reload_count = 0;
my $reload_limit = main::ZM_X10_DB_RELOAD_INTERVAL/$timeout;
my $reload_limit = (main::ZM_X10_DB_RELOAD_INTERVAL)/$timeout;
while( 1 )
{
my $nfound = select( my $rout = $rin, undef, undef, $timeout );
@ -439,7 +450,7 @@ sub loadTasks
$monitor_hash{$monitor->{Id}} = $monitor;
my $size = 4; # We only need the first 4 bytes really for the alarm state
$monitor->{ShmKey} = main::ZM_SHM_KEY|$monitor->{Id};
$monitor->{ShmKey} = hex(main::ZM_SHM_KEY)|$monitor->{Id};
if ( !($monitor->{ShmId} = shmget( $monitor->{ShmKey}, $size, 0 )) )
{
print( "Can't get shared memory id: $!\n" );

View File

@ -28,34 +28,6 @@
#define ZM_DB_USERB "<from zmconfig>" // Unprivileged DB user name, need just select privilege.
#define ZM_DB_PASSB "<from zmconfig>" // Unprivileged DB user password
#define ZM_HTTP_VERSION "<from zmconfig>" // The version of HTTP that ZoneMinder will use to connect
#define ZM_HTTP_UA "<from zmconfig>" // The user agent that ZoneMinder uses to identify itself
#define ZM_HTTP_TIMEOUT <from zmconfig> // How long ZoneMinder waits before giving up on images (millseconds)
#define ZM_SHM_KEY <from zmconfig> // Shared memory key to use, only change if it clashes with another application
#define ZM_PATH_SOCKS "<from zmconfig>" // Path to the various Unix domain socket files that ZoneMinder uses
#define ZM_DIR_EVENTS "<from zmconfig>" // Local path to where events directory lives
#define ZM_FORCED_ALARM_SCORE <from zmconfig> // Score to give X10 forced alarms
#define ZM_RECORD_EVENT_STATS <from zmconfig> // Whether to record event statistical information, change to no if too slow
#define ZM_STRICT_VIDEO_CONFIG <from zmconfig> // Whether to allow errors in setting video config to be fatal
#define ZM_LOCAL_BGR_INVERT <from zmconfig> // Invert BGR colours to RGB
#define ZM_FAST_RGB_DIFFS <from zmconfig> // Whether we use a rough RGB difference algorithm
#define ZM_COLOUR_JPEG_FILES <from zmconfig> // Colourise greyscale JPEG files
#define ZM_JPEG_FILE_QUALITY <from zmconfig> // Set the JPEG quality setting for the saved event files
#define ZM_JPEG_IMAGE_QUALITY <from zmconfig> // Set the JPEG quality setting for the streamed 'live' images
#define ZM_BLEND_ALARMED_IMAGES <from zmconfig> // Whether alarmed images are blended to update the reference image
#define ZM_NO_MAX_FPS_ON_ALARM <from zmconfig> // Should any Maximum FPS be ignored if an alarm occurs
#define ZM_OPT_ADAPTIVE_SKIP <from zmconfig> // Whether we use the adaptive skip algorithm
#define ZM_OPT_FRAME_SERVER <from zmconfig> // Whether we use the frame server to speed things up
#define ZM_MAX_IMAGE_WIDTH 2048 // The largest image we imagine ever handling
#define ZM_MAX_IMAGE_HEIGHT 1536 // The largest image we imagine ever handling
#define ZM_MAX_IMAGE_COLOURS 3 // The largest image we imagine ever handling
@ -117,7 +89,7 @@ public:
~Config();
void Load();
const ConfigItem &GetItem( int id );
const ConfigItem &Item( int id );
};
extern Config config;

View File

@ -47,7 +47,7 @@ Event::Event( Monitor *p_monitor, struct timeval p_start_time ) : monitor( p_mon
alarm_frames = 0;
tot_score = 0;
max_score = 0;
sprintf( path, ZM_DIR_EVENTS "/%s/%d", monitor->Name(), id );
sprintf( path, "%s/%s/%d", (const char *)config.Item( ZM_DIR_EVENTS ), monitor->Name(), id );
struct stat statbuf;
errno = 0;
@ -113,7 +113,7 @@ bool Event::OpenFrameSocket( int monitor_id )
}
char sock_path[PATH_MAX] = "";
sprintf( sock_path, FILE_SOCK_FILE, monitor_id );
sprintf( sock_path, "%s/zmf-%d.sock", (const char *)config.Item( ZM_PATH_SOCKS ), monitor_id );
struct sockaddr_un addr;
@ -188,7 +188,7 @@ bool Event::SendFrameImage( const Image *image, bool alarm_frame )
bool Event::WriteFrameImage( const Image *image, const char *event_file, bool alarm_frame )
{
if ( !ZM_OPT_FRAME_SERVER || !SendFrameImage( image, alarm_frame) )
if ( !(bool)config.Item( ZM_OPT_FRAME_SERVER ) || !SendFrameImage( image, alarm_frame) )
{
image->WriteJpeg( event_file );
}

View File

@ -101,7 +101,7 @@ void Image::ReadJpeg( const char *filename )
void Image::WriteJpeg( const char *filename ) const
{
if ( ZM_COLOUR_JPEG_FILES && colours == 1 )
if ( (bool)config.Item( ZM_COLOUR_JPEG_FILES ) && colours == 1 )
{
Image temp_image( *this );
temp_image.Colourise();
@ -136,7 +136,7 @@ void Image::WriteJpeg( const char *filename ) const
}
jpeg_set_defaults(&cinfo);
cinfo.dct_method = JDCT_FASTEST;
jpeg_set_quality(&cinfo, ZM_JPEG_FILE_QUALITY, false);
jpeg_set_quality(&cinfo, (int)config.Item( ZM_JPEG_FILE_QUALITY ), false);
jpeg_start_compress(&cinfo, TRUE);
JSAMPROW row_pointer; /* pointer to a single row */
@ -211,7 +211,7 @@ void Image::EncodeJpeg( JOCTET *outbuffer, int *outbuffer_size ) const
}
jpeg_set_defaults(&cinfo);
cinfo.dct_method = JDCT_FASTEST;
jpeg_set_quality(&cinfo, ZM_JPEG_IMAGE_QUALITY, false);
jpeg_set_quality(&cinfo, (int)config.Item( ZM_JPEG_IMAGE_QUALITY ), false);
jpeg_start_compress(&cinfo, TRUE);
JSAMPROW row_pointer; /* pointer to a single row */
@ -467,7 +467,7 @@ Image *Image::Delta( const Image &image ) const
static long red, green, blue;
while( psrc < (buffer+size) )
{
if ( ZM_FAST_RGB_DIFFS )
if ( (bool)config.Item( ZM_FAST_RGB_DIFFS ) )
{
red = abs(*psrc++ - *pref++);
green = abs(*psrc++ - *pref++);

View File

@ -83,7 +83,7 @@ void LocalCamera::Initialise()
if( ioctl( m_videohandle, VIDIOCSWIN, &vid_win ) )
{
Error(( "Failed to set window attributes: %s", strerror(errno) ));
if ( ZM_STRICT_VIDEO_CONFIG ) exit(-1);
if ( (bool)config.Item( ZM_STRICT_VIDEO_CONFIG ) ) exit(-1);
}
struct video_picture vid_pic;
@ -125,7 +125,7 @@ void LocalCamera::Initialise()
if( ioctl( m_videohandle, VIDIOCSPICT, &vid_pic ) )
{
Error(( "Failed to set picture attributes: %s", strerror(errno) ));
if ( ZM_STRICT_VIDEO_CONFIG ) exit(-1);
if ( (bool)config.Item( ZM_STRICT_VIDEO_CONFIG ) ) exit(-1);
}
if(!ioctl(m_videohandle, VIDIOCGMBUF, &m_vmb))
{
@ -177,7 +177,7 @@ void LocalCamera::Initialise()
if(ioctl(m_videohandle, VIDIOCSCHAN, &vid_src))
{
Error(( "Failed to set camera source %d: %s", channel, strerror(errno) ));
if ( ZM_STRICT_VIDEO_CONFIG ) exit(-1);
if ( (bool)config.Item( ZM_STRICT_VIDEO_CONFIG ) ) exit(-1);
}
if( !ioctl( m_videohandle, VIDIOCGWIN, &vid_win))
@ -669,7 +669,7 @@ int LocalCamera::PostCapture( Image &image )
}
case VIDEO_PALETTE_RGB24 :
{
if ( ZM_LOCAL_BGR_INVERT )
if ( (bool)config.Item( ZM_LOCAL_BGR_INVERT ) )
{
int size = width*height*3;
unsigned char *s_ptr = buffer;

View File

@ -84,7 +84,7 @@ void Monitor::Initialise()
int shared_data_size = sizeof(SharedData)+(image_buffer_count*sizeof(time_t))+(image_buffer_count*camera->ImageSize());
Info(( "shm.size=%d", shared_data_size ));
shmid = shmget( ZM_SHM_KEY|id, shared_data_size, IPC_CREAT|0777 );
shmid = shmget( (int)config.Item( ZM_SHM_KEY )|id, shared_data_size, IPC_CREAT|0777 );
if ( shmid < 0 )
{
Error(( "Can't shmget: %s", strerror(errno)));
@ -141,13 +141,13 @@ void Monitor::Initialise()
Info(( "Monitor %s LBF = '%s', LBX = %d, LBY = %d", name, label_format, label_coord.X(), label_coord.Y() ));
Info(( "Monitor %s IBC = %d, WUC = %d, pEC = %d, PEC = %d, FRI = %d, RBP = %d", name, image_buffer_count, warmup_count, pre_event_count, post_event_count, fps_report_interval, ref_blend_perc ));
record_event_stats = ZM_RECORD_EVENT_STATS;
record_event_stats = (bool)config.Item( ZM_RECORD_EVENT_STATS );
if ( mode == ANALYSIS )
{
static char path[PATH_MAX];
sprintf( path, ZM_DIR_EVENTS );
strcpy( path, (const char *)config.Item( ZM_DIR_EVENTS ) );
struct stat statbuf;
errno = 0;
@ -160,7 +160,7 @@ void Monitor::Initialise()
}
}
sprintf( path, ZM_DIR_EVENTS "/%s", name );
sprintf( path, "%s/%s", (const char *)config.Item( ZM_DIR_EVENTS ), name );
errno = 0;
stat( path, &statbuf );
@ -469,7 +469,7 @@ bool Monitor::Analyse()
}
int index;
if ( ZM_OPT_ADAPTIVE_SKIP )
if ( (bool)config.Item( ZM_OPT_ADAPTIVE_SKIP ) )
{
int read_margin = shared_data->last_read_index - shared_data->last_write_index;
if ( read_margin < 0 ) read_margin += image_buffer_count;
@ -512,7 +512,7 @@ bool Monitor::Analyse()
if ( shared_data->force_state != FORCE_OFF )
score = Compare( *image );
if ( shared_data->force_state == FORCE_ON )
score = ZM_FORCED_ALARM_SCORE;
score = (int)config.Item( ZM_FORCED_ALARM_SCORE );
if ( score )
{
@ -579,7 +579,7 @@ bool Monitor::Analyse()
}
}
if ( ZM_BLEND_ALARMED_IMAGES || state != ALARM )
if ( (bool)config.Item( ZM_BLEND_ALARMED_IMAGES ) || state != ALARM )
{
ref_image.Blend( *image, ref_blend_perc );
//DumpImage( image );

View File

@ -95,16 +95,16 @@ void RemoteCamera::Initialise()
exit( -1 );
}
sprintf( request, "GET %s %s\n", path, "HTTP/" ZM_HTTP_VERSION );
sprintf( request, "GET %s HTTP/%s\n", path, (const char *)config.Item( ZM_HTTP_VERSION ) );
sprintf( &(request[strlen(request)]), "Host: %s\n", host );
sprintf( &(request[strlen(request)]), "User-Agent: %s/%s\n", ZM_HTTP_UA, ZM_VERSION );
sprintf( &(request[strlen(request)]), "User-Agent: %s/%s\n", (const char *)config.Item( ZM_HTTP_UA ), ZM_VERSION );
sprintf( &(request[strlen(request)]), "Connection: Keep-Alive\n\n" );
Debug( 2, ( "Request: %s", request ));
}
if ( !timeout.tv_sec )
{
timeout.tv_sec = ZM_HTTP_TIMEOUT/1000;
timeout.tv_usec = ZM_HTTP_TIMEOUT%1000;
timeout.tv_sec = (int)config.Item( ZM_HTTP_TIMEOUT )/1000;
timeout.tv_usec = (int)config.Item( ZM_HTTP_TIMEOUT )%1000;
}
}

View File

@ -112,7 +112,7 @@ int main( int argc, char *argv[] )
{
Info(( "Warming up" ));
if ( ZM_OPT_FRAME_SERVER )
if ( (bool)config.Item( ZM_OPT_FRAME_SERVER ) )
{
Event::OpenFrameSocket( monitor->Id() );
}

View File

@ -187,7 +187,7 @@ int main( int argc, char *argv[] )
for ( int i = 0; i < n_monitors; i++ )
{
long min_delay = MAXINT;
if ( ZM_NO_MAX_FPS_ON_ALARM && monitors[i]->GetState() == Monitor::ALARM )
if ( (bool)config.Item( ZM_NO_MAX_FPS_ON_ALARM ) && monitors[i]->GetState() == Monitor::ALARM )
{
next_delays[i] = 0;
}

View File

@ -60,7 +60,7 @@ int OpenSocket( int monitor_id )
}
char sock_path[PATH_MAX] = "";
sprintf( sock_path, FILE_SOCK_FILE, monitor_id );
sprintf( sock_path, "%s/zmf-%d.sock", (const char *)config.Item( ZM_PATH_SOCKS ), monitor_id );
if ( unlink( sock_path ) < 0 )
{
Warning(( "Can't unlink '%s': %s", sock_path, strerror(errno) ));
@ -241,7 +241,7 @@ int main( int argc, char *argv[] )
ReopenSocket( sd, monitor->Id() );
}
static char path[PATH_MAX] = "";
sprintf( path, ZM_DIR_EVENTS "/%s/%d/%s-%03d.jpg", monitor->Name(), frame_header.event_id, frame_header.alarm_frame?"analyse":"capture", frame_header.frame_id );
sprintf( path, "%s//%s/%d/%s-%03d.jpg", (const char *)config.Item( ZM_DIR_EVENTS ), monitor->Name(), frame_header.event_id, frame_header.alarm_frame?"analyse":"capture", frame_header.frame_id );
Debug( 1, ( "Got image, writing to %s", path ));
FILE *fd = 0;

View File

@ -20,8 +20,6 @@
#ifndef ZMFILE_H
#define ZMFILE_H
#define FILE_SOCK_FILE ZM_PATH_SOCKS "/zmf-%d.sock"
struct FrameHeader
{
int event_id;

View File

@ -25,61 +25,10 @@ define( "ZM_VERSION", "<from zmconfig>" ); // Version Number
define( "ZM_PATH_BIN", "<from zmconfig>" ); // Path to binaries
define( "ZM_PATH_WEB", "<from zmconfig>" ); // Path to web files
define( "ZM_PATH_CGI", "<from zmconfig>" ); // Path to cgi files
define( "ZM_PATH_ZMS", "<from zmconfig>" ); // Web path to zms streaming server
define( "ZM_DB_SERVER", "<from zmconfig>" ); // Database server
define( "ZM_DB_NAME", "<from zmconfig>" ); // Database containing the tables
define( "ZM_DB_USERA", "<from zmconfig>" ); // Database login
define( "ZM_DB_PASSA", "<from zmconfig>" ); // Database password
define( "ZM_OPT_USE_AUTH", "<from zmconfig>" ); // Authenticate user logins to ZoneMinder
define( "ZM_DIR_EVENTS", "<from zmconfig>" ); // Directory where events live
define( "ZM_DIR_IMAGES", "<from zmconfig>" ); // Directory where images live
define( "ZM_DIR_SOUNDS", "<from zmconfig>" ); // Drectory where sounds live
define( "ZM_OPT_CAMBOZOLA", "<from zmconfig>" ); // Is the (optional) cambozola java streaming client installed (recommended)
define( "ZM_PATH_CAMBOZOLA", "<from zmconfig>" ); // Path to (optional) cambozola java streaming client (recommended)
define( "ZM_CAN_STREAM", "<from zmconfig>" ); // Override the detection of streaming capability by browser
define( "ZM_PATH_NETPBM", "<from zmconfig>" ); // Path to (optional) Netpbm utilities
define( "ZM_WEB_POPUP_ON_ALARM", <from zmconfig> ); // Whether the watch window jumps to front if an alarm occurs
define( "ZM_WEB_SOUND_ON_ALARM", <from zmconfig> ); // Whether the watch window jumps to front if an alarm occurs
define( "ZM_WEB_ALARM_SOUND", <from zmconfig> ); // A sound to play on alarm, put this in the sounds directory
define( "ZM_WEB_MONTAGE_MAX_COLS", <from zmconfig> ); // The maximum number of Monitor columns in the montage view
define( "ZM_RECORD_EVENT_STATS", <from zmconfig> ); // Whether to record event statistical information, switch off if too slow
define( "ZM_OPT_MPEG", "<from zmconfig>" ); // Is there an (optional) mpeg video encoder installed
define( "ZM_OPT_FAST_DELETE", <from zmconfig> ); // Whether we only delete event DB records and leave zmaudit to do the rest
define( "ZM_OPT_X10", <from zmconfig> ); // Whether we want to interface with X10 devices
define( "ZM_OPT_FRAME_SERVER", <from zmconfig> ); // Whether to use the frame server
define( "ZM_WEB_REFRESH_METHOD", <from zmconfig> ); // What method windows should use to refresh themselves
// Bandwidth specific ones from zmconfig.pl, again do not edit these directly as changes may be lost
//
define( "ZM_WEB_H_REFRESH_MAIN", <from zmconfig> ); // How often (in seconds) the main console window refreshes
define( "ZM_WEB_H_REFRESH_CYCLE", <from zmconfig> ); // How often the cycle watch windows swaps to the next monitor
define( "ZM_WEB_H_REFRESH_IMAGE", <from zmconfig> ); // How often the watched image is refreshed (if not streaming)
define( "ZM_WEB_H_REFRESH_STATUS", <from zmconfig> ); // How often the little status frame refreshes itself in the watch window
define( "ZM_WEB_H_REFRESH_EVENTS", <from zmconfig> ); // How often the event listing is refreshed in the watch window, only for recent events
define( "ZM_WEB_H_STREAM_IDLE_DELAY", <from zmconfig> );// How long (in milliseconds) between streamed frames in the watch window
define( "ZM_WEB_H_STREAM_FRAME_DELAY", <from zmconfig> );// How long (in milliseconds) to wait before looking for the next streamed frame
define( "ZM_WEB_H_STREAM_EVENT_DELAY", <from zmconfig> );// How long (in milliseconds) to wait between each frame when streaming events
define( "ZM_WEB_H_IMAGE_SCALING", <from zmconfig> ); // Image scaling for thumbnails, bandwidth versus cpu in rescaling
define( "ZM_WEB_M_REFRESH_MAIN", <from zmconfig> ); // How often (in seconds) the main console window refreshes
define( "ZM_WEB_M_REFRESH_CYCLE", <from zmconfig> ); // How often the cycle watch windows swaps to the next monitor
define( "ZM_WEB_M_REFRESH_IMAGE", <from zmconfig> ); // How often the watched image is refreshed (if not streaming)
define( "ZM_WEB_M_REFRESH_STATUS", <from zmconfig> ); // How often the little status frame refreshes itself in the watch window
define( "ZM_WEB_M_REFRESH_EVENTS", <from zmconfig> ); // How often the event listing is refreshed in the watch window, only for recent events
define( "ZM_WEB_M_STREAM_IDLE_DELAY", <from zmconfig> );// How long (in milliseconds) between streamed frames in the watch window
define( "ZM_WEB_M_STREAM_FRAME_DELAY", <from zmconfig> );// How long (in milliseconds) to wait before looking for the next streamed frame
define( "ZM_WEB_M_STREAM_EVENT_DELAY", <from zmconfig> );// How long (in milliseconds) to wait between each frame when streaming events
define( "ZM_WEB_M_IMAGE_SCALING", <from zmconfig> ); // Image scaling for thumbnails, bandwidth versus cpu in rescaling
define( "ZM_WEB_L_REFRESH_MAIN", <from zmconfig> ); // How often (in seconds) the main console window refreshes
define( "ZM_WEB_L_REFRESH_CYCLE", <from zmconfig> ); // How often the cycle watch windows swaps to the next monitor
define( "ZM_WEB_L_REFRESH_IMAGE", <from zmconfig> ); // How often the watched image is refreshed (if not streaming)
define( "ZM_WEB_L_REFRESH_STATUS", <from zmconfig> ); // How often the little status frame refreshes itself in the watch window
define( "ZM_WEB_L_REFRESH_EVENTS", <from zmconfig> ); // How often the event listing is refreshed in the watch window, only for recent events
define( "ZM_WEB_L_STREAM_IDLE_DELAY", <from zmconfig> );// How long (in milliseconds) between streamed frames in the watch window
define( "ZM_WEB_L_STREAM_FRAME_DELAY", <from zmconfig> );// How long (in milliseconds) to wait before looking for the next streamed frame
define( "ZM_WEB_L_STREAM_EVENT_DELAY", <from zmconfig> );// How long (in milliseconds) to wait between each frame when streaming events
define( "ZM_WEB_L_IMAGE_SCALING", <from zmconfig> ); // Image scaling for thumbnails, bandwidth versus cpu in rescaling
define( "ZM_WEB_P_REFRESH_MAIN", <from zmconfig> ); // How often (in seconds) the main console window refreshes
define( "ZM_WEB_P_REFRESH_IMAGE", <from zmconfig> ); // How often the watched image is refreshed (if not streaming)
// This section is options normally derived from other options or configuration
//
@ -93,6 +42,9 @@ define( "MAX_EVENTS", 10 ); // The maximum number of events to show in th
define( "EVENT_HEADER_LINES", 25 ); // How many events are listed in the event window before a new header is inserted
define( "LEARN_MODE", false ); // Currently unimplemented, do not change
require_once( 'zm_db.php' );
loadConfig();
switch ( $bandwidth )
{
case "high" :
@ -154,6 +106,7 @@ function loadConfig()
$monitors = array();
while( $row = mysql_fetch_assoc( $result ) )
{
define( $row[Name], $row[Value] );
$config[$row[Name]] = $row;
if ( !($config_cat = &$config_cats[$row[Category]]) )
{

View File

@ -31,9 +31,6 @@ ini_set( "session.name", "ZMSESSID" );
session_start();
require_once( 'zm_config.php' );
require_once( 'zm_db.php' );
loadConfig();
if ( ZM_OPT_USE_AUTH )
{

View File

@ -37,7 +37,6 @@ session_start();
$bandwidth = "mobile";
require_once( 'zm_config.php' );
require_once( 'zm_db.php' );
require_once( 'zm_funcs.php' );
require_once( 'zm_actions.php' );