Se connecter
Se connecter
Inscription
Mot de passe perdu
Connexion:
[Actualités]
Les fabricants de PC commercialiseront des modèles équipés de 8 Go de RAM.
[Actualités]
Changer son adresse Gmail est possible : le cadeau de Noël que Google a raté
[Actualités]
Les anciennes cartes Radeon sont 30 % plus rapides. Le nouveau pilote est surpre...
[Actualités]
Paramount a annoncé une offre actualisée pour acquérir Warner Bros. Discovery
[Actualités]
Samsung a décidé de reprendre la production de mémoire DDR4.
[Actualités]
L'iPhone Air 2 pourrait sortir dès 2027.
[Actualités]
AMD se prépare à lancer la technologie EXPO 1.20.
[Actualités]
iOS 26.3 arrive bientôt : date de sortie et ouverture historique à Android
[Actualités]
Les États-Unis interdisent les drones étrangers. DJI et Autel en difficulté.
[Actualités]
Apple va augmenter les prix de l'iPhone à cause des puces mémoire
[Articles]
Wizordum
[Articles]
Tombi! 2: The Evil Swine Return Special Edition
[Articles]
Stranger Things - Le Voyage
[Articles]
Les Chevaliers du ciel Tanguy et Laverdure tome 13 :Opération "Aube Rouge"
[Articles]
Outlaws tome 3 : Prémisses
[Articles]
Tanis tome 2 : Le démon de la mer morte
[Articles]
Boxville 2
[Articles]
Une faille critique exploitant les fichiers Windows JPG, analysée par ESET Rese...
[Articles]
Outlaws + Handful of Missions: Remaster
[Articles]
Ninn tome 7 : Un zoo de papier
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 ^^
Informations
Besoin d’avis sur l’UX de mon mini-projet web (et plus globalement sur ce qui vous rebute sur un site) ?
Software
problème sur windows 10
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
Les fabricants de PC commercialiseront des modèles équipés de 8 Go de RAM.
Google
Changer son adresse Gmail est possible : le cadeau de Noël que Google a raté
Matériel
Les anciennes cartes Radeon sont 30 % plus rapides. Le nouveau pilote est surprenant.
Vidéo
Paramount a annoncé une offre actualisée pour acquérir Warner Bros. Discovery
Matériel
Samsung a décidé de reprendre la production de mémoire DDR4.
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-2025
Akretio
SPRL - Generated via
Kelare
The Akretio Network:
Akretio
-
Freedelity
-
KelCommerce
-
Votre publicité sur informaticien.be ?