File Coverage

File:blib/lib/OpenSRF/Transport/SlimJabber/PeerConnection.pm
Coverage:23.7%

linestmtbrancondsubpodtimecode
1package OpenSRF::Transport::SlimJabber::PeerConnection;
2
9
9
9
50
30
70
use strict;
3
9
9
9
60
37
61
use base qw/OpenSRF::Transport::SlimJabber::Client/;
4
9
9
9
76
36
77
use OpenSRF::Utils::Config;
5
9
9
9
63
31
77
use OpenSRF::Utils::Logger qw(:level);
6
9
9
9
64
34
76
use OpenSRF::EX qw/:try/;
7
8 - 15
=head1 Description

Represents a single connection to a remote peer.  The 
Jabber values are loaded from the config file.  

Subclasses OpenSRF::Transport::SlimJabber::Client.

=cut
16
17 - 24
=head2 new()

	new( $appname );

	The $appname parameter tells this class how to find the correct
	Jabber username, password, etc to connect to the server.

=cut
25
26our %apps_hash;
27our $_singleton_connection;
28
29sub retrieve {
30
0
0
        my( $class, $app ) = @_;
31
0
        return $_singleton_connection;
32}
33
34
35sub new {
36
0
1
        my( $class, $app ) = @_;
37
38
0
        my $peer_con = $class->retrieve;
39
0
        return $peer_con if ($peer_con and $peer_con->tcp_connected);
40
41
0
        my $config = OpenSRF::Utils::Config->current;
42
43
0
        if( ! $config ) {
44
0
                throw OpenSRF::EX::Config( "No suitable config found for PeerConnection" );
45        }
46
47
0
        my $conf = OpenSRF::Utils::Config->current;
48
0
        my $domain = $conf->bootstrap->domain;
49
0
        my $h = $conf->env->hostname;
50
0
        OpenSRF::Utils::Logger->error("use of <domains/> is deprecated") if $conf->bootstrap->domains;
51
52
0
        my $username = $conf->bootstrap->username;
53
0
        my $password = $conf->bootstrap->passwd;
54
0
        my $port = $conf->bootstrap->port;
55
0
        my $resource = "${app}_drone_at_$h";
56
0
        my $host = $domain; # XXX for now...
57
58
0
0
        if( $app eq "client" ) { $resource = "client_at_$h"; }
59
60
0
        OpenSRF::EX::Config->throw( "JPeer could not load all necessary values from config" )
61                unless ( $username and $password and $resource and $host and $port );
62
63
0
        OpenSRF::Utils::Logger->transport( "Built Peer with", INTERNAL );
64
65
0
        my $self = __PACKAGE__->SUPER::new(
66                username => $username,
67                resource => $resource,
68                password => $password,
69                host => $host,
70                port => $port,
71                );
72
73
0
        bless( $self, $class );
74
75
0
        $self->app($app);
76
77
0
        $_singleton_connection = $self;
78
0
        $apps_hash{$app} = $self;
79
80
0
        return $_singleton_connection;
81
0
        return $apps_hash{$app};
82}
83
84sub process {
85
0
1
        my $self = shift;
86
0
        my $val = $self->SUPER::process(@_);
87
0
        return 0 unless $val;
88
0
        return OpenSRF::Transport->handler($self->app, $val);
89}
90
91sub app {
92
0
0
        my $self = shift;
93
0
        my $app = shift;
94
0
        $self->{app} = $app if $app;
95
0
        return $self->{app};
96}
97
981;
99