[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 package CPANPLUS::Shell::Default::Plugins::Remote; 2 3 use strict; 4 5 use Module::Load; 6 use Params::Check qw[check]; 7 use CPANPLUS::Error qw[error msg]; 8 use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext'; 9 10 =head1 NAME 11 12 CPANPLUS::Shell::Default::Plugins::Remote 13 14 =head1 SYNOPSIS 15 16 CPAN Terminal> /connect localhost 1337 --user=foo --pass=bar 17 ... 18 CPAN Terminal@localhost> /disconnect 19 20 =head1 DESCRIPTION 21 22 This is a C<CPANPLUS::Shell::Default> plugin that allows you to connect 23 to a machine running an instance of C<CPANPLUS::Daemon>, allowing remote 24 usage of the C<CPANPLUS Shell>. 25 26 A sample session, updating all modules on a remote machine, might look 27 like this: 28 29 CPAN Terminal> /connect --user=my_user --pass=secret localhost 1337 30 31 Connection accepted 32 33 Successfully connected to 'localhost' on port '11337' 34 35 Note that no output will appear until a command has completed 36 -- this may take a while 37 38 39 CPAN Terminal@localhost> o; i * 40 41 [....] 42 43 CPAN Terminal@localhost> /disconnect 44 45 CPAN Terminal> 46 47 =cut 48 49 ### store the original prompt here, so we can restore it on disconnect 50 my $Saved_Prompt; 51 52 sub plugins { ( connect => 'connect', disconnect => 'disconnect' ) } 53 54 sub connect { 55 my $class = shift; 56 my $shell = shift; 57 my $cb = shift; 58 my $cmd = shift; 59 my $input = shift || ''; 60 my $opts = shift || {}; 61 my $conf = $cb->configure_object; 62 63 my $user; my $pass; 64 { local $Params::Check::ALLOW_UNKNOWN = 1; 65 66 my $tmpl = { 67 user => { default => 'cpanpd', store => \$user }, 68 pass => { required => 1, store => \$pass }, 69 }; 70 71 check( $tmpl, $opts ) or return; 72 } 73 74 my @parts = split /\s+/, $input; 75 my $host = shift @parts || 'localhost'; 76 my $port = shift @parts || '1337'; 77 78 load IO::Socket; 79 80 my $remote = IO::Socket::INET->new( 81 Proto => "tcp", 82 PeerAddr => $host, 83 PeerPort => $port, 84 ) or ( 85 error( loc( "Cannot connect to port '%1' ". 86 "on host '%2'", $port, $host ) ), 87 return 88 ); 89 90 my $con = { 91 connection => $remote, 92 username => $user, 93 password => $pass, 94 }; 95 96 ### store the connection 97 $shell->remote( $con ); 98 99 my($status,$buffer) = $shell->__send_remote_command( 100 "VERSION=$CPANPLUS::Shell::Default::VERSION"); 101 102 if( $status ) { 103 print "\n$buffer\n\n"; 104 105 print loc( "Successfully connected to '%1' on port '%2'", 106 $host, $port ); 107 print "\n\n"; 108 print loc( "Note that no output will appear until a command ". 109 "has completed\n-- this may take a while" ); 110 print "\n\n"; 111 112 ### save the original prompt 113 $Saved_Prompt = $shell->prompt; 114 115 $shell->prompt( $shell->brand .'@'. $host .':'. $port .'> ' ); 116 117 } else { 118 print "\n$buffer\n\n"; 119 120 print loc( "Failed to connect to '%1' on port '%2'", 121 $host, $port ); 122 print "\n\n"; 123 124 $shell->remote( undef ); 125 } 126 } 127 128 sub disconnect { 129 my $class = shift; 130 my $shell = shift; 131 132 print "\n", ( $shell->remote 133 ? loc( "Disconnecting from remote host" ) 134 : loc( "Not connected to remote host" ) 135 ), "\n\n"; 136 137 $shell->remote( undef ); 138 $shell->prompt( $Saved_Prompt ); 139 } 140 141 sub connect_help { 142 return loc( 143 " /connect [HOST PORT] # Connect to the remote machine,\n" . 144 " # defaults taken from your config\n" . 145 " --user=USER # Optional username\n" . 146 " --pass=PASS # Optional password" ); 147 } 148 149 sub disconnect_help { 150 return loc( 151 " /disconnect # Disconnect from the remote server" ); 152 } 153 154 1; 155 156 =pod 157 158 =head1 BUG REPORTS 159 160 Please report bugs or other issues to E<lt>bug-cpanplus@rt.cpan.org<gt>. 161 162 =head1 AUTHOR 163 164 This module by Jos Boumans E<lt>kane@cpan.orgE<gt>. 165 166 =head1 COPYRIGHT 167 168 The CPAN++ interface (of which this module is a part of) is copyright (c) 169 2001 - 2007, Jos Boumans E<lt>kane@cpan.orgE<gt>. All rights reserved. 170 171 This library is free software; you may redistribute and/or modify it 172 under the same terms as Perl itself. 173 174 =head1 SEE ALSO 175 176 L<CPANPLUS::Shell::Default>, L<CPANPLUS::Shell>, L<cpanp> 177 178 =cut 179 180 # Local variables: 181 # c-indentation-style: bsd 182 # c-basic-offset: 4 183 # indent-tabs-mode: nil 184 # End: 185 # vim: expandtab shiftwidth=4: 186
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |