diff --git a/include/r3.h b/include/r3.h index d8beed0..9cafb69 100644 --- a/include/r3.h +++ b/include/r3.h @@ -150,7 +150,7 @@ condition * condition_create(char * path); condition * condition_createl(char * path, int path_len); -int condition_cmp(condition *r1, condition *r2); +int condition_cmp(condition *r1, match_entry *r2); void r3_node_append_condition(node * n, condition * condition); diff --git a/src/node.c b/src/node.c index 7f77841..d975576 100644 --- a/src/node.c +++ b/src/node.c @@ -300,6 +300,14 @@ node * r3_tree_match(node * n, char * path, int path_len, match_entry * entry) { return NULL; } +condition * r3_node_match_condition(node *n, match_entry * entry) { + if (n->conditions && n->condition_len > 0) { + int i; + for (i = 0; i < n->condition_len ; i++ ) { + + } + } +} inline edge * r3_node_find_edge_str(node * n, char * str, int str_len) { int i = 0; @@ -526,25 +534,20 @@ void r3_tree_dump(node * n, int level) { * * -1 == different condition */ -int condition_cmp(condition *r1, condition *r2) { - if ( r1 == r2 ) { - return 0; - } - - if (r1->request_method != r2->request_method) { - return -1; +int condition_cmp(condition *r1, match_entry *r2) { + if (r1->request_method != 0) { + if (0 == (r1->request_method & r2->request_method) ) { + return -1; + } } int ret; - if ( r1->path && r2->path ) { ret = strcmp(r1->path, r2->path); if (ret != 0) { return -1; } - } else if ((r1->path && !r2->path) || (!r1->path && r2->path )) { - return -1; } if ( r1->host && r2->host ) { @@ -552,17 +555,13 @@ int condition_cmp(condition *r1, condition *r2) { if (ret != 0) { return -1; } - } else if ((r1->host && !r2->host) || (!r1->host && r2->host )) { - return -1; } - if (r1->remote_addr_pattern && r2->remote_addr_pattern ) { - ret = strcmp(r1->remote_addr_pattern, r2->remote_addr_pattern); + if (r1->remote_addr_pattern) { + ret = strcmp(r1->remote_addr_pattern, r2->remote_addr); if (ret != 0) { return -1; } - } else if ((r1->remote_addr_pattern && !r2->remote_addr_pattern) || (!r1->remote_addr_pattern && r2->remote_addr_pattern )) { - return -1; } return 0; } diff --git a/tests/bench_str.csv b/tests/bench_str.csv index bdc1ae7..acdbc55 100644 --- a/tests/bench_str.csv +++ b/tests/bench_str.csv @@ -128,3 +128,9 @@ 1400387761,10803251.35 1400387926,10854580.56 1400388003,11099634.54 +1400388313,11132551.99 +1400388338,11139229.93 +1400388369,10898128.85 +1400388529,10815527.23 +1400388539,10930897.10 +1400388591,10720695.10 diff --git a/tests/check_tree.c b/tests/check_tree.c index 3493796..8abd633 100644 --- a/tests/check_tree.c +++ b/tests/check_tree.c @@ -225,7 +225,7 @@ END_TEST START_TEST(test_route_cmp) { condition *r1 = condition_create("/blog/post"); - condition *r2 = condition_create("/blog/post"); + match_entry * r2 = match_entry_create("/blog/post"); fail_if( condition_cmp(r1, r2) == -1, "should be the same"); @@ -239,7 +239,7 @@ START_TEST(test_route_cmp) condition_free(r1); - condition_free(r2); + match_entry_free(r2); } END_TEST @@ -253,7 +253,6 @@ START_TEST(test_insert_route) condition *r2 = condition_create("/blog/post"); r1->request_method = METHOD_GET; r2->request_method = METHOD_POST; - fail_if( condition_cmp(r1, r2) == 0, "should be different"); match_entry * entry = match_entry_create("/blog/post");