I've read all the source code and I realize that I should recieve an
Unrecognized Peer error when the server can't be reached or it doesn't
return a proper XML check, when called from the authenticate() sub in
OpenSRS::XML_Client.

The following code show's what happens:

    $prompt = $self->read_data();

    if (exists $prompt->{response_code} and $prompt->{response_code} == 555 ) {
        # the ip address from which we are connecting is not accepted
        return ( error => $prompt->{response_text} );
    } elsif ( $prompt->{attributes}->{sender} !~ /OpenSRS\sSERVER/ ||
              $prompt->{attributes}->{version} !~ /^XML/ ) {
        return ( error => "Unrecognized Peer" );
    }

We read from the server first, and see what we get.  We wand a proper
sender and version.  The odd thing is, that when I telnet to the
server I *do* get these things.

[cwest@ibook OpenSRS]$ telnet horizon.opensrs.net 55000
Trying 216.40.33.60...
Connected to horizon.opensrs.net.
Escape character is '^]'.
Content-Length: 559

<?xml version='1.0' encoding="UTF-8" standalone="no" ?>
<!DOCTYPE OPS_envelope SYSTEM "ops.dtd">
<OPS_envelope>
 <header>
  <version>0.9</version>
  </header>
 <body>
  <data_block>
   <dt_assoc>
    <item key="object">VERSION</item>
    <item key="attributes">
     <dt_assoc>
      <item key="state">ready</item>
      <item key="version">XML:0.1</item>
      <item key="sender">OpenSRS SERVER</item>
     </dt_assoc>
    </item>
    <item key="protocol">XCP</item>
    <item key="action">CHECK</item>
   </dt_assoc>
  </data_block>
 </body>
</OPS_envelope>
Connection closed by foreign host.

Ok, so what's the deal?  Beats me.  I put some debugging in the
libraries and when I run my code that uses them this is the sort of
things I get:

  # what read_data returns from earlier
  $VAR1 = {
            'response_text' => 'No response from server',
            'is_success' => 0,
            'response_code' => 351
          };
  # what authenticate returns
  $VAR1 = 'error';
  $VAR2 = 'Unrecognized Peer';

Well, now I see /why/ I get Unrecognized Peer.  But I don't understand
why I get 'No response from server'.  After all, I use the same host
and port in my telnet test.  I've connected via a web browser even,
and it works (not that I expected it to fail).

So I'm boggled, and apparently so are the helpful support folks at
Tucows.  I mean, they're trying hard, but I think they're just as
confused as I am.

Thanks for any help.

-- 
Casey West

Reply via email to