Indietro | Sommario | Avanti

4. Primi passi con il WAP

Per prendere confidenza con la tecnologia WAP ho iniziato scrivendo un po' di pagine WML e mettendole in linea su un server HTTP. In seguito ho fatto alcuni esperimenti con un WAP gateway.

4.1. Configurazione del server HTTP

Il server che ha ospitato le pagine è allocato nel Dipartimento di Ingegneria ed è un computer di classe Intel Pentium III, biprocessore, con sistema operativo Linux. Su tale macchina era già presente il software Apache, utilizzato per servire, via protocollo [HTTP], le pagine del sito web del dipartimento. Per poter utilizzare al mio scopo questa macchina, è stato registrato il nome a dominio wap.chaos.cc sul DNS1 di Dipartimento ed è stato aggiunto un host virtuale alla configurazione di [APACHE]. Si tratta di queste righe nel file httpd.conf:

<VirtualHost 192.167.215.104:80> 
ServerAdmin g.mazzini@ieee.org 
DocumentRoot /automnt/tlc1/reti/wap/doc 
ServerName wap.chaos.cc 
ErrorLog logs/error-wap 
TransferLog logs/wap 
ScriptAlias /cgi/ /automnt/tlc1/reti/wap/cgi/ 
<Directory /automnt/tlc1/reti/wap/doc> 
Options Includes ExecCGI FollowSymLinks 
AllowOverride All 
order allow,deny 
allow from all 
</Directory> 
</VirtualHost>

In questo modo è stata instaurata un'associazione tra URL e directory, del tipo:

http://wap.chaos.cc/ -> /automnt/tlc1/reti/wap/doc
http://wap.chaos.cc/cgi -> /automnt/tlc1/reti/wap/cgi

dove la dir cgi contiene programmi di tipo [CGI].

Affinchè il demone2 Apache possa servire contenuti WAP, è necessario istruirlo sui tipi MIME [RFC2045] utilizzati e sulle estensioni dei file che contengono questi formati. In pratica occorre aggiungere queste righe allo stesso file di configurazione citato sopra:

# MIME Types for WAP 
AddType text/vnd.wap.wml .wml 
AddType image/vnd.wap.wbmp .wbmp 
AddType application/vnd.wap.wmlc .wmlc 
AddType text/vnd.wap.wmlscript .wmls 
AddType application/vnd.wap.wmlscriptc .wmlsc

Per terminare l'operazione, possiamo specificare anche che, se non altrimenti specificato, il file che deve essere utilizzato come indice di una directory in cui si trovano contenuti WAP si chiama index.wml:

DirectoryIndex index.html index.htm index.shtml index.wml

4.2. Un file di esempio

Ho predisposto dentro le due directory una serie di file WML studiati appositamente per testare le varie possibilità del linguaggio ed esplorare l'uso dei vari tag. Ecco ad esempio il file index.wml:

<?xml version="1.0" encoding="ISO-8859-1">
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
	"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml> 
   <!-- by Simone Piunno pioppo@ferrara.linux.it --> 
   <template>
      <do type="prev"><prev/></do> 
   </template> 
   <card id="main" title="WML test" newcontext="true"> 
      <p>
         Ciao! Questo è un sito di test.
         <a href="#2">Avanti</a> 
      </p> 
   </card> 
   <card id="2" title="WML test"> 
      <p>
         Il suo scopo è dimostrarti le capacità 
         del linguaggio WML 
         <a href="#3">Avanti</a> 
      </p> 
   </card>
   <card id="3" title="Elenco1"> 
      <p>
         Scegli quale raggruppamento vedere: 
         <select title="gruppi" name="gruppo"> 
         <option value="intestazioni">Intestazioni</option> 
         <option value="layout">Layout</option> 
         <option value="input">Input</option>
         <option value="eventi">Eventi</option> 
         </select> 
         <a href="#$(gruppo)">Procedi</a> 
      </p> 
   </card>
   <!-- altre cards... -->
</wml>

Per verificare che tutto funzionasse ho utilizzato un telefono Siemens S35i e mi sono assicurato che dal telefono le pagine fossero visibili correttamente. Tutti i files sono consultabili con un browser WAP all'indirizzo http://wap.chaos.cc/test/

4.3. Un CGI di esempio

Per verificare che anche la generazione dinamica di contenuti WML fosse funzionante, ho scritto un piccolo programmino in liguaggio [PERL] che, quando interpellato, restituisce una pagina WML nella quale riporta l'orario. Perl è un linguaggio semi-interpretato particolarmente adatto alla costruzione di [CGI] e del quale è disponibile una implementazione gratuita. L'interprete è di norma presente di serie sulle macchine dotate di sistema operativo Linux.

Il programmino è visitabile all'indirizzo http://wap.chaos.cc/cgi/ora.cgi e questo è il codice:

#!/usr/bin/perl
print "Content-type: text/vnd.wap.wml\n\n";
print <<EOF;
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml"> 
<wml> 
   <card title="Ora Esatta">
      <p>
         Sono le ore:<br/>
EOF
print qx(date);
print "</p></card></wml>\n";

Si noti la seconda riga: poichè il server HTTP rimanda al browser un testo generato dinamicamente, non può riconoscere automaticamente il tipo MIME (cosa che normalmente viene fatta esaminando l'estensione del file) e questo comporta l'obbigo di iniziare il testo con Content-type: text/vnd.wap.wml seguito da riga vuota.

4.4. Kannel

Le prove effettuate visualizzando le mie pagine sul Siemens s35i sono state condotte passando per il gateway fornito da Telecom Italia Mobile per i suoi abbonati. In particolare il telefono dialogava con il gateway TIM utilizzando la modalità WAP over CSD (ovvero incapsulando WAP dentro IP/PPP) e passando di fatto attraverso l'equivalente di un dialup Internet provider fornito anch'esso dall'operatore di telefonia. Per capire meglio il meccanismo ho installato e configurato un gateway free per sistemi Unix chiamato Kannel3 anche se questo componente è risultato poi non necessario per lo svolgimento dei progetti successivi.

Kannel è strutturato in maniera modulare: un oggetto di nome bearerbox riceve connessioni WAP UDP sulla porta 9201 e consegna ad un pool di altri oggetti denominati wapbox il compito materiale di recuperare la risorsa richiesta e tradurla (tokenizzarla) opportunamente. Contiene anche un sistema di gestione degli SMS4 che non ho utilizzato: al bearerbox è possibile connettere un numero arbitrario di moduli smsbox che ricevono via HTTP richieste di invio messaggi; questi ultimi vengono passati al bearerbox che li instrada verso un server SMSC5.

La comunicazione tra il bearerbox e i vari wapbox e smsbox avviene attraverso socket UDP così che i vari moduli possano essere messi in esecuzione su macchine diverse permettendo di costruire una struttura scalabile e fault-tolerant.

Per portare a termine l'installazione di Kannel bisogna prima installare la libreria libxml6, utilizzata per il parsing e la tokenizzazione dei file WML. Ecco ad esempio una configurazione per il bearerbox:

# Kannel.conf
max-threads = 20
http-port = 12345
admin-username = "pippo"
admin-password = "lapass"
wapbox-port = 13000
heartbeat-freq = 30
max-queue = 1000
allowed-hosts = "127.0.0.1" 
denied-hosts = "*.*.*.*"
pid-file = "/tmp/bb.pid"
log-file = "/tmp/bearerbox.log"
log-level = 0
wdp-upd = wap
interface-name = *
wap-service = "wsp"
wdp-upd = wsp-wtp
interface-name = *
wap-service = "wsp/wtp"

Ed eccone una invece per il wapbox:

# kannel.wapconf
bearerbox-host = localhost 
bearerbox-port = 13002 
heartbeat-freq = 30 
pid-file = "/tmp/wapbox.pid" 
log-file = "/tmp/wapbox.log" 
log-level = 0

Dopo aver lanciato un bearerbox e uno wapbox, ho effettuato un po' di simulazioni utilizzando il programma fakewap fornito in dotazione con kannel. fakewap simula un client WAP connettendosi al bearerbox con il protocollo WSP e chiedendo di ricevere pagine dagli URL specificati sulla linea di comando. Kannel recupera le pagine richieste e le consegna tokenizzate a fakewap, il quale ne mostra in output un dump esadecimale. Esaminando i log ho potuto ispezionare nei dettagli il funzionamento di un WAP gateway.

Testare il funzionamento con un vero telefono WAP è molto costoso e ne ho avuto uno a disposizione solo per brevi periodi. Dopo varie ricerche sulla rete ho scoperto che erano disponibili molti emulatori, tutti funzionanti soltanto sul sistema operativo Windows, nessuno fornito con il codice sorgente: Nokia WAP toolkit, Ericsson WAP IDE SDK, Motorola Mobile ADK, Phone.com UP.SDK, WapMan, WinWap.

Ho trovato anche tre tentativi di realizzare un emulatore WAP che potesse essere utilizzato da un normale browser WEB, con grande vantaggio in termini di interoperabilità, ma nessuno di questi sembrava funzionare molto bene:

Waplet http://waplet.sourceforge.net
Wapsilon http://www.wapsilon.com
Wapalizer http://www.gelon.net

Non avendo a disposizione un emulatore per ambienti Unix, ai quali il mio lavoro era vincolato, ho infine deciso di realizzarne uno.


Note:

1. Domain Name Server

2. un demone, normalmente funzionante sui sistemi Unix, che si occupa di eseguire operazioni a scadenze periodiche. Ogni utente del sistema può impostare una propria tabella di eventi.

3. http://www.kannel.org

4. Short Message System

5. SMS Center

6. ftp://ftp.gnome.org/pub/GNOME/sources/libxml/

Indietro | Sommario | Avanti