skype no iphone 3g

skype-logoDepois de tanto tempo sem escrever nada, volto logo com uma boa: fazer chamadas de voz por SIP ou Skype, no iPhone, usando a rede 3G !

Aproveitando o assunto (iPhone), vale lembrar que tem apenas duas coisas que me irritam profundamente (até agora) com este telefone:

  1. Não permitir SIP/VoIP/Skype pela rede 3G (olho gordo das operadoras)
  2. Não ter suporte a Flash (idiotice da Apple por causa dos jogos)

De resto, pra quem curte Interweb, é o melhor aparelho que existe.

Voltando ao assunto… a primeira coisa necessária pra ignorar as restrições de SIP/VoIP/Skype apenas pela conexão WiFi é fazer o jailbreak do telefone. O melhor programa que encontrei pra fazer isso, à partir do Mac OS X, é o PwnageTool – não sei o que tem pra Linux nem Windows, não me xinguem.

O jailbreak irá instalar o Cydia automaticamente, que é um front-end pro APT, exatamente igual ao do Debian.

Depois disso é necessário conectar o iPhone a uma rede WiFi, saber o endereço IP dele, e pelo Cydia, instalar os pacotes OpenSSH, APT7 (Strict) e Bigboss Recommended Tools (este irá prover tudo que interessa: ps, vim, etc…).

Com isso feito, você precisa conectar via SSH no iPhone, usando o seu programa preferido: ssh no console, ou PuTTY pros usuários de Windows. Pra conectar no iPhone, o usuário é root e a senha padrão é alpine.

No console, é necessário instalar dois pacotes:

  • mobilesubstrate : resumindo, insere código em um app durante sua execução
  • voipoverip3g: biblioteca do mobilesubstrate pra enganar o iPhone, assim os programar não sabem que estão usando 3G, e pensam que é WiFi (duh!)

Para instalar, o procedimento é padrão de debian/ubuntu, mas no console do iPhone:

apt-get install mobilesubstrate voipoverip3g

Com isso feito, reinicie o iPhone, re-instale o Skype, e seja feliz. Quando abrir o Skype pela primeira vez, ele vai reclamar que “não foi feito pra rodar em iPhoneOS modificado”, mas é “apenas uma mensagem”.

Pros mais interessados: o pacote voipoverip3g instala esse “plugin” pro mobilesubtrate, e sua configuração fica em

/Library/MobileSubstrate/DynamicLibraries/VoIPover3G.plist

Você pode adicionar suporte a qualquer programa que seja restrito ao uso de SIP/VoIP pela rede WiFi, basta editar com vim e adicionar a chave do programa, seguindo o formato do arquivo. O padrão é adicionar suporte ao Fring e Skype.

Este é o conteúdo original do arquivo:

Bozo:~ root# cat /Library/MobileSubstrate/DynamicLibraries/VoIPover3G.plist
Filter = {Bundles = ("com.Fringland.Fring", "com.skype.skype");};

Boa?

Anúncios

symbian s60 3rd ed. + python xmlrpclib

Já vou avisando: perdi o dia inteiro nisso. Logo que acordei, por volta das 10h da manhã, minha tarefa era fazer a xmlrpclib do python funcionar no symbian, nokia n95 8GB. Comecei a escrever esse artigo agora, 2h da manhã.

Um dos primeiros links que encontrei foi animador, pois parecia tão simples que decidi nem usar o windows xp – sim, eu tenho uma máquina virtual com sdk do symbian, carbide c++ e ainda o eclipse com wireless toolkit pra desenvolver algumas coisas em c++ e java (mas acho uma bagunça, um ambiente bem zoado).

Outro dia já havia tentado instalar um toolchain no mac os x, mas acabei desistindo porque estava demorando muito. Então, criei uma máquina virtual no vmware esxi com ubuntu 8.10 (intrepid) e comecei a seguir os passos para instalar o gnupoc, no site do Martin Storsjö.

Apesar de também parecer simples, algumas informações no tutorial do Martin estão desatualizadas, e outras nem são mencionadas. Pra encurtar a história, os arquivos que baixei no ubuntu recém instalado foram:

  1. gnupoc do Martin, gnupoc-package-1.11.tar.gz
  2. codesourcery’s gcc (binário) pro symbian 3rd ed., gnu-csl-arm-2005Q1C-arm-none-symbianelf-i686-pc-linux-gnu.tar.bz2
  3. sdk da nokia pra windows, S60_5th_Edition_SDK_v0_9_en.zip (ou aqui)
  4. sdk do python para s60, PythonForS60_1_4_5_SDK_3rdEd.zip

Os passos são mais ou menos os do site, com alguns pequenos detalhes. O ideal é criar um usuário e fazer tudo no homedir dele, nessa sequência:

sudo apt-get install build-essential libssl-dev wine unzip
mkdir -p csl-gcc symbian-sdks/s60_50
tar jxvf gnu-csl-arm-2005Q1C-arm-none-symbianelf-i686-pc-linux-gnu.tar.bz2 -C csl-gcc
tar zxvf gnupoc-package-1.11.tar.gz
cd gnupoc-package-1.11/tools
./install_eka2_tools ~/csl-gcc
cd ../sdks
./install_gnupoc_s60_50 ~/S60_5th_Edition_SDK_v0_9_en.zip ~/symbian-sdks/s60_50
./install_wrapper ~/gnupoc

# sdk do python dentro do epoc32
cd ~
unzip PythonForS60_1_4_5_SDK_3rdEd.zip
cd symbian-sdks/s60_50/
unzip ~/PythonForS60_SDK_3rdEd/sdk_files.zip

Depois de tudo isso, ainda encontrei um módulo do perl com problema, que na hora do bldmake usava metade dos caminhos de diretório com / e outra metade com \, tipo /home/dev/symbian-sdks/s60_50\epoc32\bla\ble. (haha!)

Pra resolver isso, precisa editar o arquivo ~/symbian-sdks/s60_50/epoc32/tools/featurevariantparser.pm e na linha 550, antes do open(DIR, $fulldir), colocar uma regex pra arrumar isso: $fulldir =~ s/\\/\//g;

No diretório dos wrappers, ~/gnupoc, o makesis não funciona por algum motivo relacionado ao perl, mas esse eu desisti e apaguei o link, e criei um script chamado makesis que o original do sdk da nokia, veja só:

$ cat /home/alef/gnupoc/makesis
#!/bin/bash
exec wine /home/alef/symbian-sdks/s60_50/epoc32/tools/makesis.exe "$@"

Aí, antes de continuar, é necessário rodar o wine ao menos uma vez pra ele criar o bottle e o resto da estrutura de diretórios necessários.

O que realmente é necessário pro wine, é o compilador. Pode ser microsoft visual c++ ou carbide c++, da nokia – foi esse que eu usei.

Talvez o instalador até funcione no wine, mas como eu já tinha o carbide instalado no windows xp, fui lá e copiei só o que era realmente necessário. Os arquivos ficam (na instalação padrão) em C:\Arquivos de Programas\Nokia\Carbide.c++ v1.3\x86Build e precisam ser copiados no ubuntu em ~/.wine/drive_c/carbide.

Além disso, precisa copiar de ~/symbian-sdks/s60_50/epoc32/tools os arquivos make.exe, mifconv.exe e uidrc.exe pro ~/.wine/drive_c/windows e depois editar o ~/.wine/user.reg e adicionar o seguinte (logo na segunda linha o arquivo):

[Environment]
"Path"="c:\\carbide\\Symbian_Tools\\Command_Line_Tools;c:\\windows;c:\\windows\\system"

Por fim, os scripts perl precisam de outras variáveis de ambiente pra funcionar. Criei um script no ~/env.sh com o seguinte conteúdo:

export EPOCROOT=~/symbian-sdks/s60_50/
export PATH=~/gnupoc:${PATH}

export MWCSym2Includes="c:\\carbide\\symbian_support\\MSL\\MSL_C\\MSL_Common\\include;c:\\carbide\\symbian_support\\MSL\\MSL_C++\\MSL_Common\\include;c:\\carbide\\symbian_support\\MSL\\MSL_Extras\\MSL_Common\\include"
export MWSym2Libraries="+c:\\carbide\\symbian_support"
export MWSym2LibraryFiles="MSL_All_MSE_Symbian.lib;gdi32.lib;user32.lib;kernel32.lib"

Ai ficou tudo pronto pra eu poder começar a pensar em fazer a xmlrpclib funcionar. Tem que estar muito na pilha pra isso tudo. Além de várias etapas, as coisas tem bugs, outras não funcionam direito, e esse artigo só será válido pelos próximos 2 meses, pois tenho certeza que quando alguma dessas coisas mudar de versão, vários desses passos não vão mais funcionar. Não tem cabimento.

Como se não bastasse, pra libxmlrpc funciona é necessário ao menos um parser de XML, e o padrão é o pyexpat. No fórum da nokia e na maioria dos resultados do google só vieram links para o pyexpat para s60 2nd ed. e eu precisava do 3rd ed (o link do fórum pro 3rd ed. está quebrado).

Depois de procurar muito tempo, encontrei o fonte do pyexpat para s60 no fórum da nokia. Na verdade, eu acho que comecei fazer tudo isso porque os arquivos de instalação desse pyexpat (sis e sisx) não instalaram no meu aparelho porque essa lib usa alguns recursos que exigem que o app seja assinado, e não pode ser self-signed.

Enfim, baixei o pyexpat e também o fonte do python 2.2.3. Copiei a xmlrpclib.py original e modifiquei o source do pyexpat pra já instalar com a lib.

Apanhei um monte pra entender essa zona que é o sdk da nokia, com esses comandos bizarros em perl (bldmake, abld, makesis, signsis, etc) e finalmente consegui gerar o instalador do pyexpat-xmlrpclib-3rded.sis, que (obviamente) não pude instalar no meu aparelho – precisa assinar o instalador com certificado, não pode ser self-signed, aquele papo furado.

Pra resolver isso e conseguir testar, tive que criar uma conta no Symbian Signed, que não aceita emails do gmail, yahoo, hotmail e afins, e preencher mil formulários, e depois de vários emails de confirmação enviei meu arquivo .sis, que em outro email chegou com um link para download, assinado pelo site.

Agora, posso rodar o maldito programa que preciso, do jeito como deveria ser: simples.

# coding: utf-8
# 20081206 AF

import os, e32, sys, socket, appuifw, sysinfo, xmlrpclib

lock = e32.Ao_lock()

# main canvas
def main():
    imei = sysinfo.imei()

    # app title, size and orientation (not automatic)
    appuifw.app.title = u'woah!'
    appuifw.app.orientation = 'portrait'
    appuifw.app.screen = 'normal'

    # access point selection
    apid = socket.select_access_point()
    if not apid:
        lock.signal()
        return

    apo = socket.access_point(apid)
    socket.set_default_access_point(apo)
    apo.start()

    # god damn xmlrpc client
    srv = xmlrpclib.ServerProxy('http://192.168.0.10:8080/xmlrpc')
    print srv.sort(['b', 'z', 'f', 'a'])

# run
main()

lock.wait()

Conclusões:

  1. Desenvolver pra celular é nojento. Seja em python, java, c++, etc;
  2. Os fabricantes complicam tudo. Seja iPhone, Symbian – isso sem contar as duzentas mil milhões de siglas do java, com midp, jsr, bozo;
  3. No caso do Symbian, o sdk de windows também é podre – na verdade é o mesmo do gnupoc, com aqueles scripts nojentos em perl, com bug, que compilam de um jeito alienígena pra mil plataformas diferentes;
  4. Os emuladores normalmente não suportam as funções de câmera, que da raiva porque tem que ficar toda hora copiando no telefone, e as vezes trava tudo;
  5. Se alguém tiver disposto, tipo um snapshot da minha máquina virtual (ubuntu) com tudo isso pronto, e deixamos pra download;
  6. Assim que eu conseguir testar o instalador do pyexpat-xmlrpclib em outro s60 3rd, dou um jeito de colocar pra todo mundo baixar;
  7. To a mais de duas horas só pra escrever esse artigo, por isso não vou revisar nada, nem mesmo o português.

PS: odeio tudo isso, mas nesse momento preciso.