DJabberd
view release on metacpan or search on metacpan
lib/DJabberd/VHost.pm view on Meta::CPAN
sub quirksmode { $_[0]{quirksmode} };
sub set_config_quirksmode {
my ($self, $val) = @_;
$self->{quirksmode} = as_bool($val);
}
sub set_config_s2s {
my ($self, $val) = @_;
$self->{s2s} = as_bool($val);
}
sub set_config_inbandreg {
my ($self, $val) = @_;
$self->{inband_reg} = as_bool($val);
}
sub set_config_childservice {
my ($self, $val) = @_;
my ($strjid, $desc) = split(/\s+/, $val, 2);
my $jid = DJabberd::JID->new($strjid);
$logger->logdie("Invalid JID ".$strjid) unless $jid;
$desc ||= $jid->node;
$logger->info("Registered $strjid as VHost child service: $desc");
$self->{disco_kids}{$jid} = $desc;
}
sub allow_inband_registration {
my $self = shift;
return $self->{inband_reg};
}
sub set_config_requiressl {
my ($self, $val) = @_;
$self->{require_ssl} = as_bool($val);
}
# true if vhost has s2s enabled
sub s2s {
my $self = shift;
return $self->{s2s};
}
sub child_services {
return $_[0]->{disco_kids};
}
sub server {
my $self = shift;
return $self->{server};
}
sub set_server {
my ($self, $server) = @_;
$self->{server} = $server;
Scalar::Util::weaken($self->{server});
}
sub run_hook_chain {
my $self = shift;
my %opts = @_;
my ($phase, $methods, $args, $fallback, $hook_inv)
= @opts{qw(phase methods args fallback hook_invocant)};
if (0) {
delete @opts{qw(phase methods args fallback hook_invocant)};
die if %opts;
}
hook_chain_fast($self,
$phase,
$args || [],
$methods || {},
$fallback || sub {},
$hook_inv);
}
my $dummy_sub = sub {};
sub hook_chain_fast {
my ($self, $phase, $args, $methods, $fallback, $hook_inv) = @_;
# fast path, no phases, only fallback:
if ($self && ! ref $phase && ! @{ $self->{hooks}->{$phase} || []}) {
$fallback->($self,
DJabberd::Callback->new({
_phase => $phase,
decline => $dummy_sub,
declined => $dummy_sub,
stop_chain => $dummy_sub,
%$methods,
}),
@$args) if $fallback;
return;
}
# make phase into an arrayref;
$phase = [ $phase ] unless ref $phase;
my @hooks;
foreach my $ph (@$phase) {
$logger->logcroak("Undocumented hook phase: '$ph'") unless
$DJabberd::HookDocs::hook{$ph};
# self can be undef if the connection object invokes us.
# because sometimes there is no vhost, as in the case of
# old serverin dialback without a to address.
if ($self) {
push @hooks, @{ $self->{hooks}->{$ph} || [] };
}
}
push @hooks, $fallback if $fallback;
# pre-declared here so they're captured by closures below
my ($cb, $try_another, $depth);
( run in 3.977 seconds using v1.01-cache-2.11-cpan-98e64b0badf )