Commit 328c516ac103f48abbd3ef2cb9514aad7e6115e5

Authored by Cédric RICARD
1 parent 77d35b36

Small optimization on reading headers

Showing 1 changed file with 60 additions and 52 deletions   Show diff stats
calexium_lib/web/CXM_multihost_http_server.anubis
@@ -499,6 +499,28 @@ define String @@ -499,6 +499,28 @@ define String
499 499
500 500
501 variable UTime t0 = utime(0,0). 501 variable UTime t0 = utime(0,0).
  502 +variable UTime t1 = utime(0,0).
  503 +
  504 +define One
  505 + accumulate_t1
  506 + (
  507 + UTime start
  508 + ) =
  509 + with delta = (UTime)now - start,
  510 + t1 <- delta + *t1;
  511 + unique.
  512 +
  513 +variable UTime t2 = utime(0,0).
  514 +
  515 +define One
  516 + accumulate_t2
  517 + (
  518 + UTime start
  519 + ) =
  520 + with delta = (UTime)now - start,
  521 + t2 <- delta + *t2;
  522 + unique.
  523 +
502 524
503 define One 525 define One
504 print_delta 526 print_delta
@@ -508,7 +530,6 @@ define One @@ -508,7 +530,6 @@ define One
508 println(utime_to_string((UTime)now - *t0) + " : " + txt). 530 println(utime_to_string((UTime)now - *t0) + " : " + txt).
509 531
510 532
511 -  
512 ----------------------------------- Table of Contents --------------------------------- 533 ----------------------------------- Table of Contents ---------------------------------
513 534
514 *** [1] Types which are private to this file. 535 *** [1] Types which are private to this file.
@@ -721,9 +742,11 @@ define ReadResult @@ -721,9 +742,11 @@ define ReadResult
721 742
722 if *connection.read_pos < length(*connection.buffer) then 743 if *connection.read_pos < length(*connection.buffer) then
723 //println(pid + " reading from buffer (size = " + length(*connection.buffer) + ", pos = " + *connection.read_pos); 744 //println(pid + " reading from buffer (size = " + length(*connection.buffer) + ", pos = " + *connection.read_pos);
  745 + //with t1_tmp = (UTime) now,
724 with result = extract(*connection.buffer, *connection.read_pos, *connection.read_pos + size), 746 with result = extract(*connection.buffer, *connection.read_pos, *connection.read_pos + size),
725 size_read = length(result), 747 size_read = length(result),
726 connection.read_pos <- *connection.read_pos + size_read; 748 connection.read_pos <- *connection.read_pos + size_read;
  749 + //accumulate_t1(t1_tmp);
727 if size > size_read 750 if size > size_read
728 then 751 then
729 //println("Wanted " + size + ", read only " + size_read); 752 //println("Wanted " + size + ", read only " + size_read);
@@ -757,56 +780,28 @@ define Result(Error,Word8) @@ -757,56 +780,28 @@ define Result(Error,Word8)
757 DenialOfService dos 780 DenialOfService dos
758 ) = 781 ) =
759 //if now > dead_line then record_dubious_connection(connection,dead_line,dos) else 782 //if now > dead_line then record_dubious_connection(connection,dead_line,dos) else
760 - if read(connection,1,600) is // the connection is closed after 10 minutes of inactivity  
761 - {  
762 - error then error(cannot_read_from_connection),  
763 - timeout then error(timeout(600)),  
764 - //record_dubious_connection(connection,dead_line,dos),  
765 - ok(ba) then if nth(0,ba) is 783 + if nth(*connection.read_pos, *connection.buffer) is
  784 + {
  785 + failure then
  786 + if read(connection,1,600) is // the connection is closed after 10 minutes of inactivity
766 { 787 {
767 - failure then error(cannot_read_from_connection),  
768 - success(c) then  
769 -// println("-" + pid + "read [" + implode([c]) + "]\t");  
770 - ok(c)  
771 - }  
772 - }.  
773 -  
774 -  
775 -variable ByteArray read_buffer = constant_byte_array(0, 0).  
776 -variable Int32 read_offset = 0.  
777 -  
778 - define Result(Error,Word8)  
779 - read_one_byte  
780 - (  
781 - BufferedConnection connection,  
782 - Int32 dead_line,  
783 - DenialOfService dos  
784 - ) =  
785 - if *read_offset < length(*read_buffer) then  
786 - if nth(*read_offset, *read_buffer) is  
787 - {  
788 - failure then println(pid + "nth failed)"); error(cannot_read_from_connection), 788 + error then error(cannot_read_from_connection),
  789 + timeout then error(timeout(600)),
  790 + //record_dubious_connection(connection,dead_line,dos),
  791 + ok(ba) then if nth(0,ba) is
  792 + {
  793 + failure then error(cannot_read_from_connection),
  794 + success(c) then
  795 + // println("-" + pid + "read [" + implode([c]) + "]\t");
  796 + ok(c)
  797 + }
  798 + },
789 success(c) then 799 success(c) then
790 - println("-" + pid + "read [" + implode([c]) + "]\tat " + *read_offset);  
791 - read_offset <- *read_offset + 1; 800 + connection.read_pos <- *connection.read_pos + 1;
792 ok(c) 801 ok(c)
793 - }  
794 - else  
795 - //if now > dead_line then record_dubious_connection(connection,dead_line,dos) else  
796 - println(pid + "len = " + length(*read_buffer));  
797 - if read(connection, 16384, 600) is // the connection is closed after 10 minutes of inactivity  
798 - {  
799 - error then println(pid + "read failed)"); error(cannot_read_from_connection),  
800 - timeout then error(timeout(600)),  
801 - //record_dubious_connection(connection,dead_line,dos),  
802 - ok(ba) then  
803 - println(pid + "ba = " + length(ba));  
804 - read_buffer <- ba;  
805 - read_offset <- 0;  
806 - println(pid + "rb = " + length(*read_buffer));  
807 - read_one_byte(connection, dead_line, dos)  
808 - }.  
809 - 802 + }.
  803 +
  804 +
810 805
811 define Result(Error,Word8) 806 define Result(Error,Word8)
812 next_char // reading a character (check the list first, and read on the connection 807 next_char // reading a character (check the list first, and read on the connection
@@ -816,16 +811,27 @@ define Result(Error,Word8) @@ -816,16 +811,27 @@ define Result(Error,Word8)
816 Int32 dead_line, 811 Int32 dead_line,
817 DenialOfService dos 812 DenialOfService dos
818 ) = 813 ) =
  814 + with t2_tmp = (UTime) now,
819 if *unput_chars is 815 if *unput_chars is
820 { 816 {
821 - [ ] then read_one_byte(connection,dead_line,dos), 817 + [ ] then with ret = read_one_byte(connection,dead_line,dos), accumulate_t2(t2_tmp); ret,
  818 +// if read(connection.conn, 1, 600) is // the connection is closed after 10 minutes of inactivity
  819 +// {
  820 +// error then accumulate_t2(t2_tmp); println(pid + "read failed)"); error(cannot_read_from_connection),
  821 +// timeout then accumulate_t2(t2_tmp); error(timeout(600)),
  822 +// ok(ba) then if nth(0,ba) is
  823 +// {
  824 +// failure then accumulate_t2(t2_tmp); error(cannot_read_from_connection),
  825 +// success(c) then accumulate_t2(t2_tmp);
  826 +// ok(c)
  827 +// }
  828 +// },
822 829
823 [h . t] then 830 [h . t] then
824 - unput_chars <- t; 831 + unput_chars <- t; accumulate_t2(t2_tmp);
825 ok(h) 832 ok(h)
826 }. 833 }.
827 834
828 -  
829 835
830 836
831 837
@@ -2990,7 +2996,9 @@ define One @@ -2990,7 +2996,9 @@ define One
2990 send_answer(host_name, desc,connection.conn, request_line, headers, body, 2996 send_answer(host_name, desc,connection.conn, request_line, headers, body,
2991 make_generate_trust_ticket(dos)); 2997 make_generate_trust_ticket(dos));
2992 with duration = (UTime) now - *t0, 2998 with duration = (UTime) now - *t0,
2993 - println("Request duration: " + utime_to_string(duration)) 2999 + println("Request duration: " + utime_to_string(duration));
  3000 + //println("BufferRead duration: " + utime_to_string(*t1));
  3001 + println("next_char duration: " + utime_to_string(*t2))
2994 } 3002 }
2995 } 3003 }
2996 } 3004 }