SSH::RPC::Shell - The shell, or server side, of an RPC call over SSH.


SSH-RPC documentation Contained in the SSH-RPC distribution.

Index


Code Index:

NAME

Top

SSH::RPC::Shell - The shell, or server side, of an RPC call over SSH.

SYNOPSIS

Top

To make your own shell with it's own methods:

    package MyShell;

    use base 'SSH::RPC::Shell';

    sub run_time {
        my ($class, $args) = @_;
        return {
            status      => 200,
            response    => time(),
            };
    }

    1;




To create a usuable shell:

    #!/usr/bin/perl

    use strict;
    use MyShell;

    MyShell->run();




DESCRIPTION

Top

SSH::RPC::Shell allows you to quickly implement your own shells that are remotely callable with SSH::RPC::Client.

METHODS

Top

The following methods are available from this class.

processRequest ( request )

run ()

Class method. This method is executed to invoke the shell.

run_noop ()

Class method. This subroutine just returns a successful status so you know that communication is working.

LEGAL

Top


SSH-RPC documentation Contained in the SSH-RPC distribution.
package SSH::RPC::Shell;

our $VERSION = 1.201;

use strict;
use JSON;



#-------------------------------------------------------------------

sub processRequest {
    my ($class, $request) = @_;
    my $command = 'run_'.$request->{command};
    my $args = $request->{args};
    if (my $sub = $class->can($command)) {
        return $sub->($args);
    }
    return { "error" => "Method not allowed.", "status" => "405" };
}

#-------------------------------------------------------------------

sub run {
    my $class = shift;
    my $json = JSON->new->utf8;
    my $request;
    while (my $line = <STDIN>) {
        $request = eval {$json->incr_parse($line)};
        if ($@) {
            warn $@;
            print '{ "error" : "Malformed request.", "status" : "400" }';
            return;
        }
        last if defined $request;
    }
    my $result = $class->processRequest($request);
    $result->{version} = $VERSION;
    my $encodedResult = eval{JSON->new->pretty->utf8->encode($result)};
    if ($@) {
        print { "error" => "Malformed response.", "status" => "511" };
    }
    else {
        print $encodedResult."\n";
    }
}


#-------------------------------------------------------------------

sub run_noop {
    return {status=>200};
}

1;