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

Réseau C Discussion :

Problème d'affichage lors d'une requête SNMP


Sujet :

Réseau C

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Problème d'affichage lors d'une requête SNMP
    Bonjour,

    Je développe pour le moment une petite application C qui permet de lire des informations contenues dans la Mib via SNMP.
    J'ai pour le moment un code qui est sensé le faire, mais j'ai un problème pour la récupération des résultats.

    Tout d'abord voici ma fonction qui retourne les résultats à afficher :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    char *SnmpUtilPrintAsnAny2(AsnAny *any)
    {
        char *buffer = new char[300];
        unsigned int i;
     
        sscanf(buffer, "(%p)\n", any);
     
        switch (any->asnType)
        {
     
        case ASN_OCTETSTRING:
        {
            sscanf(buffer, "String ");
            for (i = 1; i < any->asnValue.string.length; i++)
                sscanf(buffer, "%c", any->asnValue.string.stream[i]);
            sscanf(buffer, "\n");
            return buffer;
        }
     
        default:
        {
            sscanf(buffer, "Invalid type %d\n", any->asnType);
            return buffer;
        }
        }
    }
    Je n'ai que le " case ASN_OCTETSTRING" dans l'exemple car c'est celui que j'essaie de fairefonctionner pour le moment.

    Au cas ou, voila toujours le code avant l'appel de ma fonction si ca peut aider a y voir plus clair.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
            LPSNMP_MGR_SESSION session = SnmpMgrOpen("127.0.0.1", "public", 3000, 10);
            if (session == NULL)
                    Label1->Caption="Erreur";
            else
                    Label1->Caption="Valides";
     
     
            AsnObjectIdentifier OID;
            LPSTR oidstring = NULL;
            oidstring=".1.3.6.1.2.1.1.1";
             //SnmpMgrStrToOid Converti le string en OID
    	SnmpMgrStrToOid(oidstring, &OID) ;
     
     
    	RFC1157VarBindList variableBindingList;
            variableBindingList.len = 1;
            //allocation de mémoire pour la demande sur la MIB
            variableBindingList.list =(RFC1157VarBind*)(SnmpUtilMemAlloc(sizeof(RFC1157VarBind))) ;
            variableBindingList.list[0].name = OID;
    	AsnInteger errorStatus=0;
    	AsnInteger errorIndex=0;
            variableBindingList.list[0].value.asnType = ASN_NULL;
     
             if (SnmpMgrRequest(session, ASN_RFC1157_GETNEXTREQUEST, &variableBindingList, &errorStatus, &errorIndex)==0)
                   Label1->Caption="Erreur";
             else
                   Label1->Caption="Valide";
     
            Label1->Caption = SnmpUtilPrintAsnAny2(&variableBindingList.list[0].value);
    Donc, mon problème est que la fonction "SnmpUtilPrintAsnAny2" qui doit retourner le buffer avec les résultats, ben ne retourne rien. Et j'arrive pas a voir pourquoi :s
    Si quelqu'un avait une idée, je suis preneur.
    Merci d'avance.

    Edit: désolé pour le double post, j'ai du crée en pensant prévisualiser

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Déjà, le fichier ne compile pas trop :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    .c:1: error: parse error before '*' token
    .c: In function `SnmpUtilPrintAsnAny2':
    .c:3: error: `new' undeclared (first use in this function)
    .c:3: error: (Each undeclared identifier is reported only once
    .c:3: error: for each function it appears in.)
    .c:3: error: parse error before "char"
    .c:6: warning: implicit declaration of function `sscanf'
    .c:6: error: `any' undeclared (first use in this function)
    .c:11: error: `ASN_OCTETSTRING' undeclared (first use in this function)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    char *buffer = new char[300];
    /*Pas du C */
    /* A remplacer par */
    char buffer[300];
    /* mais on ne pourra pas retourner le buffer alors*/
    /* ou */
    char *buffer = malloc[300*sizeof(*buffer)];
    /* et dans ce cas, on pensera bien à appeler free() */

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sscanf(buffer, "(%p)\n", any);
    C'est sensé faire quoi ça ?

    C'est pas sprintf plutôt ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(buffer, "(%p)\n", any);

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Bonjour,
    merci pour la réponse.
    Pour le code qui ne compile, je pense que ça doit être le fait que je compile sous Borland. Car avec mon Borland ça compile sans problèmes.

    Pour les sscanf, en relisant mon code j'avoue que parfois j'en ai que je me demande ce qu'ils font a la place de sprintf aussi. Mais a force d'avoir essayer tout et n'importe quoi j'ai du oublier de remettre tout en ordre. Je m'en excuse.
    Sinon pour recentrer mon problème, il se situe ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    case ASN_OCTETSTRING:
        {
     
            for (i = 1; i < any->asnValue.string.length; i++)
                sprintf(buffer, "%s", any->asnValue.string.stream[i]);
     
            return buffer;
        }
    Apparemment c'est mon "any->asnValue.string.stream[i]" qui ne retourne rien et je ne sais vraiment pas pourquoi.
    Et aussi un autre point à préciser c'est que dans ma boucle for, si je commence en initialisant i à 0, j'ai une belle 'Access Violation at address xxxx' qui se leve. Et je vois vraiment pas pourquoi non plus.

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    any->asnValue.string.stream est de quel type ?

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par Guy025 Voir le message
    Pour le code qui ne compile, je pense que ça doit être le fait que je compile sous Borland. Car avec mon Borland ça compile sans problèmes.
    Le code en question est du c++. Si tu programme en c++, plutôt qu'utiliser des tableaux dynamiques de char, utilise le type string ou AnsiString.

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Et avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    case ASN_OCTETSTRING:
        {
            sprintf(buffer, "%s", any->asnValue.string.stream);
     
            return buffer;
        }

  7. #7
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Oui merci, pendant la nuit j'ai cogité un peu tout ça et en ai profité pour aller revoir mes cours de réseau. Et je viens de me rendre compte que j'avais pas mal d'incohérence qui m'étaient passées sous le nez.
    Donc je remet tout en ordre et je pense que ça devrait être mieux.
    Dés que j'ai une solution qui fonctionne je viens dire ce qui n'allait pas dans mon code.

    Merci en tout cas mabu pour avoir prit le temps de m'aider.

    Edit: Mabu pour le test que tu proposes j'ai une "Access violation at address xxxx".

Discussions similaires

  1. [11g] Problème de connexion lors d'une requête
    Par bernards111 dans le forum Connexions aux bases de données
    Réponses: 1
    Dernier message: 25/02/2015, 17h35
  2. Réponses: 3
    Dernier message: 20/06/2012, 12h40
  3. Problème d'affichage lors d'un extends d'une JFrame
    Par pony99 dans le forum Débuter
    Réponses: 8
    Dernier message: 03/01/2012, 09h56
  4. [MySQL] [SQL] problème affichage résultat d'une requête
    Par mitmit dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/04/2007, 11h14
  5. Problème d'accent lors d'une requête
    Par escape dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 05/12/2006, 13h48

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