vnet-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Vnet-dev] Re: vnet


From: Thomas Sarlandie
Subject: [Vnet-dev] Re: vnet
Date: Mon, 17 Jun 2002 20:21:10 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.0) Gecko/20020610 Debian/1.0.0-1

Hello,

j'ai pas de buffer_get.cc, par contre j'ai un buffer_put.cc

Le problème c'est que tu déclarai que ton paramètre op de ta fonction allwrite, était un pointeur sur une fonction sans argument : int (*op)()

Je l'ai remplacé par : int (*op)(int, const char*, unsigned int), et j'ai modifié buffer.h pour que le champ op soit un pointeur du meme type, et ca marche.

En C ca pouvait marcher parce que quand tu met mafonction(), il considere qu'il ne sait pas encore combien d'arguments elle prendra. En c++ t'as pas le droit de faire ca, et quand tu met mafonction(), le parser le remplace par mafonction(void). Je pense que c'est pour ca que ca merdait.

Bon sinon, meme en changeant ca, ca compile pas trop chez moi :
address@hidden:~/vnet/probe/operations/dns$ make
g++    -c -o alloc.o alloc.cc
alloc.cc: In function `char * alloc(unsigned int)':
alloc.cc:46: ANSI C++ forbids implicit conversion from `void *' in assignment
make: *** [alloc.o] Error 1

Bon, une petite heure après, ca compil nikel, sans warning. Et même ca marche :)

Pour info, je te met le cvs diff. Vérifie que j'ai pas trop fait de bêtises. Je comprend pas pourquoi tu faisais des trucs du style colon = strchr(str, ':') alors que strchr renvoie un pointeur sur le charactere et non pas son index dans la string.
Bref, je te laisse regarder le diff. Je vais commiter mes modifications.

Je me demande quand meme si c'etait bien la peine de recoder des trucs comme malloc ou byte_copy. On t'en aurais pas voulu, si tu avais pas remis tout ca, et ca aurait vachement reduit la taille du code, accelere la compil, le debug, etc. Bref, si tu as l'occasion de revoir ca pour reprendre des trucs plus standard, je pense que ce serait bien (meme si c'est pas une priorite).

{encore une demi-heure plus tard}
Dans un élan de motivation, j'ai encapsulé ton code dans une opération C++ (elle est pas belle la vie ?). Le seul problème c'est que je vois pas trop comment parser les packets dns recues, et je n'ai pas envie de me plonger dans printpacket_cat(). J'ai donc mis une explication détaillé de comment faire dans le source (DNS.cpp ligne 114), ca devrait pas etre dur maintenant.
Je te la met ici aussi :
   /* ici: il faut faire un truc du style *
    * for (parcourt les hosts) {
    *   Host *h = new Host(IPAddress(address_ip_en_uint32_ou_int));
    *   h->setProperty("hostname", std::string(un_char*_avec_le_nom_dns));
    *   op->world.addHost(h);
    */
//printpacket_cat(&out, dns_resolve_tx.packet, dns_resolve_tx.packetlen); Tu as juste a remplacé l'adresse ip, et le nom de domaine, ensuite tu fais un make, et puis tu peux lancer l'opération, en faisant :
cd probe && ./standalone operations/dns/DNS.so www.epita.fr

Pour l'instant, j'ai fait en sorte que la query se fasse sur les enregistrements de type A. Je mettrai un paramètre en plus à l'opération plus tard.

Voilà, je pense qu'on est vraiment tout près du but. Si t'avais le tps de t'en oqp ce soir, ce serait genial.

a+
sarfata

Index: alloc.cc
===================================================================
RCS file: /cvs/vnet/probe/operations/dns/alloc.cc,v
retrieving revision 1.1
diff -r1.1 alloc.cc 46c46
<   x = malloc(n);
---
>   x = (char*)malloc(n);
Index: buffer_put.cc
===================================================================
RCS file: /cvs/vnet/probe/operations/dns/buffer_put.cc,v
retrieving revision 1.2
diff -r1.2 buffer_put.cc
68c68
< int           buffer_put(buffer *s,char *buf,unsigned int len)
---
> int           buffer_put(buffer *s,const char *buf,unsigned int len)
110c110
< int           buffer_puts(buffer *s,char *buf)
---
> int           buffer_puts(buffer *s, const char *buf)
Index: byte_copy.cc
===================================================================
RCS file: /cvs/vnet/probe/operations/dns/byte_copy.cc,v
retrieving revision 1.1
diff -r1.1 byte_copy.cc
25c25
< void byte_copy(register char *to, register unsigned int n, register char *from)
---
> void byte_copy(register char *to, register unsigned int n, register const char *from)
Index: byte_diff.cc
===================================================================
RCS file: /cvs/vnet/probe/operations/dns/byte_diff.cc,v
retrieving revision 1.1
diff -r1.1 byte_diff.cc
27c27
< int byte_diff(register char *s, register unsigned int n, register char *t)
---
> int byte_diff(register const char *s, register unsigned int n, register const char *t)
Index: dns_domain.cc
===================================================================
RCS file: /cvs/vnet/probe/operations/dns/dns_domain.cc,v
retrieving revision 1.1
diff -r1.1 dns_domain.cc
72c72
< int                   dns_domain_copy(char **out,const char *in)
---
> int                   dns_domain_copy(char **out, const char *in)
Index: dns_ipq.cc
===================================================================
RCS file: /cvs/vnet/probe/operations/dns/dns_ipq.cc,v
retrieving revision 1.1
diff -r1.1 dns_ipq.cc
28a29
>   char                 *colonptr;
34c35,39
<   colon = strchr(rule, ':');
---
>
>   /* patched by sarfata. strchr returns a char* not an int */
>   colonptr = strchr(rule, ':');
>   colon = (int) ((int)colonptr - (int)rule);
>   /* end of patch */
Index: dns_rcrw.cc
===================================================================
RCS file: /cvs/vnet/probe/operations/dns/dns_rcrw.cc,v
retrieving revision 1.1
diff -r1.1 dns_rcrw.cc
128c128,131
<   i = strchr(host, '.');
---
>   /* another sarfata patch */
>   char * dotptr =  strchr(host, '.');
>   i = (int)dotptr - (int)host;
>   /* end of sarf patch */
Index: dnsq.cc
===================================================================
RCS file: /cvs/vnet/probe/operations/dns/dnsq.cc,v
retrieving revision 1.1
diff -r1.1 dnsq.cc
30a31
> #include                        "exit.h"
Index: dnsqr.cc
===================================================================
RCS file: /cvs/vnet/probe/operations/dns/dnsqr.cc,v
retrieving revision 1.1
diff -r1.1 dnsqr.cc
29a30
> #include                "exit.h"
Index: socket_bind.cc
===================================================================
RCS file: /cvs/vnet/probe/operations/dns/socket_bind.cc,v
retrieving revision 1.1
diff -r1.1 socket_bind.cc
37c37
<   byte_zero(&sa,sizeof sa);
---
>   byte_zero((char*)&sa,sizeof sa);
Index: socket_conn.cc
===================================================================
RCS file: /cvs/vnet/probe/operations/dns/socket_conn.cc,v
retrieving revision 1.1
diff -r1.1 socket_conn.cc
46c46
<   byte_zero(&sa,sizeof sa);
---
>   byte_zero((char*)&sa,sizeof sa);
67c67
<   if (getpeername(s,(struct sockaddr *) &sa,&dummy) == -1)
---
> if (getpeername(s,(struct sockaddr *) &sa, (unsigned int*)&dummy) == -1)
Index: byte.h
===================================================================
RCS file: /cvs/vnet/probe/operations/dns/byte.h,v
retrieving revision 1.4
diff -r1.4 byte.h
22,23c22,23
< extern void byte_copy(register char *, register unsigned int, register char *); < extern int byte_diff(register char *, register unsigned int, register char *);
---
> extern void byte_copy(register char *, register unsigned int, register const char *); > extern int byte_diff(register const char *, register unsigned int, register const char *);
Index: exit.h
===================================================================
RCS file: /cvs/vnet/probe/operations/dns/exit.h,v
retrieving revision 1.2
diff -r1.2 exit.h
22c22
< extern void           _exit();
---
> extern void           _exit(int);


julus wrote:

Dis, j'ai un probleme pour passer un pointeur sur fonction en c++, apres pour le reste ca va, le .so devrait etre operationel des que j'aurai compris cette )(*)&)(!!! de structure du monde. Si tu peux jeter un oeil c'est dans le fichier buffer_get a la ligne 30 a l'appel de op, un pointeur sur fonction que je lui passe en premier argument de la fonction allwrite.

thx Raspoutine






reply via email to

[Prev in Thread] Current Thread [Next in Thread]