13 changed files with 353 additions and 185 deletions
-
4include/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
-
153src/http/response/writer/write.c
-
29src/interface/http_intro.c
-
79src/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