Bonjour, j'ai un serveur http à coder
le problème c'est que je n'arrive pas à afficher des images avec:
je ne sais pas si c'est lié aux mimes vers la ligne 310 ou si c'est la manière dont les informations sont transmises au client
Après l'avoir lancé sous linux, dans un répertoire:
Il faut taper cela dans le navigateur si il y a un fichier index.html
h ttp://localhost:1234/index.html
]]]]]]] \n", buff);
//printf("%s",buff);
if((0!=bcmp(buff, "GET ",4)) && (0!=bcmp(buff,"HEAD ",5)))
{
// printf("la longueur de la ligne est : %d \nle contenu du buffer est : %s\n la requete n'est pas correcte! Désolé!\n", l,buff);
fprintf(stream,"404 (NOT FOUND)\n");
}
//printf("||%s|| \n", buff);
sscanf(buff,"%s %s %s",requete, way, version);
//printf("%s|%s|%s\n",requete,way,version);
//printf("requete: %d, version: %d", bcmp(requete,"GET",4),bcmp(version, "HTTP/1.1", 9));
if(((0==bcmp(requete,"GET",4))||(0==bcmp(requete,"HEAD",5))) && (0==bcmp(version, "HTTP/1.1", 9)))/*Si on requeste=GET ou HEAD et version=HTTP/1.1, alors, on continue de lire le reste de la requete, sinon, on fait une erreur on lit le fichier indiqué dans way*/
{
//printf("test requete reussi\n");
reading(buff, mode, stream);
// printf("j'arrête de lire\n");
//printf("le chemin est %s\n", way);
remv(way,ext);
//printf("le vrai chemin est %s\n", ext);
if(file=fopen(ext, "r"))/*on ouvre le fichier*/
{
n=stat(ext,&buf);/*on récupère des informations sur le fichier pointé par way, ces informations sont misent dans buf*/
if (0==n)
{
n=((int)buf.st_size)/length_buff;/*n contient le nombre de fois que l'on peut remplir notre buffer, avec les éléments lus dans le fichier*/
length_way=(int)buf.st_size;
reste=((int)buf.st_size)%length_buff;/*reste est le nombres d'élément à lire quand on a déjà rempli n fos le buffer en entier*/
(void) fprintf(stream,"HTTP/1.1 200 OK\015\012");
(void) fprintf(stream,"Content-Length: %d\015\012",length_way);
/*Récupération de l'extension du fichier*/
time_t now;
char timebuf[100];
now = time( (time_t*) 0 );
(void) strftime( timebuf, sizeof(timebuf),"%a, %d %b %Y %H:%M:%S GMT", gmtime( &now ) );
(void) printf( "Date: %s\015\012", timebuf );
dot = strrchr( way, '.' );
if ( dot == (char*) 0 )
(void) fprintf(stream,"Content-Type: %s\015\012", "text/plain; charset=iso-8859-1");
if ( strcmp( dot, ".html" ) == 0 || strcmp( dot, ".htm" ) == 0 )
(void) fprintf(stream,"Content-Type: %s\015\012", "text/html; charset=iso-8859-1");
if ( strcmp( dot, ".jpg" ) == 0 || strcmp( dot, ".jpeg" ) == 0 )
(void) fprintf(stream,"Content-Type: %s\015\012", "image/jpeg");
if ( strcmp( dot, ".gif" ) == 0 )
(void) fprintf(stream,"Content-Type: %s\015\012", "image/gif");
if ( strcmp( dot, ".png" ) == 0 )
(void) fprintf(stream,"Content-Type: %s\015\012", "image/png");
if ( strcmp( dot, ".css" ) == 0 )
(void) fprintf(stream,"Content-Type: %s\015\012", "text/css");
if ( strcmp( dot, ".au" ) == 0 )
(void) fprintf(stream,"Content-Type: %s\015\012", "audio/basic");
if ( strcmp( dot, ".wav" ) == 0 )
(void) fprintf(stream,"Content-Type: %s\015\012", "audio/wav");
if ( strcmp( dot, ".avi" ) == 0 )
(void) fprintf(stream,"Content-Type: %s\015\012", "video/x-msvideo");
if ( strcmp( dot, ".mov" ) == 0 || strcmp( dot, ".qt" ) == 0 )
(void) fprintf(stream,"Content-Type: %s\015\012", "video/quicktime");
if ( strcmp( dot, ".mpeg" ) == 0 || strcmp( dot, ".mpe" ) == 0 )
(void) fprintf(stream,"Content-Type: %s\015\012", "video/mpeg");
if ( strcmp( dot, ".vrml" ) == 0 || strcmp( dot, ".wrl" ) == 0 )
(void) fprintf(stream,"Content-Type: %s\015\012", "model/vrml");
if ( strcmp( dot, ".midi" ) == 0 || strcmp( dot, ".mid" ) == 0 )
fprintf(stream,"Content-Type: %s\015\012", "audio/midi");
if ( strcmp( dot, ".mp3" ) == 0 )
(void) fprintf(stream,"Content-Type: %s\015\012", "audio/mpeg");
if ( strcmp( dot, ".ogg" ) == 0 )
(void) fprintf(stream,"Content-Type: %s\015\012", "application/ogg");
if ( strcmp( dot, ".pac" ) == 0 )
(void) fprintf(stream,"Content-Type: %s\015\012", "application/x-ns-proxy-autoconfig");
(void) printf("Content-Length: %d\015\012",length_way);
(void) fprintf(stream,"Connection: close\015\012");
(void)printf("HTTP/1.1 200 OK\015\012");
/*Récupération de l'extension du fichier*/
// mimes(way,mime);
//printf("Content-Type: %s\r\n", mime);
//printf("Connection: close\r\n");
(void) printf("\015\012");
if((0==bcmp(requete,"GET",4)))
{
while(n>0)
{
len_read=fread(buffer, sizeof(char),length_buff, file);/*lecture des éléments dans le fichier*/
(void) fwrite(buffer, sizeof(char),length_buff, stream);/*écriture sur le socket*/
(void) printf("%s",buffer);
n--;
}
len_read=fread(buffer, sizeof(char), reste, file);/*lecture des éléments dans le fichier*/
(void) fwrite(buffer, sizeof(char),reste, stream);/*écriture sur le socket*/
(void) printf("%s",buffer);
}}
fclose(file);}
/*après la lecture, on referme le fichier proprement*/
else
{(void) fprintf(stream,"404 (NOT FOUND)\n");}
//printf("%s \n",requete);
}
else
{
(void) fprintf(stream,"404 (NOT FOUND)\n");
}/*rapport d'erreurs quand la requete n'est pas de la bonne forme*/
if(mode_specify==0 || 0!=strcmp(mode,"Connection:keep-alive"))
{
// fprintf(stream,"Je ne suis pas en mode keep-alive\n");
fclose(stream);
return NULL;
}
// else{printf("Je suis en mode en mode keep-alive\n ");}
//printf("le header %s \n", requete);
//printf("la version utilisée %s\n", version);
//length_way=strlen(way);
// fprintf(stream,"Bien recu\n");
}
mode_specify=0;
}
// printf("je fermerai bien la connection");
fclose(stream);/*on referme stream*/
return NULL;
}