# -- # Copyright (C) 2001-2019 OTRS AG, https://otrs.com/ # -- # This software comes with ABSOLUTELY NO WARRANTY. For details, see # the enclosed file COPYING for license information (GPL). If you # did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt. # -- package Kernel::GenericInterface::Transport; use strict; use warnings; # prevent 'Used once' warning for Kernel::OM use Kernel::System::ObjectManager; our $ObjectManagerDisabled = 1; =head1 NAME Kernel::GenericInterface::Transport - GenericInterface network transport interface =head1 PUBLIC INTERFACE =head2 new() create an object. use Kernel::GenericInterface::Debugger; use Kernel::GenericInterface::Transport; my $DebuggerObject = Kernel::GenericInterface::Debugger->new( DebuggerConfig => { DebugThreshold => 'debug', TestMode => 0, # optional, in testing mode the data will not be written to the DB # ... }, WebserviceID => 12, CommunicationType => Requester, # Requester or Provider RemoteIP => 192.168.1.1, # optional ); my $TransportObject = Kernel::GenericInterface::Transport->new( DebuggerObject => $DebuggerObject, TransportConfig => { Type => 'HTTP::SOAP', Config => { ... }, }, ); =cut sub new { my ( $Type, %Param ) = @_; my $Self = {}; bless( $Self, $Type ); for my $Needed (qw( DebuggerObject TransportConfig)) { $Self->{$Needed} = $Param{$Needed} || return { Success => 0, Summary => "Got no $Needed!", }; } # select and instantiate the backend my $Backend = 'Kernel::GenericInterface::Transport::' . $Self->{TransportConfig}->{Type}; if ( !$Kernel::OM->Get('Kernel::System::Main')->Require($Backend) ) { return $Self->{DebuggerObject}->Error( Summary => "Backend $Backend not found." ); } $Self->{BackendObject} = $Backend->new( %{$Self} ); # if the backend constructor failed, it returns an error hash, pass it on in this case return $Self->{BackendObject} if ref $Self->{BackendObject} ne $Backend; return $Self; } =head2 ProviderProcessRequest() process an incoming web service request. This function has to read the request data from the web server process. my $Result = $TransportObject->ProviderProcessRequest(); $Result = { Success => 1, # 0 or 1 ErrorMessage => '', # in case of error Operation => 'DesiredOperation', # name of the operation to perform Data => { # data payload of request ... }, }; =cut sub ProviderProcessRequest { my ( $Self, %Param ) = @_; my $Result = $Self->{BackendObject}->ProviderProcessRequest(%Param); # make sure an operation is provided in success case if ( $Result->{Success} && !$Result->{Operation} ) { return $Self->{DebuggerObject}->Error( Summary => 'TransportObject backend did not return an operation', ); } return $Result; } =head2 ProviderGenerateResponse() generate response for an incoming web service request. my $Result = $TransportObject->ProviderGenerateResponse( Success => 1, # 1 or 0 ErrorMessage => '', # in case of an error, optional Data => { # data payload for response, optional ... }, ); $Result = { Success => 1, # 0 or 1 ErrorMessage => '', # in case of error }; =cut sub ProviderGenerateResponse { my ( $Self, %Param ) = @_; if ( !defined $Param{Success} ) { return $Self->{DebuggerObject}->Error( Summary => 'Missing parameter Success.', ); } if ( $Param{Data} && ref $Param{Data} ne 'HASH' ) { return $Self->{DebuggerObject}->Error( Summary => 'Data is not a hash reference.', ); } return $Self->{BackendObject}->ProviderGenerateResponse(%Param); } =head2 RequesterPerformRequest() generate an outgoing web service request, receive the response and return its data.. my $Result = $TransportObject->RequesterPerformRequest( Operation => 'remote_op', # name of remote operation to perform Data => { # data payload for request ... }, ); $Result = { Success => 1, # 0 or 1 ErrorMessage => '', # in case of error Data => { ... }, }; =cut sub RequesterPerformRequest { my ( $Self, %Param ) = @_; if ( !$Param{Operation} ) { return $Self->{DebuggerObject}->Error( Summary => 'Missing parameter Operation.', ); } if ( $Param{Data} && ref $Param{Data} ne 'HASH' ) { return $Self->{DebuggerObject}->Error( Summary => 'Data is not a hash reference.', ); } return $Self->{BackendObject}->RequesterPerformRequest(%Param); } 1; =head1 TERMS AND CONDITIONS This software is part of the OTRS project (L). This software comes with ABSOLUTELY NO WARRANTY. For details, see the enclosed file COPYING for license information (GPL). If you did not receive this file, see L. =cut