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