odissey: configure server tls context

This commit is contained in:
Dmitry Simonenko 2017-03-31 17:32:22 +03:00
parent 9e97ebfe46
commit 7a293bb9ed
2 changed files with 48 additions and 0 deletions

View File

@ -61,6 +61,10 @@ int od_beclose(od_server_t *server)
machine_close(server->io);
server->io = NULL;
}
if (server->tls) {
machine_free_tls(server->tls);
server->tls = NULL;
}
server->is_transaction = 0;
server->idle_time = 0;
so_keyinit(&server->key);
@ -277,9 +281,51 @@ od_bepop(od_pooler_t *pooler, od_route_t *route, od_client_t *client)
od_serverfree(server);
return NULL;
}
/* set network options */
machine_set_nodelay(server->io, pooler->od->scheme.nodelay);
if (pooler->od->scheme.keepalive > 0)
machine_set_keepalive(server->io, 1, pooler->od->scheme.keepalive);
/* set tls options */
od_schemeserver_t *server_scheme;
server_scheme = route->scheme->server;
if (server_scheme->tls_verify != OD_TDISABLE) {
server->tls = machine_create_tls(pooler->env);
if (server->tls == NULL) {
od_serverfree(server);
return NULL;
}
if (server_scheme->tls_verify == OD_TALLOW)
machine_tls_set_verify(server->tls, "none");
else
if (server_scheme->tls_verify == OD_TREQUIRE)
machine_tls_set_verify(server->tls, "peer");
else
machine_tls_set_verify(server->tls, "peer_strict");
if (server_scheme->tls_ca_file) {
rc = machine_tls_set_ca_file(server->tls, server_scheme->tls_ca_file);
if (rc == -1) {
od_serverfree(server);
return NULL;
}
}
if (server_scheme->tls_cert_file) {
rc = machine_tls_set_cert_file(server->tls, server_scheme->tls_cert_file);
if (rc == -1) {
od_serverfree(server);
return NULL;
}
}
if (server_scheme->tls_key_file) {
rc = machine_tls_set_key_file(server->tls, server_scheme->tls_key_file);
if (rc == -1) {
od_serverfree(server);
return NULL;
}
}
}
server->pooler = pooler;
server->route = route;
rc = od_beconnect(pooler, server);

View File

@ -23,6 +23,7 @@ struct od_server_t {
od_serverstate_t state;
so_stream_t stream;
machine_io_t io;
machine_tls_t tls;
int is_transaction;
int is_copy;
int64_t count_request;
@ -46,6 +47,7 @@ od_serverinit(od_server_t *s)
s->state = OD_SUNDEF;
s->route = NULL;
s->io = NULL;
s->tls = NULL;
s->pooler = NULL;
s->idle_time = 0;
s->is_transaction = 0;