108 // set default virtual server |
108 // set default virtual server |
109 rq->vs = request->connection->listener->default_vs.vs; |
109 rq->vs = request->connection->listener->default_vs.vs; |
110 |
110 |
111 /* Pass request line as "clf-request" */ |
111 /* Pass request line as "clf-request" */ |
112 /* TODO: with or without \r\n ? */ |
112 /* TODO: with or without \r\n ? */ |
|
113 // hack to remove \r\n |
|
114 sstr_t clfreq = request->request_line; |
|
115 while(clfreq.ptr[clfreq.length - 1] < 33) { |
|
116 clfreq.length--; |
|
117 } |
|
118 request->request_line = clfreq; |
113 pblock_kvinsert( |
119 pblock_kvinsert( |
114 pb_key_clf_request, |
120 pb_key_clf_request, |
115 request->request_line.ptr, |
121 request->request_line.ptr, |
116 request->request_line.length, |
122 request->request_line.length, |
117 rq->rq.reqpb); |
123 rq->rq.reqpb); |
346 rq->phase++; |
352 rq->phase++; |
347 nsapi_context_next_stage(&rq->context); |
353 nsapi_context_next_stage(&rq->context); |
348 } |
354 } |
349 case NSAPIAddLog: { |
355 case NSAPIAddLog: { |
350 //printf(">>> AddLog\n"); |
356 //printf(">>> AddLog\n"); |
|
357 r = nsapi_addlog(sn, rq); |
|
358 if(r != REQ_PROCESSING && r != REQ_ABORTED) { |
|
359 break; |
|
360 } |
351 rq->phase++; |
361 rq->phase++; |
352 nsapi_context_next_stage(&rq->context); |
362 nsapi_context_next_stage(&rq->context); |
353 } |
363 } |
354 case REQ_FINISH: { |
364 case REQ_FINISH: { |
355 //printf(">>> Finish\n"); |
365 //printf(">>> Finish\n"); |
667 } |
677 } |
668 |
678 |
669 return ret; |
679 return ret; |
670 } |
680 } |
671 |
681 |
|
682 int nsapi_addlog(NSAPISession *sn, NSAPIRequest *rq) { |
|
683 //printf("nsapi_addlog\n"); |
|
684 httpd_objset *objset = rq->rq.os; |
|
685 |
|
686 if(NCX_OI(rq) == -1) { |
|
687 NCX_OI(rq) = objset->pos - 1; |
|
688 } |
|
689 |
|
690 int ret = rq->context.last_req_code; |
|
691 for(int i=NCX_OI(rq);i>=0;i--) { |
|
692 httpd_object *obj = objset->obj[i]; |
|
693 dtable *dt = object_get_dtable(obj, NSAPIAddLog); |
|
694 |
|
695 // execute directives |
|
696 for(int j=NCX_DI(rq);j<dt->ndir;j++) { |
|
697 if(ret == REQ_NOACTION) { |
|
698 directive *d = dt->dirs[j]; |
|
699 ret = nsapi_exec(d, sn, rq); |
|
700 } |
|
701 |
|
702 if(ret != REQ_NOACTION) { |
|
703 if(ret == REQ_PROCESSING) { |
|
704 /* save nsapi context */ |
|
705 rq->context.objset_index = i; |
|
706 |
|
707 /* add +1 to start next round with next function */ |
|
708 rq->context.dtable_index = j + 1; |
|
709 } |
|
710 |
|
711 return ret; |
|
712 } |
|
713 } |
|
714 } |
|
715 |
|
716 return REQ_PROCEED; |
|
717 } |
|
718 |
672 struct _tpd_data { |
719 struct _tpd_data { |
673 NSAPISession *sn; |
720 NSAPISession *sn; |
674 NSAPIRequest *rq; |
721 NSAPIRequest *rq; |
675 directive *directive; |
722 directive *directive; |
676 threadpool_t *threadpool; |
723 threadpool_t *threadpool; |