|
|
@ -0,0 +1,46 @@ |
|
|
|
|
|
#include <stdlib.h> |
|
|
|
|
|
#include <ctype.h> |
|
|
|
|
|
|
|
|
|
|
|
#include "http/request.h" |
|
|
|
|
|
|
|
|
|
|
|
static |
|
|
|
|
|
inline |
|
|
|
|
|
unsigned long |
|
|
|
|
|
sdbm(const unsigned char * str) |
|
|
|
|
|
{ |
|
|
|
|
|
unsigned long hash = 0; |
|
|
|
|
|
int c; |
|
|
|
|
|
|
|
|
|
|
|
while ((c = tolower(*str++))) |
|
|
|
|
|
hash = c + (hash << 6) + (hash << 16) - hash; |
|
|
|
|
|
|
|
|
|
|
|
return hash; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static |
|
|
|
|
|
inline |
|
|
|
|
|
int |
|
|
|
|
|
comp (const void * _a, const void * _b) |
|
|
|
|
|
{ |
|
|
|
|
|
unsigned long a = *(unsigned long *)_a; |
|
|
|
|
|
const struct HttpRequestHeader * b = _b; |
|
|
|
|
|
return (a < b->hash)? -1 : (a > b->hash)? 1 : 0; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
char * |
|
|
|
|
|
httpRequestHeaderGet(HttpRequest this, const char * name) |
|
|
|
|
|
{ |
|
|
|
|
|
unsigned long hash = sdbm((unsigned char *)name); |
|
|
|
|
|
struct HttpRequestHeader * header; |
|
|
|
|
|
|
|
|
|
|
|
header = bsearch( |
|
|
|
|
|
&hash, |
|
|
|
|
|
this->header, |
|
|
|
|
|
this->nheader, |
|
|
|
|
|
sizeof(struct HttpRequestHeader), |
|
|
|
|
|
comp); |
|
|
|
|
|
|
|
|
|
|
|
return (NULL != header)? header->value : NULL; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// vim: set ts=4 sw=4: |