From e87a00ba104c73ac481fea6d8d006b71847ae840 Mon Sep 17 00:00:00 2001 From: Dmitry Simonenko Date: Thu, 8 Jun 2017 14:30:00 +0300 Subject: [PATCH] odissey: add frontend_error() function; update shapito --- lib/shapito | 2 +- src/od_frontend.c | 21 +++++++++++++++++++++ src/od_router.c | 1 - 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/lib/shapito b/lib/shapito index 66de5a67..d5d3dd7c 160000 --- a/lib/shapito +++ b/lib/shapito @@ -1 +1 @@ -Subproject commit 66de5a6746bf76d36fc46036973cc7375f5d5036 +Subproject commit d5d3dd7c46a8325eccfbcb20f4a8bae790e89aaf diff --git a/src/od_frontend.c b/src/od_frontend.c index 5b03a8a4..9e137649 100644 --- a/src/od_frontend.c +++ b/src/od_frontend.c @@ -59,6 +59,25 @@ void od_frontend_close(od_client_t *client) od_client_free(client); } +int od_frontend_error(od_client_t *client, char *code, char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + char msg[512]; + int msg_len; + msg_len = snprintf(msg, sizeof(msg), "odissey: "); + msg_len += vsnprintf(msg, sizeof(msg), fmt, args); + va_end(args); + so_stream_t *stream = &client->stream; + so_stream_reset(stream); + int rc; + rc = so_bewrite_error(stream, code, msg, msg_len); + if (rc == -1) + return -1; + rc = od_write(client->io, stream); + return rc; +} + static int od_frontend_startup_read(od_client_t *client) { @@ -451,6 +470,8 @@ void od_frontend(void *arg) case OD_RERROR_LIMIT: od_error_client(&instance->log, client->id, NULL, "route connection limit reached, closing"); + od_frontend_error(client, SO_ERROR_TOO_MANY_CONNECTIONS, + "too many connections"); od_frontend_close(client); return; case OD_ROK:; diff --git a/src/od_router.c b/src/od_router.c index 3909b641..00e8f1e7 100644 --- a/src/od_router.c +++ b/src/od_router.c @@ -149,7 +149,6 @@ od_router_attacher(void *arg) route->scheme->target, route->scheme->pool_size); - /* enqueue client */ od_clientpool_set(&route->client_pool, client, OD_CQUEUE);