App-BCVI
view release on metacpan or search on metacpan
'Content-Length: ' . length($body) . $LF .
$LF .
$body
) or die "Error sending command through backchannel: $!";
}
sub check_response {
my($self) = @_;
my $response = $self->sock->getline() or die "Server hung up\n";
chomp($response);
$self->DEBUG("Received response: $response");
if(my($code, $message) = $response =~ m{^(\d\d\d) (.*)$}) {
($self->{response_code}, $self->{response_message}) = ($code, $message);
$self->read_response() if $code eq '300';
return $code;
}
die "Unexpected response: '$response'\n";
}
sub read_response {
my($self) = @_;
my $sock = $self->sock();
my $resp = {};
while(my($line) = $sock->getline() || '') {
chomp($line);
last if $line eq '';
$line = Encode::decode('utf8', $line);
if(my($name, $value) = $line =~ m{^(\S+)\s*:\s*(.*)$}) {
$name =~ s/-/_/;
$resp->{lc($name)} = $value;
}
}
$self->{response} = $resp;
my $bytes = $resp->{content_length} || return;;
my $buf = '';
while(my $count = $sock->read($buf, $bytes, length($buf))) {
$bytes -= $count;
last if $bytes < 1;
}
$resp->{body} = $buf;
}
sub connect_to_listener {
my($self) = @_;
$self->get_connection_details();
$self->DEBUG("Connecting to: " . $self->gateway_address . ':' . $self->port);
my $peer = $self->gateway_address . ':' . $self->port;
my $sock = IO::Socket::INET->new(
PeerAddr => $peer,
) or die "Can't connect to '$peer': $!\n";
binmode($sock);
my $welcome = $sock->getline() or die "No listener?\n";
chomp($welcome);
$self->DEBUG("Server banner: $welcome");
if($welcome =~ /^100 Ready \(([^)]+)\)/) {
$self->{server_version} = $1;
}
$self->{sock} = $sock;
}
sub show_versions {
my($self) = @_;
print "bcvi client: $App::BCVI::VERSION\n";
if($ENV{BCVI_CONF}) {
$self->connect_to_listener();
print "bcvi server: " . $self->server_version . "\n";
}
}
sub show_help {
my($self) = @_;
$self->pod_class->full_pod($self);
}
sub commands_pod {
my($self) = @_;
eval {
$self->set_opt(command => 'commands_pod');
$self->send_command();
};
if($@) {
$@ = '';
return;
}
return $self->response->{body};
}
sub wrap_ssh {
my($self, @args_in) = @_;
if(my($target, @args_out) = $self->parse_ssh_args(@args_in)) {
$self->execute_wrapped_ssh($target, @args_out);
}
else {
warn "bcvi: unable to extract hostname from ssh command line\n";
$self->execute_ssh(@args_in);
}
}
sub parse_ssh_args {
my($self, @args_in) = @_;
( run in 1.243 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )