Changeset 1967
- Timestamp:
- 09/08/08 16:18:31 (4 months ago)
- Files:
-
- cherokee/trunk/ChangeLog (modified) (1 diff)
- cherokee/trunk/cherokee/connection-protected.h (modified) (1 diff)
- cherokee/trunk/cherokee/connection.c (modified) (5 diffs)
- cherokee/trunk/cherokee/util.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
cherokee/trunk/ChangeLog
r1966 r1967 1 1 2008-09-08 Alvaro Lopez Ortega <alvaro@alobbs.com> 2 3 * cherokee/connection.c, cherokee/connection-protected.h, 4 cherokee/util.c: Improves the Chunked encoding performance. 2 5 3 6 * cherokee/handler_dirlist.c, cherokee/handler_dirlist.h: Adds a cherokee/trunk/cherokee/connection-protected.h
r1947 r1967 197 197 */ 198 198 cherokee_boolean_t chunked_encoding; 199 cherokee_boolean_t chunked_last_package; 199 200 cherokee_buffer_t chunked_len; 200 201 size_t chunked_sent; cherokee/trunk/cherokee/connection.c
r1958 r1967 148 148 n->regex_ovecsize = 0; 149 149 150 n->chunked_encoding = false; 151 n->chunked_sent = 0; 150 n->chunked_encoding = false; 151 n->chunked_sent = 0; 152 n->chunked_last_package = false; 152 153 cherokee_buffer_init (&n->chunked_len); 153 154 … … 259 260 conn->chunked_encoding = false; 260 261 conn->chunked_sent = 0; 262 conn->chunked_last_package = false; 261 263 262 264 memset (conn->regex_ovector, OVECTOR_LEN * sizeof(int), 0); … … 879 881 tmp[1].iov_base = conn->buffer.buf; 880 882 tmp[1].iov_len = conn->buffer.len; 881 tmp[2].iov_base = CRLF; 882 tmp[2].iov_len = 2; 883 884 if (conn->chunked_last_package) { 885 tmp[2].iov_base = CRLF "0" CRLF CRLF; 886 tmp[2].iov_len = 7; 887 } else { 888 tmp[2].iov_base = CRLF; 889 tmp[2].iov_len = 2; 890 } 883 891 884 892 cherokee_iovec_skip_sent (tmp, 3, … … 908 916 * has been sent. 909 917 */ 910 if (cherokee_iovec_was_sent (tmp, 3, conn->chunked_sent)) { 918 ret = cherokee_iovec_was_sent (tmp, 3, conn->chunked_sent); 919 if (ret == ret_ok) { 911 920 cherokee_buffer_clean (&conn->chunked_len); 912 921 cherokee_buffer_clean (&conn->buffer); … … 1067 1076 */ 1068 1077 if (conn->chunked_encoding) { 1069 /* In case it is the last package, turn the chunked 1070 * encoding off and send the final mark. 1071 */ 1072 if ((step_ret == ret_eof) || 1073 (step_ret == ret_eof_have_data)) 1078 /* On EOF: Turn off chunked and send the trailer 1079 */ 1080 if (step_ret == ret_eof) { 1081 conn->chunked_encoding = false; 1082 cherokee_buffer_add_str (&conn->buffer, "0" CRLF CRLF); 1083 1084 return ret_eof_have_data; 1085 } 1086 1087 /* On last package: point cherokee_connection_send 1088 * about it. It will add the trailer. 1089 */ 1090 if (step_ret == ret_eof_have_data) 1074 1091 { 1075 cherokee_buffer_add_str (&conn->buffer, "0" CRLF CRLF); 1076 conn->chunked_encoding = false; 1077 1078 step_ret = ret_eof_have_data; 1079 1080 } else { 1081 /* Build the Chunked package header: 1082 * len(str(hex(4294967295))+"\r\n\0") = 13 1083 */ 1084 cherokee_buffer_clean (&conn->chunked_len); 1085 cherokee_buffer_ensure_size (&conn->chunked_len, 13); 1086 cherokee_buffer_add_ulong16 (&conn->chunked_len, conn->buffer.len); 1087 cherokee_buffer_add_str (&conn->chunked_len, CRLF); 1088 1089 conn->chunked_sent = 0; 1090 } 1092 conn->chunked_last_package = true; 1093 } 1094 1095 /* Build the Chunked package header: 1096 * len(str(hex(4294967295))+"\r\n\0") = 13 1097 */ 1098 cherokee_buffer_clean (&conn->chunked_len); 1099 cherokee_buffer_ensure_size (&conn->chunked_len, 13); 1100 cherokee_buffer_add_ulong16 (&conn->chunked_len, conn->buffer.len); 1101 cherokee_buffer_add_str (&conn->chunked_len, CRLF); 1102 1103 conn->chunked_sent = 0; 1091 1104 } 1092 1105 cherokee/trunk/cherokee/util.c
r1956 r1967 1472 1472 for (i=0; i<orig_len; i++) { 1473 1473 total += orig[i].iov_len; 1474 if (total > sent) {1474 if (total >= sent) { 1475 1475 return 0; 1476 1476 }