diff --git a/core/od_config.c b/core/od_config.c index a9637ef3..27695693 100644 --- a/core/od_config.c +++ b/core/od_config.c @@ -49,6 +49,7 @@ static odkeyword_t od_config_keywords[] = od_keyword("routing", OD_LROUTING), od_keyword("route", OD_LROUTE), od_keyword("mode", OD_LMODE), + od_keyword("database", OD_LDATABASE), od_keyword("user", OD_LUSER), od_keyword("password", OD_LPASSWORD), od_keyword("pool_min", OD_LPOOL_MIN), @@ -264,7 +265,7 @@ od_configparse_route(odconfig_t *config, odtoken_t *name) od_schemeroute_add(config->scheme); if (route == NULL) return -1; - route->database = name->v.string; + route->target = name->v.string; if (od_confignext(config, '{', NULL) == -1) return -1; odtoken_t *tk; @@ -298,6 +299,12 @@ od_configparse_route(odconfig_t *config, odtoken_t *name) return -1; route->pool_max = tk->v.num; continue; + /* database */ + case OD_LDATABASE: + if (od_confignext(config, OD_LSTRING, &tk) == -1) + return -1; + route->database = tk->v.string; + continue; /* user */ case OD_LUSER: if (od_confignext(config, OD_LSTRING, &tk) == -1) diff --git a/core/od_config.h b/core/od_config.h index 3cc2283d..1a446328 100644 --- a/core/od_config.h +++ b/core/od_config.h @@ -26,6 +26,7 @@ enum { OD_LROUTING, OD_LROUTE, OD_LMODE, + OD_LDATABASE, OD_LUSER, OD_LPASSWORD, OD_LPOOL_MIN, diff --git a/core/od_scheme.c b/core/od_scheme.c index 89984f47..f7cf3817 100644 --- a/core/od_scheme.c +++ b/core/od_scheme.c @@ -75,6 +75,19 @@ od_schemeserver_match(odscheme_t *scheme, char *name) return NULL; } +odscheme_route_t* +od_schemeroute_match(odscheme_t *scheme, char *name) +{ + odlist_t *i; + od_listforeach(&scheme->routing_table, i) { + odscheme_route_t *route; + route = od_container_of(i, odscheme_route_t, link); + if (strcmp(route->target, name) == 0) + return route; + } + return NULL; +} + odscheme_route_t* od_schemeroute_add(odscheme_t *scheme) { diff --git a/core/od_scheme.h b/core/od_scheme.h index 146eb109..af13f218 100644 --- a/core/od_scheme.h +++ b/core/od_scheme.h @@ -35,6 +35,7 @@ struct odscheme_server_t { struct odscheme_route_t { odscheme_server_t *server; + char *target; char *route; char *database; char *user; @@ -81,4 +82,7 @@ od_schemeserver_match(odscheme_t*, char*); odscheme_route_t* od_schemeroute_add(odscheme_t*); +odscheme_route_t* +od_schemeroute_match(odscheme_t*, char*); + #endif