35 |
# meterod version |
# meterod version |
36 |
################################################################################ |
################################################################################ |
37 |
|
|
38 |
$::VERSION='1.05.04'; |
$::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 |
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 |
|
|
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 |