Skip to content
Snippets Groups Projects
Forked from 713 / Warden / Warden
860 commits behind the upstream repository.
WardenClientReceive.pm 6.46 KiB
#!/usr/bin/perl -w
#                                                                    
# WardenClientReceive.pm
#
# Copyright (C) 2011-2012 Cesnet z.s.p.o
#
# Use of this source is governed by a BSD-style license, see LICENSE file.  

package WardenClientReceive;

use strict;
use SOAP::Lite;
use IO::Socket::SSL qw(debug1);
use SOAP::Transport::HTTP;
use FindBin;

our $VERSION = "2.0";

#-------------------------------------------------------------------------------
# errMsg - print error message and die
#-------------------------------------------------------------------------------
sub errMsg
{
  my $msg = shift;
  die($msg . "\n");
} # End of errMsg


#-------------------------------------------------------------------------------
# c2s - connect to server, send request and receive response
#-------------------------------------------------------------------------------
sub c2s 
{
  my $uri		= shift;
  my $ssl_key_file	= shift;
  my $ssl_cert_file	= shift;
  my $ssl_ca_file	= shift;
  my $method		= shift;
  my $data		= shift;

  my $client;
  my ($server, $port, $service) = $uri =~ /https:\/\/(.+)\:(\d+)\/(.+)/;
  if (!($client = SOAP::Transport::HTTP::Client->new())) {
    errMsg("Sorry, unable to create socket: " . &SOAP::Transport::HTTP::Client::errstr)
  }
  $client->timeout(10);
  $client->ssl_opts(verify_hostname     => 1,
		    SSL_use_cert        => 1,
		    SSL_verify_mode     => 0x02,
		    SSL_key_file        => $ssl_key_file,
		    SSL_cert_file       => $ssl_cert_file,
		    SSL_ca_file         => $ssl_ca_file);

  # setting of URI and serialize SOAP envelope and data object
  my $soap     = SOAP::Lite->uri($service)->proxy($uri);
  my $envelope;
  if (!defined $data) {
    $envelope = $soap->serializer->envelope(method => $method);
  } else {
    $envelope = $soap->serializer->envelope(method => $method, $data);
  }

  # setting of TCP URI and send serialized SOAP envelope and data
  my $server_uri = "https://$server:$port/$service";
  my $result = $client->send_receive(envelope => $envelope, endpoint => $server_uri);

  # check server response
  if (!defined $result) {
    errMsg("Error: server returned empty response." . "\n" . "Problem with used SSL ceritificates or Warden server at $server:$port is down.");
  } else {