1 package OpenSRF::Transport::SlimJabber::PeerConnection;
3 use base qw/OpenSRF::Transport::SlimJabber::Client/;
4 use OpenSRF::Utils::Config;
5 use OpenSRF::Utils::Logger qw(:level);
6 use OpenSRF::EX qw/:try/;
10 Represents a single connection to a remote peer. The
11 Jabber values are loaded from the config file.
13 Subclasses OpenSRF::Transport::SlimJabber::Client.
21 The $appname parameter tells this class how to find the correct
22 Jabber username, password, etc to connect to the server.
27 our $_singleton_connection;
30 my( $class, $app ) = @_;
31 return $_singleton_connection;
35 return unless $_singleton_connection;
36 $_singleton_connection->disconnect;
37 $_singleton_connection = undef;
42 my( $class, $app ) = @_;
44 my $peer_con = $class->retrieve;
45 return $peer_con if ($peer_con and $peer_con->tcp_connected);
47 my $config = OpenSRF::Utils::Config->current;
50 throw OpenSRF::EX::Config( "No suitable config found for PeerConnection" );
53 my $conf = OpenSRF::Utils::Config->current;
54 my $domain = $conf->bootstrap->domain;
55 my $h = $conf->env->hostname;
56 OpenSRF::Utils::Logger->error("use of <domains/> is deprecated") if $conf->bootstrap->domains;
58 my $username = $conf->bootstrap->username;
59 my $password = $conf->bootstrap->passwd;
60 my $port = $conf->bootstrap->port;
61 my $resource = "${app}_drone_at_$h";
62 my $host = $domain; # XXX for now...
64 if( $app eq "client" ) { $resource = "client_at_$h"; }
66 OpenSRF::EX::Config->throw( "JPeer could not load all necessary values from config" )
67 unless ( $username and $password and $resource and $host and $port );
69 my $self = __PACKAGE__->SUPER::new(
70 username => $username,
71 resource => $resource,
72 password => $password,
77 bless( $self, $class );
81 $_singleton_connection = $self;
82 $apps_hash{$app} = $self;
84 return $_singleton_connection;
85 return $apps_hash{$app};
90 my $val = $self->SUPER::process(@_);
92 return OpenSRF::Transport->handler($self->app, $val);
98 $self->{app} = $app if $app;