Commit 1af8b32fdf1588b2533eb311d1c36b1d2398902b

Authored by Georg Hopp
1 parent f1215c67

Some fixes:

- skipNonAlpha now really skips NON alpha chars
- parserBody now reads the MIN of want to what's available
- changed the order in body read...an 0 nbody leads to immediate
  completion, than the first check is if the buffer is empty and only if
  it's not data is read. fixes #20
@@ -27,7 +27,7 @@ @@ -27,7 +27,7 @@
27 void 27 void
28 cbufSkipNonAlpha(Cbuf this) 28 cbufSkipNonAlpha(Cbuf this)
29 { 29 {
30 - while(0 > this->bused && isalpha(*cbufGetRead(this))) 30 + while(0 < this->bused && !isalpha(*cbufGetRead(this)))
31 cbufIncRead(this, 1); 31 cbufIncRead(this, 1);
32 } 32 }
33 33
@@ -28,7 +28,7 @@ @@ -28,7 +28,7 @@
28 #include "http/parser.h" 28 #include "http/parser.h"
29 #include "cbuf.h" 29 #include "cbuf.h"
30 30
31 -#define MAX(a,b) (((a) > (b))? (a) : (b)) 31 +#define MIN(a,b) (((a) < (b))? (a) : (b))
32 32
33 size_t 33 size_t
34 httpParserBody(HttpParser this, const char * buf, size_t nbuf) 34 httpParserBody(HttpParser this, const char * buf, size_t nbuf)
@@ -37,7 +37,7 @@ httpParserBody(HttpParser this, const char * buf, size_t nbuf) @@ -37,7 +37,7 @@ httpParserBody(HttpParser this, const char * buf, size_t nbuf)
37 HttpMessage current = this->current; 37 HttpMessage current = this->current;
38 38
39 if (current->dbody < current->nbody) { 39 if (current->dbody < current->nbody) {
40 - len = MAX(current->nbody - current->dbody, nbuf); 40 + len = MIN(current->nbody - current->dbody, nbuf);
41 41
42 memcpy(current->body, buf, len); 42 memcpy(current->body, buf, len);
43 43
@@ -120,23 +120,24 @@ httpParserParse(void * _this, Stream st) @@ -120,23 +120,24 @@ httpParserParse(void * _this, Stream st)
120 break; 120 break;
121 121
122 case HTTP_MESSAGE_HEADERS_DONE: 122 case HTTP_MESSAGE_HEADERS_DONE:
123 - {  
124 - cbufIncRead(  
125 - this->buffer,  
126 - httpParserBody(  
127 - this,  
128 - cbufGetRead(this->buffer),  
129 - this->buffer->bused));  
130 -  
131 - if (cbufIsEmpty(this->buffer)) {  
132 - cbufRelease(this->buffer);  
133 - this->ourLock = FALSE;  
134 - } 123 + if (this->current->dbody == this->current->nbody) {
  124 + this->state = HTTP_MESSAGE_DONE;
  125 + break;
  126 + }
135 127
136 - if (this->current->dbody == this->current->nbody) {  
137 - this->state = HTTP_MESSAGE_DONE;  
138 - } 128 + if (cbufIsEmpty(this->buffer)) {
  129 + cbufRelease(this->buffer);
  130 + this->ourLock = FALSE;
  131 + cont = 0;
  132 + break;
139 } 133 }
  134 +
  135 + cbufIncRead(
  136 + this->buffer,
  137 + httpParserBody(
  138 + this,
  139 + cbufGetRead(this->buffer),
  140 + this->buffer->bused));
140 break; 141 break;
141 142
142 case HTTP_MESSAGE_DONE: 143 case HTTP_MESSAGE_DONE:
Please register or login to post a comment