odyssey/sources/rules.h

166 lines
3.9 KiB
C

#ifndef ODYSSEY_RULES_H
#define ODYSSEY_RULES_H
/*
* Odyssey.
*
* Scalable PostgreSQL connection pooler.
*/
typedef struct od_rule_storage od_rule_storage_t;
typedef struct od_rule_auth od_rule_auth_t;
typedef struct od_rule od_rule_t;
typedef struct od_rules od_rules_t;
typedef enum
{
OD_RULE_TLS_DISABLE,
OD_RULE_TLS_ALLOW,
OD_RULE_TLS_REQUIRE,
OD_RULE_TLS_VERIFY_CA,
OD_RULE_TLS_VERIFY_FULL
} od_rule_tls_t;
typedef enum
{
OD_RULE_AUTH_UNDEF,
OD_RULE_AUTH_NONE,
OD_RULE_AUTH_BLOCK,
OD_RULE_AUTH_CLEAR_TEXT,
OD_RULE_AUTH_MD5,
OD_RULE_AUTH_SCRAM_SHA_256,
OD_RULE_AUTH_CERT
} od_rule_auth_type_t;
typedef enum
{
OD_RULE_POOL_SESSION,
OD_RULE_POOL_TRANSACTION
} od_rule_pool_type_t;
typedef enum
{
OD_RULE_STORAGE_REMOTE,
OD_RULE_STORAGE_LOCAL,
OD_RULE_STORAGE_REPLICATION,
OD_RULE_STORAGE_REPLICATION_LOGICAL,
} od_rule_storage_type_t;
struct od_rule_storage
{
char *name;
char *type;
od_rule_storage_type_t storage_type;
char *host;
int port;
od_rule_tls_t tls_mode;
char *tls;
char *tls_ca_file;
char *tls_key_file;
char *tls_cert_file;
char *tls_protocols;
od_list_t link;
};
struct od_rule_auth
{
char *common_name;
od_list_t link;
};
struct od_rule
{
/* versioning */
int mark;
int obsolete;
int refs;
/* id */
char *db_name;
int db_name_len;
int db_is_default;
char *user_name;
int user_name_len;
int user_is_default;
/* auth */
char *auth;
od_rule_auth_type_t auth_mode;
char *auth_query;
char *auth_query_db;
char *auth_pam_service;
char *auth_query_user;
int auth_common_name_default;
od_list_t auth_common_names;
int auth_common_names_count;
/* password */
char *password;
int password_len;
/* storage */
od_rule_storage_t *storage;
char *storage_name;
char *storage_db;
char *storage_user;
int storage_user_len;
char *storage_password;
int storage_password_len;
/* pool */
od_rule_pool_type_t pool;
char *pool_sz;
int pool_size;
int pool_timeout;
int pool_ttl;
int pool_discard;
int pool_cancel;
int pool_rollback;
/* misc */
int client_fwd_error;
int client_max_set;
int client_max;
int log_debug;
od_list_t link;
};
struct od_rules
{
od_list_t storages;
od_list_t rules;
};
void od_rules_init(od_rules_t*);
void od_rules_free(od_rules_t*);
int od_rules_validate(od_rules_t*, od_config_t*, od_logger_t*);
int od_rules_merge(od_rules_t*, od_rules_t*);
void od_rules_print(od_rules_t*, od_logger_t*);
/* rule */
od_rule_t*
od_rules_add(od_rules_t*);
void od_rules_ref(od_rule_t*);
void od_rules_unref(od_rule_t*);
int od_rules_compare(od_rule_t*, od_rule_t*);
od_rule_t*
od_rules_forward(od_rules_t*, char*, char*);
od_rule_t*
od_rules_match(od_rules_t*, char*, char*);
/* storage */
od_rule_storage_t*
od_rules_storage_add(od_rules_t*);
od_rule_storage_t*
od_rules_storage_match(od_rules_t*, char*);
od_rule_storage_t*
od_rules_storage_copy(od_rule_storage_t*);
void od_rules_storage_free(od_rule_storage_t*);
/* auth */
od_rule_auth_t*
od_rules_auth_add(od_rule_t*);
void od_rules_auth_free(od_rule_auth_t*);
#endif /* ODYSSEY_RULES_H */