13 changed files with 353 additions and 185 deletions
-
2include/http/message.h
-
6include/http/response.h
-
10include/http/response/writer.h
-
11src/Makefile.am
-
16src/http/message/header_size_get.c
-
28src/http/message/header_to_string.c
-
45src/http/request.c
-
47src/http/response.c
-
52src/http/response/image.c
-
58src/http/response/me.c
-
133src/http/response/writer/write.c
-
29src/interface/http_intro.c
-
69src/server/run.c
@ -0,0 +1,52 @@ |
|||||
|
#include <stdlib.h> |
||||
|
#include <string.h> |
||||
|
#include <stdio.h> |
||||
|
#include <time.h> |
||||
|
#include <sys/stat.h> |
||||
|
#include <fcntl.h> |
||||
|
|
||||
|
#include "class.h" |
||||
|
#include "interface/class.h" |
||||
|
|
||||
|
#include "http/response.h" |
||||
|
#include "http/message.h" |
||||
|
#include "http/header.h" |
||||
|
|
||||
|
|
||||
|
HttpResponse |
||||
|
httpResponseImage() |
||||
|
{ |
||||
|
time_t t; |
||||
|
struct tm * tmp; |
||||
|
char buffer[200]; |
||||
|
struct stat st; |
||||
|
HttpResponse response; |
||||
|
HttpMessage message; |
||||
|
|
||||
|
response = new(HttpResponse, "HTTP/1.1", 200, "OK"); |
||||
|
message = (HttpMessage)response; |
||||
|
|
||||
|
httpHeaderAdd(&(message->header), |
||||
|
new(HttpHeader, "Content-Type", "image/jpeg")); |
||||
|
httpHeaderAdd(&(message->header), |
||||
|
new(HttpHeader, "Server", "testserver")); |
||||
|
|
||||
|
message->type = HTTP_MESSAGE_PIPED; |
||||
|
message->handle = open("./assets/waldschrat.jpg", O_RDONLY); |
||||
|
fstat(message->handle, &st); |
||||
|
message->nbody = st.st_size; |
||||
|
|
||||
|
sprintf(buffer, "%d", message->nbody); |
||||
|
httpHeaderAdd(&(message->header), |
||||
|
new(HttpHeader, "Content-Length", buffer)); |
||||
|
|
||||
|
t = time(NULL); |
||||
|
tmp = localtime(&t); |
||||
|
strftime(buffer, sizeof(buffer), "%a, %d %b %Y %T %Z", tmp); |
||||
|
httpHeaderAdd(&(message->header), |
||||
|
new(HttpHeader, "Date", buffer)); |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
// vim: set ts=4 sw=4: |
||||
@ -0,0 +1,58 @@ |
|||||
|
#include <stdlib.h> |
||||
|
#include <string.h> |
||||
|
#include <stdio.h> |
||||
|
#include <time.h> |
||||
|
|
||||
|
#include "class.h" |
||||
|
#include "interface/class.h" |
||||
|
|
||||
|
#include "http/response.h" |
||||
|
#include "http/message.h" |
||||
|
#include "http/header.h" |
||||
|
|
||||
|
|
||||
|
#define RESP_DATA "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n" \ |
||||
|
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n" \ |
||||
|
" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n" \ |
||||
|
"<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n" \ |
||||
|
"<head><title>200 - OK</title></head>" \ |
||||
|
"<body><h1>200 - OK</h1><img src=\"/image/\" /></body>" \ |
||||
|
"</html>" |
||||
|
|
||||
|
|
||||
|
HttpResponse |
||||
|
httpResponseMe() |
||||
|
{ |
||||
|
time_t t; |
||||
|
struct tm * tmp; |
||||
|
char buffer[200]; |
||||
|
HttpResponse response; |
||||
|
HttpMessage message; |
||||
|
|
||||
|
response = new(HttpResponse, "HTTP/1.1", 200, "OK"); |
||||
|
message = (HttpMessage)response; |
||||
|
|
||||
|
httpHeaderAdd(&(message->header), |
||||
|
new(HttpHeader, "Content-Type", "text/html")); |
||||
|
httpHeaderAdd(&(message->header), |
||||
|
new(HttpHeader, "Server", "testserver")); |
||||
|
|
||||
|
message->type = HTTP_MESSAGE_BUFFERED; |
||||
|
message->nbody = sizeof(RESP_DATA) - 1; |
||||
|
message->body = calloc(1, sizeof(RESP_DATA)); |
||||
|
strcpy(message->body, RESP_DATA); |
||||
|
|
||||
|
sprintf(buffer, "%d", message->nbody); |
||||
|
httpHeaderAdd(&(message->header), |
||||
|
new(HttpHeader, "Content-Length", buffer)); |
||||
|
|
||||
|
t = time(NULL); |
||||
|
tmp = localtime(&t); |
||||
|
strftime(buffer, sizeof(buffer), "%a, %d %b %Y %T %Z", tmp); |
||||
|
httpHeaderAdd(&(message->header), |
||||
|
new(HttpHeader, "Date", buffer)); |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
|
||||
|
// vim: set ts=4 sw=4: |
||||
@ -0,0 +1,29 @@ |
|||||
|
#include "class.h" |
||||
|
#include "interface/http_intro.h" |
||||
|
|
||||
|
const struct interface i_HttpIntro = { |
||||
|
"httpIntro", |
||||
|
2 |
||||
|
}; |
||||
|
|
||||
|
size_t |
||||
|
httpIntroSizeGet(void * object) |
||||
|
{ |
||||
|
size_t ret; |
||||
|
|
||||
|
RETCALL(object, HttpIntro, sizeGet, ret); |
||||
|
|
||||
|
return ret; |
||||
|
} |
||||
|
|
||||
|
char * |
||||
|
httpIntroToString(void * object, char * string) |
||||
|
{ |
||||
|
char * ret; |
||||
|
|
||||
|
RETCALL(object, HttpIntro, toString, ret, string); |
||||
|
|
||||
|
return ret; |
||||
|
} |
||||
|
|
||||
|
// vim: set ts=4 sw=4: |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue