Problème compilation code en C

[Fermé]
Signaler
Messages postés
4
Date d'inscription
vendredi 20 décembre 2013
Statut
Membre
Dernière intervention
23 décembre 2013
-
Messages postés
4
Date d'inscription
vendredi 20 décembre 2013
Statut
Membre
Dernière intervention
23 décembre 2013
-
Bonjour,

J'ai actuellement un programme codé en C et j'ai deux code erreur et des warning lors de la compile du programme , voir ci-dessous :

xot.c: In function 'cmascote':
xot.c:65:20: error: storage size of 'octaddr' isn't known
xot.c: In function 'getsock':
xot.c:224:19: error: 'AF_INET' undeclared (first use in this function)
xot.c:224:19: note: each undeclared identifier is reported only once for each function it appears in
xot.c:224:28: error: 'SOCK_STREAM' undeclared (first use in this function)
xot.c: In function 'doconn':
xot.c:243:24: error: storage size of 'tsock' isn't known
xot.c:245:5: warning: incompatible implicit declaration of built-in function 'memset' [enabled by default]
xot.c:246:29: error: 'AF_INET' undeclared (first use in this function)
xot.c: In function 'dorecv':
xot.c:292:11: warning: incompatible implicit declaration of built-in function 'memcpy' [enabled by default]


Mon code :

/*** client XOT ****** en cours ********************************/
/* Thread d'interrogation Mascotte */
/* appel© par MFPMAS.. tsched() */
/* versions ans stop sur rejet , sans detail et compteur de fin */
/* version avec traitement plusieurs packet XOT dans un packet TCP */
/*********************************************************************/

/* #define Resolve_Via_Lookup */

#pragma runopts(noargparse,plist(mvs),noexecops)

#include <manifest.h>
#include <bsdtypes.h>
#include <in.h>
#include <netdb.h>
#include <socket.h>
#include <inet.h>
#include <errno.h>
#include <fcntl.h>
#include <tcperrno.h>
#include <bsdtime.h>
#include <stdio.h>

#define X25_FLAG_ERROR 0
#define X25_FLAG_CALL_ACCEPT 1
#define X25_FLAG_DATA 2
#define X25_FLAG_RR 3
#define X25_FLAG_CLEAR 4
#define X25_FLAG_CLEAR_CONF 5
#define X25_FLAG_OTHER 6
#define X25_Nb_FLAG 7


int dosend(int *s,int *ddl,char *sndData);
int dorecv(int *s);
int doconn(int *s, unsigned long *octaddrp, unsigned short port);
int trtrecv(int XOTlg,char *XOTpkt);
void getsock(int *s);

static char X25tmsg[X25_Nb_FLAG][12] = {
"ERROR",
"CALL ACCEPT",
"DATA",
"RR",
"CLEAR",
"CLEAR CONF",
"Autre"
};


/* ============================================================= */
/* thread d'appel Mascote */
/* ============================================================= */

cmascote(unsigned short MASport,
unsigned long MASIP,
int NbBcl,
int lMAScall,
int lMASreq,
char *dMAScall,
char *dMASreq)
{
int FLGerr; /* flag erreur */
int X25rcv; /* type de paquet X25 recu */
int WaitMascote; /* flag attente reponse Mascote */
int BCLreq; /* Boucle Requete */
int TOTerr; /* Cumul des requete ratees */
int RepOK; /* Cumul des reponse OK de Mascote */
int gotbytes; /* number of bytes received */
int sndbytes; /* number of bytes sent */
int s; /* socket descriptor */
int rc; /* return code */
struct in_addr octaddr; /* host internet address (binary) */
unsigned short port; /* port number sent as parameter */
char * charaddr; /* host internet address (dotted dec) */
struct hostent *hostnm; /* server host name information */
int dd2l=9; /* len dd2 */
int dd3l=8; /* len dd3 */
int dd4l=7; /* len dd4 */
int IndxReq=0;
unsigned short X25type; /* type de paquet RR, RNR, DATA */
/* ----------------------------------------------------------------------------- */
/* X25 CLEAR CAUSE 0 DIAG 0 */
char dd2[9] = "\x00\x00\x00\x05\x10\x01\x13\x00\x00";

/* X25 CLEAR CONF */
char dd3[8] = "\x00\x00\x00\x04\x10\x01\x17\x00";

/* X25 RR PR(1) */
char dd4[7] = "\x00\x00\x00\x03\x10\x01\x21";

/* X25 CALL Mascote ----
char dd1[19] = "\x00\x00\x00\x0F\x10\x01\x0B\x07\x90\x00\x00\x10\x06\x42\x08\x08\x43\x02\x02";
--- */

/* X25 DATA requete interro Mascote prod -------
char dd5[26] = "\x00\x00\x00\x16\x10\x01\x00\x06\xE0\x00\x00\x00\x00\x21\x03\x04\xC3\xC1\xE2\xC8\x05\xF0\xF0\xF6\xF1\xF3";
X25 DATA requete interro Mascote Dev
char dd6[26] = "\x00\x00\x00\x16\x10\x01\x00\x06\xE0\x00\x00\x00\x00\x21\x03\x04\xC3\xC1\xE2\xC8\x05\xF0\xF0\xF3\xF9\xF7";
---- */
/* ----------------------------------------------------------------------------- */

BCLreq = NbBcl;
octaddr.s_addr = MASIP;
/* fprintf(stdout, "MASreq: Addr = %d\n", MASIP); */

port = MASport;
/* fprintf(stdout, "MASreq: port = %d\n", port); */

/* --------------------------------------------------------- */
/* Boucle de connexions XOT et requete Mascote */
/* --------------------------------------------------------- */
TOTerr = 0; RepOK = 0;
while (BCLreq) {
FLGerr =0;

/* ----- Init socket ---------- */
getsock(&s);
/* printf("MASreq: No socket = %d\n", s); */

/* ----- connexion TCP ---------- */
rc = doconn(&s, &octaddr.s_addr, port);
if (rc < 0) {
tcperror("MASreq: error for connect");
printf("errno = %d",errno);
if (errno == ECONNREFUSED)
printf("errno = ECONNREFUSED");
BCLreq=0; /* dans ce cas on stoppe reellement */
FLGerr=1;
}
else {
/* ----- connexion TCP OK ------- */
/* printf("MASreq: rc connect = %d\n", rc); */
/* ______ send Call X25 ____________ */
printf("---> Send CALL X25\n");
sndbytes = dosend(&s,&lMAScall,dMAScall);
if (sndbytes < 1)
{ FLGerr=1;
BCLreq=0; /* dans ce cas on stoppe reellement */
break; }

/* ______ receive Call Confirm normalement ________ */
X25rcv = dorecv(&s);
switch (X25rcv)
{
case X25_FLAG_CALL_ACCEPT: FLGerr=0;
/* printf("<--- CALL Confirm recu\n\n"); */
break;
default: FLGerr=1;
/* BCLreq=0; on n'arrete pas la boucle */
/* printf("ERREUR rcv apres call : X25rcv = %d\n",X25rcv);*/
}
/* zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz ce ca qui merde */
/* if (FLGerr) break; */

if (FLGerr == 0) {
/* ______ Call CONF recu - envoi DATA requete _____ */
printf("---> Send DATA X25 (req Mascote)\n");
sndbytes = dosend(&s,&lMASreq,dMASreq);
if (sndbytes < 1)
{ FLGerr=1;
BCLreq=0; /* on arrete la boucle */
break; }
}

if (FLGerr == 0) {
/* ______ Rceive Confirm (RR) ou/et DATA reponse _____ */
WaitMascote = 1;
while (WaitMascote)
{
X25rcv = dorecv(&s);
switch (X25rcv)
{
case X25_FLAG_DATA: FLGerr=0;
WaitMascote = 0;
RepOK++ ;
/* printf("<--- DATA recue\n\n"); */
break;
case X25_FLAG_RR: FLGerr=0;
/* printf("<--- RR recu\n\n"); */
break;
default: FLGerr=1;
/* BCLreq=0; NO STOP */
WaitMascote = 0;
}
} /* end while waitmascote */
}
if (FLGerr == 0) /* on a recu la reponse de mascote */
{
/* ____ DATA reponse recue - envoi Ack (RR)___ */
printf("---> Send RR\n");
sndbytes = dosend(&s,&dd4l,dd4);
if (sndbytes < 1)
{ FLGerr=1;
BCLreq=0; /* on arrete la boucle */
break; }
}

if (FLGerr == 0)
{
/* ____ Envoi Clear X25 ______________________ */
printf("---> Send CLEAR\n");
sndbytes = dosend(&s,&dd2l,dd2);
if (sndbytes < 1)
{ FLGerr=1;
BCLreq=0; /* on arret la boucle */
break; }
}

/* ____ receive du Clear CONF ________________ */
if (FLGerr == 0) X25rcv = dorecv(&s);

} /* end else (connexion TCP XOT OK) */
/* __________ D©connexion ________________ */
rc = close(s);
if (BCLreq) BCLreq -= 1;
if (FLGerr) TOTerr++;
IndxReq++;
printf("------------------------------------- %d\n",IndxReq);
sleep(1);
} /** end while (BCLreq ) */

printf("Nb bcl %d, Reponse OK %d, Tot erreur %d\n",NbBcl,RepOK,TOTerr);
}

/*-----------------*/
/* getsock() */
/*-----------------*/
void getsock(int *s)
{
int temp;
temp = socket(AF_INET, SOCK_STREAM, 0);

if (temp < 0) {
tcperror("MASreq: error socket");
printf("errno = %d",errno);
}


*s = temp;
return;
}

/*-----------------*/
/* doconn() */
/*-----------------*/
int doconn(int *s, unsigned long *octaddrp, unsigned short port)
{
int rc;
int temps;
struct sockaddr_in tsock;

memset(&tsock, 0, sizeof(tsock));
tsock.sin_family = AF_INET;
tsock.sin_port = htons(port);
tsock.sin_addr.s_addr = *octaddrp;

temps = *s;
rc = connect(temps, (struct sockaddr *)&tsock, sizeof(tsock));
return rc;
}

/*-----------------*/
/* dorecv() */
/*-----------------*/
int dorecv(int *s)
{
int temps;
int gotbytes;
int X25flag;
int rc;
int i;
struct {
unsigned short XOTver;
unsigned short XOTlg;
} pfxXOT;
char *ptr1;
unsigned short usl1, usl2, LetsGO;
char data[280];
char carac = ' ';

X25flag = X25_FLAG_OTHER;
rc = X25_FLAG_OTHER;
temps = *s;

gotbytes = recv(temps, data, sizeof(data), 0);
if (gotbytes < 0) {
tcperror("MASreq: error for recv");
X25flag=X25_FLAG_ERROR;
return X25flag;
}
/* recv OK (gotbytes >=0) */
printf("MASreq: received %d octets (data TCP)\n", gotbytes);
i=0;
if (gotbytes > 0) {
LetsGO=1; usl1=0; usl2=0;
ptr1=&data[0];
while(LetsGO)
{
memcpy(&pfxXOT,ptr1,4);
usl2=pfxXOT.XOTlg; usl2+=4;
/* traitement du paquet XOT ptr1 et usl2) */
printf("traitement paquet XOT : long paquet = %d\n",usl2);
if (i) printf("* plusieurs paquets XOT dans un paquet TCP\n");
rc=trtrecv(usl2,ptr1);
ptr1+=usl2;
usl1+=usl2;
i++;
if (usl1 >= gotbytes) LetsGO=0;
}
} /* data TCP recu */
return rc;
}

/*-----------------*/
/* trtrecv() */
/*-----------------*/
int trtrecv(int XOTlg,char *XOTpkt)
{
char *ptr1;
int X25flag = X25_FLAG_OTHER;
int i, j;
char carac = ' ';

ptr1=XOTpkt;
for (i=0;i<XOTlg;i++) {
carac = *ptr1;
printf("%02x",carac);
if ((j=(i+1)%4) == 0) printf(" ");
if ((j=(i+1)%32) == 0) printf("\n");
ptr1++ ;
}
printf("\n");

ptr1=XOTpkt;
ptr1+=6;
if (XOTlg == 7) {
/* test RR */
carac=*ptr1;
if (carac == 0x17) X25flag = X25_FLAG_CLEAR_CONF;
else {
if (carac &= 1) X25flag = X25_FLAG_RR;
else X25flag = X25_FLAG_OTHER;
}
}
else {
if (XOTlg > 7) {
/* test DATA */
carac=*ptr1;
if ((carac &=1) == 0) X25flag = X25_FLAG_DATA;
else { /* pas des data */
carac=*ptr1;
switch (carac)
{
case 0x0F: X25flag = X25_FLAG_CALL_ACCEPT;
break;
case 0x13: X25flag = X25_FLAG_CLEAR;
break;
case 0x17: X25flag = X25_FLAG_CLEAR_CONF;
break;
default: X25flag = X25_FLAG_OTHER;
}
} /* fin else - pas des DATA */
} /* fin if XOTlg > 7 ) */
} /* fin else (XOTlg <> 7 */

/* printf("MAS data received: type X25 = %d\n", X25flag); */
printf("<--- received : type X25 = %s\n",X25tmsg[X25flag]);
return X25flag;
}


/*-----------------*/
/* dosend() */
/*-----------------*/
int dosend(int *s,int *ddl,char *sndData)
{
int temps;
int lsndData;
int sndbytes;
int i,j;
char *ptr1;
char carac = ' ';

temps = *s;
lsndData = *ddl;

sndbytes = send(temps, sndData, lsndData, 0);
if (sndbytes < 0) {
tcperror("MASreq: error for send");
}
else {
printf("MASreq: sent %d octets\n", sndbytes);
ptr1=sndData;
for (i=0;i<sndbytes;i++) {
carac = *ptr1;
printf("%02x",carac);
if ((j=(i+1)%4) == 0) printf(" ");
if ((j=(i+1)%32) == 0) printf("\n");
ptr1++ ; }
printf("\n\n");
}
return sndbytes;
}


Pourriez vous m'aidez ?


A voir également:

3 réponses

Messages postés
1207
Date d'inscription
vendredi 17 juin 2011
Statut
Membre
Dernière intervention
15 novembre 2018
164
Salut,

Les erreurs sont assez claires sur les problèmes dans le code pourtant, donc quel est le problème ?

Tu as deux variables non déclarées, et deux tableaux dont la taille n'est pas spécifiée
Messages postés
4
Date d'inscription
vendredi 20 décembre 2013
Statut
Membre
Dernière intervention
23 décembre 2013

J'ai oublié de préciser que le code n'a pas été devellopé par moi même , et mes connaissance en C m'ont poussé a postulé sur ce forum ...

Si je comprends bien votre réponse les erreurs viendraient des données saisies dans le code ? pourriez me les situés a quel niveau ?
Messages postés
1207
Date d'inscription
vendredi 17 juin 2011
Statut
Membre
Dernière intervention
15 novembre 2018
164
Dans les messages d'erreur de compilation, la ligne d'ou le problème provient est indiquée (xot.c:224:28) -> ligne 224.

En gros tu utilises des variable qui n'ont pas été déclarées, donc qui n'ont aucune valeur. As tu déja programmé ? Pke les variables c'est un peu le cours n°1 quand tu commence la programmation :)
Pour les erreurs de type "xot.c:65:20: error: storage size of 'octaddr' isn't known ", essaie de mettre

in_addr octaddr; 

au lieu de

struct in_addr octaddr; 

et idem pour l'autre.
Messages postés
4
Date d'inscription
vendredi 20 décembre 2013
Statut
Membre
Dernière intervention
23 décembre 2013

J'ai deja effectué quelques programme en C oui mais mes connaissance sont limités dans ce domaine .

J'ai effectué le changement au niveau de la ligne 65 , j'obtiens ces code erreurs :

xot.c: In function 'cmascote':
xot.c:65:17: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'octaddr'
xot.c:65:17: error: 'octaddr' undeclared (first use in this function)
xot.c:65:17: note: each undeclared identifier is reported only once for each function it appears in
xot.c: In function 'getsock':
xot.c:224:19: error: 'AF_INET' undeclared (first use in this function)
xot.c:224:28: error: 'SOCK_STREAM' undeclared (first use in this function)
xot.c: In function 'doconn':
xot.c:243:24: error: storage size of 'tsock' isn't known
xot.c:245:5: warning: incompatible implicit declaration of built-in function 'memset' [enabled by default]
xot.c:246:29: error: 'AF_INET' undeclared (first use in this function)
xot.c: In function 'dorecv':
xot.c:292:11: warning: incompatible implicit declaration of built-in function 'memcpy' [enabled by default]
Messages postés
4
Date d'inscription
vendredi 20 décembre 2013
Statut
Membre
Dernière intervention
23 décembre 2013

Les erreurs liés à ce code proviennent principalement au déclarations des variables ?

Je pense que la fonction cmascotte pose problème aussi vu que son type n'est pas déclaré . Quelqu'un pourrait m'aider sur mes doutes ?