8PSHTXHQRSURJUDPDSDUDEDL[DUDUTXLYRVGHXP)73
Por Júlio Cesar Pedroso
$QWHVGH,QLFLDU
O FTP (File Transfer Protocol - Protocolo de transferência de arquivos)
oferece um meio de transferência e compartilhamento de arquivos remotos.
Entre os seus serviços, o mais comum é o FTP anônimo, pois permite o
download de arquivos contidos em diretórios sem a necessidade de
autenticação. Entretanto, o acesso anônimo é restrito a diretórios públicos que
foram especificados pelo administrador da rede.
O protocolo FTP disponibiliza interatividade entre cliente e servidor, de
forma que o cliente possa acessar informações adicionais no servidor, não só
ao próprio arquivo em questão. Como exemplo de facilidades podemos citar a
lista de arquivos, onde o cliente lista os arquivos existentes no diretório, ou
opções do tipo Help, onde o cliente tem acesso a lista de comandos. Essa
interatividade é proveniente do padrão NVT (Network Virtual Terminal) usado
pelo protocolo TELNET. Contudo, o FTP não permite a negociação de opções,
utilizando apenas as funções básicas do NVT, ou seja, seu padrão default.
O protocolo FTP permite que o cliente especifique o tipo e o formato dos
dados armazenados. Como exemplo, se o arquivo contém texto ou inteiros
binários, sendo que no caso de texto, qual o código utilizado (USASCII,
EBCDIC,
etc.).
Como segurança mínima o protocolo FTP implementa um processo de
autenticação e outro de permissão. A autenticação é verificada através de um
código de usuário e senha, já a permissão, é dada em nível de diretórios e
arquivos.
O servidor de FTP possibilita acessos simultâneos para múltiplos clientes. O
servidor aguarda as conexões TCP, sendo que para cada conexão cria um
processo cativo para tratá-la. Diferente de muitos servidores, o processo cativo
FTP não executa todo o processamento necessário para cada conexão. A
comunicação FTP utiliza uma conexão para o controle e uma (ou várias) para
transferência de arquivos. A primeira conexão (chamada de conexão de
controle "Ftp-control") é utilizada para autenticação e comandos, já a segunda
(chamada de conexão de dados "Ftp-data"), é utilizada para a transferência de
informações e arquivos em questão.
O FTP também é utilizado de forma personalizada e automática em
soluções que trabalham como o EDI (Eletronic Data Interchange), onde
Matrizes e Filiais trocam arquivos de dados com a finalidade de sincronizar
seus bancos de dados. Outro uso seria os LiveUpdates, como o usado nas
atualizações dos produtos da Symantec (Norton Antivírus, Personal Firewall e
etc.).
Existem também os programas que aceleram download e que utilizam o
protocolo FTP. Esses programas usam tecnologia de múltiplas sessões e
empacotamento com a quebra dos arquivos, conseguindo dessa forma, uma
melhora significativa na velocidade dos downloads.
No modo padrão, também dito Modo ativo a primeira conexão que é
estabelecida pelo cliente
é em uma porta TCP de
número alto (varia entre
1024 a 65535, pois é
dinâmica)
contra
o
servidor na porta TCP
número 21. Essa conexão
é quem autentica e diz ao
servidor
qual(is)
arquivo(s)
o
cliente
deseja. Esta conexão permite também, a passagem de outras informações de
controle (comandos por exemplo). Contudo, quando chega à hora de transferir
os dados reais uma segunda conexão será aberta. Diferente da conexão de
controle, esta que é de dados, é aberta pelo servidor em sua porta TCP de
número 20 contra o cliente em uma porta TCP de número alto e que é atribuída
também dinamicamente (cliente e servidor negociam a porta em questão como
parte
da
troca
da
conexão
de
controle).
No modo passivo a primeira conexão é idêntica ao modo padrão. Contudo,
quando chega à hora de transferir os dados reais, a segunda conexão não
opera da mesma forma que no modo padrão. Ela opera da seguinte forma: o
servidor fica esperando que o cliente abra a conexão de dados. Essa conexão
e aberta pelo cliente em uma porta TCP de número alto (varia entre 1024 a
65535, pois é dinâmica) contra o servidor em uma porta TCP de número alto
também. Tudo fica estabelecido na conexão de controle inclusive a porta TCP
que o cliente vai usar contra o servidor. Além de modificar o sentido da
conexão de dados, as portas são altas em ambos os lados.
O comando PASV é quem
altera o modo de operação.
Um aspecto importante que deve ser
mencionado é o fato de que as redes
normalmente se conectam à Internet
através
de
um
Gateway,
e
dependendo do tipo e a concepção
dele, poderá fazer com que o FTP
seja configurado de forma nada
convencional. Um exemplo é o Proxy
da AnalogX. O programa FTP nesse caso deve ser configurado para conectar
diretamente no servidor Proxy, como se este fosse realmente o servidor de
FTP. Entretanto, será passado a ele o endereço do FTP correto, de tal forma
que ele fará o resto do trabalho (conexões no FTP correto e repasses para o
cliente
da
rede
interna
que
solicitou
a
conexão).
Na conexão FTP feita no modo padrão a segunda conexão (ftp-data) traz
sérios problemas para a segurança das redes. O motivo é que a conexão
aberta no sentido do servidor em uma porta TCP de número abaixo de 1024 (o
default é 20) contra o cliente em uma porta TCP numerada de forma dinâmica
e maior que 1024, sem estar com o flag ACK acionado, será considerada pelo
administrador da rede como acesso indevido e os pacotes de dados serão
descartados. Já o modo passivo é considerado o modo correto de abrir uma
conexão do tipo "ftp-data".
Como foi dito anteriormente, na atualidade, muitos programas como o
Norton e o próprio Sistema Operacional Windows fazem uso do Live Update,
uma forma de acessar um servidor FTP para baixar as mais recentes versões
do Software e atualizar o programa no cliente. Vamos exemplificar o uso deste
recurso desenvolvendo um aplicativo simples mas que poderá servir de ponto
de partida para o desenvolvimento do seu programa de live update que
facilmente poderá ser implementado no seu programa.
Seria muita pretensão chamar o nosso pequeno aplicativo de /LYH
8SGDWH, mas foi o nome que escolhemos para ele para que sirva de exemplo
de como se utilizam os
recursos de comunicação
em Clarion.
Crie
um
aplicativo
chamado
/LYHXSGDWHDSS
no
diretório que desejar. Este
aplicativo
será
desenvolvido em Clarion e
vamos usar o template
Clarion (Legacy) sob o Clarion 6.1, mas se quiser você pode usar o template
ABC. Escolhermos o Legacy para mostrar que é muito fácil implementar um
protocolo de transferência de arquivos em Clarion mesmo sem os recursos
excepcionais das Classes ABC. Esse aplicativo não fará uso de um dicionário
de dados, mas é claro que no caso dos seus aplicativos onde você pode
embutir estes recursos, um dicionário de dados pode e deve ser utilizado, não
com a rotina de FTP, mas para guardar algumas informações sobre os
downloads. A primeira procedure do nosso aplicativo será a procedure 0DLQ .
O tipo de saída de arquivo
será .EXE, (Executável).
Observe no Editor de Projetos
na figura ao lado, que se trata
de um projeto comum, mas
que uma livraria shdocvw.lib é
incluída no projeto. Esta
livraria está sendo distribuída
juntamente com a edição da
revista e faz parte do material
de apoio a este artigo.
Nos embeds globais do seu
aplicativo na seção ,QVLGHWKH
*OREDO 0DSS, inclua as chamadas para a API do Windows e para a livraria
shdocvw.lib, conforme abaixo:
MODULE(’API’)
MultiByteToWideChar(UNSIGNED,LONG,*CSTRING,SIGNED,*CSTRING,SIGNED),SIGNED,PASCAL,R
AW
END
MODULE(’shdocvw’)
DoFileDownload(LONG),SIGNED,PASCAL,RAW
END
Este código faz a prototipação dos módulos externos do programa para que
possam ser utilizadas as funções da API e da livraria.
Crie uma single Window que vamos chamar de 0DLQ que é claro, será a
janela principal da nossa “grande aplicação”.
Esta procedure uma procedure muito simples. Uma janela comum, sem
nenhum tipo de
refinamento.
A finalidade desta
janela é ter o campo
que conterá o nome
do arquivo a ser
baixado do servidor
FTP. É lógico que
no caso do seu app
você pode fixar o
nome do arquivo
que você usará para
ser o /LYH8SGDWH
do
seu
app.
Normalmente um arquivo.zip. Na maioria das vezes, dentro do próprio APP, há
um menu /LYH8SGDWH. Quando este menu é
acionado, o aplicativo atual é encerrado e é
chamado um programa .exe que contém o
live update. O programa faz o download do
arquivo .zip ou arquivo instalador direto do
ftp, executa este arquivo (com o seu
aplicativo principal fechado) faz todas as
atualizações
e no final faz
uma chamada para o seu programa que estava
rodando anteriormente executando já a versão
atualizada. Você pode inclusive colocar opções
para fazer uma cópia de segurança da versão
atual antes de executar a atualização, mas
este não é o objetivo deste artigo. Aqui
trataremos unicamente do download de um
arquivo específico do servidor FTP. Observe
na figura acima, nas propriedades da janela
que esta é uma janela 6LQJOH.
Abra a janela e defina as suas dimensões conforme a próxima figura:
Será uma janela centralizada (center), com um tamanho de 248 x 34.
Basicamente com as dimensões mínimas para conter o campo de entrada do
dowload. No caso de aplicativos que irão fazer /LYH8SGDWH com um nome
definido por padrão, este campo pode ser substituído por um controle do tipo
string que receberá como atributo o nome do seu arquivo a ser baixado do ftp.
9RLOi como dizem os franceses, aqui está a janela de dowload, ou de
/LYH8SGDWH, conforme você preferir. Criamos um campo de entrada (Entry)
sem rótulo (prompt) com as seguintes características:
É um campo do tipo 6WULQJ (pode ser FVWULQJ), com tamanho de 255
caracteres, 256, no caso
do cstring, com a
coordenada X setada
para 1 e a coordenada Y
setada para 11, tamanho
203 e largura 10. O nome da nossa variável (atributo use do campo) é
)LOH1DPH. Aconselhável marcar a propriedade VFUROO no campo para que o
texto do nome do arquivo possa ser adequadamente acomodado no controle,
embora existam técnicas de programação que permitem definir o tamanho do
entry (no caso de ser um entry) de acordo com o tamanho do arquivo a ser
baixado, mas no caso do nosso exemplo, onde vamos entrar o endereço de
download, essa propriedade
será muito útil ser o nome a
ser digitado for maior que o
espaço físico disponibilizado
na tela. Ao lado do campo,
crie um botão %DL[DU, que
será o responsável pelo
processo de download, e é
claro, no caso do /LYH8SGDWH
também por todos os outros
processos que o envolvem,
tais como fechar o aplicativo
atual, inicializar o download,
proceder a atualização, fazer
o backup do app e instalar a
nova versão do arquivo baixado da Internet.
Observe na figura ao lado, as propriedades do botão recém criado.
Agora, clique com o botão direito do mouse no botão e no bem ed
&RQWURO (YHQW +DQGOLQJ %HIRUH *HQHUDWHG &RGHÜ ou no seu Evento
$FFHWSHG quando se usa o template ABC, inclua o código fonte que
processará a baixa do arquivo do ftp (no caso uma url) para o seu micro. Aqui
há uma ressalva, é claro que você precisa saber exatamente o nome do
arquivo e o seu endereço completo para que o download seja bem sucedido.
UPDATE
R#= MultiByteToWideChar(0,0,FileName,Len(FileName)+1,UnicodeName,Size(UnicodeName))
R# = DoFileDownload(ADDRESS(UnicodeName))
Para o caso do nosso exemplo disponibilizamos um arquivo com o índice
número 6 da Revista News Clarion Brasil para que seja baixado do nosso
servidor FTP a título de teste.
É só isto, não tem mais nada. Muito simples mas totalmente eficiente.
Disponibilizamos no nosso ftp o índice da Revista News Clarion Brasil, em uma
pasta chamada indrevista um arquivo chamado índice.pdf . Vamos entrar o
endereço completo da url para baixar o arquivo. Como é um pdf o padrão é que
o Internet Explore abra o arquivo baixado.
http://www.pedrosoinformatica.com.br/indrevista/indice.pdf
Veja como ficou a tela em tempo de execução:
Podemos deixar um
nome padrão para que o
campo
sempre
seja
iniciado com uma url
específica. Como no
caso do nosso exemplo:
No momento
da criação da
variável
foi
definido que
o endereço
acima seria o
,QLWLDO 9DOXH,
ou seja o
conteúdo
com o qual o
campo seria iniciado sempre que a janela fosse aberta. Se o usuário
simplesmente clicar no botão baixar, o sistema assume esse endereço, de
outra forma, o usuário poderá digitar um endereço aqui. No caso do /LYH
8SGDWH simplesmente será apresentada uma string contendo o nome do
arquivo, ou simplesmente uma mensagem informando que o download será
iniciado ao clicar no botão EDL[DU. Dependendo do Firewall que estiver sendo
usado (última versão do Norton Firewall) e o Service Pack 2 Windows XP, este
talvez precisem ser desabilitados para realizar o download. Se for o caso uma
mensagem semelhante à abaixo será exibida:
Desabilite o Firewall ou configure-o para que permita o download.
Será iniciado o download com a exibição do logotipo do Adobe Reader
Em seguida será apresentado um arquivo pdf com o Índice da Revista News
Clarion Brasil disponibilizado no site. As configurações deste arquivo permitem
que ele seja salvo no seu computador a partir do menu Salvar do Adobe
Reader ou simplesmente que seja lido sem salvar. Destacamos que alguns
firewalls, e algumas configurações de segurança do windows, podem impedir o
download destes arquivos. Não é o objetivo deste artigo entrar em detalhes
sobre como configurar a rede e os firewalls. Isto será feito em uma edição
especial sobre redes que está sendo preparada pela equipe da News Clarion
Brasil.
Com este aplicativo simples, você com certeza, observou que é fácil
implementar um /LYH8SGDWH ou um processo de download a partir do seu
código Clarion.
Download

Um pequeno programa para baixar arquivos de um FTP.