Commit aff304f6ae6592908e05c95ee13146d2cf143df9

Authored by Cédric RICARD
1 parent 2956d18a

small optimization on reading HTTP headers

Showing 1 changed file with 38 additions and 42 deletions   Show diff stats
calexium_lib/web/CXM_multihost_http_server.anubis
... ... @@ -733,13 +733,13 @@ define String
733 733 "[" + virtual_machine_id + "] ".
734 734  
735 735 define ReadResult
736   - read
  736 + read_from_connexion
737 737 (
738 738 BufferedConnection connection,
739 739 Int32 size,
740 740 Int32 time_out
741 741 ) =
742   - //println(pid + "read(" + size + ")");
  742 + //println(pid + "read_from_connexion(" + size + ")");
743 743  
744 744 if *connection.read_pos < length(*connection.buffer) then
745 745 //println(pid + " reading from buffer (size = " + length(*connection.buffer) + ", pos = " + *connection.read_pos);
... ... @@ -751,7 +751,7 @@ define ReadResult
751 751 if size > size_read
752 752 then
753 753 //println("Wanted " + size + ", read only " + size_read);
754   - if read(connection, size - size_read, time_out) is
  754 + if read_from_connexion(connection, size - size_read, time_out) is
755 755 {
756 756 error then error,
757 757 timeout then ok(result),
... ... @@ -769,41 +769,9 @@ define ReadResult
769 769 connection.buffer <- ba;
770 770 connection.read_pos <- 0;
771 771 //println(pid + "rb = " + length(*read_buffer));
772   - read(connection, size, time_out)
  772 + read_from_connexion(connection, size, time_out)
773 773 }.
774 774  
775   -
776   -define Result(Error,Word8)
777   - read_one_byte
778   - (
779   - BufferedConnection connection,
780   - Int32 dead_line,
781   - DenialOfService dos
782   - ) =
783   - //if now > dead_line then record_dubious_connection(connection,dead_line,dos) else
784   - if nth(*connection.read_pos, *connection.buffer) is
785   - {
786   - failure then
787   - if read(connection,1,600) is // the connection is closed after 10 minutes of inactivity
788   - {
789   - error then error(cannot_read_from_connection),
790   - timeout then error(timeout(600)),
791   - //record_dubious_connection(connection,dead_line,dos),
792   - ok(ba) then if nth(0,ba) is
793   - {
794   - failure then error(cannot_read_from_connection),
795   - success(c) then
796   - // println("-" + pid + "read [" + implode([c]) + "]\t");
797   - ok(c)
798   - }
799   - },
800   - success(c) then
801   - connection.read_pos <- *connection.read_pos + 1;
802   - ok(c)
803   - }.
804   -
805   -
806   -
807 775 define Result(Error,Word8)
808 776 next_char // reading a character (check the list first, and read on the connection
809 777 // only when the list is empty).
... ... @@ -812,10 +780,38 @@ define Result(Error,Word8)
812 780 Int32 dead_line,
813 781 DenialOfService dos
814 782 ) =
815   - with t2_tmp = (UTime) now,
  783 + //with t2_tmp = (UTime) now,
816 784 if *unput_chars is
817 785 {
818   - [ ] then with ret = read_one_byte(connection,dead_line,dos), accumulate_t2(t2_tmp); ret,
  786 + [ ] then
  787 + // ///////////////////
  788 + // Buffered reading
  789 + //if now > dead_line then record_dubious_connection(connection,dead_line,dos) else
  790 + if nth(*connection.read_pos, *connection.buffer) is
  791 + {
  792 + failure then
  793 + if read_from_connexion(connection,1,600) is // the connection is closed after 10 minutes of inactivity
  794 + {
  795 + error then /*accumulate_t2(t2_tmp);*/ error(cannot_read_from_connection),
  796 + timeout then /*accumulate_t2(t2_tmp);*/ error(timeout(600)),
  797 + //record_dubious_connection(connection,dead_line,dos),
  798 + ok(ba) then if nth(0,ba) is
  799 + {
  800 + failure then /*accumulate_t2(t2_tmp);*/ error(cannot_read_from_connection),
  801 + success(c) then
  802 + //println("-" + pid + "read [" + implode([c]) + "]\t");
  803 + //accumulate_t2(t2_tmp);
  804 + ok(c)
  805 + }
  806 + },
  807 + success(c) then
  808 + connection.read_pos <- *connection.read_pos + 1;
  809 + //accumulate_t2(t2_tmp);
  810 + ok(c)
  811 + },
  812 +
  813 + // ///////////////////
  814 + // standard reading
819 815 // if read(connection.conn, 1, 600) is // the connection is closed after 10 minutes of inactivity
820 816 // {
821 817 // error then accumulate_t2(t2_tmp); println(pid + "read failed)"); error(cannot_read_from_connection),
... ... @@ -829,7 +825,7 @@ define Result(Error,Word8)
829 825 // },
830 826  
831 827 [h . t] then
832   - unput_chars <- t; accumulate_t2(t2_tmp);
  828 + unput_chars <- t; //accumulate_t2(t2_tmp);
833 829 ok(h)
834 830 }.
835 831  
... ... @@ -1722,7 +1718,7 @@ define Result(Error,ByteArray)
1722 1718 ) =
1723 1719 if body_size = 0 then ok(constant_byte_array(0,0)) else
1724 1720 if retries =< 0 then error(cannot_read_from_connection) else
1725   - if read(connection,body_size,60) is
  1721 + if read_from_connexion(connection,body_size,60) is
1726 1722 {
1727 1723 error then error(cannot_read_from_connection),
1728 1724 timeout then error(timeout(60)),
... ... @@ -3002,9 +2998,9 @@ define One
3002 2998 send_answer(host_name, desc,connection.conn, request_line, headers, body,
3003 2999 make_generate_trust_ticket(dos));
3004 3000 with duration = (UTime) now - *t0,
3005   - println("Request duration: " + utime_to_string(duration));
  3001 + println("Request duration: " + utime_to_string(duration))
3006 3002 //println("BufferRead duration: " + utime_to_string(*t1));
3007   - println("next_char duration: " + utime_to_string(*t2))
  3003 + //println("next_char duration: " + utime_to_string(*t2))
3008 3004 }
3009 3005 }
3010 3006 }
... ...