IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

structure différente selon condition


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 6
    Par défaut structure différente selon condition
    Bonjour!

    Voici mon souci :
    J'ai 2 structures différentes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct ipv4 {
        ...
        ...
    };
     
    struct ipv6 {
        ...
        ...
    };
    Dans mon code, j'analyse des paquets sniffé sur le réseau, selon que c'est un paquet ipv4 ou ipv6 je dois alloué une structure ou l'autre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ip_gen *ip;
    if (ip_version == 4)
        ip = (struct ipv4*)(packet);
    else
        ip = (struct ipv6*)(packet);
    Voilà ce que je voudrais faire dans l'idéal mais je n'y arrive pas Je ne sais pas ce que doit-être le type "ip_gen"... Dois je recréer une structure? Comment faire les lien avec les 2 structures possibles?

    J'espère avoir été assez clair et ne pas avoir trop épurer mon code, je n'ai pas voulu encombrer de choses inutiles

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    union ip_v4_v6 {
        struct ipv4 * v4;
        struct ipv6 * v6;
    };
     
    struct ip_gen {
        int ip_version;
        union ip_v4_v6 p;
    };
     
    struct ip_gen ip;
     
    if (ip.ip_version == 4)
        ip.p.v4 = packet; /* si packet est de type void *, sinon mettre un cast */
    else if (ip.ip_version == 6)
        ip.p.v6 = packet;

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 6
    Par défaut
    Merci, c'est déjà plus clair

    Par contre, si dans mes 2 structures j'ai des champs équivalents (mais pas au même endroit en mémoire, comme par exemple la longueur du paquet IP), il n'y a pas moyen d'accéder à ce champs sans devoir à chaque fois vérifier le type comme ca?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int len;
    if (ip.ip_version == 4)
        len = (ip.p.v4)->len;
    else if (ip.ip_version == 6)
        len = (ip.p.v6)->len;
    Mais plutot avec quelque chose de standard du style
    Je pense que vu la façon dont cela fonctionne en mémoire c'est pas trop possible, mais on sait jamais...

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    non, mais c'est si impossible que ça qu'il soit au même endroit dans les structures ???

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 6
    Par défaut
    Ben les format des paquets IPv4 et IPv6 ne sont pas les mêmes... Maintenant si j'alloue les différentes partie des paquets une par une c'est possible, mais c'est pas super pratique alors... Pas grâve, je n'ai apparement pas tant d'opération que cela à réaliser sur ces structures donc je m'en sortirai

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    rien ne t'empêche d'avoir les champs communs (comme version, len, etc) dans la structure générique...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appel de différente pages html selon conditions
    Par TekFanatiX dans le forum Wicket
    Réponses: 5
    Dernier message: 02/07/2010, 16h47
  2. [AC-2003] Requête SQL retournant des champs différents selon une condition
    Par lucmorin dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 23/10/2009, 16h13
  3. page http différente selon condition
    Par pascale86 dans le forum Langage
    Réponses: 2
    Dernier message: 18/06/2009, 08h24
  4. Réponses: 1
    Dernier message: 17/03/2007, 20h32
  5. DLLs chargées selon condition
    Par Benjamin GAGNEUX dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 12/08/2004, 18h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo