Código:
int leeFichEnt(FILE *fich)
{
struct IP orig;
struct IP dest;
struct IP auxorig;
struct IP auxdest;
int error=0;
//Contadores, i para la cadena completa y c para cada dato que saque
int i;
int c;
//Cadena entera
char cad[256];
//Procedencia del paquete
char tipo[TIPO];
//Datos de la IP origen
char auxori[IPP];
int puertori;
int tamori;
int tamportori;
//Datos de la IP destino
char auxdes[IPP];
int puertdes;
int tamdes;
int tamportdes;
//Tamaño de los datos del paquete
char tamanio[2];
int tam;
//Cadena auxiliar
char *aux=NULL;
char *datos=NULL;
while(fgets(cad, 256, fich)!=NULL)
{
//Hay que obtener la procedencia del paquete
for(i=0,c=0; i<=TIPO; c++,i++)
tipo[c]=cad[i];
printf("%s\n", tipo);
if(strcmp(tipo,PRIVADO) && strcmp(tipo, PUBLICO))
//Hay que guardar la cadena en errores
error=1;
else
{
//Obtenemos el tamanio de lo que hay entre [[ ]]
for(c=0; c<=2; c++,i++)
tamanio[c]=cad[i];
tam=atoi(tamanio);
aux=(char*) calloc(tam,sizeof (char));
datos=(char*) calloc(tam-(2*MINIP+1), sizeof(char));
if(aux==NULL)
{
printf(MENS_ERR6);
error=2;
}
else
{
//Sacamos una cadena con datos e IPs
for(c=0; c<=tam;c++,i++)
aux[c]=cad[i];
Aqui es donde viene el problema, espero que los comentarios os dejen claro cual es el problema que tengo{
struct IP orig;
struct IP dest;
struct IP auxorig;
struct IP auxdest;
int error=0;
//Contadores, i para la cadena completa y c para cada dato que saque
int i;
int c;
//Cadena entera
char cad[256];
//Procedencia del paquete
char tipo[TIPO];
//Datos de la IP origen
char auxori[IPP];
int puertori;
int tamori;
int tamportori;
//Datos de la IP destino
char auxdes[IPP];
int puertdes;
int tamdes;
int tamportdes;
//Tamaño de los datos del paquete
char tamanio[2];
int tam;
//Cadena auxiliar
char *aux=NULL;
char *datos=NULL;
while(fgets(cad, 256, fich)!=NULL)
{
//Hay que obtener la procedencia del paquete
for(i=0,c=0; i<=TIPO; c++,i++)
tipo[c]=cad[i];
printf("%s\n", tipo);
if(strcmp(tipo,PRIVADO) && strcmp(tipo, PUBLICO))
//Hay que guardar la cadena en errores
error=1;
else
{
//Obtenemos el tamanio de lo que hay entre [[ ]]
for(c=0; c<=2; c++,i++)
tamanio[c]=cad[i];
tam=atoi(tamanio);
aux=(char*) calloc(tam,sizeof (char));
datos=(char*) calloc(tam-(2*MINIP+1), sizeof(char));
if(aux==NULL)
{
printf(MENS_ERR6);
error=2;
}
else
{
//Sacamos una cadena con datos e IPs
for(c=0; c<=tam;c++,i++)
aux[c]=cad[i];
Código:
//Desde aqui! sscanf hace algo raro con tipo
printf("%s\n", tipo);
//Guardamos segun el dato
sscanf(aux, "%s %s %s", auxori, auxdes, datos);
printf("%s\n", tipo);
//Hasta aqui! La variable tipo cambia su contenido... Por que?
Si alguien puede decirme que pasa en ese sscanf seria de gran ayudaprintf("%s\n", tipo);
//Guardamos segun el dato
sscanf(aux, "%s %s %s", auxori, auxdes, datos);
printf("%s\n", tipo);
//Hasta aqui! La variable tipo cambia su contenido... Por que?
Código:
sscanf(auxori, "%d.%d.%d.%d:%d", &auxorig.d1, &auxorig.d2, &auxorig.d3, &auxorig.d4, &puertori);
sscanf(auxdes, "%d.%d.%d.%d:%d", &auxdest.d1, &auxdest.d2, &auxdest.d3, &auxdest.d4, &puertdes);
//Calculamos tamanio del puerto origen
if(puertori<10)
tamportori=1;
else if(puertori>=10 && puertori<100)
tamportori=2;
else if(puertori>=100 && puertori<1000)
tamportori=3;
else
tamportori=4;
//Calculamos tamanio del puerto destino
if(puertdes<10)
tamportdes=1;
else if(puertdes>=10 && puertdes<100)
tamportdes=2;
else if(puertdes>=100 && puertdes<1000)
tamportdes=3;
else
tamportdes=4;
//Obtenemos tamanio de las cadenas IP
tamori=strlen(auxori)-(tamportori+1);
tamdes=strlen(auxdes)-(tamportdes+1);
//Comprobamos que las IP son correctas
error=compruebaIP(&orig, auxori, puertori, tamori);
if(error==0)
error=compruebaIP(&dest, auxdes, puertdes, tamdes);
printf("%s %d %s %s %s\n", tipo, tam, auxori, auxdes, datos);
}
free(aux);
aux=NULL;
free(datos);
datos=NULL;
}
}
return error;
}
sscanf(auxdes, "%d.%d.%d.%d:%d", &auxdest.d1, &auxdest.d2, &auxdest.d3, &auxdest.d4, &puertdes);
//Calculamos tamanio del puerto origen
if(puertori<10)
tamportori=1;
else if(puertori>=10 && puertori<100)
tamportori=2;
else if(puertori>=100 && puertori<1000)
tamportori=3;
else
tamportori=4;
//Calculamos tamanio del puerto destino
if(puertdes<10)
tamportdes=1;
else if(puertdes>=10 && puertdes<100)
tamportdes=2;
else if(puertdes>=100 && puertdes<1000)
tamportdes=3;
else
tamportdes=4;
//Obtenemos tamanio de las cadenas IP
tamori=strlen(auxori)-(tamportori+1);
tamdes=strlen(auxdes)-(tamportdes+1);
//Comprobamos que las IP son correctas
error=compruebaIP(&orig, auxori, puertori, tamori);
if(error==0)
error=compruebaIP(&dest, auxdes, puertdes, tamdes);
printf("%s %d %s %s %s\n", tipo, tam, auxori, auxdes, datos);
}
free(aux);
aux=NULL;
free(datos);
datos=NULL;
}
}
return error;
}