Commit 328c516ac103f48abbd3ef2cb9514aad7e6115e5
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 | } |