]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/Application/Proxy.pm
proxies reqeust to storage where there is no middle layer code
[Evergreen.git] / Open-ILS / src / perlmods / OpenILS / Application / Proxy.pm
1 package OpenILS::Application::Proxy;
2 use strict; use warnings;
3 use base qw/OpenSRF::Application/;
4 use OpenSRF::EX qw(:try);
5
6
7 __PACKAGE__->register_method(
8         method  => "proxy",
9         api_name        => "open-ils.proxy.proxy",
10 );
11
12
13 sub proxy {
14         my($self, $client, $user_session, 
15                         $server, $method, @params) = @_;
16
17         warn "$user_session - $server - $method\n";
18
19         throw OpenSRF::EX::ERROR ("Not enough args to proxy")
20                 unless ($user_session and $server and $method);
21
22
23         my $session = OpenSRF::AppSession->create($server);
24         my $request = $session->request( $method, @params );
25         if(!$request) {
26                 throw OpenSRF::EX::ERROR 
27                         ("No request built on call to session->request( $method, @params )");
28         }
29         
30         $request->wait_complete;
31
32         if( $request->failed() ) { 
33
34                 throw OpenSRF::EX::ERROR
35                         ($request->failed()->stringify());
36
37         } else {
38
39                 while( my $response = $request->recv ) {
40                         $client->respond( $response->content );
41                 }
42         }
43
44         $request->finish();
45         $session->finish();
46         $session->disconnect();
47
48         return undef;
49 }
50
51 1;