Usando o ircp para receber e enviar arquivos
O ircp é o módulo que recebe e envia arquivos entre celular, Palm ou outro computador. Sua sintaxe é bastante intuitiva. Relembrando:
$ ircp <arquivo1> <arquivo2> ... <arquivoN>
para enviar e
$ ircp /r <PastaDestino>
para receber arquivos
$ ircp [put | get] <arquivo1> <arquivo2> ... <arquivoN>
Para enviar (?) para o cliente (É! Eu também estranhei. Put e Get fazendo o mesmo trabalho; aqui, não sei se foi um bug ou um problema de implementação. Sabe-se que os parâmetros Put e Get estão além do ircp -
estão no OpenObex.
Problema no ircp
O ircp, na
versão baixada no SourceForge há um bug, bug este que para minha surpresa é bastante conhecido. A versão ircp-0.3, de novembro de 2002, última atualização, não permite que o usuário baixe um arquivo para uma pasta em particular, ou seja, mesmo com o uso do parâmetro <:PastaDestino>, o ircp sempre copia o arquivo em / (diretório raiz). Se o usuário não é o root, escrever no / do sistema é proibido e, porque não dizer, desastroso. Daí, só estava conseguindo baixar arquivos quando me logava como superusuário. Encontrei no "bug tracker" do projeto vários Posts sobre o problema, alguns sugerindo mudanças no código dos arquivos ircp_io.c e ircp_server.c.
As mudanças sugeridas além de não resolverem o problema conduziram a mensagens de erro não mais no ircp, mas no OpenObex como um todo. Revertemos todo o processo, restaurando a pasta /temp/ircp-0.3 com os arquivos originais do site.
No
site do Debian há um relato sobre o problema, com a solução. O problema é que no site só há o executável - eu desejaria os fontes para estudá-los e tentar resolver o problema. Teria,
então, que partir para a depuração do problema.
Utilizando o (K)dbg, partiu-se para a depuração do programa. Monitorando a variável "inbox" percebemos que ela perde o seu conteúdo ao ser passada para o módulo ircp_io.c.
Na função ircp_open_safe esta variável era sumariamente "zerada" e às vezes teria o seu valor alterado de forma estranha. Com a alteração de uma linha - linha esta comentada no meu arquivo alterado - conseguiu-se resolver o problema.
Um problema no próprio projeto é a instabilidade. Ora funciona a contento, ora não. Mesmo depois desta depuração o programa apresentou algumas instabilidades, exibindo, com o uso do depurador, nomes estranhos no ircp_server.c. Aproveitou-se a ocasião para "aportuguesar" o módulo ircp. Com efeito, traduzimos as mensagens de evento deste programa, dando uma maior comodidade ao usuário. No código-fonte original, e mantido no meu código alterado, tem um "To Do": renomear arquivos, como fazem o Jabber, o Gaim e outros (MeuArq.zip ? MeuArq(01).zip, por exemplo). Pretendo fazê-lo, se ninguém o fizer antes e só assim darei um "UpLoad" para os mantenedores do Projeto, mas não agora - não vivo disso. Sou um mero analista de suporte.
Resumidamente, fizemos o seguinte:
Mudanças no Ircp-0.3
$ ircp -r <PastaDestino> - segundo parâmetro inoperante - consertado;
O ircp agora funciona como desejado, ou seja, se não informado parâmetro <PastaDestino>, copia para a pasta corrente do usuário; e as mensagens estão em português.
Problemas pendentes
- Erros aleatórios (não ligados ao problema do local de cópia dos arquivos, como se depreendeu);
- erro de link freqüente (aqui, supõe-se ser relacionado com a velocidade - estava testando o módulo a 57.600bps);
- criação da rotina de renomear arquivos.