I’m a student doing a web server exercise and I need a bit of help.
I have my web server working fine for text pages but whenever the brower sends a ---GET /img.jpg HTTP/1.1 request, I don’t know how to handle it. I’ve heard the HTTP protocol is text based, so how do I send an image in my HTTP response?
Here is a segment where I create my normal HTTP response, I plan to use readresult == 2 to signal an image.
if(readresult == 1){
sprintf(toreturn, "%s\r\n%s\r\n%s\r\n\r\n%s", "HTTP/1.1 200 OK", "Content-Type: text/html", "Connection: close", readpagestring);
returnflag = 1;
}
else if(readresult == 2){
returnflag = 2;
}
else{
sprintf(toreturn, "%s\r\n%s\r\n%s\r\n\r\n%s", "HTTP/1.1 404 Not Found", "Content-Type: text/html", "Connection: close", readpagestring);
returnflag = 0;
}
And the function it calls
int readpage(char *readaddress, char *pagereturn){
FILE *inputfile = (FILE *)calloc(1,sizeof(FILE));
int flag;
int c;
int n = 0;
readaddress++;
inputfile=fopen(readaddress,"r");
if (inputfile==NULL){
FILE *missingfile;
missingfile=fopen("404.html","r");
while ((c = fgetc (missingfile)) != EOF){
*(pagereturn+n) = c;
n++;
}
flag = 0;
fclose (missingfile);
}
else{
while ((c = fgetc (inputfile)) != EOF){
*(pagereturn+n) = c;
n++;
}
flag = 1;
fclose (inputfile);
}
return flag;
}
You have to return a
HTTP responselike this: (very minimal, you can add all the headers you need anyway)Obviously you also have to set the content type accordingly to the type of your image.
You can build the headers with a
sprintf, thenmemcpythe binary data of the image just after the last\r\nEnsure that
toreturnbuffer is large enough.