Problème compilation code en C

Fermé
Mathieu92140 Messages postés 4 Date d'inscription vendredi 20 décembre 2013 Statut Membre Dernière intervention 23 décembre 2013 - 20 déc. 2013 à 15:14
Mathieu92140 Messages postés 4 Date d'inscription vendredi 20 décembre 2013 Statut Membre Dernière intervention 23 décembre 2013 - 23 déc. 2013 à 10:09
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

Utilisateur anonyme
20 déc. 2013 à 15:42
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
0