A 100% Perl server that maintains network connections to other network devices and proxies access to those devices for other processes. Connection requests and data will always be initiated by a Perl client, normally executed in a mod_perl environment.
The connection details (ip address, connection method, credentials, etc) will be pulled from a Mysql database by the server during processing of the initial connection. The connections will be maintained until explicitly closed by the requester, closed by the device, or a configurable timeout is reached.
The client is a mod_perl compatible module to access the server for web automation.
**Must use:** Net::Server, Net::SSH, Net::Telnet, Net::SNMP from CPAN.
## Deliverables
Requirements
[login to view URL] use Net::Server, Net::SSH, Net::Telnet, Net::SNMP from CPAN
2. TELNET and SSH connection any device may be shared(configurable per connection details) and may be multiply initiated.
3. SNMP connections to any device may be multiply initiated.
5. All options for server must be defined in configuration file and loaded at startup
6. Object oriented design is encouraged. All packages created must use the Snm::Tools::ConnectionServer prefix. For example, if you create a package and subs to handle the Telnet processing, you might name them Snm::Tools::ConnectionServer::Telnet and Snm::Tools::ConnectionServer::Telnet::Foo.
7. Use strict.
8. An initial database schema is provided, feel free to suggest changes.
9. A suggested client interface to the server is provided, feel free to suggest changes. You are responsible for implementing the internal interface code.
10. The proxy shall not modify input or output
11. The server shall service the client with data returned from the device through polling or callback, as selected by the client.
12. Use preforking server mode unless otherwise required.
13. The server's listening port (for client connections) should be configurable.
14. Client connection options should be as flexible as possible, with reasonable defaults.
15. You are responsible for the design of the client->server protocol, but please keep it simple and extensible.
Deliverables:
Perl Server code in packages with basic functional and variable documentation, in code and per function. Perldoc compatibility is not required.
Perl Client code in packages with basic functional and variable documentation, in code and per function. Perldoc compatibility is not required.
A fully commented configuration file for the Server with reasonable default values where applicable.
Expected usage of the client:
use CGI;
use Snm::Tools::ConnectionServer::Client;
##
# the named device connection is an ID for a set of connection details in the database
##
#
my $client = new Snm::Tools::ConnectionServer::Client(connection_id => "foo', connection_method => 'telnet');
my $ssh_client = new Snm::Tools::ConnectionServer::Client(connection_id => 'foo', 'connection_method' => 'ssh', auto_login => false);
##
# other options can be timeout, whatever else you think is needed
...
$client->send("foo");
...
$client->send("foo\n");
##
# non-blocking read
my $data = $client->recieve();
##
# blocking read
my $data = $client->read(true);
...
##
# read with callback to function
my $client = new Snm::Tools::ConnectionServer::Client(connection_id => "foo', connection_method => 'telnet', receive_callback => 'receiveDataCallback');
sub receivedDataCallback{
# I'll do something here
}