/
usr
/
share
/
perl5
/
CPANPLUS
/
Shell
/
Default
/
Plugins
/
/usr/share/perl5/CPANPLUS/Shell/Default/Plugins
mkdir
upload
Name
Size
Mode
Actions
CustomSource.pm
5960
0644
edit
dl
rm
HOWTO.pod
3890
0644
edit
dl
rm
Remote.pm
4738
0644
edit
dl
rm
Source.pm
2619
0644
edit
dl
rm
Edit:
/usr/share/perl5/CPANPLUS/Shell/Default/Plugins/Remote.pm
(4738B)
package CPANPLUS::Shell::Default::Plugins::Remote; use strict; use Module::Load; use Params::Check qw[check]; use CPANPLUS::Error qw[error msg]; use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext'; =head1 NAME CPANPLUS::Shell::Default::Plugins::Remote =head1 SYNOPSIS CPAN Terminal> /connect localhost 1337 --user=foo --pass=bar ... CPAN Terminal@localhost> /disconnect =head1 DESCRIPTION This is a C<CPANPLUS::Shell::Default> plugin that allows you to connect to a machine running an instance of C<CPANPLUS::Daemon>, allowing remote usage of the C<CPANPLUS Shell>. A sample session, updating all modules on a remote machine, might look like this: CPAN Terminal> /connect --user=my_user --pass=secret localhost 1337 Connection accepted Successfully connected to 'localhost' on port '11337' Note that no output will appear until a command has completed -- this may take a while CPAN Terminal@localhost> o; i * [....] CPAN Terminal@localhost> /disconnect CPAN Terminal> =cut ### store the original prompt here, so we can restore it on disconnect my $Saved_Prompt; sub plugins { ( connect => 'connect', disconnect => 'disconnect' ) } sub connect { my $class = shift; my $shell = shift; my $cb = shift; my $cmd = shift; my $input = shift || ''; my $opts = shift || {}; my $conf = $cb->configure_object; my $user; my $pass; { local $Params::Check::ALLOW_UNKNOWN = 1; my $tmpl = { user => { default => 'cpanpd', store => \$user }, pass => { required => 1, store => \$pass }, }; check( $tmpl, $opts ) or return; } my @parts = split /\s+/, $input; my $host = shift @parts || 'localhost'; my $port = shift @parts || '1337'; load IO::Socket; my $remote = IO::Socket::INET->new( Proto => "tcp", PeerAddr => $host, PeerPort => $port, ) or ( error( loc( "Cannot connect to port '%1' ". "on host '%2'", $port, $host ) ), return ); my $con = { connection => $remote, username => $user, password => $pass, }; ### store the connection $shell->remote( $con ); my($status,$buffer) = $shell->__send_remote_command( "VERSION=$CPANPLUS::Shell::Default::VERSION"); if( $status ) { print "\n$buffer\n\n"; print loc( "Successfully connected to '%1' on port '%2'", $host, $port ); print "\n\n"; print loc( "Note that no output will appear until a command ". "has completed\n-- this may take a while" ); print "\n\n"; ### save the original prompt $Saved_Prompt = $shell->prompt; $shell->prompt( $shell->brand .'@'. $host .':'. $port .'> ' ); } else { print "\n$buffer\n\n"; print loc( "Failed to connect to '%1' on port '%2'", $host, $port ); print "\n\n"; $shell->remote( undef ); } } sub disconnect { my $class = shift; my $shell = shift; print "\n", ( $shell->remote ? loc( "Disconnecting from remote host" ) : loc( "Not connected to remote host" ) ), "\n\n"; $shell->remote( undef ); $shell->prompt( $Saved_Prompt ); } sub connect_help { return loc( " /connect [HOST PORT] # Connect to the remote machine,\n" . " # defaults taken from your config\n" . " --user=USER # Optional username\n" . " --pass=PASS # Optional password" ); } sub disconnect_help { return loc( " /disconnect # Disconnect from the remote server" ); } 1; =pod =head1 BUG REPORTS Please report bugs or other issues to E<lt>bug-cpanplus@rt.cpan.org<gt>. =head1 AUTHOR This module by Jos Boumans E<lt>kane@cpan.orgE<gt>. =head1 COPYRIGHT The CPAN++ interface (of which this module is a part of) is copyright (c) 2001 - 2007, Jos Boumans E<lt>kane@cpan.orgE<gt>. All rights reserved. This library is free software; you may redistribute and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<CPANPLUS::Shell::Default>, L<CPANPLUS::Shell>, L<cpanp> =cut # Local variables: # c-indentation-style: bsd # c-basic-offset: 4 # indent-tabs-mode: nil # End: # vim: expandtab shiftwidth=4:
Save
cmd:
run