Se connecter
Se connecter
Inscription
Mot de passe perdu
Connexion:
[Actualités]
Nvidia prévient d'une pénurie de GPU ce trimestre, avec une reprise début 2025
[Actualités]
Les Technos #469 : Un jour sans fin
[Actualités]
Test Farming Simulator 25 (PS5) - Des innovations intéressantes mais des perfor...
[Actualités]
Qualcomm souhaite réduire davantage les prix des PC Windows basés sur ARM
[Actualités]
Finalement, Google préparerait une nouvelle tablette mais la Pixel Tablet 2 ser...
[Actualités]
Windows 10 version 22H2 : erreur de mise à jour et de désinstallation
[Actualités]
OpenAI prépare désormais son propre navigateur
[Actualités]
WhatsApp bat Telegram : les transcriptions des messages vocaux arrivent pour tou...
[Actualités]
Unreal et Unreal Tournament désormais gratuits sur Internet Archive
[Actualités]
Windows 10 : Microsoft affiche des publicités en plein écran pour les PC équi...
[Articles]
Dungeons 4 - Nintendo Switch Edition
[Articles]
The Bridge Curse 2 : The Extrication
[Articles]
Farmagia
[Articles]
I*CHU: Chibi Edition
[Articles]
Farming Simulator 25
[Articles]
Goblin Slayer -Another Adventurer- Nightmare Feast
[Articles]
Deel lance des programmes en marque blanche et pour les revendeurs pour plus de ...
[Articles]
ESET Research : WolfsBane, nouvelle porte dérobée de cyber-espionnage Linux cr...
[Articles]
Devoteam présente son nouveau plan stratégique « AMPLIFY » avec un fort acce...
[Articles]
LEGO Horizon Adventures
Actualités
Lettre d'information
Proposer une actualité
Archives
Actualités
Articles
Programmation
Press Release
Matériel
Logiciels
Livres
Interviews
Derniers commentaires
Jeux Vidéos
XBox One
XBox 360
Wii U
PSP
PS4
PS3
PC
DS
GameCube
3DS
Forum
Derniers messages
Informatique
Fun
Divers
Logithèque
Blogs
Divers
A Propos
Annonceurs
Contact
Recherche
RSS
Editer un article
Titre
Mots Clés
Texte
[size=18] [b]Nom[/b] [/size] xdr - Bibliothèque de fonctions pour transmission externe de données. [size=18] [b]Description[/b] [/size] Ces routines permettent aux programmeurs C de décrire des structures de données arbitraires de manière indépendante de la machine. Les données pour les appels de routines distantes ([b]RPC[/b]) sont transmises de cette manière. .ft B .nf .5 xdr_array(xdrs, arrp, sizep, maxsize, elsize, elproc) s-1XDRs0 *xdrs; char **arrp; u_int *sizep, maxsize, elsize; xdrproc_t elproc; .fi .ft R [table][row][col] [/col][col]Une primitive de filtrage qui traduit les tables de longueur variable en leur représentations externes correspondantes. Le paramètre [i]arrp[/i] est l'adresse d'un pointeur sur la chaîne, tandis que [i]sizep[/i] est l'adresse du nombre d'éléments dans la table. Ce nombre d'éléments ne peut pas excéder [b]maxsize .[/b] Le paramètre [i]elsize[/i] est la taille [i]( sizeof )[/i] de chaque élément de la table, et [i]elproc[/i] est un filtre [size=6]XDR[/size] de traduction entre la forme C des éléments de la table, et sa représentation externe. Cette routine renvoie 1 si elle réussit, 0 sinon. [b][/b] .if t .ne 8[/col][/row][/table] .ft B .nf .5 xdr_bool(xdrs, bp) s-1XDRs0 *xdrs; bool_t *bp; .fi .ft R [table][row][col] [/col][col]Une primitive de filtrage assurant la traduction entre les booléens (entiers C) et leur représentation externe. Durant l'encodage des données, ce filtre produit soit un 1 soit un 0. Cette routine renvoie 1 si elle réussit, 0 sinon. [b][/b] .if t .ne 10[/col][/row][/table] .ft B .nf .5 xdr_bytes(xdrs, sp, sizep, maxsize) s-1XDRs0 *xdrs; char **sp; u_int *sizep, maxsize; .fi .ft R [table][row][col] [/col][col]Une primitive de filtrage assurant la traduction entre des tables caractères de longueurs données et leur représentation externe. Le paramètre [i]sp[/i] est l'adresse du pointeur sur la chaîne. La longueur de la chaîne est située à l'adresse [b]sizep .[/b] Le chaînes ne peuvent pas être plus longues que [b]maxsize .[/b] Cette routine renvoie 1 si elle réussit, 0 sinon. [b][/b] .if t .ne 7[/col][/row][/table] .ft B .nf .5 xdr_char(xdrs, cp) s-1XDRs0 *xdrs; char *cp; .fi .ft R [table][row][col] [/col][col]Une primitive de filtrage assurant la traduction entre les caractères C et leur représentation externe. Cette routine renvoie 1 si elle réussit, 0 sinon. Note: Les caractères encodés ne sont pas accolés, et occupent quatre octets chacun. Pour les tables de caractères, il vaut mieux se tourner vers [b]xdr_bytes() ,[/b] [b]xdr_opaque()[/b] ou [b]xdr_string() .[/b] [b][/b] .if t .ne 8[/col][/row][/table] .ft B .nf .5 void xdr_destroy(xdrs) s-1XDRs0 *xdrs; .fi .ft R [table][row][col] [/col][col]Une macro invoquant la routine de destruction associée avec le flux [size=6]XDR[/size] [b]xdrs .[/b] La destruction entraîne habituellement la libération de structures de données privées associées avec le flux. Le comportement est indéfini si on essaye d'utiliser [i]xdrs[/i] après avoir invoqué [b]xdr_destroy ().[/b] [b][/b] .if t .ne 7[/col][/row][/table] .ft B .nf .5 xdr_double(xdrs, dp) s-1XDRs0 *xdrs; double *dp; .fi .ft R [table][row][col] [/col][col]Une primitive de filtrage assurant la traduction entre les nombres C en [b]double[/b] precision et leur représentation externe. Cette routine renvoie 1 si elle réussit, 0 sinon. [b][/b] .if t .ne 7[/col][/row][/table] .ft B .nf .5 xdr_enum(xdrs, ep) s-1XDRs0 *xdrs; enum_t *ep; .fi .ft R [table][row][col] [/col][col]Une primitive de filtrage assurant la traduction entre les énumérés C [b]enum s[/b] (en réalité des entiers) et leur représentation externe. Cette routine renvoie 1 si elle réussit, 0 sinon. [b][/b] .if t .ne 8[/col][/row][/table] .ft B .nf .5 xdr_float(xdrs, fp) s-1XDRs0 *xdrs; float *fp; .fi .ft R [table][row][col] [/col][col]Une primitive de filtrage assurant la traduction entre les nombres [b]float s[/b] C et leur représentation externe. Cette routine renvoie 1 si elle réussit, 0 sinon. [b][/b] .if t .ne 9[/col][/row][/table] .ft B .nf .5 void xdr_free(proc, objp) xdrproc_t proc; char *objp; .fi .ft R [table][row][col] [/col][col]Routine générique de libération. Le premier argument est la routine [size=6]XDR[/size] de l'objet à libérer. Le second argument est un pointeur vers l'objet lui-même. Note : le pointeur transmis à cette routine n'est [i]pas[/i] libéré, mais l'endroit où il pointe [i]est[/i] libéré (récursivement). [b][/b] .if t .ne 8[/col][/row][/table] .ft B .nf .5 u_int xdr_getpos(xdrs) s-1XDRs0 *xdrs; .fi .ft R [table][row][col] [/col][col]Une macro invoquant la routine de lecture de position associée avec le flux [size=6]XDR[/size] [b]xdrs .[/b] Cette fonction renvoie un entier non-signé, qui indique la position dans le flux [size=6]XDR .[/size] Une fonctionnalité appréciable serait que l'arithmétique usuelle fonctionne avec ce nombre, mais tous les flux [size=6]XDR[/size] ne le garantissent pas. [b][/b] .if t .ne 4[/col][/row][/table] .ft B .nf .5 [b][/b] long * xdr_inline(xdrs, len) s-1XDRs0 *xdrs; int len; .fi .ft R [table][row][col] [/col][col]Une macro qui invoque la routine en-ligne associée avec le flux [size=6]XDR[/size] [b]xdrs .[/b] Cette routine renvoie un pointeur vers une portion continue du buffer du flux. [i]len[/i] est la longueur en octets du buffer désiré Note: Le pointeur est converti en [b]long * .[/b][/col][/row][/table] [table][row][col] [/col][col]Attention : [b]xdr_inline()[/b] peut renvoyer [size=6]NULL[/size] (0) si elle ne peut allouer une portion continue de buffer de la taille réclamée. [b][/b] .if t .ne 7[/col][/row][/table] .ft B .nf .5 xdr_int(xdrs, ip) s-1XDRs0 *xdrs; int *ip; .fi .ft R [table][row][col] [/col][col]Une primitive de filtrage assurant la traduction entre les entiers C et leur représentation externe. Cette routine renvoie 1 si elle réussit, 0 sinon. [b][/b] .if t .ne 7[/col][/row][/table] .ft B .nf .5 xdr_long(xdrs, lp) s-1XDRs0 *xdrs; long *lp; .fi .ft R [table][row][col] [/col][col]Une primitive de filtrage assurant la traduction entre les entiers [b]long[/b] C et leur représentation externe. Cette routine renvoie 1 si elle réussit, 0 sinon. [b][/b] .if t .ne 12[/col][/row][/table] .ft B .nf .5 void xdrmem_create(xdrs, addr, size, op) s-1XDRs0 *xdrs; char *addr; u_int size; enum xdr_op op; .fi .ft R [table][row][col] [/col][col]Cette routine initialise l'objet flux [size=6]XDR[/size] pointé par [b]xdrs .[/b] Les données du flux sont lues ou écrites dans le bloc mémoire situé en [i]addr[/i] et dont la longueur ne dépasse pas [i]size[/i] octets. L'argument [i]op[/i] détermine la direction du flux [size=6]XDR[/size] [b]( s-1XDR_ENCODEs0 ,[/b] [b]s-1XDR_DECODEs0 ,[/b] ou [b]s-1XDR_FREEs0 ).[/b] [b][/b] .if t .ne 10[/col][/row][/table] .ft B .nf .5 xdr_opaque(xdrs, cp, cnt) s-1XDRs0 *xdrs; char *cp; u_int cnt; .fi .ft R [table][row][col] [/col][col]Une primitive de filtrage assurant la traduction entre des données opaques de taille fixe et leur représentation externe. Le paramètre [i]cp[/i] est l'adresse de l'objet opaque, et [i]cnt[/i] est sa taille en octets. Cette routine renvoie 1 si elle réussit, 0 sinon. [b][/b] .if t .ne 10[/col][/row][/table] .ft B .nf .5 xdr_pointer(xdrs, objpp, objsize, xdrobj) s-1XDRs0 *xdrs; char **objpp; u_int objsize; xdrproc_t xdrobj; .fi .ft R [table][row][col] [/col][col]Comme [b]xdr_reference()[/b] sauf qu'elle met bout à bout les pointeurs [size=6]NULL[/size] alors que [b]xdr_reference()[/b] ne le fait pas. Ainsi [b]xdr_pointer()[/b] peut représenter des structures de données récursives, comme les arbres binaires ou les listes chaînées. [b][/b] .if t .ne 15[/col][/row][/table] .ft B .nf .5 void xdrrec_create(xdrs, sendsize, recvsize, handle, readit, writeit) s-1XDRs0 *xdrs; u_int sendsize, recvsize; char *handle; int (*readit) (), (*writeit) (); .fi .ft R [table][row][col] [/col][col]Cette routine initialise le flux [size=6]XDR[/size] pointé par [b]xdrs .[/b] Les données du flux sont écrites dans un buffer de taille [b]sendsize .[/b] Une valeur nulle indique que le système choisira une taille adéquate. Les données du flux sont lues depuis un buffer de taille [b]recvsize .[/b] De même le système choisira une taille adéquate en transmettant une valeur nulle. Lorsque le buffer de sortie du flux est plein, la fonction [i]writeit[/i] est appelé. Symétriquement, lorsque le buffer d'entrée est vide, la fonction [i]readit[/i] est invoquée. Le comportement de ces routines est similaire aux deux appels-système [b]read[/b] et [b]write ,[/b] sauf que le descripteur [i]handle[/i] est passé aux routines en tant que premier paramètres. Note: L'attribut [i]op[/i] du flux [size=6]XDR[/size] doit être fixé par l'appelant.[/col][/row][/table] [table][row][col] [/col][col]Attention : ce flux [size=6]XDR[/size] implémente un flux d'enregistrement intermédiaire. Il y a donc des octets supplémentaires dans le flux afin de séparer les enregistrements. [b][/b] .if t .ne 9[/col][/row][/table] .ft B .nf .5 xdrrec_endofrecord(xdrs, sendnow) s-1XDRs0 *xdrs; int sendnow; .fi .ft R [table][row][col] [/col][col]Cette routine ne peut être invoquée que sur des flux créé par [b]xdrrec_create() .[/b] Les données dans le buffer de sortie sont considérées comme un enregistrement complet, et le buffer de sortie est éventuellement écrit si [i]sendnow[/i] est non-nul. Cette routine renvoie 1 si elle réussit, 0 sinon. [b][/b] .if t .ne 8[/col][/row][/table] .ft B .nf .5 xdrrec_eof(xdrs) s-1XDRs0 *xdrs; int empty; .fi .ft R [table][row][col] [/col][col]Cette routine ne peut être invoqué que sur des flux créés par [b]xdrrec_create() .[/b] Après avoir rempli le reste de l'enregistrement avec les données du flux, cette routine renvoie 1 si le flux n'a plus de données d'entrée, et 0 sinon. [b][/b] .if t .ne 3[/col][/row][/table] .ft B .nf .5 xdrrec_skiprecord(xdrs) s-1XDRs0 *xdrs; .fi .ft R [table][row][col] [/col][col]Cette routine ne peut être invoqué que sur des flux créés par [b]xdrrec_create() .[/b] Elle indique à l'implémentation [size=6]XDR[/size] que le reste de l'enregistrement en cours dans le buffer d'entrée doit être éliminé. Cette routine renvoie 1 si elle réussit, 0 sinon. [b][/b] .if t .ne 11[/col][/row][/table] .ft B .nf .5 xdr_reference(xdrs, pp, size, proc) s-1XDRs0 *xdrs; char **pp; u_int size; xdrproc_t proc; .fi .ft R [table][row][col] [/col][col]Une primitive qui gère les pointeurs sur les structures. Le paramètre [i]pp[/i] est l'adresse du pointeur, [i]size[/i] est la taille [i]( sizeof )[/i] de la structure pointée par [b]*pp ,[/b] et [i]proc[/i] est la procédure [size=6]XDR[/size] qui filtre la structure entre sa forme C et sa représentation externe. Cette routine renvoie 1 si elle réussit, et 0 sinon.[/col][/row][/table] [table][row][col] [/col][col]Attention : cette routine ne comprend pas les pointeurs [b]NULL .[/b] Utilisez [b]xdr_pointer()[/b] à sa place. [b][/b] .if t .ne 10[/col][/row][/table] .ft B .nf .5 xdr_setpos(xdrs, pos) s-1XDRs0 *xdrs; u_int pos; .fi .ft R [table][row][col] [/col][col]Une macro qui invoque la routine de positionnement associée au flux [size=6]XDR[/size] [b]xdrs .[/b] Le paramètre [i]pos[/i] est une valeur de position obtenue avec [b]xdr_getpos() .[/b] Cette routine renvoie 1 si le flux [size=6]XDR[/size] peut être repositionné, et zéro sinon.[/col][/row][/table] [table][row][col] [/col][col]Attention : il est difficile de repositionner certains types de flux [size=6]XDR[/size] ce qui peut faire échouer cette routine avec certains flux, et réussir avec d'autres. [b][/b] .if t .ne 8[/col][/row][/table] .ft B .nf .5 xdr_short(xdrs, sp) s-1XDRs0 *xdrs; short *sp; .fi .ft R [table][row][col] [/col][col]Une primitive de filtrage assurant la traduction entre les entiers [b]short[/b] et leur représentation externe. Cette routine renvoie 1 si elle réussit, 0 sinon. [b][/b] .if t .ne 10[/col][/row][/table] .ft B .nf .5 void xdrstdio_create(xdrs, file, op) s-1XDRs0 *xdrs; s-1FILEs0 *file; enum xdr_op op; .fi .ft R [table][row][col] [/col][col]Cette routine initialise l'objet flux [size=6]XDR[/size] pointé par [b]xdrs .[/b] Les données du flux [size=6]XDR[/size] sont écrites dans - ou lues depuis - le flux d'entrée/sortie standard [b]file .[/b] Le paramètre [i]op[/i] détermine la direction du flux [size=6]XDR[/size] [b]( s-1XDR_ENCODEs0 ,[/b] [b]s-1XDR_DECODEs0 ,[/b] ou [b]s-1XDR_FREEs0 ).[/b][/col][/row][/table] [table][row][col] [/col][col]Attention : la routine de destruction associée avec un tel flux [size=6]XDR[/size] appelle [b]fflush()[/b] sur le flux [b]file ,[/b] mais pas [b]fclose() .[/b] [b][/b] .if t .ne 9[/col][/row][/table] .ft B .nf .5 xdr_string(xdrs, sp, maxsize) s-1XDRs0 *xdrs; char **sp; u_int maxsize; .fi .ft R [table][row][col] [/col][col]Une primitive de filtrage assurant la traduction entre les chaînes de caractères C et leur représentation externe. Les chaîne ne peuvent pas être plus longues que [b]maxsize .[/b] Note: [i]sp[/i] est l'adresse du pointeur sur la chaîne. Cette routine renvoie 1 si elle réussit, 0 sinon. [b][/b] .if t .ne 8[/col][/row][/table] .ft B .nf .5 xdr_u_char(xdrs, ucp) s-1XDRs0 *xdrs; unsigned char *ucp; .fi .ft R [table][row][col] [/col][col]Une primitive de filtrage assurant la traduction entre les caractères [b]unsigned[/b] du C et leur représentation externe. Cette routine renvoie 1 si elle réussit, 0 sinon. [b][/b] .if t .ne 9[/col][/row][/table] .ft B .nf .5 xdr_u_int(xdrs, up) s-1XDRs0 *xdrs; unsigned *up; .fi .ft R [table][row][col] [/col][col]Une primitive de filtrage assurant la traduction entre les entiers [b]unsigned[/b] du C et leur représentation externe. Cette routine renvoie 1 si elle réussit, 0 sinon. [b][/b] .if t .ne 7[/col][/row][/table] .ft B .nf .5 xdr_u_long(xdrs, ulp) s-1XDRs0 *xdrs; unsigned long *ulp; .fi .ft R [table][row][col] [/col][col]Une primitive de filtrage assurant la traduction entre les entiers [b]unsigned long[/b] du C et leur représentation externe. Cette routine renvoie 1 si elle réussit, 0 sinon. [b][/b] .if t .ne 7[/col][/row][/table] .ft B .nf .5 xdr_u_short(xdrs, usp) s-1XDRs0 *xdrs; unsigned short *usp; .fi .ft R [table][row][col] [/col][col]Une primitive de filtrage assurant la traduction entre les entiers [b]unsigned short[/b] du C et leur représentation externe. Cette routine renvoie 1 si elle réussit, 0 sinon. [b][/b] .if t .ne 16[/col][/row][/table] .ft B .nf .5 xdr_union(xdrs, dscmp, unp, choices, dfault) s-1XDRs0 *xdrs; int *dscmp; char *unp; struct xdr_discrim *choices; bool_t (*defaultarm) (); /* may equal s-1NULLs0 */ .fi .ft R [table][row][col] [/col][col]Une primitive de filtrage assurant la traduction entre une [b]union[/b] C avec discriminant et la représentation externe correspondante. Elle traduit d'abord le discriminant de l'union, situé en [b]dscmp .[/b] Le discriminant doit toujours être du type [b]enum_t .[/b] Ensuite, l'union située en [i]unp[/i] est traduite. Le paramètre [i]choices[/i] est un pointeur sur une table de structures [b]xdr_discrim() .[/b] Chaque structure contient une paire ordonnée [i][ valeur , procédure ].[/i] Si le discriminant de l'union est égal à une [b]valeur ,[/b] alors la [i]procédure[/i] associée est invoquée pour traduire l'union. La fin de la table de structures [b]xdr_discrim()[/b] est indiquée par une routine de valeur [size=6]NULLs0.[/size] Si le discriminant n'est pas trouvé dans la table [b]choices ,[/b] alors la procédure [i]defaultarm[/i] est invoquée (si elle ne vaut pas [size=6]NULLs0).[/size] Cette routine renvoie 1 si elle réussit, 0 sinon. [b][/b] .if t .ne 6[/col][/row][/table] .ft B .nf .5 xdr_vector(xdrs, arrp, size, elsize, elproc) s-1XDRs0 *xdrs; char *arrp; u_int size, elsize; xdrproc_t elproc; .fi .ft R [table][row][col] [/col][col]Une primitive de filtrage assurant la traduction entre les tables de longueur fixe, et leur représentation externe. Le paramètre [i]arrp[/i] est l'adresse du pointeur sur la table, tandis que [i]size[/i] est le nombre d'éléments dans la table. Le paramètre [i]elsize[/i] est la taille [i]( sizeof )[/i] d'un élément de la table, et [i]elproc[/i] est un filtre [size=6]XDR[/size] assurant la traduction entre la forme C des éléments de la table et leur représentation externe. Cette routine renvoie 1 si elle réussit, 0 sinon. [b][/b] .if t .ne 5[/col][/row][/table] .ft B .nf .5 xdr_void() .fi .ft R [table][row][col] [/col][col]Cette routine renvoie toujours 1. Elle peut être passée aux routines [size=6]RPC[/size] qui ont besoin d'une fonction en argument alors que rien ne doit être fait. [b][/b] .if t .ne 10[/col][/row][/table] .ft B .nf .5 xdr_wrapstring(xdrs, sp) s-1XDRs0 *xdrs; char **sp; .fi .ft R [table][row][col] [/col][col]Une primitive qui appelle [b]xdr_string(xdrs, sp,1MAXUN.UNSIGNED);[/b] où .B [size=6]MAXUN.UNSIGNED[/size] est la valeur maximale d'un entier non signé. [b]xdr_wrapstring()[/b] est pratique car la bibliothèque [size=6]RPC[/size] passe un maximum de deux routines [size=6]XDR[/size] comme paramètres, et [b]xdr_string() ,[/b] l'une des primitives les plus fréquemment utilisées en requiert trois. Cette routine renvoie 1 si elle réussit, 0 sinon.[/col][/row][/table] [size=18] [b]Voir aussi[/b] [/size] [b]rpc (3N)[/b] Les manuels suivants :[table][row][col] [/col][col] .ft I eXternal Data Representation Standard: Protocol Specification [b][/b] eXternal Data Representation: Sun Technical Notes .ft R [b][/b] [b]s-1XDRs0: External Data Representation Standard ,[/b] [size=6]RFC1014, Sun Microsystems, Inc.,[/size] [size=6]USC-ISIs0.[/size] [size=18] [b]Traduction[/b] [/size] Christophe Blaess, 2000-2003.
Fichier
Forum
-
Derniers messages
Bavardages
Aujourd'hui, je rénove ou je construis ^^
Software
problème sur windows 10
Réseaux et Télécom
Administrateur Réseau - Cisco
Réseaux et Télécom
Problème wifi (POE)
Software
Postfix - Need help
Bavardages
Oh râge oh désespoir !
Programmation
Enregistrement client et envoi mail
Software
SÉCURITÉ MACBOOK
Hardware
conseil matos réseau?
Hardware
nVidia Shield Android TV
Actualités
-
Archives
Matériel
Nvidia prévient d'une pénurie de GPU ce trimestre, avec une reprise début 2025
Les Technos
Les Technos #469 : Un jour sans fin
Jeux Vidéos
Test Farming Simulator 25 (PS5) - Des innovations intéressantes mais des performances à revoir
Matériel
Qualcomm souhaite réduire davantage les prix des PC Windows basés sur ARM
Tablettes
Finalement, Google préparerait une nouvelle tablette mais la Pixel Tablet 2 serait abandonnée
Ada
CSS
Cobol
CPP
HTML
Fortran
Java
JavaScript
Pascal
Perl
PHP
Python
SQL
VB
XML
Anon URL
DailyMotion
eBay
Flickr
FLV
Google Video
Google Maps
Metacafe
MP3
SeeqPod
Veoh
Yahoo Video
YouTube
6px
8px
10px
12px
14px
16px
18px
Informaticien.be
- © 2002-2024
Akretio
SPRL - Generated via
Kelare
The Akretio Network:
Akretio
-
Freedelity
-
KelCommerce
-
Votre publicité sur informaticien.be ?