Erreur compilation sur prog en C

Erreur compilation sur prog en C - C - Programmation

Marsh Posté le 23-12-2013 à 10:21:27    

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 ?  
 

Reply

Marsh Posté le 23-12-2013 à 10:21:27   

Reply

Marsh Posté le 23-12-2013 à 10:23:55    

Bonjour
 
Pour ton code utilise les balises faites pour cela, ainsi on aura une meilleur visibilité de ton code
 

Code :
  1. like this :D


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 23-12-2013 à 10:51:26    

Code :
  1. /*** client XOT ******    en cours    ********************************/
  2. /* Thread d'interrogation Mascotte                                   */
  3. /* appel© par MFPMAS.. tsched()                                      */
  4. /* versions ans stop sur rejet , sans detail et compteur de fin      */
  5. /* version avec traitement plusieurs packet XOT dans un packet TCP   */
  6. /*********************************************************************/
  7. /* #define Resolve_Via_Lookup */
  8. #pragma runopts(noargparse,plist(mvs),noexecops)
  9. #include <manifest.h>
  10. #include <bsdtypes.h>
  11. #include <in.h>
  12. #include <netdb.h>
  13. #include <socket.h>
  14. #include <inet.h>
  15. #include <errno.h>
  16. #include <fcntl.h>
  17. #include <tcperrno.h>
  18. #include <bsdtime.h>
  19. #include <stdio.h>
  20. #define X25_FLAG_ERROR       0
  21. #define X25_FLAG_CALL_ACCEPT 1
  22. #define X25_FLAG_DATA        2
  23. #define X25_FLAG_RR          3
  24. #define X25_FLAG_CLEAR       4
  25. #define X25_FLAG_CLEAR_CONF  5
  26. #define X25_FLAG_OTHER       6
  27. #define X25_Nb_FLAG          7
  28. int dosend(int *s,int *ddl,char *sndData);
  29. int dorecv(int *s);
  30. int doconn(int *s, unsigned long *octaddrp, unsigned short port);
  31. int trtrecv(int XOTlg,char *XOTpkt);
  32. void getsock(int *s);
  33. static char X25tmsg[X25_Nb_FLAG][12] = {
  34.    "ERROR",
  35.    "CALL ACCEPT",
  36.    "DATA",
  37.    "RR",
  38.    "CLEAR",
  39.    "CLEAR CONF",
  40.    "Autre"
  41. };
  42. /* ============================================================= */
  43. /* thread d'appel Mascote                                        */
  44. /* ============================================================= */
  45. cmascote(unsigned short MASport,
  46.          unsigned long MASIP,
  47.          int NbBcl,
  48.          int lMAScall,
  49.          int lMASreq,
  50.          char *dMAScall,
  51.          char *dMASreq)
  52. {
  53.     int FLGerr;                /* flag erreur                         */
  54.     int X25rcv;                /* type de paquet X25 recu             */
  55.     int WaitMascote;           /* flag attente reponse Mascote        */
  56.     int BCLreq;                /* Boucle  Requete                     */
  57.     int TOTerr;                /* Cumul des requete ratees            */
  58.     int RepOK;                 /* Cumul des reponse OK de Mascote     */
  59.     int gotbytes;              /* number of bytes received            */
  60.     int sndbytes;              /* number of bytes sent                */
  61.     int s;                     /* socket descriptor                   */
  62.     int rc;                    /* return code                         */
  63.     struct in_addr octaddr;    /* host internet address (binary)      */
  64.     unsigned short port;       /* port number sent as parameter       */
  65.     char * charaddr;           /* host internet address (dotted dec)  */
  66.     struct hostent *hostnm;    /* server host name information        */
  67.     int dd2l=9;                 /* len dd2              */
  68.     int dd3l=8;                 /* len dd3              */
  69.     int dd4l=7;                 /* len dd4              */
  70.     int IndxReq=0;
  71.     unsigned short X25type;     /* type de paquet RR, RNR, DATA */
  72.   /* ----------------------------------------------------------------------------- */
  73.   /* X25 CLEAR CAUSE 0 DIAG 0 */
  74. char dd2[9]  = "\x00\x00\x00\x05\x10\x01\x13\x00\x00";
  75.   /* X25 CLEAR CONF */
  76. char dd3[8]  = "\x00\x00\x00\x04\x10\x01\x17\x00";
  77.   /* X25 RR PR(1) */
  78. char dd4[7]  = "\x00\x00\x00\x03\x10\x01\x21";
  79.   /* X25 CALL Mascote    ----
  80. char dd1[19] = "\x00\x00\x00\x0F\x10\x01\x0B\x07\x90\x00\x00\x10\x06\x42\x08\x08\x43\x02\x02";
  81.   --- */
  82.   /* X25 DATA requete interro Mascote prod    -------
  83. 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";
  84.     X25 DATA requete interro Mascote Dev
  85. 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";
  86.    ---- */
  87.   /* ----------------------------------------------------------------------------- */
  88.     BCLreq = NbBcl;
  89.     octaddr.s_addr = MASIP;
  90.   /* fprintf(stdout, "MASreq: Addr = %d\n", MASIP); */
  91.     port = MASport;
  92.   /* fprintf(stdout, "MASreq: port = %d\n", port);  */
  93.     /* --------------------------------------------------------- */
  94.     /* Boucle de connexions XOT et requete Mascote               */
  95.     /* --------------------------------------------------------- */
  96.     TOTerr = 0; RepOK = 0;
  97.     while (BCLreq)  {
  98.       FLGerr =0;
  99.       /* ----- Init socket ---------- */
  100.       getsock(&s);
  101.   /*  printf("MASreq: No socket = %d\n", s);  */
  102.       /* ----- connexion TCP ---------- */
  103.       rc = doconn(&s, &octaddr.s_addr, port);
  104.       if (rc < 0) {
  105.           tcperror("MASreq: error for connect" );
  106.           printf("errno = %d",errno);
  107.           if (errno == ECONNREFUSED)
  108.                     printf("errno = ECONNREFUSED" );
  109.           BCLreq=0;      /* dans ce cas on stoppe reellement */
  110.           FLGerr=1;
  111.                   }
  112.       else {
  113.           /* ----- connexion TCP OK ------- */
  114.      /*   printf("MASreq: rc connect = %d\n", rc);  */
  115.           /* ______ send Call X25 ____________  */
  116.           printf("---> Send CALL X25\n" );
  117.           sndbytes = dosend(&s,&lMAScall,dMAScall);
  118.           if (sndbytes < 1)
  119.              { FLGerr=1;
  120.                BCLreq=0;    /* dans ce cas on stoppe reellement */
  121.                break;  }
  122.           /* ______ receive Call Confirm normalement ________  */
  123.           X25rcv = dorecv(&s);
  124.           switch (X25rcv)
  125.              {
  126.                case X25_FLAG_CALL_ACCEPT: FLGerr=0;
  127.                 /*   printf("<--- CALL Confirm recu\n\n" ); */
  128.                      break;
  129.                default: FLGerr=1;
  130.              /*     BCLreq=0;   on n'arrete pas la boucle */
  131.         /*   printf("ERREUR rcv apres call : X25rcv = %d\n",X25rcv);*/
  132.              }
  133.   /* zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz ce ca qui merde */
  134.    /*     if (FLGerr) break; */
  135.        if (FLGerr == 0) {
  136.           /* ______ Call CONF recu - envoi DATA requete _____  */
  137.           printf("---> Send DATA X25 (req Mascote)\n" );
  138.           sndbytes = dosend(&s,&lMASreq,dMASreq);
  139.           if (sndbytes < 1)
  140.              { FLGerr=1;
  141.                BCLreq=0;     /* on arrete la boucle */
  142.                break;  }
  143.         }
  144.        if (FLGerr == 0) {
  145.           /* ______ Rceive Confirm (RR) ou/et DATA reponse  _____  */
  146.           WaitMascote = 1;
  147.           while (WaitMascote)
  148.              {
  149.               X25rcv = dorecv(&s);
  150.               switch (X25rcv)
  151.                  {
  152.                     case X25_FLAG_DATA: FLGerr=0;
  153.                                         WaitMascote = 0;
  154.                                         RepOK++ ;
  155.                                /*    printf("<--- DATA recue\n\n" ); */
  156.                                         break;
  157.                     case X25_FLAG_RR:   FLGerr=0;
  158.                                  /*     printf("<--- RR recu\n\n" ); */
  159.                                         break;
  160.                     default:            FLGerr=1;
  161.                                  /*     BCLreq=0;  NO STOP */
  162.                                         WaitMascote = 0;
  163.                  }
  164.              }  /* end while waitmascote */
  165.         }
  166.           if (FLGerr == 0)      /* on a recu la reponse de mascote */
  167.              {
  168.              /* ____ DATA reponse recue - envoi Ack (RR)___ */
  169.               printf("---> Send RR\n" );
  170.               sndbytes = dosend(&s,&dd4l,dd4);
  171.               if (sndbytes < 1)
  172.                  { FLGerr=1;
  173.                    BCLreq=0;   /* on arrete la boucle */
  174.                    break;  }
  175.              }
  176.           if (FLGerr == 0)
  177.              {
  178.              /* ____ Envoi Clear X25 ______________________ */
  179.               printf("---> Send CLEAR\n" );
  180.               sndbytes = dosend(&s,&dd2l,dd2);
  181.               if (sndbytes < 1)
  182.                  { FLGerr=1;
  183.                    BCLreq=0;  /* on arret la boucle */
  184.                    break;  }
  185.              }
  186.              /* ____ receive du Clear CONF ________________ */
  187.           if (FLGerr == 0)  X25rcv = dorecv(&s);
  188.         } /* end else (connexion TCP XOT OK) */
  189.        /* __________ D©connexion ________________ */
  190.        rc = close(s);
  191.        if (BCLreq) BCLreq -= 1;
  192.        if (FLGerr) TOTerr++;
  193.        IndxReq++;
  194.        printf("------------------------------------- %d\n",IndxReq);
  195.        sleep(1);
  196.       }   /** end while (BCLreq )        */
  197. printf("Nb bcl %d, Reponse OK %d, Tot erreur %d\n",NbBcl,RepOK,TOTerr);
  198. }
  199. /*-----------------*/
  200. /*    getsock()    */
  201. /*-----------------*/
  202. void getsock(int *s)
  203. {
  204.     int temp;
  205.     temp = socket(AF_INET, SOCK_STREAM, 0);
  206.     if (temp < 0) {
  207.           tcperror("MASreq: error socket" );
  208.           printf("errno = %d",errno);
  209.          }
  210.     *s = temp;
  211.     return;
  212. }
  213. /*-----------------*/
  214. /*    doconn()     */
  215. /*-----------------*/
  216. int doconn(int *s, unsigned long *octaddrp, unsigned short port)
  217. {
  218.     int rc;
  219.     int temps;
  220.     struct sockaddr_in tsock;
  221.     memset(&tsock, 0, sizeof(tsock));
  222.     tsock.sin_family      = AF_INET;
  223.     tsock.sin_port        = htons(port);
  224.     tsock.sin_addr.s_addr = *octaddrp;
  225.     temps = *s;
  226.     rc = connect(temps, (struct sockaddr *)&tsock, sizeof(tsock));
  227.     return rc;
  228. }
  229. /*-----------------*/
  230. /*    dorecv()     */
  231. /*-----------------*/
  232. int dorecv(int *s)
  233. {
  234.     int temps;
  235.     int gotbytes;
  236.     int X25flag;
  237.     int rc;
  238.     int i;
  239.     struct {
  240.        unsigned short XOTver;
  241.        unsigned short XOTlg;
  242.            } pfxXOT;
  243.     char *ptr1;
  244.     unsigned short usl1, usl2, LetsGO;
  245.     char data[280];
  246.     char carac = ' ';
  247.     X25flag = X25_FLAG_OTHER;
  248.     rc = X25_FLAG_OTHER;
  249.     temps = *s;
  250.     gotbytes = recv(temps, data, sizeof(data), 0);
  251.     if (gotbytes < 0) {
  252.         tcperror("MASreq: error for recv" );
  253.         X25flag=X25_FLAG_ERROR;
  254.         return X25flag;
  255.     }
  256.     /*  recv OK (gotbytes >=0) */
  257.     printf("MASreq: received %d octets (data TCP)\n", gotbytes);
  258.     i=0;
  259.     if (gotbytes > 0) {
  260.        LetsGO=1; usl1=0; usl2=0;
  261.        ptr1=&data[0];
  262.        while(LetsGO)
  263.          {
  264.           memcpy(&pfxXOT,ptr1,4);
  265.           usl2=pfxXOT.XOTlg; usl2+=4;
  266.           /* traitement du paquet XOT ptr1 et usl2) */
  267.           printf("traitement paquet XOT : long paquet = %d\n",usl2);
  268.           if (i) printf("* plusieurs paquets XOT dans un paquet TCP\n" );
  269.           rc=trtrecv(usl2,ptr1);
  270.           ptr1+=usl2;
  271.           usl1+=usl2;
  272.           i++;
  273.           if (usl1 >= gotbytes) LetsGO=0;
  274.          }
  275.      }  /* data TCP recu */
  276.     return rc;
  277. }
  278. /*-----------------*/
  279. /*    trtrecv()    */
  280. /*-----------------*/
  281. int trtrecv(int XOTlg,char *XOTpkt)
  282. {
  283.     char *ptr1;
  284.     int X25flag = X25_FLAG_OTHER;
  285.     int i, j;
  286.     char carac = ' ';
  287.     ptr1=XOTpkt;
  288.     for (i=0;i<XOTlg;i++) {
  289.        carac = *ptr1;
  290.        printf("%02x",carac);
  291.        if ((j=(i+1)%4) == 0) printf(" " );
  292.        if ((j=(i+1)%32) == 0) printf("\n" );
  293.        ptr1++ ;
  294.     }
  295.     printf("\n" );
  296.     ptr1=XOTpkt;
  297.     ptr1+=6;
  298.     if (XOTlg == 7) {
  299.        /* test RR */
  300.        carac=*ptr1;
  301.        if (carac == 0x17) X25flag = X25_FLAG_CLEAR_CONF;
  302.        else {
  303.           if (carac &= 1) X25flag = X25_FLAG_RR;
  304.           else X25flag = X25_FLAG_OTHER;
  305.             }
  306.     }
  307.     else {
  308.        if (XOTlg > 7) {
  309.            /* test DATA */
  310.            carac=*ptr1;
  311.            if ((carac &=1) == 0) X25flag = X25_FLAG_DATA;
  312.            else {    /* pas des data */
  313.                carac=*ptr1;
  314.                switch (carac)
  315.                   {
  316.                   case 0x0F: X25flag = X25_FLAG_CALL_ACCEPT;
  317.                              break;
  318.                   case 0x13: X25flag = X25_FLAG_CLEAR;
  319.                              break;
  320.                   case 0x17: X25flag = X25_FLAG_CLEAR_CONF;
  321.                              break;
  322.                   default:          X25flag = X25_FLAG_OTHER;
  323.                   }
  324.                }   /* fin else - pas des DATA */
  325.           }     /* fin if XOTlg > 7 ) */
  326.         }    /* fin else (XOTlg <> 7 */
  327. /* printf("MAS data received: type X25 = %d\n", X25flag); */
  328.     printf("<--- received : type X25 = %s\n",X25tmsg[X25flag]);
  329.     return X25flag;
  330. }
  331. /*-----------------*/
  332. /*    dosend()     */
  333. /*-----------------*/
  334. int dosend(int *s,int *ddl,char *sndData)
  335. {
  336.     int temps;
  337.     int lsndData;
  338.     int sndbytes;
  339.     int i,j;
  340.     char *ptr1;
  341.     char carac = ' ';
  342.     temps = *s;
  343.     lsndData = *ddl;
  344.     sndbytes = send(temps, sndData, lsndData, 0);
  345.     if (sndbytes < 0) {
  346.         tcperror("MASreq: error for send" );
  347.         }
  348.     else {
  349.         printf("MASreq: sent %d octets\n", sndbytes);
  350.         ptr1=sndData;
  351.         for (i=0;i<sndbytes;i++) {
  352.               carac = *ptr1;
  353.               printf("%02x",carac);
  354.               if ((j=(i+1)%4) == 0) printf(" " );
  355.               if ((j=(i+1)%32) == 0) printf("\n" );
  356.               ptr1++ ; }
  357.               printf("\n\n" );
  358.         }
  359.     return sndbytes;
  360. }

Reply

Marsh Posté le 23-12-2013 à 10:53:25    

Sorry , ça ira un peu mieux je pense .  
Le code n'a pas été dévellopé par moi même, je tenais a le préciser . Mais je pense que les erreurs généré lors de la compilation viennent des déclarations variables . Reste à savoir comment le résoudre .

Reply

Marsh Posté le 23-12-2013 à 11:08:50    

Re,

 

Déjà ta un soucis sur AF_INET et SOCK_STREAM.

 

Ta variable n'est pas déclaré pour le programme, sachant que AF_INET pour la méthode socket c'est le protocole internet IPV4, tu as un problème avec ce protocole.

 

Pareil pour SOCK_STREAM, ça te permet d'établir la connexion entre deux points qui utilise soit le protocole internet IPV4 ou IPV6.

 

Tu as surement un problème de réception de ces données par le programme.

 

Tu verra que toutes les erreurs qui en découle sont lié à ce problème.

 

Cherche sur internet "méthode socket" C pour avoir de la documentation.
Et Essaye de voir pourquoi tu as un problème avec ce protocol dans ton programme

 

Bon courage.


Message édité par OrcusZ le 23-12-2013 à 11:09:26

---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 23-12-2013 à 11:23:28    

A l'avenir je souhaiterais que les paramètres ip soit rentré en dur  dans le prog , ca pourrait palir à ce problème . Vu que ce programme pointeré vers un seul et même serveur .  
 
Reste a savoir comment géré et mettre en place ce parametre dans le code .

Reply

Marsh Posté le 23-12-2013 à 11:31:49    

Re,
 
Pas un gros problème au vu de la signature de la fonction socket
 

Code :
  1. SOCKET WSAAPI socket(
  2.   _In_  int af,
  3.   _In_  int type,
  4.   _In_  int protocol
  5. );


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 23-12-2013 à 11:43:21    

Cela correspond a la déclaration de ma fonction socket a inséré  dans le code ?

Reply

Marsh Posté le 23-12-2013 à 12:58:19    

Oui,
 
Sauf au lieu d'utiliser des "int" entré en dur, il utilise les attribut prédéfini AF_INET et SOCK_STREAM pour récupérer l'ip et faire le lien.
 
Voici la doc http://msdn.microsoft.com/en-us/li [...] 85%29.aspx


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 23-12-2013 à 13:46:41    

Cette fonction WSAAPI peut donc remplacer le contenu de la fonction getsock ? Ou on doit le mettre dans le contenu de la fonction ?

Reply

Marsh Posté le 23-12-2013 à 13:46:41   

Reply

Marsh Posté le 23-12-2013 à 13:55:28    

Non la méthode que tu appel c'est socket, et elle est utilisé dans ton programme. C'est cette fonction qui pose problème car elle ne récupère pas de valeur pour AF_INET
 
Regarde l'exemple à la fin du lien que je tes données


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 23-12-2013 à 15:02:23    

Si je comprend bien , il faut que les variables AF_INET et SOCK_STREAM soit déclaré avant d'appeler la fonction . Si c'est bien sa je ferais la modif dans le code et je génèrerais a nouveau la compil .

Reply

Marsh Posté le 23-12-2013 à 15:07:39    

Re,
 
Vu que tu m'as dit que tu le programme allez pointé sur un seul et même serveur oui :D
 
Mais AF_INET et SOCK_STREAM sont sensé faire le travail dynamiquement.
 
Je te conseille donc de sauvegarder le bout de code que tu as partager. Et ensuite d'essayer de comprendre pour AF_INET ne récupérer par l'IP cible.
 
Car si un jour l'ip de serveur change => obligé de changer le code.
 
Si tu fait fonctionner le code avec AF_INET et SOCK_STREAM, le programme s'adaptera tout seul comme un grand.


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 23-12-2013 à 15:15:31    

Je me suis mal exprimée , mon but est de pouvoir liste dans un fichier txt les différentes ip des serveurs , y'en a 4 et ca sera des adresses IP  fixe . Je souhaiterais que mon code puisse pointer vers ce fichier et prendre les parametres à l'interieur , puis je savoir si cela est possible?

Reply

Marsh Posté le 23-12-2013 à 15:24:52    

Oui tout à fait possible tu as plusieurs fonction pour faire cela

 

fopen() : permet d'ouvrir le fichier
fclose() : permet de le fermer

 

Ensuite tu as plusieurs attributs qui te permettent soit de lire soit d'écrire dans ton fichier et tu as bien sur plusieurs façon de lire/écrire dans ton fichier.

 

Je t'épargne la recherche sur google. Je trouve ce tuto très bien fait ( c'est d'ailleurs avec ça que j'ai appris à me servir de ces fonctions )

 

http://fr.openclassrooms.com/infor [...] s-fichiers


Message édité par OrcusZ le 23-12-2013 à 15:25:01

---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 23-12-2013 à 15:25:07    

Mais pour le moment je me contenterais de faire le test sur un seul serveur ( l'utilité d'avoir qu'une ip dans le code ) . Dans le cas ou les paramtere ip sont entrées en dur , il m'est pas utile de faire appel a AF_INET et SOCK_STREAM ?

Reply

Marsh Posté le 23-12-2013 à 15:26:05    

mattt92 a écrit :

Mais pour le moment je me contenterais de faire le test sur un seul serveur ( l'utilité d'avoir qu'une ip dans le code ) . Dans le cas ou les paramtere ip sont entrées en dur , il m'est pas utile de faire appel a AF_INET et SOCK_STREAM ?


 
Si tu les entres en dur dans le code tu n'en à plus besoin.  


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 23-12-2013 à 15:54:09    

Je vais donc faire un test en entrant les param ip et port en dur dans le code . La fonction getsocket me sera plus utile dans ce cas la ?  
 
Au niveau de la fonction doconn , pourrais tu m'aider a savoir comment entrer les param en dur dans cette fonction ?  
 

Code :
  1. /*-----------------*/
  2. /*    doconn()     */
  3. /*-----------------*/
  4. int doconn(int *s, unsigned long *octaddrp, unsigned short port)
  5. {
  6.     int rc;
  7.     int temps;
  8.     struct sockaddr_in tsock;
  9.     memset(&tsock, 0, sizeof(tsock));
  10.     tsock.sin_family      = AF_INET;
  11.     tsock.sin_port        = htons(port);
  12.     tsock.sin_addr.s_addr = *octaddrp;
  13.     temps = *s;
  14.     rc = connect(temps, (struct sockaddr *)&tsock, sizeof(tsock));
  15.     return rc;
  16. }

Reply

Marsh Posté le 23-12-2013 à 16:02:43    

Alors tu devrais mettre tes ip en define car tu les utilisent dans tout le code ( et comme tu veux pas les changer tu les mets pas en globale )
 

Code :
  1. #define "tonip"
  2. //ect...


 
Ta fonction get socket est utile car elle récupère le résultat de la fonction socket.


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 23-12-2013 à 16:11:33    

Je placerais dans ce cas la le #define au début de mon code à la suite des différentes déf des X25_FLAG ... Sous cette forme :
 

Code :
  1. #define X25_FLAG_ERROR       0
  2. #define X25_FLAG_CALL_ACCEPT 1
  3. #define X25_FLAG_DATA        2
  4. #define X25_FLAG_RR          3
  5. #define X25_FLAG_CLEAR       4
  6. #define X25_FLAG_CLEAR_CONF  5
  7. #define X25_FLAG_OTHER       6
  8. #define X25_Nb_FLAG          7
  9. #define X.X.X.X
  10. #define XXXX


 
Au niveau de la fonction getsocket , la déclaration de AF_INET et SOCKET_STREAM ne sont donc plus utile , mais y'a t'il un changement à faire au niveau des autres fontions (entre autres doconn ? )

Reply

Marsh Posté le 23-12-2013 à 16:14:28    

Code :
  1. #define X25_FLAG_ERROR       0
  2.     #define X25_FLAG_CALL_ACCEPT 1
  3.     #define X25_FLAG_DATA        2
  4.     #define X25_FLAG_RR          3
  5.     #define X25_FLAG_CLEAR       4
  6.     #define X25_FLAG_CLEAR_CONF  5
  7.     #define X25_FLAG_OTHER       6
  8.     #define X25_Nb_FLAG          7
  9.     #define MONIP   X.X.X.X
  10.     #define AUTRES  XXXX


 
Les X étant les valeurs de ta variable.
 
Tu doit changer AF_INET et SOCKET_STREAM par tes nouvelles déclarations que tu as fait dans les defines


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 23-12-2013 à 16:22:47    

"AUTRES" correspondrait au numéro de port sur lequelle l'écoute devra être fait, au fameux MASport que tu retrouve dans le code.
 
AF_INET correspondrait à l'adresse IP
 
et SOCKET_STREAM   par "stream" ? si je me passe sur l'exemple du site?

Reply

Marsh Posté le 23-12-2013 à 16:30:26    

mattt92 a écrit :

"AUTRES" correspondrait au numéro de port sur lequelle l'écoute devra être fait, au fameux MASport que tu retrouve dans le code.
 
AF_INET correspondrait à l'adresse IP
 
et SOCKET_STREAM   par "stream" ? si je me passe sur l'exemple du site?


 
En clair c'est ça, mais le nom que tu donne a tes defines ces nominatif, tu les appels comme tu veux ( faut que ça reste explicite )


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 23-12-2013 à 16:51:42    

Si je comprends bien , ca devrait donner cela au niveau de la fonction getsocket :  
 

Code :
  1. /*-----------------*/
  2. /*    getsock()    */
  3. /*-----------------*/
  4. void getsock(int *s)
  5. {
  6.     int temp;
  7.     temp = socket(MONIP, stream, 0) ;
  8.     if (temp < 0) {
  9.           tcperror("MASreq: error socket" );
  10.           printf("errno = %d",errno);
  11.          }
  12.     *s = temp;
  13.     return;
  14. }


 

Reply

Marsh Posté le 23-12-2013 à 18:06:55    

C'est ça


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 13-01-2014 à 13:05:36    

Bonjour ,  
 
Désolé de ma période d'abscence . Je reviens donc sur le sujet .  
 
Une fois les entrées en dur faites pas les "define ...." et la fonction get socket modifiée , est il nécessaire de modifier la connect(...) dans la partie doconn() ?
 

Code :
  1. /*-----------------*/
  2. /*    doconn()     */
  3. /*-----------------*/
  4. int doconn(int *s, unsigned long *octaddrp, unsigned short port)
  5. {
  6.     int rc;
  7.     int temps;
  8.     int sockaddr_in tsock;
  9.     memset(&tsock, 0, sizeof(tsock));
  10.     tsock.sin_family      = AF_INET;
  11.     tsock.sin_port        = htons(port);
  12.     tsock.sin_addr.s_addr = *octaddrp;
  13.     temps = *s;
  14.     rc = connect(temps, (struct sockaddr *)&tsock, sizeof(tsock));
  15.     return rc;
  16. }

Reply

Marsh Posté le 13-01-2014 à 13:14:12    

Bonjour,
 

Code :
  1. tsock.sin_family      = AF_INET;


 
Si je me souviens bien de tout cette ligne est à changer


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 13-01-2014 à 13:22:07    

Elle doit être modifié et les parametres IP et le port doivent etre entré en dur ?

Reply

Marsh Posté le 13-01-2014 à 13:26:37    

Re,
 
Oui, donc si besoin tu auras peut être à modifier cette ligne aussi :
 

Code :
  1. tsock.sin_port        = htons(port);


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 13-01-2014 à 13:51:23    

Ok , du coup j'ai modifié les entrées dans les deux champs . Au niveau de ces paramètres il est préférable de les entré en binaire ou le decimal fera l'affaire ?  
 
Ce code a été dévelloppé pour etre exploiter sous un environnement MVS, apparement la fonction socket utilisée actuellement ne sont pas les mêmes sur du unix et les includes utlisés ne correspondre pas. Pourrais tu m'aider au niveau de cette partie ?

Reply

Marsh Posté le 13-01-2014 à 13:55:45    

Re,
 
 
Pour les paramètres le décimal devrait faire l'affaire.
 
MVS je connais pas.
Logiquement sous UNIX il tous les includes existent je n'est jamais eu de soucis jusque là, surtout que les includes ne sont pas exotiques.
 
Sous qu'elle OS UNIX tu tourne? Car il peut manquer des librairies de développement qui t'amène à avoir ce problème.


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 13-01-2014 à 14:03:38    

Pour ma part je connais pas aussi ce type d'environement mais mon role est de pouvoir réadapté ce prog sur du unix et de pouvoir l'executé .  
 
Je tourne actuellement sur du  i686 GNU/Linux
 
Lors de la compile avec l'ensemble des includes actuellement dans le code. Plusieurs messages d'erreur remonte , les librairies sont introuvable apparement . En faisant une recherche sur le systeme effectivement, elle n'y sont pas , par exemple pour manifest.h qui est une librairie inexistante sur le systeme .  
 

Reply

Marsh Posté le 13-01-2014 à 14:08:09    

Re,
 
Il doit te manquer des librairie.  
Tu pourrais me donner le nom de ta distribution ( Debian, Red Hat, Fedora, Mint ect... ) car sinon je ne pourrait pas t'aider.


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 13-01-2014 à 14:23:10    

je bosse actuellement sur du Debian 2.6.26-29

Reply

Marsh Posté le 13-01-2014 à 14:42:22    

Re,
 
Dans ces cas là vérifie que tu as bien les build-essential d'installer.
 
Sudo apt-get install buil-essantial
 
ou quelque chose comme ça


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 13-01-2014 à 15:02:41    

bon j'ai crée un dossier ( je precise le chemin dans la commande de compilation) et j'ai mis toutes les librairies dont celle que j'avais besoin dans un dossier (les librairies que j'ai pu trouvé sur la machine )  
 
Actuellement j'ai les erreurs suivantes lors de la compile , ces erreurs te semble t'elle parlante  ?  
 

Code :
  1. xot.c:24:9: error: macro names must be identifiers
  2. xot.c:25:9: error: macro names must be identifiers
  3. xot.c: In function 'main':
  4. xot.c:98:22: error: too many decimal points in number
  5. xot.c:116:7: warning: passing argument 2 of 'doconn' from incompatible pointer type [enabled by default]
  6. xot.c:30:5: note: expected 'long unsigned int *' but argument is of type 'in_addr_t *'
  7. xot.c: In function 'doconn':
  8. xot.c:247:5: warning: incompatible implicit declaration of built-in function 'memset' [enabled by default]
  9. xot.c: In function 'dorecv':
  10. xot.c:294:11: warning: incompatible implicit declaration of built-in function 'memcpy' [enabled by default]

Reply

Marsh Posté le 13-01-2014 à 15:02:41    

bon j'ai crée un dossier ( je precise le chemin dans la commande de compilation) et j'ai mis toutes les librairies dont celle que j'avais besoin dans un dossier (les librairies que j'ai pu trouvé sur la machine )  
 
Actuellement j'ai les erreurs suivantes lors de la compile , ces erreurs te semble t'elle parlante  ?  
 

Code :
  1. xot.c:24:9: error: macro names must be identifiers
  2. xot.c:25:9: error: macro names must be identifiers
  3. xot.c: In function 'main':
  4. xot.c:98:22: error: too many decimal points in number
  5. xot.c:116:7: warning: passing argument 2 of 'doconn' from incompatible pointer type [enabled by default]
  6. xot.c:30:5: note: expected 'long unsigned int *' but argument is of type 'in_addr_t *'
  7. xot.c: In function 'doconn':
  8. xot.c:247:5: warning: incompatible implicit declaration of built-in function 'memset' [enabled by default]
  9. xot.c: In function 'dorecv':
  10. xot.c:294:11: warning: incompatible implicit declaration of built-in function 'memcpy' [enabled by default]

Reply

Marsh Posté le 13-01-2014 à 15:07:11    

Re,
 
Si tu as fait des modifications dans le code peut tu le renvoyer :)


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 13-01-2014 à 15:55:33    

Les seules modifications que j'ai faites dans le code c'est celle ques nous avons vu ensemble :  
 

Code :
  1. /*** client XOT ******    en cours    ********************************/
  2. /* Thread d'interrogation Mascotte                                   */
  3. /* appel© par MFPMAS.. tsched()                                      */
  4. /* versions ans stop sur rejet , sans detail et compteur de fin      */
  5. /* version avec traitement plusieurs packet XOT dans un packet TCP   */
  6. /*********************************************************************/
  7. /* #define Resolve_Via_Lookup */
  8. #pragma runopts(noargparse,plist(mvs),noexecops)
  9. #include <netdb.h>
  10. #include <errno.h>
  11. #include <fcntl.h>
  12. #include <stdio.h>
  13. #define X25_FLAG_ERROR       0
  14. #define X25_FLAG_CALL_ACCEPT 1
  15. #define X25_FLAG_DATA        2
  16. #define X25_FLAG_RR          3
  17. #define X25_FLAG_CLEAR       4
  18. #define X25_FLAG_CLEAR_CONF  5
  19. #define X25_FLAG_OTHER       6
  20. #define X25_Nb_FLAG          7
  21. #define MASIP X.X.X.X
  22. #define MASPORT XXXX
  23. int dosend(int *s,int *ddl,char *sndData);
  24. int dorecv(int *s);
  25. int doconn(int *s, unsigned long *octaddrp, unsigned short port);
  26. int trtrecv(int XOTlg,char *XOTpkt);
  27. void getsock(int *s);
  28. static char X25tmsg[X25_Nb_FLAG][12] = {
  29.    "ERROR",
  30.    "CALL ACCEPT",
  31.    "DATA",
  32.    "RR",
  33.    "CLEAR",
  34.    "CLEAR CONF",
  35.    "Autre"
  36. };
  37. /* ============================================================= */
  38. /* thread d'appel Mascote                                        */
  39. /* ============================================================= */
  40. main(unsigned short MASport,
  41.          unsigned long MASIP,
  42.          int NbBcl,
  43.          int lMAScall,
  44.          int lMASreq,
  45.          char *dMAScall,
  46.          char *dMASreq)
  47. {
  48.     int FLGerr;                /* flag erreur                         */
  49.     int X25rcv;                /* type de paquet X25 recu             */
  50.     int WaitMascote;           /* flag attente reponse Mascote        */
  51.     int BCLreq;                /* Boucle  Requete                     */
  52.     int TOTerr;                /* Cumul des requete ratees            */
  53.     int RepOK;                 /* Cumul des reponse OK de Mascote     */
  54.     int gotbytes;              /* number of bytes received            */
  55.     int sndbytes;              /* number of bytes sent                */
  56.     int s;                     /* socket descriptor                   */
  57.     int rc;                    /* return code                         */
  58.     struct in_addr octaddr;    /* host internet address (binary)      */
  59.     unsigned short port;       /* port number sent as parameter       */
  60.     char * charaddr;           /* host internet address (dotted dec)  */
  61.     struct hostent *hostnm;    /* server host name information        */
  62.     int dd2l=9;                 /* len dd2              */
  63.     int dd3l=8;                 /* len dd3              */
  64.     int dd4l=7;                 /* len dd4              */
  65.     int IndxReq=0;
  66.     unsigned short X25type;     /* type de paquet RR, RNR, DATA */
  67.   /* ----------------------------------------------------------------------------- */
  68.   /* X25 CLEAR CAUSE 0 DIAG 0 */
  69. char dd2[9]  = "\x00\x00\x00\x05\x10\x01\x13\x00\x00";
  70.   /* X25 CLEAR CONF */
  71. char dd3[8]  = "\x00\x00\x00\x04\x10\x01\x17\x00";
  72.   /* X25 RR PR(1) */
  73. char dd4[7]  = "\x00\x00\x00\x03\x10\x01\x21";
  74.   /* X25 CALL Mascote    ----
  75. char dd1[19] = "\x00\x00\x00\x0F\x10\x01\x0B\x07\x90\x00\x00\x10\x06\x42\x08\x08\x43\x02\x02";
  76.   --- */
  77.   /* X25 DATA requete interro Mascote prod    -------
  78. 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";
  79.     X25 DATA requete interro Mascote Dev
  80. 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";
  81.    ---- */
  82.   /* ----------------------------------------------------------------------------- */
  83.     BCLreq = NbBcl;
  84.     octaddr.s_addr = X.X.X.X;
  85.   /* fprintf(stdout, "MASreq: Addr = %d\n", MASIP); */
  86.     port = XXXX;
  87.   /* fprintf(stdout, "MASreq: port = %d\n", port);  */
  88.     /* --------------------------------------------------------- */
  89.     /* Boucle de connexions XOT et requete Mascote               */
  90.     /* --------------------------------------------------------- */
  91.     TOTerr = 0; RepOK = 0;
  92.     while (BCLreq)  {
  93.       FLGerr =0;
  94.       /* ----- Init socket ---------- */
  95.       getsock(&s);
  96.   /*  printf("MASreq: No socket = %d\n", s);  */
  97.       /* ----- connexion TCP ---------- */
  98.       rc = doconn(&s, &octaddr.s_addr, port);
  99.       if (rc < 0) {
  100.           tcperror("MASreq: error for connect" );
  101.           printf("errno = %d",errno);
  102.           if (errno == ECONNREFUSED)
  103.                     printf("errno = ECONNREFUSED" );
  104.           BCLreq=0;      /* dans ce cas on stoppe reellement */
  105.           FLGerr=1;
  106.                   }
  107.       else {
  108.           /* ----- connexion TCP OK ------- */
  109.      /*   printf("MASreq: rc connect = %d\n", rc);  */
  110.           /* ______ send Call X25 ____________  */
  111.           printf("---> Send CALL X25\n" );
  112.           sndbytes = dosend(&s,&lMAScall,dMAScall);
  113.           if (sndbytes < 1)
  114.              { FLGerr=1;
  115.                BCLreq=0;    /* dans ce cas on stoppe reellement */
  116.                break;  }
  117.           /* ______ receive Call Confirm normalement ________  */
  118.           X25rcv = dorecv(&s);
  119.           switch (X25rcv)
  120.              {
  121.                case X25_FLAG_CALL_ACCEPT: FLGerr=0;
  122.                 /*   printf("<--- CALL Confirm recu\n\n" ); */
  123.                      break;
  124.                default: FLGerr=1;
  125.              /*     BCLreq=0;   on n'arrete pas la boucle */
  126.         /*   printf("ERREUR rcv apres call : X25rcv = %d\n",X25rcv);*/
  127.              }
  128.   /* zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz ce ca qui merde */
  129.    /*     if (FLGerr) break; */
  130.        if (FLGerr == 0) {
  131.           /* ______ Call CONF recu - envoi DATA requete _____  */
  132.           printf("---> Send DATA X25 (req Mascote)\n" );
  133.           sndbytes = dosend(&s,&lMASreq,dMASreq);
  134.           if (sndbytes < 1)
  135.              { FLGerr=1;
  136.                BCLreq=0;     /* on arrete la boucle */
  137.                break;  }
  138.         }
  139.        if (FLGerr == 0) {
  140.           /* ______ Rceive Confirm (RR) ou/et DATA reponse  _____  */
  141.           WaitMascote = 1;
  142.           while (WaitMascote)
  143.              {
  144.               X25rcv = dorecv(&s);
  145.               switch (X25rcv)
  146.                  {
  147.                     case X25_FLAG_DATA: FLGerr=0;
  148.                                         WaitMascote = 0;
  149.                                         RepOK++ ;
  150.                                /*    printf("<--- DATA recue\n\n" ); */
  151.                                         break;
  152.                     case X25_FLAG_RR:   FLGerr=0;
  153.                                  /*     printf("<--- RR recu\n\n" ); */
  154.                                         break;
  155.                     default:            FLGerr=1;
  156.                                  /*     BCLreq=0;  NO STOP */
  157.                                         WaitMascote = 0;
  158.                  }
  159.              }  /* end while waitmascote */
  160.         }
  161.           if (FLGerr == 0)      /* on a recu la reponse de mascote */
  162.              {
  163.              /* ____ DATA reponse recue - envoi Ack (RR)___ */
  164.               printf("---> Send RR\n" );
  165.               sndbytes = dosend(&s,&dd4l,dd4);
  166.               if (sndbytes < 1)
  167.                  { FLGerr=1;
  168.                    BCLreq=0;   /* on arrete la boucle */
  169.                    break;  }
  170.              }
  171.           if (FLGerr == 0)
  172.              {
  173.              /* ____ Envoi Clear X25 ______________________ */
  174.               printf("---> Send CLEAR\n" );
  175.               sndbytes = dosend(&s,&dd2l,dd2);
  176.               if (sndbytes < 1)
  177.                  { FLGerr=1;
  178.                    BCLreq=0;  /* on arret la boucle */
  179.                    break;  }
  180.              }
  181.              /* ____ receive du Clear CONF ________________ */
  182.           if (FLGerr == 0)  X25rcv = dorecv(&s);
  183.         } /* end else (connexion TCP XOT OK) */
  184.        /* __________ D©connexion ________________ */
  185.        rc = close(s);
  186.        if (BCLreq) BCLreq -= 1;
  187.        if (FLGerr) TOTerr++;
  188.        IndxReq++;
  189.        printf("------------------------------------- %d\n",IndxReq);
  190.        sleep(1);
  191.       }   /** end while (BCLreq )        */
  192. printf("Nb bcl %d, Reponse OK %d, Tot erreur %d\n",NbBcl,RepOK,TOTerr);
  193. }
  194. /*-----------------*/
  195. /*    getsock()    */
  196. /*-----------------*/
  197. void getsock(int *s)
  198. {
  199.     int temp;
  200.     temp = socket(MASIP, stream, 0);
  201.     if (temp < 0) {
  202.           tcperror("MASreq: error socket" );
  203.           printf("errno = %d",errno);
  204.          }
  205.     *s = temp;
  206.     return;
  207. }
  208. /*-----------------*/
  209. /*    doconn()     */
  210. /*-----------------*/
  211. int doconn(int *s, unsigned long *octaddrp, unsigned short port)
  212. {
  213.     int rc;
  214.     int temps;
  215.     struct sockaddr_in tsock;
  216.     memset(&tsock, 0, sizeof(tsock));
  217.     tsock.sin_family      = X.X.X.X;
  218.     tsock.sin_port        = XXXX(port);
  219.     tsock.sin_addr.s_addr = *octaddrp;
  220.     temps = *s;
  221.     rc = connect(temps, (struct sockaddr *)&tsock, sizeof(tsock));
  222.     return rc;
  223. }
  224. /*-----------------*/
  225. /*    dorecv()     */
  226. /*-----------------*/
  227. int dorecv(int *s)
  228. {
  229.     int temps;
  230.     int gotbytes;
  231.     int X25flag;
  232.     int rc;
  233.     int i;
  234.     struct {
  235.        unsigned short XOTver;
  236.        unsigned short XOTlg;
  237.            } pfxXOT;
  238.     char *ptr1;
  239.     unsigned short usl1, usl2, LetsGO;
  240.     char data[280];
  241.     char carac = ' ';
  242.     X25flag = X25_FLAG_OTHER;
  243.     rc = X25_FLAG_OTHER;
  244.     temps = *s;
  245.     gotbytes = recv(temps, data, sizeof(data), 0);
  246.     if (gotbytes < 0) {
  247.         tcperror("MASreq: error for recv" );
  248.         X25flag=X25_FLAG_ERROR;
  249.         return X25flag;
  250.     }
  251.     /*  recv OK (gotbytes >=0) */
  252.     printf("MASreq: received %d octets (data TCP)\n", gotbytes);
  253.     i=0;
  254.     if (gotbytes > 0) {
  255.        LetsGO=1; usl1=0; usl2=0;
  256.        ptr1=&data[0];
  257.        while(LetsGO)
  258.          {
  259.           memcpy(&pfxXOT,ptr1,4);
  260.           usl2=pfxXOT.XOTlg; usl2+=4;
  261.           /* traitement du paquet XOT ptr1 et usl2) */
  262.           printf("traitement paquet XOT : long paquet = %d\n",usl2);
  263.           if (i) printf("* plusieurs paquets XOT dans un paquet TCP\n" );
  264.           rc=trtrecv(usl2,ptr1);
  265.           ptr1+=usl2;
  266.           usl1+=usl2;
  267.           i++;
  268.           if (usl1 >= gotbytes) LetsGO=0;
  269.          }
  270.      }  /* data TCP recu */
  271.     return rc;
  272. }
  273. /*-----------------*/
  274. /*    trtrecv()    */
  275. /*-----------------*/
  276. int trtrecv(int XOTlg,char *XOTpkt)
  277. {
  278.     char *ptr1;
  279.     int X25flag = X25_FLAG_OTHER;
  280.     int i, j;
  281.     char carac = ' ';
  282.     ptr1=XOTpkt;
  283.     for (i=0;i<XOTlg;i++) {
  284.        carac = *ptr1;
  285.        printf("%02x",carac);
  286.        if ((j=(i+1)%4) == 0) printf(" " );
  287.        if ((j=(i+1)%32) == 0) printf("\n" );
  288.        ptr1++ ;
  289.     }
  290.     printf("\n" );
  291.     ptr1=XOTpkt;
  292.     ptr1+=6;
  293.     if (XOTlg == 7) {
  294.        /* test RR */
  295.        carac=*ptr1;
  296.        if (carac == 0x17) X25flag = X25_FLAG_CLEAR_CONF;
  297.        else {
  298.           if (carac &= 1) X25flag = X25_FLAG_RR;
  299.           else X25flag = X25_FLAG_OTHER;
  300.             }
  301.     }
  302.     else {
  303.        if (XOTlg > 7) {
  304.            /* test DATA */
  305.            carac=*ptr1;
  306.            if ((carac &=1) == 0) X25flag = X25_FLAG_DATA;
  307.            else {    /* pas des data */
  308.                carac=*ptr1;
  309.                switch (carac)
  310.                   {
  311.                   case 0x0F: X25flag = X25_FLAG_CALL_ACCEPT;
  312.                              break;
  313.                   case 0x13: X25flag = X25_FLAG_CLEAR;
  314.                              break;
  315.                   case 0x17: X25flag = X25_FLAG_CLEAR_CONF;
  316.                              break;
  317.                   default:          X25flag = X25_FLAG_OTHER;
  318.                   }
  319.                }   /* fin else - pas des DATA */
  320.           }     /* fin if XOTlg > 7 ) */
  321.         }    /* fin else (XOTlg <> 7 */
  322. /* printf("MAS data received: type X25 = %d\n", X25flag); */
  323.     printf("<--- received : type X25 = %s\n",X25tmsg[X25flag]);
  324.     return X25flag;
  325. }
  326. /*-----------------*/
  327. /*    dosend()     */
  328. /*-----------------*/
  329. int dosend(int *s,int *ddl,char *sndData)
  330. {
  331.     int temps;
  332.     int lsndData;
  333.     int sndbytes;
  334.     int i,j;
  335.     char *ptr1;
  336.     char carac = ' ';
  337.     temps = *s;
  338.     lsndData = *ddl;
  339.     sndbytes = send(temps, sndData, lsndData, 0);
  340.     if (sndbytes < 0) {
  341.         tcperror("MASreq: error for send" );
  342.         }
  343.     else {
  344.         printf("MASreq: sent %d octets\n", sndbytes);
  345.         ptr1=sndData;
  346.         for (i=0;i<sndbytes;i++) {
  347.               carac = *ptr1;
  348.               printf("%02x",carac);
  349.               if ((j=(i+1)%4) == 0) printf(" " );
  350.               if ((j=(i+1)%32) == 0) printf("\n" );
  351.               ptr1++ ; }
  352.               printf("\n\n" );
  353.         }
  354.     return sndbytes;
  355. }

Reply

Marsh Posté le 13-01-2014 à 15:58:40    

ERREUR DE COMPILATION :  
 

Code :
  1. xot.c:50:24: error: too many decimal points in number
  2. xot.c:50:24: error: expected ';', ',' or ')' before numeric constant
  3. xot.c:98:22: error: too many decimal points in number
  4. xot.c: In function 'getsock':
  5. xot.c:226:19: error: too many decimal points in number
  6. xot.c:226:26: error: 'stream' undeclared (first use in this function)
  7. xot.c:226:26: note: each undeclared identifier is reported only once for each function it appears in
  8. xot.c: In function 'doconn':
  9. xot.c:247:5: warning: incompatible implicit declaration of built-in function 'memset' [enabled by default]
  10. xot.c:248:29: error: too many decimal points in number
  11. xot.c:249:33: error: called object '1998' is not a function
  12. xot.c: In function 'dorecv':
  13. xot.c:294:11: warning: incompatible implicit declaration of built-in function 'memcpy' [enabled by default]

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed