--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/RemoteSite/FTP/Proxy.pm Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,212 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+#
+# Description:
+# RemoteSite::FTP::Proxy.pm
+#
+
+package RemoteSite::FTP::Proxy;
+
+use strict;
+use Net::FTP;
+
+use RemoteSite::FTP;
+use vars qw(@ISA);
+@ISA=("RemoteSite::FTP");
+
+#
+# Initialization
+#
+
+sub Initialize {
+ my $self = shift;
+
+ my %args = @_;
+ $self->{proxy} = $args{proxy};
+ $self->{proxyUsername} = $args{proxy_username};
+ $self->{proxyPassword} = $args{proxy_password};
+
+ #if proxy username or password not defined ask for them interactively
+ unless ($self->ProxyUsername()) {
+ print 'Proxy FTP username: ';
+ my $userName = <STDIN>;
+ if ($userName) {
+ chomp ($userName);
+ $self->ProxyUsername($userName);
+ }
+ }
+ unless ($self->ProxyPassword()) {
+ print 'Proxy FTP password: ';
+ $self->ProxyPassword(Utils::QueryPassword());
+ }
+
+ #call base class initialization
+ $self->SUPER::Initialize(@_);
+}
+
+#
+# Public getters/setters
+#
+
+sub Proxy {
+ my $self = shift;
+ if (defined $_[0]) {$self->{proxy} = shift;}
+ return $self->{proxy};
+}
+
+sub ProxyUsername {
+ my $self = shift;
+ if (defined $_[0]) {$self->{proxyUsername} = shift;}
+ return $self->{proxyUsername};
+}
+
+sub ProxyPassword {
+ my $self = shift;
+ if (defined $_[0]) {$self->{proxyPassword} = shift;}
+ return $self->{proxyPassword};
+}
+
+#
+# Private
+#
+
+sub Connect {
+ my $self = shift;
+
+ unless ($self->Proxy()) {
+ $self->HandleError("Cannot connect to proxy, host name not defined");
+ }
+ unless ($self->Host()) {
+ $self->HandleError("Cannot connect to FTP site from proxy, host name not defined");
+ }
+
+ my $debug = (($self->{verbose} > 1) ? 1 : 0);
+
+ #Attempt to connect (or reconnect of connection fails)
+ for (1..$self->Reconnects()) {
+ $self->{ftp} = undef;
+ if ($self->{verbose}) {
+ print "Connecting to proxy server ".$self->Proxy()."...\n";
+ }
+ $self->{ftp} = Net::FTP->new($self->Proxy(),
+ Passive => $self->PassiveMode(),
+ Debug => $debug,
+ Timeout => $self->Timeout());
+ if (defined $self->{ftp}) {
+ # code to support Blue Coat proxy ftp server
+
+ if ($self->{ftp}->message =~ /Blue Coat Ftp Service/) {
+ # do BC login
+ $self->{ftp}->login($self->Username().'@'.$self->Host()." ".$self->ProxyUsername(),
+ $self->Password(),
+ $self->ProxyPassword())
+ or $self->HandleError("FTP via Blue Coat proxy login failed");
+ }
+ else {
+ #login to proxy server
+ $self->{ftp}->login($self->ProxyUsername(), $self->ProxyPassword())
+ or $self->HandleError("Proxy server login failed");
+
+ #login to ftp site from proxy server
+ $self->{ftp}->login($self->Username().'@'.$self->Host(), $self->Password())
+ or $self->HandleError("FTP login failed");
+ }
+ #change transfer mode to binary
+ $self->{ftp}->binary()
+ or $self->HandleError("Failed to set FTP server to binary transfer mode");
+ return;
+ }
+ }
+ $self->HandleError("Cannot connect to proxy server ".$self->Proxy());
+}
+
+1;
+
+=head1 NAME
+
+RemoteSite::FTP::Proxy.pm - Access a remote FTP site via a proxy.
+
+=head1 SYNOPSIS
+
+ use RemoteSite::FTP::Proxy;
+
+ $ftp = RemoteSite::FTP::Proxy->New(host => 'ftp.somehost.com',
+ username => 'myusername',
+ password => 'mypassword',
+ proxy => 'ftp.proxyhost.com',
+ proxy_username => 'myproxyuser',
+ proxy_password => 'myproxypass',
+ verbose => 1);
+
+ if ($ftp->FileExists('/somedir/someremotefile')) {
+ do something...
+ }
+ $ftp->SendFile('somelocalfile', 'someremotefile');
+ $ftp->GetFile('someremotefile', 'somelocalfile');
+
+=head1 DESCRIPTION
+
+C<RemoteSite::FTP::Proxy> is inherited from C<RemoteSite::FTP>, it modifies base module methods to implement accessing an FTP site via a proxy server
+
+=head1 INTERFACE
+
+=head2 New
+
+Passed an argument list in the form of hash key value pairs. The supported arguments are...
+
+ host => $host_address_string
+ username => $user_name_string
+ password => $pass_word_string
+ proxy => $proxy_address_string
+ proxy_username => $proxy_username_string
+ proxy_password => $proxy_password_string
+ verbose => $verbosity_integer
+
+Returns a reference to a C<RemoteSite::FTP::Proxy> object
+
+=head2 Proxy
+
+Returns the current value of the C<proxy> attribute which contains the proxy FTP address. If passed an argument sets the attribute to this new value.
+
+=head2 ProxyUsername
+
+Returns the current value of the C<proxyUsername> attribute which stores the user name required to access the proxy FTP site. If passed an argument sets the attribute to this new value.
+
+=head2 ProxyPassword
+
+Returns the current value of the C<proxyPassword> attribute which stores the password required to access the proxy FTP site. If passed an argument sets the attribute to this new value.
+
+=head1 KNOWN BUGS
+
+None
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+
+ Contributors:
+
+ Description:
+
+
+=cut