35 |
# meterod version |
# meterod version |
36 |
################################################################################ |
################################################################################ |
37 |
|
|
38 |
$::VERSION='1.05.02'; |
$::VERSION='1.05.05'; |
39 |
$::RELEASE_DATE='not yet released'; |
$::RELEASE_DATE='not yet released'; |
40 |
|
|
41 |
############################################################################### |
############################################################################### |
44 |
|
|
45 |
use strict; |
use strict; |
46 |
|
|
47 |
|
use Socket; |
48 |
|
|
49 |
use Meteor::Syslog; |
use Meteor::Syslog; |
50 |
|
|
51 |
use Meteor::Socket; |
use Meteor::Socket; |
65 |
our $AGE_CHECK_INTERVALL=60; |
our $AGE_CHECK_INTERVALL=60; |
66 |
|
|
67 |
our $MAX_EXIT_DELAY=120; |
our $MAX_EXIT_DELAY=120; |
68 |
|
|
69 |
|
our $UDP_MAX_MESSAGE_SIZE=8192; |
70 |
|
|
71 |
############################################################################### |
############################################################################### |
72 |
# Main |
# Main |
106 |
{ |
{ |
107 |
$0="$::PGM daemon"; |
$0="$::PGM daemon"; |
108 |
|
|
109 |
unless($::CONF{'Debug'}) |
my $facility=$::CONF{'SyslogFacility'} || $Meteor::Syslog::DEFAULT_FACILITY; |
110 |
|
|
111 |
|
unless($::CONF{'Debug'} || $facility eq 'none') |
112 |
{ |
{ |
113 |
# close standard file descriptors |
# close standard file descriptors |
114 |
close(STDIN); |
close(STDIN); |
131 |
} |
} |
132 |
else |
else |
133 |
{ |
{ |
134 |
print "$::PGM PID: $$\n"; |
&::syslog('info',"PID\t%s",$$); |
135 |
} |
} |
136 |
} |
} |
137 |
|
|
164 |
); |
); |
165 |
my $subscriberServerFN=$subscriberServer->fileno(); |
my $subscriberServerFN=$subscriberServer->fileno(); |
166 |
|
|
167 |
|
my $udpServer=undef; |
168 |
|
my $udpPort=$::CONF{'UDPPort'}; |
169 |
|
my $udpServerFN=undef; |
170 |
|
if($udpPort && $udpPort>0) |
171 |
|
{ |
172 |
|
$udpServer=Meteor::Socket->newUDPServer( |
173 |
|
$udpPort, |
174 |
|
$::CONF{'UDPIP'} |
175 |
|
); |
176 |
|
$udpServerFN=$udpServer->fileno(); |
177 |
|
} |
178 |
|
|
179 |
my $serverVector=''; |
my $serverVector=''; |
180 |
vec($serverVector,$controlServerFN,1)=1; |
vec($serverVector,$controlServerFN,1)=1; |
181 |
vec($serverVector,$subscriberServerFN,1)=1; |
vec($serverVector,$subscriberServerFN,1)=1; |
182 |
|
vec($serverVector,$udpServerFN,1)=1 if(defined($udpServerFN)); |
183 |
|
|
184 |
my $lastAgeCheck=time; |
my $lastAgeCheck=time; |
185 |
|
|
198 |
my $rVec=$serverVector; |
my $rVec=$serverVector; |
199 |
my $wVec=''; |
my $wVec=''; |
200 |
my $eVec=''; |
my $eVec=''; |
201 |
|
|
202 |
my $rout; |
my $rout; |
203 |
my $wout; |
my $wout; |
204 |
my $eout; |
my $eout; |
205 |
|
|
206 |
Meteor::Connection->addAllHandleBits(\$rVec,\$wVec,\$eVec); |
Meteor::Connection->addAllHandleBits(\$rVec,\$wVec,\$eVec); |
207 |
|
|
208 |
my $timeout=$MAIN_LOOP_TIMEOUT; |
my $timeout=$MAIN_LOOP_TIMEOUT; |
227 |
{ |
{ |
228 |
Meteor::Subscriber->newFromServer($subscriberServer); |
Meteor::Subscriber->newFromServer($subscriberServer); |
229 |
} |
} |
230 |
|
if(defined($udpServerFN) && vec($rout,$udpServerFN,1)) |
231 |
|
{ |
232 |
|
&handleUPD($udpServer); |
233 |
|
} |
234 |
|
|
235 |
Meteor::Connection->checkAllHandleBits($rout,$wout,$eout); |
Meteor::Connection->checkAllHandleBits($rout,$wout,$eout); |
236 |
} |
} |
351 |
|
|
352 |
&::syslog('emerg',"$::PGM loop exited"); |
&::syslog('emerg',"$::PGM loop exited"); |
353 |
|
|
354 |
|
############################################################################### |
355 |
|
# Subroutines |
356 |
|
############################################################################### |
357 |
|
sub handleUPD { |
358 |
|
$udpServer=shift; |
359 |
|
|
360 |
|
my $line; |
361 |
|
my $hispaddr=recv($udpServer->{'handle'},$line,$::UDP_MAX_MESSAGE_SIZE,0); |
362 |
|
|
363 |
|
&::syslog('debug',"udp message received: %s",$line); |
364 |
|
|
365 |
|
return unless($line=~s/^(\S+)\s//); |
366 |
|
|
367 |
|
my $cmd=$1; |
368 |
|
|
369 |
|
if($cmd eq 'ADDMESSAGE') |
370 |
|
{ |
371 |
|
return unless($line=~s/^(\S+)\s//); |
372 |
|
|
373 |
|
my $channelName=$1; |
374 |
|
my $channel=Meteor::Channel->channelWithName($channelName); |
375 |
|
my $msg=$channel->addMessage($line); |
376 |
|
my $msgID=$msg->id(); |
377 |
|
&::syslog('debug',"udp: new message added, ID %s",$msgID); |
378 |
|
} |
379 |
|
} |
380 |
|
|
381 |
1; |
1; |
382 |
############################################################################EOF |
############################################################################EOF |