A função de validação de clientes RPC deverá ter 3 (três) strings de caracteres como argumentos, definindo o IP do cliente RPC, o nome da máquina do cliente RPC e o ambiente (environment) no servidor RPC onde a função está localizada, e deverá retornar um lógico, indicando o resultado da validação conforme definido no corpo da função.

Sintaxe

function <ValidationFunction>(<cClientIP>, <cClientHostName>, <cServerEnv>) -> lResult

Parâmetros

Nome

Tipo

Descrição

Obrigatório

<cClientIP>

Caractere

Endereço IP do cliente RPC.

X

<cClientHostName>

Caractere

Nome da máquina (host name) do cliente RPC.

X

<cServerEnv>

Caractere

Ambiente (environment) no servidor RPC onde a função está localizada.

X

Retorno

Nome

Tipo

Descrição

lResult

Lógico

Retorna o resultado da validação do cliente RPC, conforme definido no corpo da função criada.

Observações

Resultado da Função de Validação

Caso bem sucedida, a função de validação retorna o valor lógico resultante da validação do cliente RPC, definido pelo usuário no corpo da função de validação.
Caso mal sucedida, a função de validação retorna falso (.F.), o cliente RPC é considerado como não-válido e a mensagem de erro Invalid RPC Client... é retornada ao cliente e logada.


Exemplo

Exemplo da função de validação, nesse caso u_somefunc, que deve estar compilada no repositório do ambiente que vai atender as solicitações RPC.

#include "TOTVS.CH"
// Função para verificar se o cliente pode executar funções via RPC no
// servidor.
User Function SomeFunc( _cClientIP, _cClientHostName, _cServerEnv )
  Local cStatus         := "NOT VALID"
  Local lResult         := .F.
  Local cValidIP        := "<client_ip>"
  Local cValidHostName  := "<client_host_name>"
  Local cValidServerEnv := "<server_environment>"
  
  If    _cClientIP       == cValidIP        ;
  .And. _cClientHostName == cValidHostName  ;
  .And. _cServerEnv      == cValidServerEnv
    // cliente pode executar tarefas via RPC neste servidor
    cStatus := "VALID"  
    lResult := .T.
  
  Else  
    // cliente não pode executar tarefas via RPC neste servidor
  
    cStatus := "NOT VALID"  
    lResult := .F.
    
  Endif

  ConOut( "[INFO] Client is ["        +  cStatus         ;
    + "] for RPC tasks - client IP [" + _cClientIP       ;
    + "] - client host name ["        + _cClientHostName ;
    + "] - server env ["              + _cServerEnv      ;
    + "]." )

return lResult