Lines Matching refs:req
137 static int ProcessRequest(struct httprequest *req);
365 static int parse_servercmd(struct httprequest *req) in parse_servercmd() argument
371 filename = test2file(req->testno); in parse_servercmd()
372 req->close = FALSE; in parse_servercmd()
378 logmsg(" Couldn't open test file %ld", req->testno); in parse_servercmd()
379 req->open = FALSE; /* closes connection */ in parse_servercmd()
393 req->open = FALSE; /* closes connection */ in parse_servercmd()
397 req->connmon = FALSE; in parse_servercmd()
405 req->auth_req = TRUE; in parse_servercmd()
409 req->rcmd = RCMD_IDLE; in parse_servercmd()
410 req->open = TRUE; in parse_servercmd()
414 req->rcmd = RCMD_STREAM; in parse_servercmd()
419 req->connmon = TRUE; in parse_servercmd()
423 req->upgrade = TRUE; in parse_servercmd()
427 req->close = TRUE; in parse_servercmd()
434 req->pipe = num-1; /* decrease by one since we don't count the in parse_servercmd()
439 req->skip = num; in parse_servercmd()
443 req->writedelay = num; in parse_servercmd()
472 static int ProcessRequest(struct httprequest *req) in ProcessRequest() argument
474 char *line = &req->reqbuf[req->checkindex]; in ProcessRequest()
482 req->callcount++; in ProcessRequest()
484 logmsg("Process %d bytes request%s", req->offset, in ProcessRequest()
485 req->callcount > 1?" [CONTINUED]":""); in ProcessRequest()
491 (req->testno == DOCNUMBER_NOTHING) && in ProcessRequest()
494 req->testno = DOCNUMBER_WERULEZ; in ProcessRequest()
498 else if((req->testno == DOCNUMBER_NOTHING) && in ProcessRequest()
507 req->prot_version = prot_major*10 + prot_minor; in ProcessRequest()
524 req->testno = DOCNUMBER_WERULEZ; in ProcessRequest()
530 req->testno = DOCNUMBER_QUIT; in ProcessRequest()
540 req->testno = strtol(ptr, &ptr, 10); in ProcessRequest()
542 if(req->testno > 10000) { in ProcessRequest()
543 req->partno = req->testno % 10000; in ProcessRequest()
544 req->testno /= 10000; in ProcessRequest()
547 req->partno = 0; in ProcessRequest()
549 if(req->testno) { in ProcessRequest()
552 req->testno, req->partno); in ProcessRequest()
556 parse_servercmd(req); in ProcessRequest()
559 req->testno = DOCNUMBER_NOTHING; in ProcessRequest()
563 if(req->testno == DOCNUMBER_NOTHING) { in ProcessRequest()
567 if(sscanf(req->reqbuf, "CONNECT %" MAXDOCNAMELEN_TXT "s HTTP/%d.%d", in ProcessRequest()
576 req->connect_request = TRUE; in ProcessRequest()
578 if(req->prot_version == 10) in ProcessRequest()
579 req->open = FALSE; /* HTTP 1.0 closes connection by default */ in ProcessRequest()
601 req->testno = part; in ProcessRequest()
611 req->connect_port = curlx_ultous(ulnum); in ProcessRequest()
615 req->connect_port, req->testno); in ProcessRequest()
619 if(req->testno == DOCNUMBER_NOTHING) { in ProcessRequest()
623 req->testno = strtol(&testno[9], NULL, 10); in ProcessRequest()
624 logmsg("Found test number %d in Testno: header!", req->testno); in ProcessRequest()
627 if(req->testno == DOCNUMBER_NOTHING) { in ProcessRequest()
639 req->testno = strtol(ptr, &ptr, 10); in ProcessRequest()
641 if(req->testno > 10000) { in ProcessRequest()
642 req->partno = req->testno % 10000; in ProcessRequest()
643 req->testno /= 10000; in ProcessRequest()
645 logmsg("found test %d in requested host name", req->testno); in ProcessRequest()
649 req->partno = 0; in ProcessRequest()
653 req->testno, req->partno); in ProcessRequest()
658 if(!req->testno) { in ProcessRequest()
660 req->testno = DOCNUMBER_404; in ProcessRequest()
663 parse_servercmd(req); in ProcessRequest()
666 else if((req->offset >= 3) && (req->testno == DOCNUMBER_NOTHING)) { in ProcessRequest()
693 req->testno = strtol(ptr, &ptr, 10); in ProcessRequest()
695 if(req->testno > 10000) { in ProcessRequest()
696 req->partno = req->testno % 10000; in ProcessRequest()
697 req->testno /= 10000; in ProcessRequest()
700 req->partno = 0; in ProcessRequest()
704 req->testno, req->partno); in ProcessRequest()
709 if(req->pipe) in ProcessRequest()
712 req->checkindex += (end - line) + strlen(end_of_headers); in ProcessRequest()
729 if((req->cl == 0) && strncasecompare("Content-Length:", line, 15)) { in ProcessRequest()
745 req->open = FALSE; /* closes connection */ in ProcessRequest()
748 req->cl = clen - req->skip; in ProcessRequest()
751 if(req->skip) in ProcessRequest()
752 logmsg("... but will abort after %zu bytes", req->cl); in ProcessRequest()
763 if(strstr(req->reqbuf, "\r\n0\r\n\r\n")) { in ProcessRequest()
767 else if(strstr(req->reqbuf, "\r\n0\r\n")) { in ProcessRequest()
768 char *last_crlf_char = strstr(req->reqbuf, "\r\n\r\n"); in ProcessRequest()
775 last_crlf_char > strstr(req->reqbuf, "\r\n0\r\n")) in ProcessRequest()
780 else if(already_recv_zeroed_chunk && strstr(req->reqbuf, "\r\n\r\n")) in ProcessRequest()
792 if(!req->auth && strstr(req->reqbuf, "Authorization:")) { in ProcessRequest()
793 req->auth = TRUE; /* Authorization: header present! */ in ProcessRequest()
794 if(req->auth_req) in ProcessRequest()
798 if(strstr(req->reqbuf, "Authorization: Negotiate")) { in ProcessRequest()
804 if(req->testno != prev_testno) { in ProcessRequest()
805 prev_testno = req->testno; in ProcessRequest()
806 prev_partno = req->partno; in ProcessRequest()
809 req->partno = prev_partno; in ProcessRequest()
811 else if(!req->digest && strstr(req->reqbuf, "Authorization: Digest")) { in ProcessRequest()
815 req->partno += 1000; in ProcessRequest()
816 req->digest = TRUE; /* header found */ in ProcessRequest()
817 logmsg("Received Digest request, sending back data %ld", req->partno); in ProcessRequest()
819 else if(!req->ntlm && in ProcessRequest()
820 strstr(req->reqbuf, "Authorization: NTLM TlRMTVNTUAAD")) { in ProcessRequest()
822 req->partno += 1002; in ProcessRequest()
823 req->ntlm = TRUE; /* NTLM found */ in ProcessRequest()
824 logmsg("Received NTLM type-3, sending back data %ld", req->partno); in ProcessRequest()
825 if(req->cl) { in ProcessRequest()
826 logmsg(" Expecting %zu POSTed bytes", req->cl); in ProcessRequest()
829 else if(!req->ntlm && in ProcessRequest()
830 strstr(req->reqbuf, "Authorization: NTLM TlRMTVNTUAAB")) { in ProcessRequest()
832 req->partno += 1001; in ProcessRequest()
833 req->ntlm = TRUE; /* NTLM found */ in ProcessRequest()
834 logmsg("Received NTLM type-1, sending back data %ld", req->partno); in ProcessRequest()
836 else if((req->partno >= 1000) && in ProcessRequest()
837 strstr(req->reqbuf, "Authorization: Basic")) { in ProcessRequest()
841 req->partno += 1; in ProcessRequest()
842 logmsg("Received Basic request, sending back data %ld", req->partno); in ProcessRequest()
844 if(strstr(req->reqbuf, "Connection: close")) in ProcessRequest()
845 req->open = FALSE; /* close connection after this request */ in ProcessRequest()
847 if(!req->pipe && in ProcessRequest()
848 req->open && in ProcessRequest()
849 req->prot_version >= 11 && in ProcessRequest()
851 req->reqbuf + req->offset > end + strlen(end_of_headers) && in ProcessRequest()
852 !req->cl && in ProcessRequest()
853 (!strncmp(req->reqbuf, "GET", strlen("GET")) || in ProcessRequest()
854 !strncmp(req->reqbuf, "HEAD", strlen("HEAD")))) { in ProcessRequest()
857 req->checkindex = (end - req->reqbuf) + strlen(end_of_headers); in ProcessRequest()
858 req->pipelining = TRUE; in ProcessRequest()
861 while(req->pipe) { in ProcessRequest()
865 line = &req->reqbuf[req->checkindex]; in ProcessRequest()
869 req->checkindex += (end - line) + strlen(end_of_headers); in ProcessRequest()
870 req->pipe--; in ProcessRequest()
877 if(req->auth_req && !req->auth) { in ProcessRequest()
882 if(req->upgrade && strstr(req->reqbuf, "Upgrade:")) { in ProcessRequest()
885 req->upgrade_request = TRUE; in ProcessRequest()
888 if(req->cl > 0) { in ProcessRequest()
889 if(req->cl <= req->offset - (end - req->reqbuf) - strlen(end_of_headers)) in ProcessRequest()
952 static void init_httprequest(struct httprequest *req) in init_httprequest() argument
957 if(!req->pipelining) { in init_httprequest()
958 req->checkindex = 0; in init_httprequest()
959 req->offset = 0; in init_httprequest()
961 req->testno = DOCNUMBER_NOTHING; in init_httprequest()
962 req->partno = 0; in init_httprequest()
963 req->connect_request = FALSE; in init_httprequest()
964 req->open = TRUE; in init_httprequest()
965 req->auth_req = FALSE; in init_httprequest()
966 req->auth = FALSE; in init_httprequest()
967 req->cl = 0; in init_httprequest()
968 req->digest = FALSE; in init_httprequest()
969 req->ntlm = FALSE; in init_httprequest()
970 req->pipe = 0; in init_httprequest()
971 req->skip = 0; in init_httprequest()
972 req->writedelay = 0; in init_httprequest()
973 req->rcmd = RCMD_NORMALREQ; in init_httprequest()
974 req->prot_version = 0; in init_httprequest()
975 req->callcount = 0; in init_httprequest()
976 req->connect_port = 0; in init_httprequest()
977 req->done_processing = 0; in init_httprequest()
978 req->upgrade = 0; in init_httprequest()
979 req->upgrade_request = 0; in init_httprequest()
984 static int get_request(curl_socket_t sock, struct httprequest *req) in get_request() argument
987 char *reqbuf = req->reqbuf; in get_request()
994 if(req->pipelining) { in get_request()
995 pipereq = reqbuf + req->checkindex; in get_request()
996 pipereq_length = req->offset - req->checkindex; in get_request()
1000 req->pipelining = FALSE; in get_request()
1001 req->checkindex = 0; in get_request()
1002 req->offset = 0; in get_request()
1005 if(req->offset >= REQBUFSIZ-1) { in get_request()
1016 if(req->skip) in get_request()
1020 got = sread(sock, reqbuf + req->offset, req->cl); in get_request()
1022 got = sread(sock, reqbuf + req->offset, REQBUFSIZ-1 - req->offset); in get_request()
1041 reqbuf[req->offset] = '\0'; in get_request()
1042 storerequest(reqbuf, req->offset); in get_request()
1048 req->offset += (size_t)got; in get_request()
1049 reqbuf[req->offset] = '\0'; in get_request()
1051 req->done_processing = ProcessRequest(req); in get_request()
1054 if(req->done_processing && req->pipe) { in get_request()
1056 req->done_processing = 0; in get_request()
1057 req->pipe--; in get_request()
1061 if(overflow || (req->offset == REQBUFSIZ-1 && got > 0)) { in get_request()
1067 else if(req->offset > REQBUFSIZ-1) { in get_request()
1074 reqbuf[req->offset] = '\0'; in get_request()
1077 if(fail || req->done_processing) in get_request()
1078 storerequest(reqbuf, req->pipelining ? req->checkindex : req->offset); in get_request()
1086 static int send_doc(curl_socket_t sock, struct httprequest *req) in send_doc() argument
1104 switch(req->rcmd) { in send_doc()
1126 req->open = FALSE; in send_doc()
1128 if(req->testno < 0) { in send_doc()
1132 switch(req->testno) { in send_doc()
1161 char *filename = test2file(req->testno); in send_doc()
1165 const char *section = req->connect_request?"connect":"data"; in send_doc()
1167 if(req->partno) in send_doc()
1168 msnprintf(partbuf, sizeof(partbuf), "%s%ld", section, req->partno); in send_doc()
1172 logmsg("Send response test%ld section <%s>", req->testno, partbuf); in send_doc()
1226 if(strstr(buffer, "swsclose") || !count || req->close) { in send_doc()
1273 if(req->writedelay) { in send_doc()
1274 int quarters = req->writedelay * 4; in send_doc()
1275 logmsg("Pausing %d seconds", req->writedelay); in send_doc()
1344 req->open = use_gopher?FALSE:persistent; in send_doc()
1346 prevtestno = req->testno; in send_doc()
1347 prevpartno = req->partno; in send_doc()
1847 static void http2(struct httprequest *req) in http2() argument
1849 (void)req; in http2()
1936 static int service_connection(curl_socket_t msgsock, struct httprequest *req, in service_connection() argument
1943 while(!req->done_processing) { in service_connection()
1944 int rc = get_request(msgsock, req); in service_connection()
1953 if((req->testno == prevtestno) && in service_connection()
1954 (req->partno == prevpartno)) { in service_connection()
1955 req->partno++; in service_connection()
1956 logmsg("BOUNCE part number to %ld", req->partno); in service_connection()
1965 send_doc(msgsock, req); in service_connection()
1969 if(req->testno < 0) { in service_connection()
1973 if(!req->open) { in service_connection()
1978 if(req->connect_request) { in service_connection()
1985 http_connect(&msgsock, listensock, connecthost, req->connect_port); in service_connection()
1990 if(req->upgrade_request) { in service_connection()
1992 http2(req); in service_connection()
1998 if(req->open) { in service_connection()
2018 struct httprequest req; in main() local
2031 memset(&req, 0, sizeof(req)); in main()
2284 req.pipelining = FALSE; in main()
2285 init_httprequest(&req); in main()
2360 rc = service_connection(all_sockets[socket_idx], &req, sock, in main()
2366 logmsg("====> Client disconnect %d", req.connmon); in main()
2368 if(req.connmon) { in main()
2373 if(!req.open) in main()
2389 if(req.testno == DOCNUMBER_QUIT) in main()
2395 init_httprequest(&req); in main()