jve a écrit 73 commentaires

  • [^] # Re: Question:

    Posté par  (site web personnel) . En réponse au message Galère de pointeurs avec les GArrays. Évalué à 1.

    Voila, on y arrive, GArray m'impose de spécifier une taille pour chaque élément mais la taille de mes éléments est variable....

    un paquet va être un TCP/SYN, donc tout petit, le suivant va être un PUSH/ACK de 1200 octets.... bref, pas de taille fixe

    De fait, j'espérais que GArray s'occuperait de l'indexation proprement, mais on dirait que ce n'est pas le cas. De fait, je vois pas trop de solutions pour stocker mon bazard... si vous avez une idée ...
  • [^] # Re: g_array_index

    Posté par  (site web personnel) . En réponse au message Galère de pointeurs avec les GArrays. Évalué à 1.

    j'obtiens un segfault dans le cas :

    iph2 = g_array_index(P_to_Array, struct iphdr*, i);

    quand j'utilise :

    iph2 = & g_array_index(P_to_Array, struct iphdr *, i);

    j'obtiens les résultats erratiques dont je parlais dans mon premier post


    la structure "m" est de type ipq_packet_msg_t, elle contient un paquet ramené dans un hook IPQ par netfilter
    de fait, "m->payload" contient le paquet raw, le reste de la structure c'est des metadonnées IPQ qui ne m'interesse pas

    le GArray semble être fonctionnel car lorsque j'accède à "P_to_Array->len" il me retourne bien le nombre de cases que contient le tableau, et ce dans tous les cas

    de fait, je pense que mon problème vient soit de l'ajout dans le tableau, soit dans la définition du tableau avec

    value = g_array_new(FALSE, FALSE, 1500);

    ou 1500 est censé être la taille en bytes de chaque case
  • [^] # Re: g_array_index

    Posté par  (site web personnel) . En réponse au message Galère de pointeurs avec les GArrays. Évalué à 1.

    hélas non, ca me renvoi un segfault
  • [^] # Re: normal

    Posté par  (site web personnel) . En réponse au message Glib et les Binary Trees. Évalué à 1.

    Oui oui ce que tu as dit est juste, mais c'était pas tout à fait ma question en fait :p

    J'ai besoin de traverser l'arbre pour tester des valeurs et supprimer des feuilles en fonctions de ces valeurs.
    Donc oui j'utilise g_tree_remove qui appel les destructeurs listés dans g_tree_new_full, mais je doit faire cela APRES avoir parcouru l'arbre en entier

    ze purpose of my question, c'était de savoir si j'utilisais la bonne méthode ;)

    j'utilise les 3 fonctions suivantes :



    /*! watchman for the B-Tree, wake up every 5 minutes and check every entries */
    void clean_table()
    {
    while (1)
    {
    /*! wake up every 5 minutes */
    sleep(300);

    /*! init pointer table */
    entrytoclean = g_ptr_array_new();

    /*! call the clean function for each value, delete the value if TRUE is returned*/
    g_tree_traverse( redirected_connections,(GHRFunc) match_old_value, G_IN_ORDER, NULL );

    /*! remove each key listed from the btree */
    g_ptr_array_foreach(entrytoclean,(GFunc) remove_old_value, NULL);

    /*! free the array */
    g_ptr_array_free(entrytoclean, TRUE);
    }
    }



    /*! called for each entry in the B-Tree, if a time value is upper to 5 minutes, entry is deleted */
    int match_old_value(gpointer key, gint value, gpointer trash)
    {
    struct tms actual;

    gint *valtime;
    valtime = g_strdup_printf("%d", times(&actual));

    if( (valtime - value) > 30000 )
    {
    g_ptr_array_add(entrytoclean, key);
    }
    return FALSE;
    }



    /*! called for each entry in the pointer array, each entry is a key that is deleted from the B-Tree */
    void remove_old_value(gpointer key, gpointer trash)
    {
    g_print("CLEANER => %s removed\n",key);
    if (TRUE != g_tree_remove(redirected_connections, key))
    {
    g_print("error while removing %s /!\ KEY NOT FOUND IN B-TREE /!\\n", key);
    }
    }
  • [^] # Re: normal

    Posté par  (site web personnel) . En réponse au message Glib et les Binary Trees. Évalué à 0.

    oui mais en fait non :p
    je souhaite supprimer des entrées du tableau selon un critère sur la valeur de l'entrée

    je l'ai fait, et ca marche, il faut parcourir le tableau avec g_tree_traverse qui appel une fonction pour chaque valeur
    dans cette fonction, j'enregistre la clé si mon critère match
    et une fois que g_tree_traverse est terminé, je supprime les valeurs matchées

    il semblerait que ca fonctionne proprement ;)
  • [^] # Re: normal

    Posté par  (site web personnel) . En réponse au message Glib et les Binary Trees. Évalué à 1.

    J'ai, effectivement, commencé à utiliser la Glib de plus en plus.
    En partie grâce au livre "C en action" de Yves Mettier, très pratique pour les codeux du dimanche comme moi... (formation secu info, pas du tout dev)

    Le soucis, c'est les deadlines qui m'oblige à passer des étapes régulièrement et donc m'empêche de prendre le temps de réapprendre (encore qu'il y ais plus à apprendre qu'a ré-apprendre :p).

    Bref, le B-Tree se remplit correctement maintenant, mais pour le nettoyer, si j'ai bien compris, il faut parcourir les branches et feuilles avec "traverse", lister dans un tableau de pointeur (GPtrArray ?) les keys que l'on veut supprimer pour, dans un second temps, appeler "remove" sur ces clés

    j'ai bon ?
  • [^] # Re: normal

    Posté par  (site web personnel) . En réponse au message Glib et les Binary Trees. Évalué à 1.

    Que dire... si ce n'est un grand merci pour ces explications claires et précises ! :)
  • [^] # Re: normal

    Posté par  (site web personnel) . En réponse au message Glib et les Binary Trees. Évalué à 1.

    Un tableau de pointeur ou chaque feuille de l'arbre serait une case du tableau ?
    Je dois avouer que je suis un peu pommé, n'étant pas particulièrement développeur (enfin, comme tout le monde quoi)

    je me suis rabattu sur les hash table, plus simples à utiliser et qui me semblent bien rapides pour ce que je fait... mais je doit avouer que le sentiment face au B-Tree m'irrite :p
    et sur le net, pas d'exemple, que des liens vers la doc officielle...

    Donc au final, si t'avais un exemple de code, ca m'intéresse ;)
  • [^] # Re: ordre

    Posté par  (site web personnel) . En réponse au message Makefile et petit soucis de liens. Évalué à 1.

    a bas oui, ça marche :D
    bien vu !
  • # Waou !

    Posté par  (site web personnel) . En réponse à la dépêche Législatives 2007 : 72h du Logiciel Libre, c'est parti !. Évalué à 4.

    Plus de 350 candidats ont déjà signé.


    Impressionant, beau boulot de la part des volontaires.
  • [^] # Re: À chacun ses arguments

    Posté par  (site web personnel) . En réponse à la dépêche Candidats.fr Législatives - Un pacte du Logiciel Libre sur le terrain.. Évalué à 3.

    Marrante cette façon d'adapter aux sensibilités de chacun :)

    ultra démago.... mais comme tu l'a dit, il faut savoir s'adapter à son interlocuteur !

    pour ma part, je retiendrais la notion de liberté qui est certainement celle qui me touche le plus :)
  • [^] # Re: Comparaison ?

    Posté par  (site web personnel) . En réponse à la dépêche La communauté OpenWengo publie WengoPhone 2.1.0. Évalué à 3.

    Oullaaaa chui pas sur d'etre bien d'accord avec vous la dessus....
    SIP est un protocole de signalisation, en aucun cas il ne transporte de la voix ou quelque forme de données, ca c'est le job de RTP

    SIP est comme HTML, un client se connecte a un serveur, le serveur fais suivre ces informations a un autre client
    quand les deux clients sont sur la meme longueur d'ondes, c'est à dire a la fin de la signalisation SIP, ils établissent un canal RTP en peer to peer pour s'échanger des données (voix, video, ce que vous voulez)

    mais en aucun cas SIP n'est peer to peer !
  • [^] # Re: Comparaison ?

    Posté par  (site web personnel) . En réponse à la dépêche La communauté OpenWengo publie WengoPhone 2.1.0. Évalué à 1.

    > Sinon, sur un LAN SIP est P2P.

    Heuuu je pige pas là....
    SIP est client serveur, toutes les connexions passent par le proxy, même sur un LAN.

    sinon pour SIPS ? c'est au programme ? :)
  • [^] # Re: Comparaison ?

    Posté par  (site web personnel) . En réponse à la dépêche La communauté OpenWengo publie WengoPhone 2.1.0. Évalué à 4.

    Le principe de P2P ne viens pas particulièrement de Skype mais plutot du protocole RTP, qui transporte les données de voix

    RTP est concut pour aller vite, donc le P2P c'est le plus simple. Aussi, appliquer une cryptographie efficace dans une architecture client/serveur est un non sens. De fait, tous les travaux de VoIP, meme sur les protocoles propriétaires, s'orientent vers du transport de voix en P2P.

    Donc, a priori, OpenWengo ne *devrait* pas donner de meilleurs résultats que skype dans un contexte classique. Si ce n'est que skype force un niveau de cryptographie qui est en option dans skype.

    Sinon, je suis content que l'on puisse désormais choisir son propre registrar SIP. C'est cette lacune qui nous avais poussé à ne pas bosser avec OpenWengo lors de nos travaux sur la création d'une distrib VoIP sécurisée (j'en parlerais peut etre bientot).
    D'ailleurs quid de SIPS ? Est-il supporté ?
    Manquerais aussi la gestion des users en LDAP (menfin je force un peu la hein :p)

    beau boulot en tout cas, ca fait plaisir :)
  • [^] # Re: et les chain reactions ???

    Posté par  (site web personnel) . En réponse à la dépêche Sortie de Frozen-Bubble 2. Évalué à 4.

    ouaip je viens de regarder la meme chose.... il serais pas possible de définir l'utilisation des chain reaction par la personne qui créé la partie ?

    Si le créateur active le chain reaction, tous les participants l'utilisent automatiquement. C'est l'idée. Parce que, pour avoir pratiqué FB 1 a fond en duo, ca fait vraiment exploser le plaisir de jeu que de balancer 30 billes dans la tronche de l'adversaire en une fois :p
  • # Chouette !

    Posté par  (site web personnel) . En réponse au journal L'intelligence collective : des fourmis dans votre Linux. Évalué à 3.

    Depuis le temps que le sujet m'interesse et que je souhaite me documenter dessus, voilà un article qui à grandement satisfait mon appétit :)

    Dans un élan de folie, je me suis lancé dans l'article de wikipedia sur les réseaux de neurones : http://fr.wikipedia.org/wiki/R%C3%A9seau_de_neurones

    mais là c'est trop pour moi ! j'abandonne !
  • [^] # Re: très bonne nouvelle

    Posté par  (site web personnel) . En réponse à la dépêche Nouvelle confirmation de la validité de la GPL par un tribunal allemand. Évalué à 2.

    Il est d'autant plus actif que c'est le mainteneur principal du projet Netfilter/Iptables qui l'a créé !

    De fait, ça doit bien agacer Mr Welte de voir que grand nombre de constructeurs utilisent son logiciel Netfilter sans respecter la licence qui l'accompagne !

    Et ya du travail, parce que j'en vois pas beaucoup des redistributions... Free par exemple, c'est du nunux dans leurs friboite... quelqu'un a déjà vu les sources ?
  • [^] # Re: Gtk2 : rafraichissement d'un champ Gtk2::Entry

    Posté par  (site web personnel) . En réponse au message Gtk2 : rafraichissement d'un champ Gtk2::Entry. Évalué à 1.

    trouvé !

    juste après la création du widget, je le stocke dans une table de hachage globale

    $Widgets{datedebut} = $datedebut ;

    et dans ma fonction lancer je le rapelle comme ca :

    my $tmpwidget = $Widgets{datedebut};
    my $valeur = $tmpwidget->get_text;


    et c'est tout bon ;)
  • [^] # Re: Désolé, mais...

    Posté par  (site web personnel) . En réponse au message 2 actions dans un "die". Évalué à 1.

    en fait je viens de m'appercevoir que mon code est pas super propre... hélas...

    mais j'ai pas le temps de corriger tout ca pour le moment (fin de stage approche) alors je réparerais tout ca dans la V2

    jigso => j'ai voulu m'inscrire a la liste des mongueurs.... jamais réussi
  • [^] # Re: Désolé, mais...

    Posté par  (site web personnel) . En réponse au message 2 actions dans un "die". Évalué à 1.

    ok merci pour les infos :) j'ai un peu modifié mon fonctionnement ... maintenant je ré-écris le fonctionnement de die en début de fichier local $SIG{'__DIE__'} = sub { if($DEBUG==1){ open(DEBUG_FILE,">>.\\logs\\debug_TBvir.txt")or die $!; print DEBUG_FILE "SUB_RAPATRIEMENT_LOGS ==> $_[0]\n"; close DEBUG_FILE; } $retour = -1; die $_[0]; }; avec $retour qui est un pointeur vers mon interface (donc pas de soucis sur les 8 bit du return ;) ) et j'appel mon die comme ca : open-gnagnagna or eval{die"Impossible de copier le fichier $fichier_source... $!"}; et hop ca marche comme je veux :) merci de vos aides
  • # oupssss....

    Posté par  (site web personnel) . En réponse au message 2 actions dans un "die". Évalué à 1.

    ARFFEUUUUU mauvais forum :'(

    désolé, je voulais l'envoyer dans "programmation.perl" mais je suis pas habitué a devoir choisir la section dans un menu avant de poster :p

    quelqu'un as les droits pour le déplacer ?
  • [^] # Re: Gtk2 : rafraichissement d'un champ Gtk2::Entry

    Posté par  (site web personnel) . En réponse au message Gtk2 : rafraichissement d'un champ Gtk2::Entry. Évalué à 1.

    oui effectivement, pas besoin des parenthèses mais ca ne change rien..

    j'ai l'impression que quand je lui demande d'exécuter une deuxième fois ma fonction "lancer" il a perdu les objets $datedebut et $datefin....

    mais je comprend pas pourquoi, ni comment le corriger :(
  • [^] # Re: Connaissance du projet et stages

    Posté par  (site web personnel) . En réponse à la dépêche Le Google Summer of Code 2006 arrive !. Évalué à 10.

    Faut surtout être vachement bon en programmation a mon avis...

    400 projets sur toute la planéte, ca donne une vague idée du niveau des développeurs sélectionnés !