/usr/share/perl5/PlSense/SocketClient.pm is in plsense 0.3.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | package PlSense::SocketClient;
use strict;
use warnings;
use Class::Std;
use IO::Socket;
use PlSense::Logger;
use PlSense::Configure;
{
my %retryinterval_of :ATTR( :init_arg<retryinterval> :default(1) );
my %maxretry_of :ATTR( :init_arg<maxretry> :default(10) );
sub get_main_server_response {
my ($self, $sendtext, $opt_ref) = @_;
my $sock = $self->connect_main_server($opt_ref);
return $self->get_server_response($sock, $sendtext);
}
sub get_work_server_response {
my ($self, $sendtext, $opt_ref) = @_;
my $sock = $self->connect_work_server($opt_ref);
return $self->get_server_response($sock, $sendtext);
}
sub get_resolve_server_response {
my ($self, $sendtext, $opt_ref) = @_;
my $sock = $self->connect_resolve_server($opt_ref);
return $self->get_server_response($sock, $sendtext);
}
sub request_main_server {
my ($self, $sendtext, $opt_ref) = @_;
my $sock = $self->connect_main_server($opt_ref);
return $self->request_server($sock, $sendtext);
}
sub request_work_server {
my ($self, $sendtext, $opt_ref) = @_;
my $sock = $self->connect_work_server($opt_ref);
return $self->request_server($sock, $sendtext);
}
sub request_resolve_server {
my ($self, $sendtext, $opt_ref) = @_;
my $sock = $self->connect_resolve_server($opt_ref);
return $self->request_server($sock, $sendtext);
}
sub connect_main_server {
my ($self, $opt_ref) = @_;
return $self->connect_server("main", get_config("port1"), $opt_ref);
}
sub connect_work_server {
my ($self, $opt_ref) = @_;
return $self->connect_server("work", get_config("port2"), $opt_ref);
}
sub connect_resolve_server {
my ($self, $opt_ref) = @_;
return $self->connect_server("resolve", get_config("port3"), $opt_ref);
}
sub connect_server : PRIVATE {
my ($self, $svtype, $port, $opt_ref) = @_;
my $s;
my $wait = 0;
my $maxwait = $opt_ref->{maxretry} || $maxretry_of{ident $self};
my $interval = $opt_ref->{retryinterval} || $retryinterval_of{ident $self};
OPEN_SOCKET:
while ( ! $s && $wait < $maxwait ) {
$s = IO::Socket::INET->new(PeerAddr => "localhost",
PeerPort => $port,
Proto => "tcp",
);
$self->sleep_for($interval);
$wait++;
}
if ( ! $s && ! $opt_ref->{ignore_error} ) {
logger->error("Can't connect $svtype server : $!");
return;
}
return $s;
}
sub request_server : PRIVATE {
my ($self, $sock, $sendtext) = @_;
$sendtext =~ s{ \n$ }{}xms;
if ( ! $sock ) { return; }
$sock->print("$sendtext\n");
$sock->close;
return 1;
}
sub get_server_response : PRIVATE {
my ($self, $sock, $sendtext) = @_;
$sendtext =~ s{ \n$ }{}xms;
if ( ! $sock ) { return ""; }
$sock->print("$sendtext\n");
my $ret = "";
LINE:
while ( my $line = $sock->getline ) {
$ret .= $line;
}
$sock->close;
return $ret;
}
sub sleep_for : PRIVATE {
my ($self, $duration) = @_;
select undef, undef, undef, $duration;
return;
}
}
1;
__END__
|