diff -r 627b09ee74e4 -r adb0bda54e6b src/server/daemon/httprequest.c --- a/src/server/daemon/httprequest.c Mon Feb 13 13:49:49 2012 +0100 +++ b/src/server/daemon/httprequest.c Thu Feb 16 15:08:38 2012 +0100 @@ -283,6 +283,10 @@ do { switch(rq->phase) { case NSAPIAuthTrans: { + r = nsapi_authtrans(sn, rq); + if(r != REQ_PROCEED) { + break; + } rq->phase++; nsapi_context_next_stage(&rq->context); } @@ -341,6 +345,35 @@ return 0; } +int nsapi_authtrans(NSAPISession *sn, NSAPIRequest *rq) { + HTTPObjectConfig *objconf = rq->vs->objects; + httpd_object *obj = objconf->objects[0]; + dtable *dt = object_get_dtable(obj, NSAPIAuthTrans); + + int ret = rq->context.last_req_code; + for(int i=NCX_DI(rq);indir;i++) { + directive *d = dt->dirs[i]; + + ret = d->func->func(d->param, (Session*)sn, (Request*)rq); + if(ret != REQ_NOACTION) { + /* + * if a saf is still processing, we need to save the context, to + * process this object at a later time + */ + if(ret == REQ_PROCESSING) { + /* save nsapi context */ + /* add +1 to start next round with next function */ + rq->context.dtable_index = i + 1; + } + + return ret; + } + } + + + return REQ_PROCEED; +} + int nsapi_nametrans(NSAPISession *sn, NSAPIRequest *rq) { HTTPObjectConfig *objconf = rq->vs->objects; //printf("nsapi_nametrans\n");