package POE::Component::Server::Bayeux::Utilities;
use strict;
use warnings;
use base qw(Exporter);
our %EXPORT_TAGS = ( all => [qw(channel_match)] );
our @EXPORT_OK = qw(channel_match);
sub channel_match {
my ($from, $to) = @_;
# Should channel $from be delivered to someone subscribed to channel $to?
return 1 if $from eq $to;
my @from = split /\//, $from;
my @to = split /\//, $to;
for (my $i = 0; $i <= $#from; $i++) {
return 0 if ! defined $to[$i];
# Match all
return 1 if $to[$i] eq '**';
# If simple glob '*' and from has no more parts
return 1 if $to[$i] eq '*' && $#from == $i;
return 0 if $from[$i] ne $to[$i];
}
return 0 if int @to > int @from;
# If here, it matched
return 1;
}
1;