[Eppnicbr] Acesso TLS

Rodrigo Salvador rodrigo at fly.com.br
Thu Apr 17 11:42:02 BRT 2008


Caro Felipe,

suponho que você tenha utilizado alguma classe para manipulação de 
soquetes no .NET, conforme o sucesso relatado.
Agora, para enviar o xml você deverá seguir a seguinte regra, que no meu 
exemplo abaixo está comentado e codificado em ObjectPascal:

procedure TEppConnection.SendRequest;
var
    S: String;
    P: PChar;
    I: Cardinal;
begin

    // Verifica se há dados a serem enviados no handle XML
    if FXml.IsEmptyDoc then
        raise Exception.Create(SendPackageEmpty);

    // Remove os bytes CR+LF
    S := FXml.XML.Text;
    S := StringReplace(S, #13, '', [rfReplaceAll]);
    S := StringReplace(S, #10, '', [rfReplaceAll]);
    // Converte o XML para o padrão ANSI C, com a string terminada em nulo
    P := PChar(S);
    // Computa o tamanho total do pacote a ser enviado (Tamanho da 
string + 32 bits sem sinal do tipo cardinal)
    I := Length(P) + SizeOf(I);

    // Primeiro grava no socket o tamanho do pacote
    FSocket.WriteCardinal(I);
    // Em seguida, grava no socket o XML
    FSocket.Write(P);
    // Limpa no handle o conteúdo enviado
    FXml.XML.Clear;

end;

Observe que primeiro você deverá enviar através do soquete TCP/IP o 
tamanho do pacote utilizando um tipo Cardinal (que em C/C++ deve ser 
equivalente ao "Unsigned Integer"), e em seguida basta gravar a string 
com o XML. Essa referência pode ser melhor compreendida no tópico "4. 
Data Unit Format" do documento ftp://ftp.registro.br/rfc/rfc4934.txt .

Para receber a resposta do soquete, você poderá utilizar algo semelhante 
ao código abaixo:

procedure TEppConnection.ReadResponse;
var
    I: Cardinal;
    Retry: Byte;
begin

    // Limpa o conteúdo do handle XML
    FXml.XML.Text := '';

    // Aguarda a resposta estar disponível no buffer do soquete
    Retry := 0;
    while (not FSocket.Socket.Readable) and (Retry <= 10) do
    begin
        Sleep(100);
        Inc(Retry);
    end;

    FXml.Active := False;
    // Se realmente existir dados a serem recebidos...
    if FSocket.Socket.Readable then
    begin
        // ...lê o tamanho do pacote...
        I := FSocket.ReadCardinal;
        I := I - SizeOf(I);
        // ...recupera o pacote XML
        FXml.XML.Text := FSocket.ReadString(I);
    end;
    FXml.Active := True;

    // Dispara a excessão informando que o servidor não respondeu
    if FXml.IsEmptyDoc then
        raise Exception.Create(ServerResponseError);

end;

O esquema no retorno é o mesmo, o servidor vai enviar um inteiro sem 
sinal contendo o tamanho do pacote a ser lido.
Em seguida, basta recuperado do soquete a respectiva quantidade de bytes 
computadas.
Esse será o seu XML de retorno e que deverá ser manipulado de acordo com 
as definições do EPP.

Lembre-se de que tudo isso deve passar por um handle de IO para 
autenticação SSL/TLS.
Esse exemplo é em ObjectPascal e funciona perfeitamente em Delphi, 
quanto à caracteristicas do .NET, não saberia te responder quais 
procedimentos que você teria que utilizar, e mesmo no Delphi.NET, não 
sei se esse código seria válido.

Mas mesmo assim, espero ter sido útil.
Abc.


Felipe Rodrigues Pereira escreveu:
> Ola Rodrigo, obrigado pela ajuda!
>
> Consegui fazer a conexão com o servidor usando o .net, agora minha
> dificuldade esta sendo mandar o XML para fazer o login, se vc mandar o
> código para mim dar uma olhada ficaria muito grato! Ou me adiciona no MSN
> lipe_hc1 at hotmail.com ou no gmail felipe.rordrigues at gmail.com. Obrigado desde
> já!
>
>
> -----Mensagem original-----
> De: eppnicbr-bounces at eng.registro.br
> [mailto:eppnicbr-bounces at eng.registro.br] Em nome de Rodrigo Salvador
> Enviada em: terça-feira, 8 de abril de 2008 14:23
> Para: EPP no .br - protocolo e operacao
> Assunto: Re: [Eppnicbr] RES: RES: RES: RES: RES: RES: Acesso TLS
>
> Caro Felipe,
>
> eu também precisei implementar o EPP na plataforma Windows.
> Isso foi extremamente trabalhoso, pois a documentação de tal protocolo 
> exige dedicação, muita atenção e muitos testes.
> Começe lendo ftp://ftp.registro.br/rfc/rfc4934.txt , nesse documento 
> você encontrará as definições de transporte dos pacotes XML em TCP/IP.
> Feito isso, você pode criar uma classe base com as definições em 
> ftp://ftp.registro.br/rfc/rfc4930.txt, e extendê-las para contato 
> [ftp://ftp.registro.br/rfc/rfc4933.txt] e para domínio 
> [ftp://ftp.registro.br/rfc/rfc4931.txt], vc perceberá que não muda muita 
> coisa além da estrutura básica.
> Após concluir as extensões básica para manipulação de contatos e 
> domínios, parta para as definições específicas do registro.br, 
> extendendo a classe do contato para brorg 
> [ftp://ftp.registro.br/pub/libepp-nicbr/draft-neves-epp-brorg-03.txt] e 
> o dominio para brdomain 
> [ftp://ftp.registro.br/pub/libepp-nicbr/draft-neves-epp-brdomain-03.txt].
>
> Eu escrevi todo o programa em Win32, utilizando o Borland Delphi2006. 
> Ele tem uma extensão para trabalhar com .NET, mas nunca a utilizei, não 
> posso te confirmar as dificuldades para tornar isso funcional.
> Montei até mesmo um sheep em win32, para o procedimento de homologação!
> O Delphi permite facilmente usar soquetes TCP/IP e manipuladores para o 
> TLS1, que ajudaram bastante, mas as definições de XML para requisições e 
> respostas tiveram que ser feitas 'na-mão'. Não conheço a flexibilidade 
> do .NET para esse procedimento, porém no que eu puder ajudar, fique a 
> vontade em questionar.
>
> Uma outra alternativa, seria compilar esse meu código para usar como uma 
> .dll nativa win32, e reaproveitá-la no .NET, mas creio que dessa maneira 
> teria muita coisa a ser reescrita, e perderias o dinâmismo da OOP.
>
> abcs,
>
> Rodrigo Salvador
>
>
>
>
>
> Felipe Rodrigues Pereira escreveu:
>   
>> Olá, estou tentando implementar na plataforma .net, alguém pode me 
>> passar algumas dicas para a comunicação, etou tentando fazer através e 
>> socket, se alguem conhece outro jeito de conectar e se tiver a boa 
>> vontade de me avisar ficarei grato!
>>
>>  
>>
>> Atenciosamente,
>>
>> *Felipe Rodrigues Pereira
>> *Sistemas
>>
>> 	
>>
>> Tecla Serviços de Internet
>>
>>
>>     
> *---------------------------------------------------------------------------
> ----------*
>   
>> Tel.: (11) 3524-4339
>> www.tecla.com.br <http://www.tecla.com.br>
>>
>> 	
>>
>> Serviços de Internet
>>
>>  
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> eppnicbr mailing list
>> eppnicbr at eng.registro.br
>> https://eng.registro.br/mailman/listinfo/eppnicbr
>>   
>>     
>
> _______________________________________________
> eppnicbr mailing list
> eppnicbr at eng.registro.br
> https://eng.registro.br/mailman/listinfo/eppnicbr
>
> _______________________________________________
> eppnicbr mailing list
> eppnicbr at eng.registro.br
> https://eng.registro.br/mailman/listinfo/eppnicbr
>
>
>   




More information about the eppnicbr mailing list