aboutsummaryrefslogtreecommitdiffstats
path: root/src/datagram.c
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@gnumonks.org>2011-10-13 14:17:40 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2011-10-14 20:51:19 +0200
commit6e0415a9cc7626825285437e99ba67dbf36e628c (patch)
tree7fbe0af95576740af323c902614baac867ac355f /src/datagram.c
parent2bd6adfd86f2dd88362e90701f9d347ececc83c6 (diff)
datagram: change prototype of osmo_dgram_conn_set_read_cb
This patch changes the prototype of osmo_dgram_conn_set_read_cb. Now it takes one callback to a generic struct osmo_dgram_conn instead of osmo_dgram_server_conn. This is useful in case that you want to reply to one message using the datagram socket (without this change is not possible).
Diffstat (limited to 'src/datagram.c')
-rw-r--r--src/datagram.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/datagram.c b/src/datagram.c
index 36cf8bf..8907a12 100644
--- a/src/datagram.c
+++ b/src/datagram.c
@@ -297,9 +297,21 @@ void osmo_dgram_server_conn_close(struct osmo_dgram_server_conn *conn)
struct osmo_dgram_conn {
struct osmo_dgram_server_conn *server;
struct osmo_dgram_client_conn *client;
+ int (*read_cb)(struct osmo_dgram_conn *conn, struct msgb *msg);
void *data;
};
+static int
+dgram_server_conn_cb(struct osmo_dgram_server_conn *server, struct msgb *msg)
+{
+ struct osmo_dgram_conn *conn = server->data;
+
+ if (conn->read_cb)
+ return conn->read_cb(conn, msg);
+
+ return 0;
+}
+
struct osmo_dgram_conn *osmo_dgram_conn_create(void *ctx)
{
struct osmo_dgram_conn *conn;
@@ -312,6 +324,9 @@ struct osmo_dgram_conn *osmo_dgram_conn_create(void *ctx)
if (conn->server == NULL)
return NULL;
+ osmo_dgram_server_conn_set_read_cb(conn->server, dgram_server_conn_cb);
+ conn->server->data = conn;
+
conn->client = osmo_dgram_client_conn_create(ctx);
if (conn->client == NULL) {
osmo_dgram_server_conn_destroy(conn->server);
@@ -352,9 +367,9 @@ osmo_dgram_conn_set_remote_port(struct osmo_dgram_conn *conn, uint16_t port)
}
void osmo_dgram_conn_set_read_cb(struct osmo_dgram_conn *conn,
- int (*read_cb)(struct osmo_dgram_server_conn *conn, struct msgb *msg))
+ int (*read_cb)(struct osmo_dgram_conn *conn, struct msgb *msg))
{
- conn->server->cb = read_cb;
+ conn->read_cb = read_cb;
}
void