#include "req.h"
#include "../util/pblock.h"
static inline
void request_depth(Request *rq,
int *prestarted,
int *pinternal)
{
while (rq->orig_rq != rq) {
if (rq->rq_attr.req_restarted)
(*prestarted)++;
if (rq->rq_attr.internal_req)
(*pinternal)++;
rq = rq->orig_rq;
}
}
NSAPI_PUBLIC void request_get_base_uri(Request *rq,
const char **pbase,
int *plen)
{
if (rq) {
const char *uri = pblock_findkeyval(pb_key_uri, rq->reqpb);
if (uri) {
int len = strlen(uri);
const char *path_info = pblock_findkeyval(pb_key_path_info, rq->vars);
if (path_info) {
int suffixlen = strlen(path_info);
if (len > suffixlen)
len -= suffixlen;
}
do { len--; }
while (len >
0 && uri[len] !=
'/');
if (len >
0) {
*pbase = uri;
*plen = len +
1;
return;
}
}
}
*pbase =
"/";
*plen =
1;
}
NSAPI_PUBLIC int request_is_internal(Request *rq)
{
return (rq->rq_attr.internal_req ==
1);
}
NSAPI_PUBLIC PRBool request_is_restarted(Request *rq)
{
return (rq->rq_attr.req_restarted ==
1);
}
NSAPI_PUBLIC PRBool request_is_default_type_set(
const Request *rq)
{
return (rq->rq_attr.default_type_set ==
1);
}
NSAPI_PUBLIC void request_has_default_type(Request *rq)
{
rq->rq_attr.default_type_set =
1;
}