#!/usr/bin/perl -w package WardenClientCommon; require Exporter; use strict; use Carp; use WardenClientConf qw($LOG_VERBOSE); our @ISA = qw(Exporter); our @EXPORT_OK = qw(errMsg c2s); #------------------------------------------------------------------------------- # errMsg - print error message and die #------------------------------------------------------------------------------- sub errMsg { my $msg = "Error message: " . shift; if ($LOG_VERBOSE) { # user wants to log debug information $msg .= "\nStack info: " . Carp::longmess(); } 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 { # deserialized response from server -> create SOAP envelope and data object my $response; eval { $response = $soap->deserializer->deserialize($result); } or errMsg($@ . "Received data: " . $result); # check SOAP fault status $response->fault ? errMsg("Server sent error message:: " . $response->faultstring) : return $response; } }