diff --git a/docs/html/logger_8h_source.html b/docs/html/logger_8h_source.html
index daa6efc..c678614 100644
--- a/docs/html/logger_8h_source.html
+++ b/docs/html/logger_8h_source.html
@@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/docs/html/navtree.js b/docs/html/navtree.js
index d9cb558..9530369 100644
--- a/docs/html/navtree.js
+++ b/docs/html/navtree.js
@@ -3,9 +3,11 @@ var NAVTREE =
[ "server", "index.html", [
[ "Class List", "annotated.html", [
[ "class", "structclass.html", null ],
+ [ "HttpHeader", "structHttpHeader.html", null ],
[ "HttpRequest", "structHttpRequest.html", null ],
[ "HttpRequestParser", "structHttpRequestParser.html", null ],
[ "HttpRequestQueue", "structHttpRequestQueue.html", null ],
+ [ "HttpResponse", "structHttpResponse.html", null ],
[ "i_Class", "structi__Class.html", null ],
[ "i_Logger", "structi__Logger.html", null ],
[ "i_StreamReader", "structi__StreamReader.html", null ],
@@ -20,15 +22,18 @@ var NAVTREE =
[ "Class Index", "classes.html", null ],
[ "Class Members", "functions.html", null ],
[ "File List", "files.html", [
+ [ "config.h", "config_8h.html", null ],
[ "include/class.h", "class_8h.html", null ],
[ "include/interface.h", "interface_8h.html", null ],
[ "include/logger.h", "logger_8h.html", null ],
[ "include/server.h", "server_8h.html", null ],
[ "include/signalHandling.h", "signalHandling_8h.html", null ],
[ "include/socket.h", "socket_8h.html", null ],
+ [ "include/http/header.h", "header_8h.html", null ],
[ "include/http/request.h", "request_8h.html", null ],
[ "include/http/request_parser.h", "request__parser_8h.html", null ],
[ "include/http/request_queue.h", "request__queue_8h.html", null ],
+ [ "include/http/response.h", "response_8h.html", null ],
[ "include/interface/class.h", "interface_2class_8h.html", null ],
[ "include/interface/logger.h", "interface_2logger_8h.html", null ],
[ "include/interface/stream_reader.h", "stream__reader_8h.html", null ],
@@ -40,9 +45,16 @@ var NAVTREE =
[ "src/signalHandling.c", "signalHandling_8c.html", null ],
[ "src/socket.c", "socket_8c.html", null ],
[ "src/testserver.c", "testserver_8c.html", null ],
+ [ "src/http/header.c", "header_8c.html", null ],
[ "src/http/request.c", "request_8c.html", null ],
- [ "src/http/request_parser.c", "request__parser_8c.html", null ],
- [ "src/http/request_queue.c", "request__queue_8c.html", null ],
+ [ "src/http/header/get.c", "get_8c.html", null ],
+ [ "src/http/header/sort.c", "sort_8c.html", null ],
+ [ "src/http/request/header_get.c", "header__get_8c.html", null ],
+ [ "src/http/request/parser.c", "parser_8c.html", null ],
+ [ "src/http/request/queue.c", "queue_8c.html", null ],
+ [ "src/http/request/parser/get_header.c", "get__header_8c.html", null ],
+ [ "src/http/request/parser/get_request_line.c", "get__request__line_8c.html", null ],
+ [ "src/http/request/parser/parse.c", "parse_8c.html", null ],
[ "src/interface/class.c", "interface_2class_8c.html", null ],
[ "src/interface/logger.c", "interface_2logger_8c.html", null ],
[ "src/interface/stream_reader.c", "stream__reader_8c.html", null ],
diff --git a/docs/html/parse_8c.html b/docs/html/parse_8c.html
new file mode 100644
index 0000000..8ad773f
--- /dev/null
+++ b/docs/html/parse_8c.html
@@ -0,0 +1,353 @@
+
+
+
+
+
server: src/http/request/parser/parse.c File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ server 0.0.1
+ basicserverinfrastructure
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <ctype.h>
+#include "http/request_parser.h"
+#include "interface/class.h"
+
+
Go to the source code of this file.
+
+
Define Documentation
+
+
+
+
+
+ #define REMAINS
+ (
+
+ pars,
+
+
+
+
+
+ done
+
+
+
+ )
+ ((pars)->buffer_used - ((done) - (pars)->buffer))
+
+
+
+
+
+
Definition at line 10 of file parse.c .
+
+
+
+
Function Documentation
+
+
+
+
+
+ void httpRequestParserGetRequestLine
+ (
+ HttpRequest
+ ,
+
+
+
+
+ char *
+
+
+
+
+ )
+
+
+
+
+
+
+
Definition at line 7 of file get_request_line.c .
+
{
+ char * method, * uri, * version;
+
+ method = line;
+
+ uri = strchr(line, ' ' );
+ *uri++ = 0;
+ for (; *uri == ' ' && *uri != 0; uri++);
+
+ version = strchr(uri, ' ' );
+ *version++ = 0;
+ for (; *version == ' ' && *version != 0; version++);
+
+ request->method = malloc(strlen(method) + 1);
+ strcpy(request->method, method);
+ request->uri = malloc(strlen(uri) + 1);
+ strcpy(request->uri, uri);
+ request->version = malloc(strlen(version) + 1);
+ strcpy(request->version, method);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
enqueue current request
+
remove processed stuff from input buffer.
+
dont continue loop if input buffer is empty
+
prepare for next request
+
+
+
Definition at line 43 of file parse.c .
+
{
+ static HttpRequest request = NULL;
+ static char * data;
+ char * line;
+ int cont = 1;
+
+ while (cont) {
+ switch (this->state) {
+ case HTTP_REQUEST_GARBAGE :
+ data = this->buffer;
+ httpRequestSkip(&data);
+ request = new (HttpRequest );
+
+ this->state = HTTP_REQUEST_START ;
+ break ;
+
+ case HTTP_REQUEST_START :
+ if (NULL == (line = httpRequestParserGetLine(&data))) {
+ cont = 0;
+ break ;
+ }
+
+ httpRequestParserGetRequestLine (request, line);
+
+ this->state = HTTP_REQUEST_REQUEST_LINE_DONE ;
+ break ;
+
+ case HTTP_REQUEST_REQUEST_LINE_DONE :
+ if (NULL == (line = httpRequestParserGetLine(&data))) {
+ cont = 0;
+ break ;
+ }
+
+ if (0 == strlen(line)) {
+ this->state = HTTP_REQUEST_HEADERS_DONE ;
+ break ;
+ }
+
+ httpRequestParserGetHeader (request, line);
+ break ;
+
+ case HTTP_REQUEST_HEADERS_DONE :
+ httpHeaderSort (request->header , request->nheader );
+
+ {
+ char * nbody;
+
+ if (0 == request->nbody ) {
+ nbody = httpHeaderGet (
+ request->header ,
+ request->nheader ,
+ "Content-Length" );
+
+ if (NULL == nbody) {
+ this->state = HTTP_REQUEST_DONE ;
+ break ;
+ }
+ else {
+ request->nbody = atoi(nbody);
+ }
+ }
+
+ if (REMAINS (this , data) >= request->nbody ) {
+ request->body = calloc(1, request->nbody + 1);
+ memcpy(request->body , data, request->nbody );
+ data += request->nbody ;
+ this->state = HTTP_REQUEST_DONE ;
+ }
+ }
+
+ break ;
+
+ case HTTP_REQUEST_DONE :
+ this->request_queue->requests[(this->request_queue->nrequests)++] =
+ request;
+
+ memmove(this->buffer, data, REMAINS (this , data));
+
+ this->buffer_used -= data - this->buffer;
+
+ if (0 == this->buffer_used) {
+ cont = 0;
+ }
+
+ this->state = HTTP_REQUEST_GARBAGE ;
+
+ break ;
+
+ default :
+ break ;
+ }
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/html/parse_8c__incl.map b/docs/html/parse_8c__incl.map
new file mode 100644
index 0000000..8be6a30
--- /dev/null
+++ b/docs/html/parse_8c__incl.map
@@ -0,0 +1,2 @@
+
+
diff --git a/docs/html/parse_8c__incl.md5 b/docs/html/parse_8c__incl.md5
new file mode 100644
index 0000000..60c81a0
--- /dev/null
+++ b/docs/html/parse_8c__incl.md5
@@ -0,0 +1 @@
+50bccfb87ca517a880afde699909857f
\ No newline at end of file
diff --git a/docs/html/parse_8c__incl.png b/docs/html/parse_8c__incl.png
new file mode 100644
index 0000000000000000000000000000000000000000..a1ae072a4fb6ab43741f0ed764e114479df3c54a
GIT binary patch
literal 3001
zcmV;q3r6&bP)
A#!cNZ5IkB^VPzrWMd
z(*OVf|NsB>yEVH20004WQchCYLsBA+}ySt7=B9TZW5{X12kw_#GiA36s*pc+@Vv?$e&BqZj
zc?=Pgq`irlB<)SaBx!FVCP{k}F-h8+!c0#0nN8k9Ns5n8b=D##kD)M=kC$R{dWxUr
zp-4f$`1tt9m59k>D9q$-)=V<-vpf_j=ocR!AGs1Sc?{W{y`Jp(nAq$2n#bq!KFO;n
zdpy}V&-@VonZ?nkxVG{`I+7peLAMuRD-ncNX(+ntc+vNDW8$Ff4iOj+hSOaS0+G;+
zkzgzZITDkHlg%W1Ob<43xcGEW(`}p|90GQmd81k<`O)bmA$-gbc^8on&N7EaGYPF=
z2#`X&?91*GIP&fgf$_41N9sW!5}F|rjR8shkeED_EG8#5PU2twk64kW$1Ij1_LA3c
z&EzBaSGJ$Vn_`a;o??WKpJb#S1R~{AjD$d$F6Kx~9!`sE
z_noguk|5kf-teK#Btmw>$N23B5pP|)p%Dxr?q>SFZnrx);*cs{Z9MfL5DCo?iN>?Z
zk(fN37EFq@?tjt3_iyuS6qoKdCSeH^ha@Xv;hH9UoqRFX3Wky?h=;yr<;5WYhfpHzFbyS#%~GYMP0`=qYPVuN=dpD)}`@(Vswt=4`L;$>fc
z%QBA)mrvYJLcF=i!yp(5OhP0Y&kvO&F?l@MO!AxOClW9|`TfOhHcZYpCVn_{@|O5E
ztM_>B@;Q&c$(t4Kz;vrLgsw9Ffw9lW{fW0e5CQS#A`gKW3FBZS7|V=gj>P2gl=#`=
z6o?NUi#eVixDqjW3=xy0y(yK+z-Q5$OvZkWo%?||F?kHp_ku`!6ER8Jn}|u$-b752
z_9kMIv^Noxq`j%^4^RC3te&rrZ#;Lq#2s?z+r=b(T|YnJ=iU0btHs^ZJ`^}eB3XJv
z#eq&VlR+vSW06Q}y+h)n#syMnLEIRTxFmTMwIX^N!^`2;xWpyNAr}{JRNVY*tcDT8
z6PF|-HxNEZGMJ2^64D?rN!}X`FCD4vn}%=c5SM>hegOP8(tfk;(IQfUKmzk`DlqS%
z_Z2ga#0=?*B{2V#Lh~I$A$WfsH*idpi6$=phQbpazJt!~7(2Q%p13@?w%)`J9t}I!
zNx|8HxIC=3=635Xos!PWJmO<@7vl1G+MLwQ<68qHC6f?rIuV!$()MIVeA-fYJas%@
zKjQKLikQWSd9D$WI;OWLarv7SHGOqLQlTuMlDPb}ikr8%ph_|8p-aFbE`OUMCoD25
zZpf&p_4q|x(T&gVQS`SS;=*D_jf~4mB4j{Z?p?7{6#vDD%5m?B6f;F!?pd*O6F-Lu
zU!I7LeCt^ODdKXMik_8}+4}^OU4?5nm=Kq{Qo^?sQ(POxI(pZ^iEe!MqWF18{c=vD
zSZDugED@LAR?;_S6RjIYy9_FlL|lGNNtI9ku2{opw?$Qs=tBN^rBytAdfFoF@u&?E
zarrqVe{VZ|gb(y^nbb#!7R(PQxx_hB@+BslP}$Lf*;E;|&H6a{Lw%e+jp!jRTPUZf
zdEf2M=u;2MhJSpGxU8zIYG%&BmznHZVo6+9Qf3)*f72kZTU99AUBkhfz${X3`Le6N
z4%~mS|60<|w;v1;6-`+p#*7Z5K=MCoa>JU$D$;z3f%UWaUY2&kS)Ht%6Dw{mN?5
z@5;28;7<@kTyCqRL}kCOTKxN4O+JgMZs{C_!1OBXeMr-}XyB5GDeNA$ZeZ#jh`@YP
zUP)B13aec1td#YRvA3SI7-2CMfvJ@LwvX&sSja-C+A`VMr}wEXCV^SH5iI|5s5lc2`pcg>swLOm^_X{p=Fv80?@c=;EZRkWh)qZ(Br;@mVTX;~ny{
zZl6;f4r*Pyci<5<#^sqxJVfpxnp|b7?)vHgn3b+3{&zG6_dIFVI`Fv{9UB#uYlgs?;P<}rHOLM6_
z3xB>LchS~uQf_OW@2iSfoxSk&CQE%A=$*+`
z>z9%#&0zHc(@+wVm3m)qxvF6&zsRAa2@xpw#hDM6d$)hYL-wTRQ
zJ+CVvbsjaDWcmR-ti@y~#X3wn1}kSWn05)1Y-N554U~|RM>$M-hYV$KiinA4@_J#H
zf&bTa=LR(%#;PX5m0$8?d6YZUMw5%JW{PwLp!@a2WCer+
z)ByWHQ$niC^5RrsLB&I1_!LiJNUW32P+YoYi<}J%fs9mM&TKqPvZ0qCa?hdX28ziO
ze*y;V)D26-W0=&w-0CV%bQBG|>{l_2$2o~fX$W-kN1b&N*?FHYeSbOw=K>L3i1R28
zBxY?hDLbjumFqA-dC+~(QvfG}W9m|x3P5*N0q%e`z&_BFkm`y_m?|p=VJI`eLr^E3
zAwLgOISj#!FfVsDZYFzn?x6ybX0uNAa!RDtb-nCHfunq-l{itb!C^ekNleP#GFdT}
zeG=Jui~ju}tIro2IT=uhOD`6H#H?*5RkEfg+;!~XA-bC>fRlk%Q%X|-=q`>6(_YnE
z^-){D=u}rsLbpW@@Dzu{I_av6y;V63QE8v`_`wNTTw_Ok3CQTHecx^E%hK0L?W?TN
zhADiU&Ph!6YMSL(opln~d7Et?zj&L8;Mq$hX1&@^+DwA$2_K@nnF2T&98;Ilu7LRG
zdOD3@s%n6JRB&{vD<*r*B<7%#h9Q-y%J5`Y4nr^_%*&mPk4f>${4cmp<}s;!S4=Ke
zvTP==OC~#YVGO%Rtdrd8dWPy>hLc&6#EQ`OiCG7jl&-^o!-U+D|S{RP85+l#;EA
zHpsWi%ru+*WY|4&KRLpbUgYHn3o(kF)99&329wftRM%v5KdUK#6I5gR_LKa^qdPNP
zL2=&(ePk(|B}iowb1;d^A+b*CDBSJfz$#?9pWK`fJ1=oV$9GN)ZdtGPefPQ3SKD+Z
zweN~a80Mm%rZdUU__AClVJzz;Jnm8V-F%BKo!~8E{RYGc|8v$Onn`JV(r;^=I<<`%
z)y=(p*8opYwVEkHsigR=?l4}!0c!w#%+{uaNjW6sV80c>hg5aKqbFTCxX*+T$O!Y=
zoRHE_l1e@gxr(F)@B4CfK5D6Aeil5~%Tuy(%7;%;$Kpf0N_c;=y>`OnS-zJxw6NY(
zl6fze9b&SjcEY4s<1fxn8q2M>lwywW&c=Npoy=swH2@q#m3&H0Ozz3Lp?NBkUlcL9
zCu?F-h?v}yH8CkfOzz2=m=q!=_hd~>3K5fgvL+^lh{-)!6O%%_WwPF%)L0HtK@F{U
v`L|g6E&;
literal 0
HcmV?d00001
diff --git a/docs/html/parse_8c_a187bf52da83090068bafea54589f6f69_icgraph.map b/docs/html/parse_8c_a187bf52da83090068bafea54589f6f69_icgraph.map
new file mode 100644
index 0000000..77a4b0c
--- /dev/null
+++ b/docs/html/parse_8c_a187bf52da83090068bafea54589f6f69_icgraph.map
@@ -0,0 +1,3 @@
+
+
+
diff --git a/docs/html/parse_8c_a187bf52da83090068bafea54589f6f69_icgraph.md5 b/docs/html/parse_8c_a187bf52da83090068bafea54589f6f69_icgraph.md5
new file mode 100644
index 0000000..9616c5b
--- /dev/null
+++ b/docs/html/parse_8c_a187bf52da83090068bafea54589f6f69_icgraph.md5
@@ -0,0 +1 @@
+99e054c8a121835084e75516f7b257cf
\ No newline at end of file
diff --git a/docs/html/parse_8c_a187bf52da83090068bafea54589f6f69_icgraph.png b/docs/html/parse_8c_a187bf52da83090068bafea54589f6f69_icgraph.png
new file mode 100644
index 0000000000000000000000000000000000000000..e377d4c19d45d1c0f021fe4fcbc32ee200823e5c
GIT binary patch
literal 1179
zcmV;M1Z4Y(P)%c00960
z|FG-Y`v3p{0d!JMQvg8b*k%9#1Q1C?K~#90?OBVGqaYCU4G3cK|37>4K)}Q#U{ZBi
zLsyx~4n5#@GcxWrO+`gTMMXtL#pU6C16Nfgx#jg2P;6u&|9_zxnJ>^+qZ*kn&{v}x
znJ>^+qZ*kn&{v}xnJ>^+qZ*kn&{yMukBJ!c(RU?NQpVwACukcx`Fbyj;VVRywN{!n3zUc%YMx(nrBX8Po{(F(8sD{kMof)t
z+cJSjR59`uqMZ;zkGFZpphV2*`u^q0d9;K3On=?5x6}PiQF~mi_tLtU@ro);mz5&v?0V9_`>h(_eQnPOrupx~x;i$ek_P7})s0nw5)w
zb5udjLW#i)1&>a>(nN}fJ((h_p$Dk7TQtorU5y6e{&CDx4vcIWWdcp38=BFLbP3mu
zqu%K~jN{NW!0I~}{pM%~ITIxY>$~3J2u{@TuqRXGH7(1?d0m{{G_!EbDNqE3vQ#%(
zT085-ED(>gVWFmf-T!lP?+xCrjAV$xwM$^#!ZoEdrj`(cgKz-n;7XSdn23VkbKL?ct*0y
z8c!}gj2)kmQ=?<__Kc*Qt{L1`rF{4?d1vHfTE3AhN;{)UOYB%xid1DdBVu1hft56OtEX_
zPfdXVx>itoa3fWuk3ugCohT)5r3S6%q(^qh4>NgRkq>D(M(*+SMey}o;wSO;YH$2O
zV2`J7c-gOiAHz=@St!sRf6_?#aOj7P)Q?7*uQl>Y__6
+
+
+
+
+
diff --git a/docs/html/parse_8c_a9bb74bc564fe961a7ab5459ef5806de6_cgraph.md5 b/docs/html/parse_8c_a9bb74bc564fe961a7ab5459ef5806de6_cgraph.md5
new file mode 100644
index 0000000..6c34dcf
--- /dev/null
+++ b/docs/html/parse_8c_a9bb74bc564fe961a7ab5459ef5806de6_cgraph.md5
@@ -0,0 +1 @@
+b26b7c22015997556a16c3a3d9590d98
\ No newline at end of file
diff --git a/docs/html/parse_8c_a9bb74bc564fe961a7ab5459ef5806de6_cgraph.png b/docs/html/parse_8c_a9bb74bc564fe961a7ab5459ef5806de6_cgraph.png
new file mode 100644
index 0000000000000000000000000000000000000000..f31910478aabed4c23f78961b7c18693a76f139e
GIT binary patch
literal 2558
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
literal 0
HcmV?d00001
diff --git a/docs/html/parse_8c_source.html b/docs/html/parse_8c_source.html
new file mode 100644
index 0000000..45be40f
--- /dev/null
+++ b/docs/html/parse_8c_source.html
@@ -0,0 +1,248 @@
+
+
+
+
+server: src/http/request/parser/parse.c Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ server 0.0.1
+ basicserverinfrastructure
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the documentation of this file. 00001 #include <stdlib.h>
+ 00002 #include <string.h>
+ 00003 #include <unistd.h>
+ 00004 #include <ctype.h>
+ 00005
+ 00006 #include "http/request_parser.h"
+ 00007 #include "interface/class.h"
+ 00008
+ 00009
+00010 #define REMAINS(pars,done) \
+ 00011 ((pars)->buffer_used - ((done) - (pars)->buffer))
+ 00012
+ 00013
+ 00014 static
+ 00015 inline
+ 00016 char *
+ 00017 httpRequestParserGetLine(char ** data)
+ 00018 {
+ 00019 char * line_end = strstr(*data, "\r\n" );
+ 00020 char * ret = *data;
+ 00021
+ 00022 if (NULL == line_end) {
+ 00023 return NULL;
+ 00024 }
+ 00025
+ 00026 *line_end = 0;
+ 00027 *data = line_end + 2;
+ 00028
+ 00029 return ret;
+ 00030 }
+ 00031
+ 00032 static
+ 00033 inline
+ 00034 void
+ 00035 httpRequestSkip(char ** data)
+ 00036 {
+ 00037 for (; 0 != **data && ! isalpha(**data); (*data)++);
+ 00038 }
+ 00039
+ 00040 void httpRequestParserGetRequestLine (HttpRequest , char *);
+ 00041
+ 00042 void
+00043 httpRequestParserParse (HttpRequestParser this )
+ 00044 {
+ 00045 static HttpRequest request = NULL;
+ 00046 static char * data;
+ 00047 char * line;
+ 00048 int cont = 1;
+ 00049
+ 00050 while (cont) {
+ 00051 switch (this->state) {
+ 00052 case HTTP_REQUEST_GARBAGE :
+ 00053 data = this->buffer;
+ 00054 httpRequestSkip(&data);
+ 00055 request = new (HttpRequest );
+ 00056
+ 00057 this->state = HTTP_REQUEST_START ;
+ 00058 break ;
+ 00059
+ 00060 case HTTP_REQUEST_START :
+ 00061 if (NULL == (line = httpRequestParserGetLine(&data))) {
+ 00062 cont = 0;
+ 00063 break ;
+ 00064 }
+ 00065
+ 00066 httpRequestParserGetRequestLine (request, line);
+ 00067
+ 00068 this->state = HTTP_REQUEST_REQUEST_LINE_DONE ;
+ 00069 break ;
+ 00070
+ 00071 case HTTP_REQUEST_REQUEST_LINE_DONE :
+ 00072 if (NULL == (line = httpRequestParserGetLine(&data))) {
+ 00073 cont = 0;
+ 00074 break ;
+ 00075 }
+ 00076
+ 00077 if (0 == strlen(line)) {
+ 00078 this->state = HTTP_REQUEST_HEADERS_DONE ;
+ 00079 break ;
+ 00080 }
+ 00081
+ 00082 httpRequestParserGetHeader (request, line);
+ 00083 break ;
+ 00084
+ 00085 case HTTP_REQUEST_HEADERS_DONE :
+ 00086 httpHeaderSort (request->header , request->nheader );
+ 00087
+ 00088 {
+ 00089 char * nbody;
+ 00090
+ 00091 if (0 == request->nbody ) {
+ 00092 nbody = httpHeaderGet (
+ 00093 request->header ,
+ 00094 request->nheader ,
+ 00095 "Content-Length" );
+ 00096
+ 00097 if (NULL == nbody) {
+ 00098 this->state = HTTP_REQUEST_DONE ;
+ 00099 break ;
+ 00100 }
+ 00101 else {
+ 00102 request->nbody = atoi(nbody);
+ 00103 }
+ 00104 }
+ 00105
+ 00106 if (REMAINS (this , data) >= request->nbody ) {
+ 00107 request->body = calloc(1, request->nbody + 1);
+ 00108 memcpy(request->body , data, request->nbody );
+ 00109 data += request->nbody ;
+ 00110 this->state = HTTP_REQUEST_DONE ;
+ 00111 }
+ 00112 }
+ 00113
+ 00114 break ;
+ 00115
+ 00116 case HTTP_REQUEST_DONE :
+ 00120 this->request_queue->requests[(this->request_queue->nrequests)++] =
+ 00121 request;
+ 00122
+ 00126 memmove(this->buffer, data, REMAINS (this , data));
+ 00127
+ 00128 this->buffer_used -= data - this->buffer;
+ 00129
+ 00133 if (0 == this->buffer_used) {
+ 00134 cont = 0;
+ 00135 }
+ 00136
+ 00140 this->state = HTTP_REQUEST_GARBAGE ;
+ 00141
+ 00142 break ;
+ 00143
+ 00144 default :
+ 00145 break ;
+ 00146 }
+ 00147 }
+ 00148 }
+ 00149
+ 00150
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/html/parser_8c.html b/docs/html/parser_8c.html
new file mode 100644
index 0000000..d1bde55
--- /dev/null
+++ b/docs/html/parser_8c.html
@@ -0,0 +1,371 @@
+
+
+
+
+server: src/http/request/parser.c File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ server 0.0.1
+ basicserverinfrastructure
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <string.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include "class.h"
+#include "http/request_parser.h"
+#include "interface/class.h"
+#include "interface/stream_reader.h"
+#include "http/request.h"
+#include "http/request_queue.h"
+
+
Go to the source code of this file.
+
+
Function Documentation
+
+
+
+
+
+ CREATE_CLASS
+ (
+ HttpRequestParser
+ ,
+
+
+
+
+ NULL
+ ,
+
+
+
+
+ IFACE(Class)
+ ,
+
+
+
+
+ IFACE(StreamReader)
+
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
enqueue current request
+
remove processed stuff from input buffer.
+
dont continue loop if input buffer is empty
+
prepare for next request
+
+
+
Definition at line 43 of file parse.c .
+
{
+ static HttpRequest request = NULL;
+ static char * data;
+ char * line;
+ int cont = 1;
+
+ while (cont) {
+ switch (this->state) {
+ case HTTP_REQUEST_GARBAGE :
+ data = this->buffer;
+ httpRequestSkip(&data);
+ request = new (HttpRequest );
+
+ this->state = HTTP_REQUEST_START ;
+ break ;
+
+ case HTTP_REQUEST_START :
+ if (NULL == (line = httpRequestParserGetLine(&data))) {
+ cont = 0;
+ break ;
+ }
+
+ httpRequestParserGetRequestLine (request, line);
+
+ this->state = HTTP_REQUEST_REQUEST_LINE_DONE ;
+ break ;
+
+ case HTTP_REQUEST_REQUEST_LINE_DONE :
+ if (NULL == (line = httpRequestParserGetLine(&data))) {
+ cont = 0;
+ break ;
+ }
+
+ if (0 == strlen(line)) {
+ this->state = HTTP_REQUEST_HEADERS_DONE ;
+ break ;
+ }
+
+ httpRequestParserGetHeader (request, line);
+ break ;
+
+ case HTTP_REQUEST_HEADERS_DONE :
+ httpHeaderSort (request->header , request->nheader );
+
+ {
+ char * nbody;
+
+ if (0 == request->nbody ) {
+ nbody = httpHeaderGet (
+ request->header ,
+ request->nheader ,
+ "Content-Length" );
+
+ if (NULL == nbody) {
+ this->state = HTTP_REQUEST_DONE ;
+ break ;
+ }
+ else {
+ request->nbody = atoi(nbody);
+ }
+ }
+
+ if (REMAINS (this , data) >= request->nbody ) {
+ request->body = calloc(1, request->nbody + 1);
+ memcpy(request->body , data, request->nbody );
+ data += request->nbody ;
+ this->state = HTTP_REQUEST_DONE ;
+ }
+ }
+
+ break ;
+
+ case HTTP_REQUEST_DONE :
+ this->request_queue->requests[(this->request_queue->nrequests)++] =
+ request;
+
+ memmove(this->buffer, data, REMAINS (this , data));
+
+ this->buffer_used -= data - this->buffer;
+
+ if (0 == this->buffer_used) {
+ cont = 0;
+ }
+
+ this->state = HTTP_REQUEST_GARBAGE ;
+
+ break ;
+
+ default :
+ break ;
+ }
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+ INIT_IFACE
+ (
+ Class
+ ,
+
+
+
+
+ ctor
+ ,
+
+
+
+
+ dtor
+ ,
+
+
+
+
+ _clone
+
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ INIT_IFACE
+ (
+ StreamReader
+ ,
+
+
+
+
+ get_data
+
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/html/parser_8c__incl.map b/docs/html/parser_8c__incl.map
new file mode 100644
index 0000000..8be6a30
--- /dev/null
+++ b/docs/html/parser_8c__incl.map
@@ -0,0 +1,2 @@
+
+
diff --git a/docs/html/parser_8c__incl.md5 b/docs/html/parser_8c__incl.md5
new file mode 100644
index 0000000..7e523d1
--- /dev/null
+++ b/docs/html/parser_8c__incl.md5
@@ -0,0 +1 @@
+56e3545a5b9794c9ffcf0b4fb6d2f733
\ No newline at end of file
diff --git a/docs/html/parser_8c__incl.png b/docs/html/parser_8c__incl.png
new file mode 100644
index 0000000000000000000000000000000000000000..cb09e7dcd0caa4158a4ff848bc31f3ee37f82933
GIT binary patch
literal 4179
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
+
+
+
+
+
diff --git a/docs/html/parser_8c_a659e7ea125685d797a099638b3376320_cgraph.md5 b/docs/html/parser_8c_a659e7ea125685d797a099638b3376320_cgraph.md5
new file mode 100644
index 0000000..6c34dcf
--- /dev/null
+++ b/docs/html/parser_8c_a659e7ea125685d797a099638b3376320_cgraph.md5
@@ -0,0 +1 @@
+b26b7c22015997556a16c3a3d9590d98
\ No newline at end of file
diff --git a/docs/html/parser_8c_a659e7ea125685d797a099638b3376320_cgraph.png b/docs/html/parser_8c_a659e7ea125685d797a099638b3376320_cgraph.png
new file mode 100644
index 0000000000000000000000000000000000000000..f31910478aabed4c23f78961b7c18693a76f139e
GIT binary patch
literal 2558
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
literal 0
HcmV?d00001
diff --git a/docs/html/parser_8c_source.html b/docs/html/parser_8c_source.html
new file mode 100644
index 0000000..3e0d40a
--- /dev/null
+++ b/docs/html/parser_8c_source.html
@@ -0,0 +1,199 @@
+
+
+
+
+server: src/http/request/parser.c Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ server 0.0.1
+ basicserverinfrastructure
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the documentation of this file. 00001 #include <string.h>
+ 00002 #include <stdlib.h>
+ 00003 #include <sys/types.h>
+ 00004
+ 00005 #include "class.h"
+ 00006 #include "http/request_parser.h"
+ 00007 #include "interface/class.h"
+ 00008 #include "interface/stream_reader.h"
+ 00009 #include "http/request.h"
+ 00010 #include "http/request_queue.h"
+ 00011
+ 00012 void httpRequestParserParse (HttpRequestParser );
+ 00013
+ 00014 static
+ 00015 void
+ 00016 ctor(void * _this, va_list * params)
+ 00017 {
+ 00018 HttpRequestParser this = _this;
+ 00019
+ 00020 this->request_queue = new (HttpRequestQueue );
+ 00021
+ 00022 this->buffer = malloc(HTTP_REQUEST_PARSER_READ_CHUNK );
+ 00023 this->buffer[0] = 0;
+ 00024 }
+ 00025
+ 00026 static
+ 00027 void
+ 00028 dtor(void * _this)
+ 00029 {
+ 00030 HttpRequestParser this = _this;
+ 00031
+ 00032 free(this->buffer);
+ 00033 delete (&(this->request_queue));
+ 00034 }
+ 00035
+ 00036 static
+ 00037 void
+ 00038 _clone(void * _this, void * _base)
+ 00039 {
+ 00040 HttpRequestParser this = _this;
+ 00041 HttpRequestParser base = _base;
+ 00042 size_t chunks;
+ 00043
+ 00047 this->request_queue = new (HttpRequestQueue );
+ 00048 this->buffer_used = base->buffer_used ;
+ 00049
+ 00050 chunks = this->buffer_used / HTTP_REQUEST_PARSER_READ_CHUNK ;
+ 00051 chunks++;
+ 00052
+ 00053 this->buffer = malloc(chunks * HTTP_REQUEST_PARSER_READ_CHUNK );
+ 00054 memcpy(this->buffer, base->buffer , this->buffer_used);
+ 00055 }
+ 00056
+ 00057 static
+ 00058 size_t
+ 00059 get_data(void * _this, int fd)
+ 00060 {
+ 00061 HttpRequestParser this = _this;
+ 00062 size_t remaining, chunks;
+ 00063 char buffer[1024];
+ 00064
+ 00065 size_t size = read(fd, buffer, 1024);
+ 00066
+ 00067 if (0 < size) {
+ 00068 remaining = this->buffer_used % HTTP_REQUEST_PARSER_READ_CHUNK ;
+ 00069 chunks = this->buffer_used / HTTP_REQUEST_PARSER_READ_CHUNK ;
+ 00070
+ 00079 chunks++;
+ 00080
+ 00081 if (size >= remaining) {
+ 00082 this->buffer =
+ 00083 realloc(this->buffer, chunks * HTTP_REQUEST_PARSER_READ_CHUNK );
+ 00084 }
+ 00085
+ 00086 memcpy(this->buffer + this->buffer_used, buffer, size);
+ 00087 this->buffer_used += size;
+ 00088 this->buffer[this->buffer_used] = 0;
+ 00089
+ 00090 httpRequestParserParse (this );
+ 00091 }
+ 00092
+ 00093 return size;
+ 00094 }
+ 00095
+ 00096 INIT_IFACE (Class, ctor, dtor, _clone);
+ 00097 INIT_IFACE (StreamReader, get_data);
+ 00098 CREATE_CLASS (HttpRequestParser , NULL, IFACE (Class), IFACE (StreamReader));
+ 00099
+ 00100
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/html/poll_8c.html b/docs/html/poll_8c.html
index 668dcd4..8d3d7db 100644
--- a/docs/html/poll_8c.html
+++ b/docs/html/poll_8c.html
@@ -122,7 +122,7 @@ Defines
diff --git a/docs/html/poll_8c_source.html b/docs/html/poll_8c_source.html
index e6dc5ec..0a84ad4 100644
--- a/docs/html/poll_8c_source.html
+++ b/docs/html/poll_8c_source.html
@@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/docs/html/queue_8c.html b/docs/html/queue_8c.html
new file mode 100644
index 0000000..b4d0dfe
--- /dev/null
+++ b/docs/html/queue_8c.html
@@ -0,0 +1,204 @@
+
+
+
+
+
server: src/http/request/queue.c File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ server 0.0.1
+ basicserverinfrastructure
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <stdarg.h>
+#include "class.h"
+#include "interface/class.h"
+#include "http/request_queue.h"
+
+
Go to the source code of this file.
+
+
Function Documentation
+
+
+
+
+
+ CREATE_CLASS
+ (
+ HttpRequestQueue
+ ,
+
+
+
+
+ NULL
+ ,
+
+
+
+
+ IFACE(Class)
+
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ INIT_IFACE
+ (
+ Class
+ ,
+
+
+
+
+ ctor
+ ,
+
+
+
+
+ dtor
+ ,
+
+
+
+
+ NULL
+
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/html/queue_8c__incl.map b/docs/html/queue_8c__incl.map
new file mode 100644
index 0000000..8be6a30
--- /dev/null
+++ b/docs/html/queue_8c__incl.map
@@ -0,0 +1,2 @@
+
+
diff --git a/docs/html/queue_8c__incl.md5 b/docs/html/queue_8c__incl.md5
new file mode 100644
index 0000000..d1f90ce
--- /dev/null
+++ b/docs/html/queue_8c__incl.md5
@@ -0,0 +1 @@
+596f0e38facc39d2e21f01a90b5651af
\ No newline at end of file
diff --git a/docs/html/queue_8c__incl.png b/docs/html/queue_8c__incl.png
new file mode 100644
index 0000000000000000000000000000000000000000..f5eb37621e71e2822751e75bf7f2138ed8f7afa9
GIT binary patch
literal 2205
zcmV;O2x9k%P)
A#!cNZ5IkB^VPzrWMd
z(*OVf|NsB>yEVH20004WQchCiFT_v42EG?hX8@&_kY)G
zc>zOg;|)lt{?pzPTb6`Ayd<4D%`y}Ug+ifFC=?2XLfsU?s$}0pMF9q;G`T_o>|Im3i5918;h)ism
zUH}g;6KCk+mh^k-z3S^vIa-MNwfhB6YPIBx#;E8!wUTYn9pG7TBhMJ
zs55vXvXwg=pb_kq89c2+cSDxo2sn*2d$8OFU+ko_2h8{2*C3Z(*g9YRdlGvvUDt_h
zRrX-87e>-X81074qX>?G(?|tOPr2_&9&pKP=;jsh+!6SqIM^w=lY8s@Vy~%vH^Nbg
zdLT9Vbzz-J!ez=1FUxWPMwW&>ZS^6}(yG(yhdA@JZn^|4hdQo>ugT^1Q
z-Vf@2>9Ckc9TCK7{B_b32?d-X(u8P*%UfM_@w4$>mhi%K+mv
zPAs=-`j$Kr5i(9C$3ps-I~ouoP9WDJhSWNq4^HD)x&P|tOy^c7$T(c?wF~^@B52g7
z8)O_LkFtdpI2jm3>@A;?g;zHn7o5gk@~hT20M3xHyF3dOQ`W>t5V3=NixgMW)I@L^
zAIQ5tvGq*P0~wnYP@3-poZ(V!P)J!4d>j?+LF*M6?-f*$6jeNn1Tt0?Sd4E5oFU^?
zq5lodoxvTQBjboO$qxX|7~?+;IsEQZmFhg$tp(O
zVxA`klH8$7#LdgA;+`#8#K>RqB?gk(pL0~@`oh2`Dp4IDFoT!4Yy4|NpQ2P%Jb}hN
zfHT4Prr61qb^@o#>13}Sk$<0Xs)g{RV%%5chY(hdGVy1uL^)mL*dgxk6V6isKC=!t
zuhGAZINdFrTZ0=aoF{ws;}rF04j^@Yb%uAd-)OffvoY9i0q2+Isb*?I<0m8FbNr@B
z+FJ&|7iZxj1RNv;?A#vd7Xcp#0S5^IJGV#rMZgC_z(INz;L7-yz({3tXl*w;_42DU
zn?3gCSXCdC&M{!kEvWHMk~Py01dY7-5y0hg)og4kL$N`18Xjf{7!-A%a3
z4=~wZIQY8}u+g_IR1ubrGhniFU1YAZW@M5p;I<)6O~13OY)Da)tSv}WLeREpX-CoW
z=!9OEMu(>MvT6DX@)urNwB?7N-|Z4j$ALqUxy<+tFGVaKT=udRbDxe##F~x+U^WIa
zfp18o=~+BhLm8jfa(N6y>so#(t=)duQKrfzsjHf~E1SBa;WE-g19ewWzAbBFc12e2
z9-3poWm8o}3EqWQ7A=!M{QT|!%QR_}9-^>}SrJ4R4=#JNy8cW@Bw|g+0WcdQ8PGIn
z(MpI18OiuHFR!$cSuN$4(%bEa9c8*+R-~->SoRFl`=l>hR=H|vV*c8XRpA&gIH+ot
z9rMbgiJ+OM-yL8+j%5zc3zjh}mAC^QT=r&t^^wkU_qKE#0JAYG;0iE7Ja#GKi&{#n
zC1+WFwPZTG&CA0~)g`(Y4?Z()VTmq!Q7Xb|aDP<*;B|KrURktE{_yj=16(bD#UBD*
zmN5}ac$I%9xX`2{60xS^wg;<#d5l6_iuj_u(n4mnlz&sQ54-)aqfAx6@Vxw|%wTnD
zs53YOa04*;n#jGfXv+^jzed3DSXb3rT@i~1m%Vhw{7gqAVok>%Fq^>;k7Xm`D>JiQ
zb6(58luT>4A9j?fZVwh4EK=tUr4w(0d1Jb~Qnb`P$#d3poxVPopEwZc3W
z4=#K8ach^(b`RF4;}4ka!M$91Mf_5hw`T9vMeFAtthd{}Jj_(Ngd<#=6@;In=~F__
zX?5SoGaGGcn4=)T;D8@ng;yR;{*XQ+0JF?{er#1vnh=Wzm%W899g&DN9aq3ClL8)|
z8UhxX+}(J5`6i{Lp~%|0mR~8E#%}xaFjL15+FBT28{g02N0mC+-qgCj;SG9Y8~~Uu
z7xaxnz|QTF
zei8725O9zXuycE)Uj%$01RNv;?A#vd7Xcqg1)TbSmDmP4$8Um!(`9p4GFHVsA1D+G
fg+ifFD5L%X3eu)3%&Ju100000NkvXXu0mjf)x{M!
literal 0
HcmV?d00001
diff --git a/docs/html/queue_8c_source.html b/docs/html/queue_8c_source.html
new file mode 100644
index 0000000..095f639
--- /dev/null
+++ b/docs/html/queue_8c_source.html
@@ -0,0 +1,137 @@
+
+
+
+
+server: src/http/request/queue.c Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ server 0.0.1
+ basicserverinfrastructure
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the documentation of this file. 00001 #include <stdarg.h>
+ 00002
+ 00003 #include "class.h"
+ 00004 #include "interface/class.h"
+ 00005
+ 00006 #include "http/request_queue.h"
+ 00007
+ 00008 static
+ 00009 void
+ 00010 ctor(void * _this, va_list * params) {}
+ 00011
+ 00012 static
+ 00013 void
+ 00014 dtor(void * _this)
+ 00015 {
+ 00016 HttpRequestQueue this = _this;
+ 00017 int i;
+ 00018
+ 00019 for (i=0; i<this->nrequests; i++) {
+ 00020 delete (&(this->requests)[i]);
+ 00021 }
+ 00022 }
+ 00023
+ 00024 INIT_IFACE (Class, ctor, dtor, NULL);
+ 00025 CREATE_CLASS (HttpRequestQueue , NULL, IFACE (Class));
+ 00026
+ 00027
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/html/read_8c.html b/docs/html/read_8c.html
index 745dce9..88c3554 100644
--- a/docs/html/read_8c.html
+++ b/docs/html/read_8c.html
@@ -97,7 +97,7 @@ This graph shows which files directly or indirectly include this file:
diff --git a/docs/html/read_8c_source.html b/docs/html/read_8c_source.html
index 757bdc1..d63bd8e 100644
--- a/docs/html/read_8c_source.html
+++ b/docs/html/read_8c_source.html
@@ -86,45 +86,46 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
00003 serverRead(
Server this ,
unsigned int i)
00004 {
00005
int fd = (this->fds)[i].fd;
-
00006
-
00007
if (NULL == (this->conns)[fd].reader) {
-
00008
loggerLog (
-
00009 this->logger,
-
00010
LOGGER_INFO ,
-
00011
"initialization error: NULL reader" );
-
00012
serverCloseConn (
this , i);
-
00013 }
-
00014
-
00015
switch (
streamReaderRead ((this->conns)[fd].reader, fd)) {
-
00016
case 0:
-
00017
-
00018
-
00019
-
00020
-
00021
-
00022
-
00023
case -1:
-
00024
-
00025
-
00026
-
00027
loggerLog (this->logger,
LOGGER_INFO ,
"connection closed..." );
-
00028
serverCloseConn (
this , i);
-
00029
break ;
-
00030
-
00031
default :
-
00032
break ;
-
00033 }
-
00034
-
00035
return 0;
-
00036 }
-
00037
-
00038
+
00006
int size;
+
00007
+
00008
if (NULL == (this->conns)[fd].reader) {
+
00009
loggerLog (
+
00010 this->logger,
+
00011
LOGGER_INFO ,
+
00012
"initialization error: NULL reader" );
+
00013
serverCloseConn (
this , i);
+
00014 }
+
00015
+
00016
switch ((size =
streamReaderRead ((this->conns)[fd].reader, fd))) {
+
00017
case 0:
+
00018
+
00019
+
00020
+
00021
+
00022
+
00023
+
00024
case -1:
+
00025
+
00026
+
00027
+
00028
loggerLog (this->logger,
LOGGER_INFO ,
"connection closed..." );
+
00029
serverCloseConn (
this , i);
+
00030
break ;
+
00031
+
00032
default :
+
00033
break ;
+
00034 }
+
00035
+
00036
return size;
+
00037 }
+
00038
+
00039