[JDEV] Invalid handshake in component written with Jabber::Component
    DJ Adams 
    dj.adams at pobox.com
       
    Mon Nov  5 10:21:00 CST 2001
    
    
  
On Mon, Nov 05, 2001 at 07:22:23PM +0800, Migs Paraz wrote:
> I'm trying to write my own JUD transport in Perl using Jabber::Connection.
> I think the problem is the Perl script's "localname."  Thanks in advance!
> 
> Here's the script output:
Hi Migs
Here are a few observations / tips / questions...
> SEND: <?xml version='1.0'?><stream:stream xmlns='jabber:component:accept' xmlns:stream='http://etherx.jabber.org/streams' to='localhost'>
> RECV: <?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' id='3BE66CA0' xmlns='jabber:component:accept' from='jud'>
> SEND: <handshake id='1'>a4e308bfb34c7bade5130d882ad71599bb4bca89</handshake>
> RECV: <stream:error>Invalid handshake</stream:error><handshake/>
> stream error: Invalid handshake at /usr/lib/perl5/site_perl/5.6.0/i386-linux/XML/Parser/Expat.pm line 614
> 
Ok, this shows us that the handshake sent, containing the secret, which
wasn't correct...but as we'll see below, you don't show the snippet of
code where the secret is sent.
> 
> Here's the jabberd output:
> 
> Mon Nov  5 18:40:32 2001  mio.c:750 MIO read from socket 11: <handshake id='1'>a4e308bfb34c7bade5130d882ad71599bb4bca89</handshake>
> Mon Nov  5 18:40:32 2001  base_accept.c:105 process XML: m:8140B40 state:3, arg:8108AA8, x:81F2BA0
> Mon Nov  5 18:40:32 2001  mio.c:1032 mio_write called on x: 0 buffer: <stream:error>Invalid handshake</stream:error>
> Mon Nov  5 18:40:32 2001  mio.c:1032 mio_write called on x: 0 buffer: <handshake/>
> Mon Nov  5 18:40:32 2001  mio.c:275 write_dump writing data: <stream:error>Invalid handshake</stream:error>
> Mon Nov  5 18:40:32 2001  mio.c:275 write_dump writing data: <handshake/>
> Mon Nov  5 18:40:32 2001  base_accept.c:105 process XML: m:8140B40 state:4, arg:8108AA8, x:8050ADC
I don't think this log output matches the run of the script with the log
output shown above, because here, we can see that the secret must have been
correct, as the "correct" handshake reply - <handshake/> - was sent, rather
than a stream error.
> Here's the relevant part of the script:
> 
> use Jabber::Connection;
> use Jabber::NodeFactory;
> use Jabber::NS qw(:all);
> 
> my $c = new Jabber::Connection(
>   ns => "jabber:component:accept",                             
>   server => 'localhost:1234',
>   localname => "jud.localhost",
>   log    => 1,
> );
> 
> $c->connect or die "oops: ".$c->lastError;
> 
THis is all fine as far as it goes, but the crucial bit is missing - 
the call to auth(). You should have something here (after the call
to connect()) like this:
  $c->auth('test');
where the word 'test' matches that in the <secret/> tag in the 
XML stanza below.
> 
> <service id="jud">
>   <host>jud.localhost</host>
>   <accept>
>     <ip>127.0.0.1</ip>
>     <port>1234</port>
>     <secret>test</secret>
>   </accept>
> </service>
So basically, everything you've shown us here is correct, but what
you haven't shown us is perhaps the thing that is tripping you up, 
namely the specification of the secret in the call to auth(). 
Hope that helps
dj
    
    
More information about the JDev
mailing list