]> git.evergreen-ils.org Git - OpenSRF.git/blob - src/perlmods/OpenSRF/Transport/SlimJabber/PeerConnection.pm
making to work in new environment, added 'system_client' login for system
[OpenSRF.git] / src / perlmods / OpenSRF / Transport / SlimJabber / PeerConnection.pm
1 package OpenSRF::Transport::SlimJabber::PeerConnection;
2 use strict;
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/;
7
8 =head1 Description
9
10 Represents a single connection to a remote peer.  The 
11 Jabber values are loaded from the config file.  
12
13 Subclasses OpenSRF::Transport::SlimJabber::Client.
14
15 =cut
16
17 =head2 new()
18
19         new( $appname );
20
21         The $appname parameter tells this class how to find the correct
22         Jabber username, password, etc to connect to the server.
23
24 =cut
25
26 our %apps_hash;
27
28 sub retrieve { 
29         my( $class, $app ) = @_;
30         my @keys = keys %apps_hash;
31         OpenSRF::Utils::Logger->transport( 
32                         "Requesting peer for $app and we have @keys", INFO );
33         return $apps_hash{$app};
34 }
35
36
37
38 sub new {
39         my( $class, $app ) = @_;
40         my $config = OpenSRF::Utils::Config->current;
41
42         if( ! $config ) {
43                 throw OpenSRF::EX::Config( "No suitable config found" );
44         }
45
46         my $app_stat    = $app . "_peer";
47         my $username    = $config->transport->users->$app;
48         my $password    = $config->transport->auth->password;
49         my $resource    = $config->env->hostname . "_$$";
50         my $server;
51
52         my $host;
53         if( $app eq "client" ) {
54                 $host = $config->transport->server->client_primary;
55         } else {
56                 $host = "";
57         }
58
59         OpenSRF::EX::Config->throw( "JPeer could not load all necesarry values from config" )
60                 unless ( $username and $password and $resource );
61
62         my $self = __PACKAGE__->SUPER::new( 
63                 username                => $username,
64                 resource                => $resource,
65                 password                => $password,
66                 host                    => $host,
67                 );      
68                                         
69         bless( $self, $class );
70
71         $self->app($app);
72
73         $apps_hash{$app} = $self;
74         return $apps_hash{$app};
75 }
76
77 sub process {
78         my $self = shift;
79         my $val = $self->SUPER::process(@_);
80         return 0 unless $val;
81         OpenSRF::Utils::Logger->transport( "Calling transport handler for ".$self->app." with: $val", INTERNAL );
82         my $t;
83 #try {
84         $t = OpenSRF::Transport->handler($self->app, $val);
85
86 #       } catch OpenSRF::EX with {
87 #               my $e = shift;
88 #               $e->throw();
89
90 #       } catch Error with { return undef; }
91
92         return $t;
93 }
94
95 sub app {
96         my $self = shift;
97         my $app = shift;
98         if( $app ) {
99                 OpenSRF::Utils::Logger->transport( "PEER changing app to $app: ".$self->jid, INTERNAL );
100         }
101
102         $self->{app} = $app if ($app);
103         return $self->{app};
104 }
105
106 1;
107