Lines Matching refs:req
135 static int ProcessRequest(struct httprequest *req);
357 static int parse_servercmd(struct httprequest *req) in parse_servercmd() argument
363 filename = test2file(req->testno); in parse_servercmd()
370 logmsg(" Couldn't open test file %ld", req->testno); in parse_servercmd()
371 req->open = FALSE; /* closes connection */ in parse_servercmd()
385 req->open = FALSE; /* closes connection */ in parse_servercmd()
389 req->connmon = FALSE; in parse_servercmd()
397 req->auth_req = TRUE; in parse_servercmd()
401 req->rcmd = RCMD_IDLE; in parse_servercmd()
402 req->open = TRUE; in parse_servercmd()
406 req->rcmd = RCMD_STREAM; in parse_servercmd()
411 req->connmon = TRUE; in parse_servercmd()
415 req->upgrade = TRUE; in parse_servercmd()
422 req->pipe = num-1; /* decrease by one since we don't count the in parse_servercmd()
427 req->skip = num; in parse_servercmd()
431 req->writedelay = num; in parse_servercmd()
460 static int ProcessRequest(struct httprequest *req) in ProcessRequest() argument
462 char *line = &req->reqbuf[req->checkindex]; in ProcessRequest()
470 req->callcount++; in ProcessRequest()
472 logmsg("Process %d bytes request%s", req->offset, in ProcessRequest()
473 req->callcount > 1?" [CONTINUED]":""); in ProcessRequest()
479 (req->testno == DOCNUMBER_NOTHING) && in ProcessRequest()
482 req->testno = DOCNUMBER_WERULEZ; in ProcessRequest()
486 else if((req->testno == DOCNUMBER_NOTHING) && in ProcessRequest()
495 req->prot_version = prot_major*10 + prot_minor; in ProcessRequest()
512 req->testno = DOCNUMBER_WERULEZ; in ProcessRequest()
518 req->testno = DOCNUMBER_QUIT; in ProcessRequest()
528 req->testno = strtol(ptr, &ptr, 10); in ProcessRequest()
530 if(req->testno > 10000) { in ProcessRequest()
531 req->partno = req->testno % 10000; in ProcessRequest()
532 req->testno /= 10000; in ProcessRequest()
535 req->partno = 0; in ProcessRequest()
537 if(req->testno) { in ProcessRequest()
540 req->testno, req->partno); in ProcessRequest()
544 parse_servercmd(req); in ProcessRequest()
547 req->testno = DOCNUMBER_NOTHING; in ProcessRequest()
551 if(req->testno == DOCNUMBER_NOTHING) { in ProcessRequest()
555 if(sscanf(req->reqbuf, "CONNECT %" MAXDOCNAMELEN_TXT "s HTTP/%d.%d", in ProcessRequest()
565 req->connect_request = TRUE; in ProcessRequest()
567 if(req->prot_version == 10) in ProcessRequest()
568 req->open = FALSE; /* HTTP 1.0 closes connection by default */ in ProcessRequest()
589 req->testno = part; in ProcessRequest()
599 req->connect_port = curlx_ultous(ulnum); in ProcessRequest()
603 req->connect_port, req->testno); in ProcessRequest()
607 if(req->testno == DOCNUMBER_NOTHING) { in ProcessRequest()
611 req->testno = strtol(&testno[9], NULL, 10); in ProcessRequest()
612 logmsg("Found test number %d in Testno: header!", req->testno); in ProcessRequest()
615 if(req->testno == DOCNUMBER_NOTHING) { in ProcessRequest()
627 req->testno = strtol(ptr, &ptr, 10); in ProcessRequest()
629 if(req->testno > 10000) { in ProcessRequest()
630 req->partno = req->testno % 10000; in ProcessRequest()
631 req->testno /= 10000; in ProcessRequest()
633 logmsg("found test %d in requested host name", req->testno); in ProcessRequest()
637 req->partno = 0; in ProcessRequest()
641 req->testno, req->partno); in ProcessRequest()
646 if(!req->testno) { in ProcessRequest()
648 req->testno = DOCNUMBER_404; in ProcessRequest()
651 parse_servercmd(req); in ProcessRequest()
654 else if((req->offset >= 3) && (req->testno == DOCNUMBER_NOTHING)) { in ProcessRequest()
681 req->testno = strtol(ptr, &ptr, 10); in ProcessRequest()
683 if(req->testno > 10000) { in ProcessRequest()
684 req->partno = req->testno % 10000; in ProcessRequest()
685 req->testno /= 10000; in ProcessRequest()
688 req->partno = 0; in ProcessRequest()
692 req->testno, req->partno); in ProcessRequest()
697 if(req->pipe) in ProcessRequest()
700 req->checkindex += (end - line) + strlen(end_of_headers); in ProcessRequest()
717 if((req->cl == 0) && strncasecompare("Content-Length:", line, 15)) { in ProcessRequest()
733 req->open = FALSE; /* closes connection */ in ProcessRequest()
736 req->cl = clen - req->skip; in ProcessRequest()
739 if(req->skip) in ProcessRequest()
740 logmsg("... but will abort after %zu bytes", req->cl); in ProcessRequest()
750 if(strstr(req->reqbuf, "\r\n0\r\n\r\n")) in ProcessRequest()
763 if(!req->auth && strstr(req->reqbuf, "Authorization:")) { in ProcessRequest()
764 req->auth = TRUE; /* Authorization: header present! */ in ProcessRequest()
765 if(req->auth_req) in ProcessRequest()
769 if(strstr(req->reqbuf, "Authorization: Negotiate")) { in ProcessRequest()
775 if(req->testno != prev_testno) { in ProcessRequest()
776 prev_testno = req->testno; in ProcessRequest()
777 prev_partno = req->partno; in ProcessRequest()
780 req->partno = prev_partno; in ProcessRequest()
782 else if(!req->digest && strstr(req->reqbuf, "Authorization: Digest")) { in ProcessRequest()
786 req->partno += 1000; in ProcessRequest()
787 req->digest = TRUE; /* header found */ in ProcessRequest()
788 logmsg("Received Digest request, sending back data %ld", req->partno); in ProcessRequest()
790 else if(!req->ntlm && in ProcessRequest()
791 strstr(req->reqbuf, "Authorization: NTLM TlRMTVNTUAAD")) { in ProcessRequest()
793 req->partno += 1002; in ProcessRequest()
794 req->ntlm = TRUE; /* NTLM found */ in ProcessRequest()
795 logmsg("Received NTLM type-3, sending back data %ld", req->partno); in ProcessRequest()
796 if(req->cl) { in ProcessRequest()
797 logmsg(" Expecting %zu POSTed bytes", req->cl); in ProcessRequest()
800 else if(!req->ntlm && in ProcessRequest()
801 strstr(req->reqbuf, "Authorization: NTLM TlRMTVNTUAAB")) { in ProcessRequest()
803 req->partno += 1001; in ProcessRequest()
804 req->ntlm = TRUE; /* NTLM found */ in ProcessRequest()
805 logmsg("Received NTLM type-1, sending back data %ld", req->partno); in ProcessRequest()
807 else if((req->partno >= 1000) && in ProcessRequest()
808 strstr(req->reqbuf, "Authorization: Basic")) { in ProcessRequest()
812 req->partno += 1; in ProcessRequest()
813 logmsg("Received Basic request, sending back data %ld", req->partno); in ProcessRequest()
815 if(strstr(req->reqbuf, "Connection: close")) in ProcessRequest()
816 req->open = FALSE; /* close connection after this request */ in ProcessRequest()
818 if(!req->pipe && in ProcessRequest()
819 req->open && in ProcessRequest()
820 req->prot_version >= 11 && in ProcessRequest()
822 req->reqbuf + req->offset > end + strlen(end_of_headers) && in ProcessRequest()
823 !req->cl && in ProcessRequest()
824 (!strncmp(req->reqbuf, "GET", strlen("GET")) || in ProcessRequest()
825 !strncmp(req->reqbuf, "HEAD", strlen("HEAD")))) { in ProcessRequest()
828 req->checkindex = (end - req->reqbuf) + strlen(end_of_headers); in ProcessRequest()
829 req->pipelining = TRUE; in ProcessRequest()
832 while(req->pipe) { in ProcessRequest()
836 line = &req->reqbuf[req->checkindex]; in ProcessRequest()
840 req->checkindex += (end - line) + strlen(end_of_headers); in ProcessRequest()
841 req->pipe--; in ProcessRequest()
848 if(req->auth_req && !req->auth) { in ProcessRequest()
853 if(req->upgrade && strstr(req->reqbuf, "Upgrade:")) { in ProcessRequest()
856 req->upgrade_request = TRUE; in ProcessRequest()
859 if(req->cl > 0) { in ProcessRequest()
860 if(req->cl <= req->offset - (end - req->reqbuf) - strlen(end_of_headers)) in ProcessRequest()
923 static void init_httprequest(struct httprequest *req) in init_httprequest() argument
928 if(!req->pipelining) { in init_httprequest()
929 req->checkindex = 0; in init_httprequest()
930 req->offset = 0; in init_httprequest()
932 req->testno = DOCNUMBER_NOTHING; in init_httprequest()
933 req->partno = 0; in init_httprequest()
934 req->connect_request = FALSE; in init_httprequest()
935 req->open = TRUE; in init_httprequest()
936 req->auth_req = FALSE; in init_httprequest()
937 req->auth = FALSE; in init_httprequest()
938 req->cl = 0; in init_httprequest()
939 req->digest = FALSE; in init_httprequest()
940 req->ntlm = FALSE; in init_httprequest()
941 req->pipe = 0; in init_httprequest()
942 req->skip = 0; in init_httprequest()
943 req->writedelay = 0; in init_httprequest()
944 req->rcmd = RCMD_NORMALREQ; in init_httprequest()
945 req->prot_version = 0; in init_httprequest()
946 req->callcount = 0; in init_httprequest()
947 req->connect_port = 0; in init_httprequest()
948 req->done_processing = 0; in init_httprequest()
949 req->upgrade = 0; in init_httprequest()
950 req->upgrade_request = 0; in init_httprequest()
955 static int get_request(curl_socket_t sock, struct httprequest *req) in get_request() argument
959 char *reqbuf = req->reqbuf; in get_request()
966 if(req->pipelining) { in get_request()
967 pipereq = reqbuf + req->checkindex; in get_request()
968 pipereq_length = req->offset - req->checkindex; in get_request()
972 req->pipelining = FALSE; in get_request()
973 req->checkindex = 0; in get_request()
974 req->offset = 0; in get_request()
977 if(req->offset >= REQBUFSIZ-1) { in get_request()
988 if(req->skip) in get_request()
992 got = sread(sock, reqbuf + req->offset, req->cl); in get_request()
994 got = sread(sock, reqbuf + req->offset, REQBUFSIZ-1 - req->offset); in get_request()
1013 reqbuf[req->offset] = '\0'; in get_request()
1014 storerequest(reqbuf, req->offset); in get_request()
1020 req->offset += (size_t)got; in get_request()
1021 reqbuf[req->offset] = '\0'; in get_request()
1023 req->done_processing = ProcessRequest(req); in get_request()
1026 if(req->done_processing && req->pipe) { in get_request()
1028 req->done_processing = 0; in get_request()
1029 req->pipe--; in get_request()
1033 if(overflow || (req->offset == REQBUFSIZ-1 && got > 0)) { in get_request()
1039 else if(req->offset > REQBUFSIZ-1) { in get_request()
1046 reqbuf[req->offset] = '\0'; in get_request()
1049 if(fail || req->done_processing) in get_request()
1050 storerequest(reqbuf, req->pipelining ? req->checkindex : req->offset); in get_request()
1058 static int send_doc(curl_socket_t sock, struct httprequest *req) in send_doc() argument
1076 switch(req->rcmd) { in send_doc()
1098 req->open = FALSE; in send_doc()
1100 if(req->testno < 0) { in send_doc()
1104 switch(req->testno) { in send_doc()
1133 char *filename = test2file(req->testno); in send_doc()
1137 const char *section = req->connect_request?"connect":"data"; in send_doc()
1139 if(req->partno) in send_doc()
1140 snprintf(partbuf, sizeof(partbuf), "%s%ld", section, req->partno); in send_doc()
1144 logmsg("Send response test%ld section <%s>", req->testno, partbuf); in send_doc()
1245 if(req->writedelay) { in send_doc()
1246 int quarters = req->writedelay * 4; in send_doc()
1247 logmsg("Pausing %d seconds", req->writedelay); in send_doc()
1316 req->open = use_gopher?FALSE:persistant; in send_doc()
1318 prevtestno = req->testno; in send_doc()
1319 prevpartno = req->partno; in send_doc()
1819 static void http2(struct httprequest *req) in http2() argument
1821 (void)req; in http2()
1908 static int service_connection(curl_socket_t msgsock, struct httprequest *req, in service_connection() argument
1915 while(!req->done_processing) { in service_connection()
1916 int rc = get_request(msgsock, req); in service_connection()
1925 if((req->testno == prevtestno) && in service_connection()
1926 (req->partno == prevpartno)) { in service_connection()
1927 req->partno++; in service_connection()
1928 logmsg("BOUNCE part number to %ld", req->partno); in service_connection()
1937 send_doc(msgsock, req); in service_connection()
1941 if(req->testno < 0) { in service_connection()
1945 if(!req->open) { in service_connection()
1950 if(req->connect_request) { in service_connection()
1957 http_connect(&msgsock, listensock, connecthost, req->connect_port); in service_connection()
1962 if(req->upgrade_request) { in service_connection()
1964 http2(req); in service_connection()
1970 if(req->open) { in service_connection()
1990 struct httprequest req; in main() local
2003 memset(&req, 0, sizeof(req)); in main()
2256 req.pipelining = FALSE; in main()
2257 init_httprequest(&req); in main()
2329 rc = service_connection(all_sockets[socket_idx], &req, sock, in main()
2335 logmsg("====> Client disconnect %d", req.connmon); in main()
2337 if(req.connmon) { in main()
2342 if(!req.open) in main()
2358 if(req.testno == DOCNUMBER_QUIT) in main()
2364 init_httprequest(&req); in main()