#include "request.h"
#include "../util/pblock.h"
#include "httprequest.h"
#include "../public/vfs.h"
int request_initialize(
pool_handle_t *pool,
HTTPRequest *hrq,
NSAPIRequest *nrq)
{
Request *rq = &nrq->rq;
rq->vars = pblock_create_pool(pool,
REQ_HASHSIZE);
if (!rq->vars)
return 1;
rq->reqpb = pblock_create_pool(pool,
REQ_HASHSIZE);
if (!rq->reqpb)
return 1;
rq->loadhdrs =
0;
rq->headers = pblock_create_pool(pool,
REQ_HASHSIZE);
if (!rq->headers)
return 1;
rq->senthdrs =
0;
rq->srvhdrs = pblock_create_pool(pool,
REQ_HASHSIZE);
if (!rq->srvhdrs)
return 1;
rq->os =
NULL;
rq->tmpos =
NULL;
rq->statpath =
NULL;
rq->staterr =
NULL;
rq->finfo =
NULL;
rq->aclstate =
0;
rq->acldirno =
0;
rq->aclname =
NULL;
rq->aclpb =
NULL;
rq->acllist =
NULL;
rq->aclreqaccess =
0;
rq->request_is_cacheable =
0;
rq->directive_is_cacheable =
0;
rq->cached_headers =
NULL;
rq->cached_headers_len =
0;
rq->unused =
NULL;
rq->protv_num =
0;
rq->method_num = -
1;
*(
RQATTR *) &rq->rq_attr =
0;
rq->allowed =
0;
rq->byterange =
0;
rq->status_num =
0;
rq->staterrno =
0;
rq->orig_rq = rq;
nrq->context.last_req_code =
REQ_NOACTION;
nrq->context.objset_index = -
1;
nrq->context.dtable_index =
0;
nrq->jvm_context =
NULL;
rq->status_num = -
1;
rq->vfs =
NULL;
rq->davCollection =
NULL;
return 0;
}
const VirtualServer* request_get_vs(Request *rq) {
return ((NSAPIRequest*)rq)->vs;
}
struct stat* request_stat_path(
const char *path, Request *rq) {
struct stat *s = malloc(
sizeof(
struct stat));
if(stat(path, s)) {
free(s);
return NULL;
}
rq->finfo = s;
return s;
}
int request_set_path(
sstr_t root,
sstr_t path, pblock *vars) {
size_t length = root.length + path.length;
char *translated_path = alloca(length +
1);
memcpy(translated_path, root.ptr, root.length);
if(root.ptr[root.length-
1] ==
'/') {
memcpy(translated_path + root.length, path.ptr, path.length);
}
else {
translated_path[root.length] =
'/';
memcpy(translated_path + root.length +
1, path.ptr, path.length);
length++;
}
pblock_kvinsert(
pb_key_ppath,
translated_path,
length,
vars);
pblock_kvinsert(pb_key_ntrans_base, root.ptr, root.length, vars);
return REQ_PROCEED;
}
void request_free(Request *rq) {
}
Request* request_restart_internal(
const char *uri, Request *rq) {
return NULL;
}
char* servact_translate_uri(
char *uri, Session *sn) {
return NULL;
}