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.