Changeset 1975
- Timestamp:
- 09/11/08 20:00:53 (4 months ago)
- Files:
-
- cherokee/trunk/ChangeLog (modified) (1 diff)
- cherokee/trunk/cherokee/Makefile.am (modified) (1 diff)
- cherokee/trunk/cherokee/config_entry.c (modified) (6 diffs)
- cherokee/trunk/cherokee/config_entry.h (modified) (2 diffs)
- cherokee/trunk/cherokee/connection-protected.h (modified) (3 diffs)
- cherokee/trunk/cherokee/connection.c (modified) (5 diffs)
- cherokee/trunk/cherokee/encoder_table.c (deleted)
- cherokee/trunk/cherokee/encoder_table.h (deleted)
- cherokee/trunk/cherokee/server-protected.h (modified) (2 diffs)
- cherokee/trunk/cherokee/server.c (modified) (4 diffs)
- cherokee/trunk/cherokee/thread.c (modified) (1 diff)
- cherokee/trunk/cherokee/virtual_server.c (modified) (6 diffs)
- cherokee/trunk/qa/089-gzip-encoding.py (modified) (1 diff)
- cherokee/trunk/qa/168-Deflate-Encoding.py (modified) (1 diff)
- cherokee/trunk/qa/run-tests.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
cherokee/trunk/ChangeLog
r1970 r1975 1 1 2008-09-11 Alvaro Lopez Ortega <alvaro@alobbs.com> 2 3 * cherokee/virtual_server.c, cherokee/encoder_table.c, 4 cherokee/encoder_table.h, cherokee/Makefile.am, 5 cherokee/connection-protected.h, cherokee/config_entry.c, 6 cherokee/config_entry.h, cherokee/thread.c, 7 cherokee/server-protected.h, cherokee/connection.c, 8 cherokee/server.c, qa/089-gzip-encoding.py, qa/run-tests.py, 9 qa/168-Deflate-Encoding.py: Encoders are now a configuration 10 entry (directories, regexs, extensions, etc) property rather than 11 a global server one. 2 12 3 13 * admin/ModuleDbslayer.py (ModuleDbslayer._op_apply_changes): Add cherokee/trunk/cherokee/Makefile.am
r1969 r1975 1088 1088 encoder.h \ 1089 1089 encoder.c \ 1090 encoder_table.h \1091 encoder_table.c \1092 1090 logger.h \ 1093 1091 logger.c \ cherokee/trunk/cherokee/config_entry.c
r1880 r1975 29 29 #include "http.h" 30 30 #include "util.h" 31 #include "encoder.h" 31 32 32 33 #define ENTRIES "config,rules" … … 37 38 table_validator 38 39 } prop_table_types_t; 39 40 40 41 41 42 /* Implements _new() and _free() … … 66 67 entry->expiration_time = 0; 67 68 69 entry->encoders = NULL; 70 68 71 return ret_ok; 69 72 } … … 102 105 entry->users = NULL; 103 106 } 104 105 return ret_ok; 106 } 107 108 109 ret_t 110 cherokee_config_entry_set_handler (cherokee_config_entry_t *entry, cherokee_plugin_info_handler_t *plugin_info) 107 108 if (entry->encoders) { 109 cherokee_avl_mrproper (entry->encoders, NULL); 110 entry->encoders = NULL; 111 } 112 113 return ret_ok; 114 } 115 116 ret_t 117 cherokee_config_entry_add_encoder (cherokee_config_entry_t *entry, 118 cherokee_buffer_t *name, 119 cherokee_plugin_info_t *plugin_info) 120 { 121 if (entry->encoders == NULL) { 122 cherokee_avl_new (&entry->encoders); 123 } 124 125 cherokee_avl_add (entry->encoders, name, (void*)plugin_info->instance); 126 return ret_ok; 127 } 128 129 130 ret_t 131 cherokee_config_entry_set_handler (cherokee_config_entry_t *entry, 132 cherokee_plugin_info_handler_t *plugin_info) 111 133 { 112 134 return_if_fail (plugin_info != NULL, ret_error); … … 169 191 entry->expiration_time = source->expiration_time; 170 192 } 193 194 if (! entry->encoders) 195 entry->encoders = source->encoders; 171 196 172 197 return ret_ok; … … 189 214 printf ("expiration type: %d\n", entry->expiration); 190 215 printf ("expiration_time %lu\n", entry->expiration_time); 191 192 return ret_ok; 193 } 216 printf ("encoders_accepted %p\n", entry->encoders); 217 218 return ret_ok; 219 } cherokee/trunk/cherokee/config_entry.h
r1880 r1975 71 71 cherokee_expiration_t expiration; 72 72 time_t expiration_time; 73 74 /* Encoding 75 */ 76 cherokee_avl_t *encoders; 77 73 78 } cherokee_config_entry_t; 74 79 … … 81 86 ret_t cherokee_config_entry_mrproper (cherokee_config_entry_t *entry); 82 87 83 ret_t cherokee_config_entry_set_handler (cherokee_config_entry_t *entry, cherokee_plugin_info_handler_t *modinfo); 88 ret_t cherokee_config_entry_add_encoder (cherokee_config_entry_t *entry, cherokee_buffer_t *name, cherokee_plugin_info_t *plugin_info); 89 ret_t cherokee_config_entry_set_handler (cherokee_config_entry_t *entry, cherokee_plugin_info_handler_t *plugin_info); 84 90 ret_t cherokee_config_entry_complete (cherokee_config_entry_t *entry, cherokee_config_entry_t *source); 85 91 cherokee/trunk/cherokee/connection-protected.h
r1967 r1975 59 59 #include "encoder.h" 60 60 #include "iocache.h" 61 #include "encoder_table.h"62 61 #include "post.h" 63 62 #include "header-protected.h" … … 235 234 */ 236 235 ret_t cherokee_connection_create_handler (cherokee_connection_t *conn, cherokee_config_entry_t *config_entry); 236 ret_t cherokee_connection_create_encoder (cherokee_connection_t *conn, cherokee_avl_t *encoders, cherokee_avl_t *accept_enc); 237 237 ret_t cherokee_connection_setup_error_handler (cherokee_connection_t *conn); 238 238 ret_t cherokee_connection_check_authentication (cherokee_connection_t *conn, cherokee_config_entry_t *config_entry); … … 252 252 ret_t cherokee_connection_build_header (cherokee_connection_t *conn); 253 253 ret_t cherokee_connection_get_request (cherokee_connection_t *conn); 254 ret_t cherokee_connection_parse_ header (cherokee_connection_t *conn, cherokee_encoder_table_t *encoders);254 ret_t cherokee_connection_parse_range (cherokee_connection_t *conn); 255 255 int cherokee_connection_is_userdir (cherokee_connection_t *conn); 256 256 ret_t cherokee_connection_build_local_directory (cherokee_connection_t *conn, cherokee_virtual_server_t *vsrv, cherokee_config_entry_t *entry); cherokee/trunk/cherokee/connection.c
r1967 r1975 71 71 #include "buffer.h" 72 72 #include "config_entry.h" 73 #include "encoder_table.h"74 73 #include "server-protected.h" 75 74 #include "access.h" … … 1155 1154 1156 1155 static ret_t 1157 get_encoding (cherokee_connection_t *conn, 1158 char *ptr, 1159 cherokee_encoder_table_t *encoders) 1160 { 1156 get_encoding (cherokee_connection_t *conn, 1157 char *ptr, 1158 cherokee_avl_t *encoders, 1159 cherokee_avl_t *encoders_accepted) 1160 { 1161 ret_t ret; 1161 1162 char tmp; 1162 1163 char *i1, *i2; 1163 1164 char *end; 1164 char *ext; 1165 ret_t ret; 1165 encoder_func_new_t new_func = NULL; 1166 1166 1167 1167 /* ptr = Header at the "Accept-Encoding" position … … 1171 1171 return ret_error; 1172 1172 } 1173 1174 /* Look for the request extension1175 */1176 ext = strrchr (conn->request.buf, '.');1177 if (ext == NULL) {1178 return ret_ok;1179 }1180 1181 1173 *end = '\0'; /* (1) */ 1182 1174 1183 1175 i1 = ptr; 1184 1185 1176 do { 1186 while (*i1 == ' ') i1++; 1177 while (*i1 == ' ') 1178 i1++; 1187 1179 1188 1180 i2 = strchr (i1, ','); 1189 if (!i2) i2 = strchr (i1, ';'); 1190 if (!i2) i2 = end; 1181 if (!i2) 1182 i2 = strchr (i1, ';'); 1183 if (!i2) 1184 i2 = end; 1191 1185 1192 1186 tmp = *i2; /* (2) */ 1193 1187 *i2 = '\0'; 1194 cherokee_encoder_table_new_encoder (encoders, i1, ext+1, &conn->encoder); 1195 *i2 = tmp; /* (2') */ 1196 1197 if (conn->encoder != NULL) { 1198 /* Init the encoder related objects 1199 */ 1188 ret = cherokee_avl_get_ptr (encoders_accepted, i1, (void **)&new_func); 1189 *i2 = tmp; /* (2') */ 1190 1191 if ((ret == ret_ok) && (new_func)) { 1192 ret = new_func ((void **)&conn->encoder); 1193 if (unlikely (ret != ret_ok)) 1194 goto error; 1195 1200 1196 ret = cherokee_encoder_init (conn->encoder, conn); 1201 if ( ret < ret_ok) {1197 if (unlikely (ret != ret_ok)) 1202 1198 goto error; 1203 } 1199 1204 1200 cherokee_buffer_clean (&conn->encoder_buffer); 1205 1201 break; … … 1930 1926 1931 1927 ret_t 1932 cherokee_connection_parse_ header (cherokee_connection_t *conn, cherokee_encoder_table_t *encoders)1928 cherokee_connection_parse_range (cherokee_connection_t *conn) 1933 1929 { 1934 1930 ret_t ret; … … 1951 1947 } 1952 1948 1953 /* Look for "Accept-Encoding:" 1949 return ret_ok; 1950 } 1951 1952 ret_t 1953 cherokee_connection_create_encoder (cherokee_connection_t *conn, 1954 cherokee_avl_t *encoders, 1955 cherokee_avl_t *encoders_accepted) 1956 { 1957 ret_t ret; 1958 char *ptr; 1959 cuint_t ptr_len; 1960 1961 /* No encoders are accepted 1962 */ 1963 if ((encoders_accepted == NULL) || 1964 (encoders_accepted->root == NULL)) 1965 return ret_ok; 1966 1967 /* Process the "Accept-Encoding" header 1954 1968 */ 1955 1969 ret = cherokee_header_get_known (&conn->header, header_accept_encoding, &ptr, &ptr_len); 1956 1970 if (ret == ret_ok) { 1957 ret = get_encoding (conn, ptr, encoders );1971 ret = get_encoding (conn, ptr, encoders, encoders_accepted); 1958 1972 if (ret < ret_ok) { 1959 1973 return ret; 1960 1974 } 1961 1975 } 1962 1976 1963 1977 return ret_ok; 1964 1978 } cherokee/trunk/cherokee/server-protected.h
r1949 r1975 46 46 #include "fdpoll.h" 47 47 #include "virtual_server.h" 48 #include "encoder_table.h"49 48 #include "thread.h" 50 49 #include "plugin_loader.h" … … 83 82 */ 84 83 cherokee_plugin_loader_t loader; 85 cherokee_ encoder_table_tencoders;84 cherokee_avl_t encoders; 86 85 87 86 /* Tables: iocache, nonces, etc cherokee/trunk/cherokee/server.c
r1949 r1975 202 202 /* Encoders 203 203 */ 204 cherokee_ encoder_table_init (&n->encoders);204 cherokee_avl_init (&n->encoders); 205 205 206 206 /* Server string … … 327 327 /* Attached objects 328 328 */ 329 cherokee_ encoder_table_mrproper (&srv->encoders);329 cherokee_avl_mrproper (&srv->encoders, NULL); 330 330 331 331 cherokee_mime_free (srv->mime); … … 1245 1245 } 1246 1246 1247 1248 static ret_t1249 add_encoder (cherokee_config_node_t *node, void *data)1250 {1251 ret_t ret;1252 cherokee_encoder_table_entry_t *enc = NULL;1253 cherokee_matching_list_t *matching = NULL;1254 cherokee_plugin_info_t *info = NULL;1255 cherokee_server_t *srv = SRV(data);1256 1257 TRACE(ENTRIES, "Encoder: %s\n", node->key.buf);1258 1259 /* Set the matching list1260 */1261 ret = cherokee_matching_list_new (&matching);1262 if (ret != ret_ok) goto error;1263 1264 ret = cherokee_matching_list_configure (matching, node);1265 if (ret != ret_ok) goto error;1266 1267 /* Load the module library and set the info1268 */1269 ret = cherokee_plugin_loader_get (&srv->loader, node->key.buf, &info);1270 if (ret != ret_ok) goto error;1271 1272 ret = cherokee_encoder_table_entry_new (&enc);1273 if (ret != ret_ok) goto error;1274 1275 ret = cherokee_encoder_table_entry_get_info (enc, info);1276 if (ret != ret_ok) goto error;1277 1278 cherokee_encoder_entry_set_matching_list (enc, matching);1279 1280 /* Set in the encoders table1281 */1282 ret = cherokee_encoder_table_set (&srv->encoders, &node->key, enc);1283 if (ret != ret_ok) goto error;1284 1285 return ret_ok;1286 1287 error:1288 TRACE(ENTRIES, "Could not add '%s' encoder\n", node->key.buf);1289 return ret;1290 }1291 1247 1292 1248 static ret_t … … 1551 1507 srv->group = grp->gr_gid; 1552 1508 1553 } else if (equal_buf_str (&conf->key, "encoder")) {1554 ret = cherokee_config_node_while (conf, add_encoder, srv);1555 if (ret != ret_ok) return ret;1556 1557 1509 } else if (equal_buf_str (&conf->key, "module_dir") || 1558 1510 equal_buf_str (&conf->key, "module_deps")) { cherokee/trunk/cherokee/thread.c
r1959 r1975 957 957 continue; 958 958 } 959 960 /* Instance a encoded if needed 961 */ 962 ret = cherokee_connection_create_encoder (conn, &srv->encoders, entry.encoders); 963 if (unlikely (ret != ret_ok)) { 964 cherokee_connection_setup_error_handler (conn); 965 conn->phase = phase_init; 966 continue; 967 } 959 968 960 969 /* Parse the rest of headers 961 970 */ 962 ret = cherokee_connection_parse_ header (conn, &srv->encoders);971 ret = cherokee_connection_parse_range (conn); 963 972 if (unlikely (ret != ret_ok)) { 964 973 cherokee_connection_setup_error_handler (conn); cherokee/trunk/cherokee/virtual_server.c
r1930 r1975 585 585 ret_t ret; 586 586 cherokee_buffer_t *tmp; 587 cherokee_list_t *i; 587 588 cherokee_plugin_info_t *info = NULL; 588 589 cherokee_virtual_server_t *vserver = ((void **)data)[0]; 589 590 cherokee_config_entry_t *entry = ((void **)data)[1]; 591 cherokee_server_t *srv = VSERVER_SRV(vserver); 590 592 591 593 if (equal_buf_str (&conf->key, "allow_from")) { … … 610 612 tmp = &conf->val; 611 613 612 ret = cherokee_plugin_loader_get (& SRV(vserver->server_ref)->loader, tmp->buf, &info);614 ret = cherokee_plugin_loader_get (&srv->loader, tmp->buf, &info); 613 615 if (ret != ret_ok) 614 616 return ret; … … 617 619 handler_func_configure_t configure = info->configure; 618 620 619 ret = configure (conf, vserver->server_ref, &entry->handler_properties);621 ret = configure (conf, srv, &entry->handler_properties); 620 622 if (ret != ret_ok) 621 623 return ret; … … 625 627 cherokee_config_entry_set_handler (entry, PLUGIN_INFO_HANDLER(info)); 626 628 629 } else if (equal_buf_str (&conf->key, "encoder")) { 630 cherokee_config_node_foreach (i, conf) { 631 tmp = &CONFIG_NODE(i)->val; 632 633 ret = cherokee_plugin_loader_get (&srv->loader, tmp->buf, &info); 634 if (ret != ret_ok) return ret; 635 636 ret = cherokee_avl_get (&srv->encoders, tmp, NULL); 637 if (ret != ret_ok) { 638 cherokee_avl_add (&srv->encoders, tmp, info); 639 } 640 641 cherokee_config_entry_add_encoder (entry, tmp, info); 642 TRACE(ENTRIES, "Encoder: %s\n", tmp->buf); 643 } 644 627 645 } else if (equal_buf_str (&conf->key, "auth")) { 628 646 cherokee_plugin_info_validator_t *vinfo; … … 632 650 tmp = &conf->val; 633 651 634 ret = cherokee_plugin_loader_get (& SRV(vserver->server_ref)->loader, tmp->buf, &info);652 ret = cherokee_plugin_loader_get (&srv->loader, tmp->buf, &info); 635 653 if (ret != ret_ok) 636 654 return ret; … … 641 659 validator_func_configure_t configure = info->configure; 642 660 643 ret = configure (conf, vserver->server_ref, &entry->validator_properties);661 ret = configure (conf, srv, &entry->validator_properties); 644 662 if (ret != ret_ok) return ret; 645 663 } cherokee/trunk/qa/089-gzip-encoding.py
r1738 r1975 12 12 vserver!1!rule!890!match!directory = /gzip1 13 13 vserver!1!rule!890!handler = file 14 vserver!1!rule!890!encoder!1 = gzip 14 15 """ 15 16 cherokee/trunk/qa/168-Deflate-Encoding.py
r1738 r1975 12 12 vserver!1!rule!1680!match!directory = /deflate1 13 13 vserver!1!rule!1680!handler = file 14 vserver!1!rule!1680!encoder!1 = deflate 14 15 """ 15 16 cherokee/trunk/qa/run-tests.py
r1949 r1975 141 141 server!listen = 127.0.0.1 142 142 server!panic_action = %(panic)s 143 server!encoder!gzip!allow = txt144 server!encoder!deflate!allow = txt145 143 server!pid_file = %(pid)s 146 144 server!module_dir = %(CHEROKEE_MODS)s