Newsgroup: it.tlc.telefonia.voip
Titolo: NetPhone a nudo :)

************ Disclaimer ************
Quanto segue e' frutto dello studio e delle osservazioni del sottoscritto ed
e' ottenuto in parte mediante logging del traffico TCP usando strumenti di
pubblico dominio.
Non e' stato eseguito reverse engineering su alcun software.
Questo documento viene rilasciato su licenza GNU GPL di cui e' disponibile
una copia all'indirizzo 
http://www.gnu.org/licenses/gpl.txt
************ Disclaimer ************
Pubblico di seguito quanto ho scoperto in merito al protocollo usato dal
client NetPhone di Tiscali affinche' sia possibile sviluppare un gateway
NetPhone-SIP.
Premessa: il client NetPhone di Tiscali e' formato dal controllo ActiveX
"ATLmosquito.ocx" (chi ha usato almeno una volta questo client trova il file
.ocx nella cartella "C:\WINDOWS\Downloaded Program Files") e da una pagina
in html con codice javascript che si interfaccia all' OCX.
E' possibile usare direttamente il controllo per sviluppare client
alternativi (l'ho usato in Delphi7 e funziona perfettamente) magari piu'
funzionali e flessibili della paginetta html di Tiscali anche se la mia idea
sarebbe quella di creare un gateway in grado di interfacciarsi con apparati
SIP.
Ci sono *almeno* due server che gestiscono il servizio:
- il primo, "
phone-proxy.tiscali.com
", esegue i comandi del client, segnala
gli eventi e comunica i parametri
- il secondo (213.205.37.136 o IP successivi) gestisce il flusso audio
1. ============== *Connessione al proxy* ==============
La prima operazione che deve eseguire il client e' stabilire una connessione
con il server proxy "
phone-proxy.tiscali.com
" (in questo momento risolve a
213.205.37.135) sulla classica porta 80.
La stringa da inviare e':
                GET /index.html HTTP/1.1
                Host: 
phone-proxy.tiscali.com
                Connection: Keep-Alive
                x-control: TRUE
                x-email: 999000123456,391781234567
                x-secret: axelle
                x-audioUDPip: 192.168.1.2
                x-audioUDPport: 5050
MOSQUITOINFO:METHODCALL:CONNECT:phone-proxy.tiscali.com:80:999000123456,3917
81234567:axelle
Note:
- "axelle" e' la password per stabilire la connessione con il server
- 999000123456 e' il numero interno assegnato da Tiscali
- 391781234567 e' il numero 178 assegnato da Tiscali
questi parametri sono ricavabili dal sorgente della pagina html di NetPhone.
Il server rispondera' con qualcosa di simile:
                MOSQUITOINFO:PROXYMESSAGE:UDPTEST:
213.205.37.138:5050
2. ============== *Autenticazione* ==============
La seconda operazione e' l'autenticazione sul proxy inviando la stringa:
                propertyset:username:999000123456,391781234567
                propertyset:forwardto:9999000123456
                propertyset:gkpassword:axelle
                propertyset:gatekeeper:195.130.241.112
                propertyset:localport:*
                propertyset:usegatekeeper:1
Nota:
- 195.130.241.112 si ricava sempre dal sorgente della pagina html di
NetPhone ;)
Il server rispondera' con:
                EVENT:MESSAGE:USABLE IPs: 213.205.37.140
                EVENT:ONLINE
                EVENT:OFFLINE
                EVENT:MESSAGE:RCF: Registered on Gatekeeper
                EVENT:MESSAGE:STATE EP GK_ON
                EVENT:MESSAGE:STATE EP IDLE
Nota:
- la riga "EVENT:MESSAGE:USABLE IPs: 213.205.37.140" indica quale sara' il
server che gestira' il flusso audio (nel caso specifico 213.205.37.140)
3. ============== *Telefonata* ==============
Per inoltrare una telefonata e' necessario inviare la stringa:
                methodcall:call:39800232232
Il formato da rispettare e' 39numero_di_telefono: nel caso particolare e'
stato contattato l'800232232 (numero verde per la verifica della
disponibilita' ADSL)
Il server rispondera' con:
                EVENT:MESSAGE:STATE EP CALL_SETUP
                EVENT:MESSAGE:CALLING: 39800232232, TOKEN:
ip$localhost/28396
                EVENT:MESSAGE:AUDIOCHANNEL:OUTGOING
                EVENT:MESSAGE:AUDIOCHANNEL:INCOMING
                EVENT:CONNECTED
                EVENT:MESSAGE:STATE EP CONNECTED
*Attenzione*: talvolta il server invia al client la riga
                EVENT:RATINGEVENT:4
e' un indicazione della qualita' della linea VoIP e puo' assumere valori da
0 (scarsa) a 4 (ottima)
4. ============== *La voce* ==============
Per trasmettere e ricevere la voce in rete sara' ora necessario stabilire la
connessione con il server che e' stato comunicato alla riga
"EVENT:MESSAGE:USABLE IPs: 213.205.37.140", sempre sulla porta 80, ed
inviare la stringa:
                GET /index.html HTTP/1.1
                Host: 213.205.37.140
                Connection: Keep-Alive
                x-audio: TRUE
                x-email: 999000123456,391781234567
                x-secret: axelle
                x-audioUDPip: 192.168.1.2
                x-audioUDPport: 5050
Una volta stabilita la connessione il server ed il client si scambiano
l'audio usando questo socket.
In che formato e' codificato l'audio ? GSM 6.10, mono, 8 KHz
Ho buttato giu' una bozza di programma (in Delphi 7) per sostituire NetPhone
e finora e' stato in grado di inoltrare la telefonata *ma*, essendo a
digiuno di codec, visualizza banalmente lo stream come sequenza numerica: se
qualcuno ha voglia di metterci mano mi faccia sapere ;)
Nel frattempo cerchero' di pulire i sorgenti e pubblicarli sul mio spazio...
Ciao!
Simone.
--
*Chandler*: "Can you see my nipples through this shirt ?"
*Rachel*: "No, but don't worry. I'm sure they're still there"
(M.Perry, J.Aniston - Friends)

 pubblico dominio.
[CUT]
interesting :) riesci a usarlo anche senza connessione tiscali?? :))
-- 
=============== Totò alias J_Zanetti ================
         Tessera #5 25 maggio: you'll never walk alone
  Tessera #0 #7 "ANDY SCHIET ZE ALLEMAAL" (fondatore)
============== toto...@SPAMtin.it ===============

 interesting :) riesci a usarlo anche senza connessione tiscali?? :))
Non saprei, ho l'ADSL di Tiscali ;)
Cmq probabilmente il server verifica l'indirizzo IP in fase di
autenticazione...
Ciao!
Simone.
--
[after Chandler kisses Kathy]
*Joey*: "You're so far past the line, you can't even see the line. The line
is a dot to you."
(M.LeBlanc - Friends)

 Simone.
Bel lavoro! tienici al corrente :)
saluti,
-= Hosso =- 

 spazio...
Fagli fare il dump della stream su un file, poi dallo in pasto al tuo player 
audio preferito; se hai il codec installato (gsm mi pare sia incluso in 
windows) dovrebbe suonarlo. Per gestire i codec direttamente da windows se 
non ricordo male c'è da giocare con le directshow, è un po' un casino, 
oppure devi trovare una libreria (possibilmente opensource) che implementi 
quel codec e usarla direttamente (prova a spulciare i sorgenti di vlc e/o di 
mplayer).
Ciao
Davide