Subject: | broken? given(<hash>){ when(<scalar>) }} causing starttls to fail as well |
Using Debian 6 (squeeze) I cannot connect to an ejabberd server.
POE::Component::Jabber complains that "Non-compliant server
implementation! SASL negotiation not initiated."
I tracked it down to the given() statement on line 468 of
/usr/share/perl5/POE/Component/Jabber/XMPP.pm (and added a Data::Dumper
line to inspect $clist)
given(my $clist = $node->getChildrenHash())
{
print Data::Dumper->Dump([ref($clist),$clist]);
when('starttls')
{
print "'starttls' is a key in \$clist\n";
my $starttls =
POE::Filter::XML::Node->new('starttls', ['xmlns', +NS_XMPP_TLS]);
$kernel->yield('output_handler', $starttls, 1);
$kernel->post($heap->events(), +PCJ_SSLNEGOTIATE);
}
The Data::Dumper call outputs:
$VAR1 = 'HASH';
$VAR2 = {
'register' => [
bless( do{\(my $o = 187558000)},
'POE::Filter::XML::Node' )
],
'c' => [
bless( do{\(my $o = 190233488)}, 'POE::Filter::XML::Node' )
],
'starttls' => [
bless( do{\(my $o = 190213512)},
'POE::Filter::XML::Node' )
],
'mechanisms' => [
bless( do{\(my $o = 190590640)},
'POE::Filter::XML::Node' )
]
};
But the print "'starttls' is a key in \$clist\n"; is never called
It would appear that the given(HASH){ when(SCALAR){ do_something }}
doesn't appear to be doing something even when the key is in the hash.
Version Information:
dpkg -l perl libpoe-component-jabber-perl|grep "^ii"
ii libpoe-component-jabber-perl 3.00-1
POE Component for communicating over Jabber
ii perl 5.10.1-17
Larry Wall's Practical Extraction and Report Language