Commit 3d735c7fc7ce1a952b70c7c734875bd92015085d
1 parent
6c888a8c
made a first cruel handling for keep-alive and non keep-alive requests. @TODO: this MUST BE cleaned
Showing
4 changed files
with
45 additions
and
6 deletions
1 | +2012-02-10 09:52:27 +0100 Georg Hopp | ||
2 | + | ||
3 | + * made a first cruel handling for keep-alive and non keep-alive requests. @TODO: this MUST BE cleaned (HEAD, master) | ||
4 | + | ||
5 | +2012-02-10 08:14:31 +0100 Georg Hopp | ||
6 | + | ||
7 | + * now only use keep-alive.... (origin/master, origin/HEAD) | ||
8 | + | ||
1 | 2012-02-10 06:36:43 +0100 Georg Hopp | 9 | 2012-02-10 06:36:43 +0100 Georg Hopp |
2 | 10 | ||
3 | - * moved request_parser.h and request_queue.h in separeate request subfolder (HEAD, master) | 11 | + * moved request_parser.h and request_queue.h in separeate request subfolder |
4 | 12 | ||
5 | 2012-02-10 06:22:39 +0100 Georg Hopp | 13 | 2012-02-10 06:22:39 +0100 Georg Hopp |
6 | 14 | ||
@@ -20,7 +28,7 @@ | @@ -20,7 +28,7 @@ | ||
20 | 28 | ||
21 | 2012-02-09 22:34:32 +0100 Georg Hopp | 29 | 2012-02-09 22:34:32 +0100 Georg Hopp |
22 | 30 | ||
23 | - * start split of request parser (origin/master, origin/HEAD) | 31 | + * start split of request parser |
24 | 32 | ||
25 | 2012-02-09 11:44:17 +0100 Georg Hopp | 33 | 2012-02-09 11:44:17 +0100 Georg Hopp |
26 | 34 |
@@ -3,6 +3,7 @@ | @@ -3,6 +3,7 @@ | ||
3 | #include <stdlib.h> /* for exit */ | 3 | #include <stdlib.h> /* for exit */ |
4 | #include <errno.h> /* for errno */ | 4 | #include <errno.h> /* for errno */ |
5 | #include <unistd.h> | 5 | #include <unistd.h> |
6 | +#include <ctype.h> | ||
6 | #include <time.h> | 7 | #include <time.h> |
7 | 8 | ||
8 | #include "server.h" | 9 | #include "server.h" |
@@ -17,6 +18,7 @@ | @@ -17,6 +18,7 @@ | ||
17 | #include "http/request.h" | 18 | #include "http/request.h" |
18 | #include "http/request/parser.h" | 19 | #include "http/request/parser.h" |
19 | #include "http/request/queue.h" | 20 | #include "http/request/queue.h" |
21 | +#include "http/header.h" | ||
20 | //* until here | 22 | //* until here |
21 | 23 | ||
22 | #undef MAX | 24 | #undef MAX |
@@ -79,16 +81,35 @@ serverRun(Server this) | @@ -79,16 +81,35 @@ serverRun(Server this) | ||
79 | 81 | ||
80 | for (j=0; j<queue->nrequests; j++) { | 82 | for (j=0; j<queue->nrequests; j++) { |
81 | HttpRequest request = queue->requests[j]; | 83 | HttpRequest request = queue->requests[j]; |
84 | + char * header; | ||
85 | + char * header_ptr; | ||
82 | 86 | ||
83 | //if (NULL != request->body) { | 87 | //if (NULL != request->body) { |
84 | // puts("==REQUEST BODY=="); | 88 | // puts("==REQUEST BODY=="); |
85 | // puts(request->body); | 89 | // puts(request->body); |
86 | //} | 90 | //} |
87 | 91 | ||
92 | + header = httpHeaderGet( | ||
93 | + request->header, | ||
94 | + request->nheader, | ||
95 | + "connection"); | ||
96 | + | ||
97 | + if (NULL != header) { | ||
98 | + for (header_ptr = header; | ||
99 | + 0 != *header_ptr; | ||
100 | + header_ptr++) { | ||
101 | + *header_ptr = tolower(*header_ptr); | ||
102 | + } | ||
103 | + | ||
104 | + if (0 == strcmp(header, "keep-alive")) { | ||
105 | + (this->conns)[fd].keep_alive = 1; | ||
106 | + } | ||
107 | + } | ||
88 | /** | 108 | /** |
89 | * @TODO: for now simply remove request and send not found. | 109 | * @TODO: for now simply remove request and send not found. |
90 | * Make this sane. | 110 | * Make this sane. |
91 | */ | 111 | */ |
112 | + | ||
92 | delete(&request); | 113 | delete(&request); |
93 | 114 | ||
94 | /** | 115 | /** |
@@ -99,7 +120,6 @@ serverRun(Server this) | @@ -99,7 +120,6 @@ serverRun(Server this) | ||
99 | char timestr[200]; | 120 | char timestr[200]; |
100 | 121 | ||
101 | #define RESP_HEAD "HTTP/1.1 404 Not Found\r\n" \ | 122 | #define RESP_HEAD "HTTP/1.1 404 Not Found\r\n" \ |
102 | - "Connection: Keep-Alive\r\n" \ | ||
103 | "Content-Type: text/html\r\n" \ | 123 | "Content-Type: text/html\r\n" \ |
104 | "Content-Length: %lu\r\n" \ | 124 | "Content-Length: %lu\r\n" \ |
105 | "Date: %s\r\n" \ | 125 | "Date: %s\r\n" \ |
@@ -121,7 +141,12 @@ serverRun(Server this) | @@ -121,7 +141,12 @@ serverRun(Server this) | ||
121 | * @TODO: just to send an answer and be able to make some | 141 | * @TODO: just to send an answer and be able to make some |
122 | * apache benchs i do it here...this definetly MUST BE moved | 142 | * apache benchs i do it here...this definetly MUST BE moved |
123 | */ | 143 | */ |
124 | - sprintf((this->conns)[fd].wbuf, RESP_HEAD "\r\n" RESP_DATA, sizeof(RESP_DATA) - 1, timestr); | 144 | + if ((this->conns)[fd].keep_alive) { |
145 | + sprintf((this->conns)[fd].wbuf, RESP_HEAD "Connection: Keep-Alive\r\n\r\n" RESP_DATA, sizeof(RESP_DATA) - 1, timestr); | ||
146 | + } | ||
147 | + else { | ||
148 | + sprintf((this->conns)[fd].wbuf, RESP_HEAD "Connection: close\r\n\r\n" RESP_DATA, sizeof(RESP_DATA) - 1, timestr); | ||
149 | + } | ||
125 | (this->fds)[i].events |= POLLOUT; | 150 | (this->fds)[i].events |= POLLOUT; |
126 | } | 151 | } |
127 | 152 | ||
@@ -148,8 +173,12 @@ serverRun(Server this) | @@ -148,8 +173,12 @@ serverRun(Server this) | ||
148 | "write error, closing connection"); | 173 | "write error, closing connection"); |
149 | } | 174 | } |
150 | 175 | ||
151 | - //serverCloseConn(this, i); | ||
152 | - (this->fds)[i].events &= ~POLLOUT; | 176 | + if ((this->conns)[fd].keep_alive) { |
177 | + (this->fds)[i].events &= ~POLLOUT; | ||
178 | + } | ||
179 | + else { | ||
180 | + serverCloseConn(this, i); | ||
181 | + } | ||
153 | } | 182 | } |
154 | else { | 183 | else { |
155 | memmove((this->conns)[fd].wbuf, | 184 | memmove((this->conns)[fd].wbuf, |
Please
register
or
login
to post a comment