Commit efbef67a713ac64fcfe61b3332ff768272454342
1 parent
b43ac9a0
[~] refactor read from connection
Showing
1 changed file
with
58 additions
and
34 deletions
Show diff stats
web/multihost_http_server.anubis
| ... | ... | @@ -873,52 +873,75 @@ define One |
| 873 | 873 | define Maybe(ByteArray) |
| 874 | 874 | read_from_connexion |
| 875 | 875 | ( |
| 876 | - HTTP_Buffered_Connection connection, | |
| 877 | - Int size, | |
| 878 | - Int time_out, | |
| 879 | - ByteArray result_buffer, | |
| 880 | - Int position | |
| 876 | + HTTP_Buffered_Connection connection, //connection to read | |
| 877 | + Int size_to_read, //size to read | |
| 878 | + Int time_out, //time out | |
| 879 | + ByteArray result_buffer //the current read bytes | |
| 881 | 880 | ) = |
| 882 | - //println(pid + "read_from_connexion(" + size + ")"); | |
| 881 | + //println(pid + "read_from_connexion(" + size_to_read + ", "+time_out+")"); | |
| 882 | + //println(pid + "connection buffer ["+length(*connection.buffer)+"]["+*connection.read_pos+"]["+to_string(*connection.buffer)+"]"); | |
| 883 | 883 | |
| 884 | 884 | if *connection.read_pos < length(*connection.buffer) then |
| 885 | - //println(pid + " reading from buffer (size = " + length(*connection.buffer) + ", pos = " + *connection.read_pos); | |
| 886 | - //with t1_tmp = (UTime) unow, | |
| 887 | - with result = extract(*connection.buffer, *connection.read_pos, *connection.read_pos + size), | |
| 885 | + //println(pid + " reading from buffer (size = " + length(*connection.buffer) + ", pos = " + *connection.read_pos+ ")"); | |
| 886 | + with result = extract(*connection.buffer, *connection.read_pos, *connection.read_pos + size_to_read), | |
| 888 | 887 | size_read = length(result), |
| 889 | - put(result,result_buffer,position,0); | |
| 888 | + //put(result, result_buffer, position, 0); | |
| 889 | + //println(pid + "read size ["+size_read+"]["+to_string(result)+"]"); | |
| 890 | + //println(pid + "result_buffer size ["+length(result_buffer)+"]["+to_string(result_buffer)+"]"); | |
| 891 | + with current_result_buffer = result_buffer + result, | |
| 892 | + //println(pid + "current_result_buffer size ["+length(current_result_buffer)+"]["+to_string(current_result_buffer)+"]"); | |
| 893 | + //println(pid + "connection.read_pos "+*connection.read_pos+" + read_size ["+size_read+"]"); | |
| 890 | 894 | connection.read_pos <- *connection.read_pos + size_read; |
| 895 | + //println(pid + "new connection.read_pos["+*connection.read_pos+"]"); | |
| 891 | 896 | //accumulate_t1(t1_tmp); |
| 892 | - if size > size_read then | |
| 897 | + if size_to_read > size_read then | |
| 893 | 898 | |
| 894 | - terminal read_from_connexion(connection, size - size_read, time_out, result_buffer, position+size_read) | |
| 899 | + terminal read_from_connexion(connection, size_to_read - size_read, time_out, current_result_buffer) | |
| 895 | 900 | // { |
| 896 | 901 | // error then error, |
| 897 | 902 | // timeout then ok(result), |
| 898 | 903 | // ok(ba) then ok(result + ba) |
| 899 | 904 | // } |
| 900 | 905 | else |
| 901 | - success(result_buffer) | |
| 906 | + // println(pid + "success: ["+length(current_result_buffer)+"]"); | |
| 907 | + // println(pid + "content: ["+to_string(current_result_buffer)+"]"); | |
| 908 | + success(current_result_buffer) | |
| 902 | 909 | else |
| 903 | - with t0 = (UTime) unow, | |
| 910 | + //with t0 = (UTime) unow, | |
| 904 | 911 | //if unow > dead_line then record_dubious_connection(connection,dead_line,dos) else |
| 912 | + println(pid +"try to read fill buffer with 32768 bytes time out ["+time_out+"]"); | |
| 905 | 913 | if read(connection.conn, 32768, time_out) is // read with timeout |
| 906 | 914 | { |
| 907 | - failure then println(pid + "read failed ["+to_string(result_buffer)+"]"); failure, | |
| 915 | + failure then println(pid + "read failed ["+to_string(result_buffer)+"] connection maybe lost"); failure, | |
| 908 | 916 | success(ba) then |
| 909 | 917 | with size_read = length(ba), |
| 918 | + println( pid + "read ["+size_read+"] bytes"); | |
| 910 | 919 | //the needed read is higher than the |
| 911 | - if size > size_read then | |
| 912 | - put(ba, result_buffer, position, 0); | |
| 913 | - read_from_connexion(connection, size - size_read, time_out, result_buffer, position+size_read) | |
| 920 | + if size_read = 0 then | |
| 921 | + read_from_connexion(connection, size_to_read, time_out, result_buffer) | |
| 922 | + else if size_to_read > size_read then | |
| 923 | + //put(ba, result_buffer, position, 0); | |
| 924 | + with current_result_buffer = result_buffer + ba, | |
| 925 | + read_from_connexion(connection, size_to_read - size_read, time_out, current_result_buffer) | |
| 914 | 926 | else |
| 915 | 927 | //println(pid + "ba = " + length(ba) + " duration: " + __utime_to_string((UTime) unow - t0)); |
| 916 | 928 | connection.buffer <- ba; |
| 917 | 929 | connection.read_pos <- 0; |
| 918 | 930 | //println(pid + "rb = " + length(*read_buffer)); |
| 919 | 931 | |
| 920 | - terminal read_from_connexion(connection, size, time_out, result_buffer, position) | |
| 921 | - }. | |
| 932 | + terminal read_from_connexion(connection, size_to_read, time_out, result_buffer) | |
| 933 | + } | |
| 934 | +. | |
| 935 | + | |
| 936 | +define Maybe(ByteArray) | |
| 937 | + read_from_connexion | |
| 938 | + ( | |
| 939 | + HTTP_Buffered_Connection connection, //connection to read | |
| 940 | + Int size_to_read, //size to read | |
| 941 | + Int time_out //time out | |
| 942 | + )= | |
| 943 | + read_from_connexion(connection, size_to_read, time_out, constant_byte_array(0,0)) | |
| 944 | +. | |
| 922 | 945 | |
| 923 | 946 | define Result(Error,Word8) |
| 924 | 947 | next_char // reading a character (check the list first, and read on the connection |
| ... | ... | @@ -938,7 +961,7 @@ define Result(Error,Word8) |
| 938 | 961 | if nth(*connection.read_pos, *connection.buffer) is |
| 939 | 962 | { |
| 940 | 963 | failure then |
| 941 | - if read_from_connexion(connection,1,0, constant_byte_array(1,0),0) is | |
| 964 | + if read_from_connexion(connection, 1, 600 /*, constant_byte_array(1,0),0*/) is | |
| 942 | 965 | { |
| 943 | 966 | failure then /*accumulate_t2(t2_tmp);*/ error(cannot_read_from_connection), |
| 944 | 967 | //record_dubious_connection(connection,dead_line,dos), |
| ... | ... | @@ -953,6 +976,7 @@ define Result(Error,Word8) |
| 953 | 976 | }, |
| 954 | 977 | success(c) then |
| 955 | 978 | connection.read_pos <- *connection.read_pos + 1; |
| 979 | + //println(pid + "read [" + implode([c]) + "] \t new pos ["+*connection.read_pos+"]"); | |
| 956 | 980 | //accumulate_t2(t2_tmp); |
| 957 | 981 | ok(c) |
| 958 | 982 | }, |
| ... | ... | @@ -1898,7 +1922,7 @@ public define Result(Error, ByteArray) |
| 1898 | 1922 | if body_size = 0 then ok(constant_byte_array(0,0)) else |
| 1899 | 1923 | if retries =< 0 then error(cannot_read_from_connection) else |
| 1900 | 1924 | |
| 1901 | - if read_from_connexion(connection,body_size,0,constant_byte_array(body_size,0),0) is | |
| 1925 | + if read_from_connexion(connection, body_size, 600 /*,constant_byte_array(body_size,0),0*/) is | |
| 1902 | 1926 | { |
| 1903 | 1927 | failure then error(cannot_read_from_connection), |
| 1904 | 1928 | success(new_bytes) then |
| ... | ... | @@ -3100,18 +3124,18 @@ define String |
| 3100 | 3124 | |
| 3101 | 3125 | define String |
| 3102 | 3126 | strip_port |
| 3103 | - ( | |
| 3104 | - String name, | |
| 3105 | - Int i | |
| 3106 | - ) = | |
| 3107 | - if nth(i,name) is | |
| 3108 | - { | |
| 3109 | - failure then name, | |
| 3110 | - success(c) then | |
| 3111 | - if c = ':' | |
| 3112 | - then substr(name,0,i) | |
| 3113 | - else strip_port(name,i+1) | |
| 3114 | - }. | |
| 3127 | + ( | |
| 3128 | + String name, | |
| 3129 | + Int i | |
| 3130 | + ) = | |
| 3131 | + if nth(i,name) is | |
| 3132 | + { | |
| 3133 | + failure then name, | |
| 3134 | + success(c) then | |
| 3135 | + if c = ':' | |
| 3136 | + then substr(name, 0, i) | |
| 3137 | + else strip_port(name, i+1) | |
| 3138 | + }. | |
| 3115 | 3139 | |
| 3116 | 3140 | |
| 3117 | 3141 | ... | ... |