[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