X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Ffrontend%2Fconnection.c;h=f35f7b39c82a8278f47137e65810163094c33044;hp=ed1eb2c8565058f562922f3d0b11071d46287ccb;hb=ad77ec3d257ac66d74e91452d098882247abdc0a;hpb=e75ea8e047dada17cba57b4c4d586f655294026e;ds=sidebyside diff --git a/src/frontend/connection.c b/src/frontend/connection.c index ed1eb2c..f35f7b3 100644 --- a/src/frontend/connection.c +++ b/src/frontend/connection.c @@ -107,6 +107,18 @@ peer(int sockfd) return strdup(result->pw_name); } /* peer */ +static ssize_t +conn_read(sdb_conn_t *conn, size_t len) +{ + return sdb_strbuf_read(conn->buf, conn->fd, len); +} /* conn_read */ + +static ssize_t +conn_write(sdb_conn_t *conn, const void *buf, size_t len) +{ + return sdb_write(conn->fd, len, buf); +} /* conn_write */ + static int connection_init(sdb_object_t *obj, va_list ap) { @@ -144,6 +156,12 @@ connection_init(sdb_object_t *obj, va_list ap) return -1; } + /* defaults */ + conn->read = conn_read; + conn->write = conn_write; + 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); @@ -193,6 +211,10 @@ connection_destroy(sdb_object_t *obj) conn->ready = 0; + if (conn->finish) + conn->finish(conn); + conn->finish = NULL; + if (conn->buf) { len = sdb_strbuf_len(conn->buf); if (len) @@ -400,7 +422,7 @@ connection_read(sdb_conn_t *conn) ssize_t status; errno = 0; - status = sdb_strbuf_read(conn->buf, conn->fd, 1024); + status = conn->read(conn, 1024); if (status < 0) { if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) break; @@ -458,6 +480,10 @@ sdb_connection_close(sdb_conn_t *conn) if (! conn) return; + if (conn->finish) + conn->finish(conn); + conn->finish = NULL; + /* close the connection even if someone else still references it */ if (conn->fd >= 0) close(conn->fd); @@ -510,7 +536,7 @@ sdb_connection_send(sdb_conn_t *conn, uint32_t code, if (sdb_proto_marshal(buf, sizeof(buf), code, msg_len, msg) < 0) return -1; - status = sdb_write(conn->fd, sizeof(buf), buf); + status = conn->write(conn, buf, sizeof(buf)); if (status < 0) { char errbuf[1024];