X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Ffrontend%2Fconnection.c;h=962cd9cf8d9a14f9a3bc2f2a864e993958eb467d;hp=21bca4f28e1046a570c202f03eed89ed019e17a9;hb=5610952da2f4190573bc10467fcf249a9e7eff4b;hpb=c73181fc7b863f05d89c1879bcc9b7c24ad155cf diff --git a/src/frontend/connection.c b/src/frontend/connection.c index 21bca4f..962cd9c 100644 --- a/src/frontend/connection.c +++ b/src/frontend/connection.c @@ -65,6 +65,12 @@ connection_init(sdb_object_t *obj, va_list ap) "for a new connection"); return -1; } + conn->errbuf = sdb_strbuf_create(0); + if (! conn->errbuf) { + sdb_log(SDB_LOG_ERR, "frontend: Failed to allocate an error buffer " + "for a new connection"); + return -1; + } conn->client_addr_len = sizeof(conn->client_addr); conn->fd = accept(sock_fd, (struct sockaddr *)&conn->client_addr, @@ -128,6 +134,8 @@ connection_destroy(sdb_object_t *obj) sdb_strbuf_destroy(conn->buf); conn->buf = NULL; + sdb_strbuf_destroy(conn->errbuf); + conn->errbuf = NULL; } /* connection_destroy */ static sdb_type_t connection_type = { @@ -164,6 +172,9 @@ command_handle(sdb_conn_t *conn) sdb_log(SDB_LOG_DEBUG, "frontend: Handling command %u (len: %u)", conn->cmd, conn->cmd_len); + /* reset */ + sdb_strbuf_sprintf(conn->errbuf, ""); + switch (conn->cmd) { case CONNECTION_PING: status = sdb_connection_ping(conn); @@ -178,16 +189,18 @@ command_handle(sdb_conn_t *conn) default: { - char errbuf[1024]; sdb_log(SDB_LOG_WARNING, "frontend: Ignoring invalid command"); - snprintf(errbuf, sizeof(errbuf), "Invalid command %#x", conn->cmd); - sdb_connection_send(conn, CONNECTION_ERROR, - (uint32_t)(strlen(errbuf) + 1), errbuf); + sdb_strbuf_sprintf(conn->errbuf, "Invalid command %#x", conn->cmd); status = -1; break; } } + if (status) + sdb_connection_send(conn, CONNECTION_ERROR, + (uint32_t)sdb_strbuf_len(conn->errbuf), + sdb_strbuf_string(conn->errbuf)); + /* remove the command from the buffer */ if (conn->cmd_len) sdb_strbuf_skip(conn->buf, conn->cmd_len);