
Le shema ci dessus détaille le fonctionnement des échanges de communication entre le moteur de recherche ( le Robot ) et le serveur Web. Le moteur de recherche est ici à l'initiative des communications. Son comportement est donc celui d'un client Http émettant une requete Http par le biais de l'objet java RupHttpCommand qui encapsule d'une part l'objet SendRupRequest qui permet de formuler une requête Rup sur Http et d'autre part l'objet RecieveRupResponse qui permet de récuperer la réponse Http fournit par le serveur Web. Les Objets RupHttpRequest et RupHttpResponses sont à leur tour encapsulés dans une servlet qui gére les entrées sorties.
1-L'objet RupHttpCommand

Les cases bleues indiquent les propriétés de l'objet RupHttpCommand.
Les cases vertes indiquent les méthodes que possedent l'objet RupHttpCommand.
Les méthodes qui nous intéressent ici sont toutes
celles qui correspondent aux commandes Rup définit dans le protocole.
Ces méthodes sont facilement reconnaissable car elles commencent toutes
par le préfixe rup. Les autres sont soient des fonctions internes (privées)
soient des fonctionnalités rajoutés qui sont susceptibles de
changer.
Ainsi, les méthodes associées aux commandes disponibles dans
la version 1.0 sont :
- rupRegister() pour Register
- rupModify() pour Modify
- rupUnregister() pour Unregister
- rupGetInfo() pour GetInfo
- rupGetIndex() pour GetIndex
- rupVersion() pour Version
L'argument des commandes lorsqu'ils existent sont des objets Vecteur ou Enumération d'objets de types SOIF.
Tout objet comme par exemple un moteur de recherche souhaitant communiquer
avec un serveur web supportant le protocole Rup 1.0 doit avant tout instancié
l'objet java RupHtpCommand pour émettre les commandes. Le rôle
de cet objet est d'établir une connexion par le biais d'une socket
TCP/IP.La mise en place d'une socket TCP permettant une connexion au serveur
web est effectué par la méthode setHttpSocketServer(String
url).
Résumons les opérations successives éffectuées lors de l'appel de cette méthode :
- Création d'un socket TCP en fonction de l'url passée en paramètre.
- Initialisation des flux entrant (inputStream) et sortant(outputStream).
- Création de l'objet SendRupRequest sur le flux sortant. C'est cet objet qui effectuera l'envoie des commandes rup conforme au protocole http.
- Création de l'objet RecieveRupResponse sur le flux entrant afin de réceptionner
les réponses du serveur web provoquée par l'envoi d'une commande à l'aide
de SendRupRequest.
Les objets SendRupRequest et RecieveRupResponse sont des objets privés et sont gérés de maniere interne par les différentes méthodes publiques qui commencent par le préfixe rup.
L'initialisation de rupHttpCommand s'effectue comme suit :
//Instanciation de l'objet
rupHttpCommand
com=new rupHttpCommand();
//Connection
au serveur web
try
{
com.setHttpSocketServer(("http://localhost"));
}
catch(IOException e)
{
System.out.println("IOException
!!!");
}
figure 1
Il s'uffit d'appeler une des méthodes de l'objet en fonction de la
commande rup que l'on veut effectuer.
Ici on veut s'enregistrer.On crée un objet SOIF correspondant
aux préférences que l'on veut transmettre au serveur web. D'apres
le protocole rup 1.0 pour s'enregistrer il faut transmettre dans le corps
de la requête un objet de type mime SOIF ruppref.
SOIF2 soif = new SOIF2("ruppref");
Maintenant que l'on dipose d'un objet
SOIF de type ruppref on lui spécifie son URL (conformément à
la rfc 2655 sur les SOIF). Cette URL est utilisée pour indiquer le
sous espace web auquel nos préférences se réferent.
try
{
soif.setURL(new URL("http://localhost"));
}
catch(MalformedURLException x)
{
System.out.println("creation Soif URL erreur");
}
On peut dorénavant indiquer les paires Attributs/Valeurs (A/V) de l'objet SOIF. Les attributs sont connus et sont spécifiés par le protocole RUP (chaines en violets).
//Ajout des paires A/V
soif.addAVPairs("Transport-Protocol","HTTP
www.myrobot:65");
soif.addAVPairs("Action","SendIndex");
soif.addAVPairs("Query-Restriction","Perl
5 regular expression");
soif.addAVPairs("Latency",2-DAYS);
soif.addAVPairs("Seq-Number",0);
A la place de "Perl 5 regular expression",
on saisit une expression réguliére conforme à Perl 5.
La commande rupRegister prend en paramétre un vecteur d'objet SOIF
car on peut envoyer une suite de préférences pour des sous espaces
web différents pour un même serveur Web.
C'est pour cette raison que l'on va ajouter l'objet SOIF que l'on vient de
paramétrer dans un vecteur. Cependant, dans cet exemple on n'envoie
qu'une préférence pour un seul sous espace Web.
Vector SoifTable = new Vector();
SoifTable.addElement(soif);
Enfin, on envoie la commande.
//"id" est le numéro d'identification
renvoyé par le serveur web
String id=com.rupRegister(SoifTable);
L'éxécution de cette commande génere
de maniere transparente une requête Http adéquate.
On peut obtenir par exemple :
POST /rup
HTTP/1.1
Connection: Keep-Alive
User_Agent: rupEngine/0.0.1
Host: localhost:4444
accept :application/rup.cmd.register, application/rup.cmd.modify, application/rup.cmd.unregister
Content-type:application/rup.obj.info
Content-length:436
@ruppref { http://localhost Transport-Protocol-1 {20} : HTTP www.myrobot:65
Action {7} : SendIndex Query-Restriction {10} : /w* Version{7} : valeur4 }
Conclusion :
On remarque la souplesse d'utilisation des différents objets de la
bibliotheque. L'objet java SOIF2 est suffisement souple pour donner la possibilité
de rajouter sans contraintes de nouveaux couples Attributs/Valeur pour rajouter
de nouvelles fonctionnalités dans des évolutions futures du
protocole Rup.
L'objet rupHttpCommand peut être intégré dans n'importe
quelle application désirant communiquer avec un serveur Web via le
protocole Rup.
Rup Implementation 1.0 par David Bromberg.
