Code

connection: Let sdb_connection_accept() handle all connection setup.
[sysdb.git] / src / frontend / connection.c
index 700c84ae42af2e0793b289e82c770807df609e51..6b359d347a9f14e3026ebcd6a6df37708eab7da7 100644 (file)
@@ -123,12 +123,6 @@ connection_init(sdb_object_t *obj, va_list ap)
        conn->finish = NULL;
        conn->session = NULL;
 
-       if (conn->client_addr.ss_family != AF_UNIX) {
-               sdb_log(SDB_LOG_ERR, "frontend: Accepted connection using "
-                               "unexpected family type %d", conn->client_addr.ss_family);
-               return -1;
-       }
-
        sock_fl = fcntl(conn->fd, F_GETFL);
        if (fcntl(conn->fd, F_SETFL, sock_fl | O_NONBLOCK)) {
                char buf[1024];
@@ -413,15 +407,22 @@ sdb_connection_enable_logging(void)
 } /* sdb_connection_enable_logging */
 
 sdb_conn_t *
-sdb_connection_accept(int fd)
+sdb_connection_accept(int fd, sdb_conn_setup_cb setup, void *user_data)
 {
+       sdb_conn_t *conn;
+
        if (fd < 0)
                return NULL;
 
        /* the placeholder will be replaced with the accepted file
         * descriptor when initializing the object */
-       return CONN(sdb_object_create(CONN_FD_PREFIX CONN_FD_PLACEHOLDER,
+       conn = CONN(sdb_object_create(CONN_FD_PREFIX CONN_FD_PLACEHOLDER,
                                connection_type, fd));
+       if (setup && (setup(conn, user_data) < 0)) {
+               sdb_object_deref(SDB_OBJ(conn));
+               return NULL;
+       }
+       return conn;
 } /* sdb_connection_create */
 
 void