diff options
author | Pablo Neira Ayuso <pablo@gnumonks.org> | 2011-10-13 14:17:40 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2011-10-14 20:51:19 +0200 |
commit | 6e0415a9cc7626825285437e99ba67dbf36e628c (patch) | |
tree | 7fbe0af95576740af323c902614baac867ac355f /src | |
parent | 2bd6adfd86f2dd88362e90701f9d347ececc83c6 (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')
-rw-r--r-- | src/datagram.c | 19 |
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 |