sub relay{
my $self = shift;
if(!ref($self)){
croak "can not call relay from a class";
}
my $handle = $self->{input}->{fh};
given ($self->{input}->{type}){
when ('named_pipe'){
open $handle,'<',$self->{input}->{name};
while(<$handle>){
$self->_write($_);
}
}
when('unix_socket'){
while(my $socket = $handle->accept()||croak "$!"){
while(<$socket>){
my $data = $_;
print "I receive $data\n";
$self->_write($data);
}
}
}
when('network_socket'){
print "gonna try and listen on network socket named
$self->{input}->{name}\n";
my $socket = $handle->accept()||croak"$!";
print "listening\n";
while(<$socket>){
my $data = $_;
print "I receive $data\n";
$self->_write($data);
}
}
}
}
sub _write{
my $self = shift;
if(!ref $self){
croak "can not do that as a class!";
}
my $input = shift;
my @keys = keys $self->{output};
foreach my $key (@keys){
if(!defined($self->{output}->{$key}->{fh}) && !$self->{output}->{$key}->{type} eq
'named_pipe'){
croak "undefined fh for key $key\n";
}
given($self->{output}->{$key}->{type}){
when('named_pipe'){
open my $handle ,'>',$self->{output}->{$key}->{name} or croak "could
not open output handle";
print $handle $input;
close $handle;
}
when('unix_socket'){
my $server = $self->{output}->{$key}->{fh};
my $socket = $server->accept() or croak "$!";
print "trying to send $input to
$self->{output}->{$key}->{name}";
print $socket $input or croak "$!";
}
when('network_socket'){
my $server = $self->{output}->{$key}->{fh};
my $socket = $server->accept() or croak "$!";
print "tring to send $input to inet\n";
print $socket $input;
print "done printing\n";
}
}
}
}
####
open my $fh,'<',$request_file_name;
my $params;
eval{$params = fd_retrieve($fh)};
if($@){
print "continuing after error $@";
close $fh;
redo;
}
####
my $recsock;
while(!defined $recsock){
eval{$recsock =
IO::Socket::INET->new(PeerAddr=>'localhost',PeerPort=>1066,Proto=>'tcp')||croak"$!"};
}
print "son here, opening inbound socket\n";
while(<$recsock>){
print "received $_";
}
####
my $c = 0;
print"creating socket\n";
my $sock;
while(!defined($sock)){
eval{$sock =
IO::Socket::INET->new(PeerAddr=>'localhost',PeerPort=>1065,Proto=>'tcp')or
croak "$!"};
}
while(1){
my $data = "trololol ".$c."\n";
print $sock $data or croak "$!";
$c++;
}
####
$messenger_params{input}->{fh} = IO::Socket::INET->new(
Listen=>$params->{input}->{Listen},
LocalAddr=>$params->{input}->{loca_addr},
Type=>SOCK_STREAM,
Proto=>'tcp',
Reuse=>1,
LocalPort=>$params->{input}->{local_port},
)or croak "$!";
#and for the second one :
$messenger_params{output}->{$key}->{fh}
= IO::Socket::INET->new(
LocalAddr=>$params->{output}->{$key}->{local_addr},
LocalPort=>$params->{output}->{$key}->{local_port},
Type=>SOCK_STREAM,
Proto=>'tcp',
Reuse=>1,
Listen=>$params->{output}->{$key}->{listen},
)or croak "$!";