X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Ffrontend%2Fconnection.c;h=807bd074aa295108a5445cc6d3d82d760a996df2;hp=62e5f9de6cb717c6e5e8807771fae01d040f7de1;hb=ef3a4a955deddc45d5f381ce20653cac3ca51656;hpb=d24d97e4eaeb145fd6be0276ccf1570601a54d94 diff --git a/src/frontend/connection.c b/src/frontend/connection.c index 62e5f9d..807bd07 100644 --- a/src/frontend/connection.c +++ b/src/frontend/connection.c @@ -125,7 +125,7 @@ connection_init(sdb_object_t *obj, va_list ap) conn->read = conn_read; conn->write = conn_write; conn->finish = NULL; - conn->session = NULL; + conn->ssl_session = NULL; sock_fl = fcntl(conn->fd, F_GETFL); if (fcntl(conn->fd, F_SETFL, sock_fl | O_NONBLOCK)) { @@ -170,7 +170,18 @@ connection_destroy(sdb_object_t *obj) "(%zu byte%s left in buffer)", len, len == 1 ? "" : "s"); } - sdb_log(SDB_LOG_DEBUG, "frontend: Closing connection %s", obj->name); + if (conn->client_addr.ss_family == AF_UNIX) { + sdb_log(SDB_LOG_DEBUG, "frontend: Closing connection %s from peer %s", + obj->name, conn->username); + } + else { + char host[1024] = "", port[32] = ""; + getnameinfo((struct sockaddr *)&conn->client_addr, + conn->client_addr_len, host, sizeof(host), port, sizeof(port), + NI_NUMERICHOST | NI_NUMERICSERV); + sdb_log(SDB_LOG_DEBUG, "frontend: Closing connection %s from peer %s " + "at %s:%s", obj->name, conn->username, host, port); + } sdb_connection_close(conn); if (conn->username) @@ -280,23 +291,25 @@ command_handle(sdb_conn_t *conn) assert(conn && (conn->cmd != SDB_CONNECTION_IDLE)); assert(! conn->skip_len); - sdb_log(SDB_LOG_DEBUG, "frontend: Handling command %u (len: %u)", - conn->cmd, conn->cmd_len); - if (conn->cmd == SDB_CONNECTION_PING) status = sdb_connection_ping(conn); else if (conn->cmd == SDB_CONNECTION_STARTUP) - status = sdb_fe_session_start(conn); + status = sdb_conn_session_start(conn); + else if (conn->cmd == SDB_CONNECTION_QUERY) - status = sdb_fe_query(conn); + status = sdb_conn_query(conn); else if (conn->cmd == SDB_CONNECTION_FETCH) - status = sdb_fe_fetch(conn); + status = sdb_conn_fetch(conn); else if (conn->cmd == SDB_CONNECTION_LIST) - status = sdb_fe_list(conn); + status = sdb_conn_list(conn); else if (conn->cmd == SDB_CONNECTION_LOOKUP) - status = sdb_fe_lookup(conn); + status = sdb_conn_lookup(conn); else if (conn->cmd == SDB_CONNECTION_STORE) - status = sdb_fe_store(conn); + status = sdb_conn_store(conn); + + else if (conn->cmd == SDB_CONNECTION_SERVER_VERSION) + status = sdb_connection_server_version(conn); + else { sdb_log(SDB_LOG_WARNING, "frontend: Ignoring invalid command %#x", conn->cmd); @@ -535,5 +548,20 @@ sdb_connection_ping(sdb_conn_t *conn) return 0; } /* sdb_connection_ping */ +int +sdb_connection_server_version(sdb_conn_t *conn) +{ + char msg[sizeof(uint32_t) + strlen(SDB_VERSION_EXTRA) + 1]; + + if ((! conn) || (conn->cmd != SDB_CONNECTION_SERVER_VERSION)) + return -1; + + sdb_proto_marshal_int32(msg, sizeof(msg), (uint32_t)SDB_VERSION); + strncpy(msg + sizeof(uint32_t), SDB_VERSION_EXTRA, + sizeof(msg) - sizeof(uint32_t)); + sdb_connection_send(conn, SDB_CONNECTION_OK, (uint32_t)sizeof(msg), msg); + return 0; +} /* sdb_connection_server_version */ + /* vim: set tw=78 sw=4 ts=4 noexpandtab : */