diff options
-rw-r--r-- | examples/lapd-over-datagram-network.c | 2 | ||||
-rw-r--r-- | examples/lapd-over-datagram-user.c | 2 | ||||
-rw-r--r-- | include/osmocom/netif/datagram.h | 2 | ||||
-rw-r--r-- | src/datagram.c | 19 |
4 files changed, 20 insertions, 5 deletions
diff --git a/examples/lapd-over-datagram-network.c b/examples/lapd-over-datagram-network.c index 9f6e6d8..3dbc210 100644 --- a/examples/lapd-over-datagram-network.c +++ b/examples/lapd-over-datagram-network.c @@ -44,7 +44,7 @@ void sighandler(int foo) exit(EXIT_SUCCESS); } -int read_cb(struct osmo_dgram_server_conn *conn, struct msgb *msg) +int read_cb(struct osmo_dgram_conn *conn, struct msgb *msg) { int error; diff --git a/examples/lapd-over-datagram-user.c b/examples/lapd-over-datagram-user.c index 7337f5b..4c76fac 100644 --- a/examples/lapd-over-datagram-user.c +++ b/examples/lapd-over-datagram-user.c @@ -43,7 +43,7 @@ void sighandler(int foo) exit(EXIT_SUCCESS); } -static int read_cb(struct osmo_dgram_server_conn *conn, struct msgb *msg) +static int read_cb(struct osmo_dgram_conn *conn, struct msgb *msg) { int error; diff --git a/include/osmocom/netif/datagram.h b/include/osmocom/netif/datagram.h index 3a663d1..e635e83 100644 --- a/include/osmocom/netif/datagram.h +++ b/include/osmocom/netif/datagram.h @@ -39,7 +39,7 @@ void osmo_dgram_conn_set_local_addr(struct osmo_dgram_conn *conn, const char *ad void osmo_dgram_conn_set_remote_addr(struct osmo_dgram_conn *conn, const char *addr); void osmo_dgram_conn_set_local_port(struct osmo_dgram_conn *conn, uint16_t port); void 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)); +void osmo_dgram_conn_set_read_cb(struct osmo_dgram_conn *conn, int (*read_cb)(struct osmo_dgram_conn *conn, struct msgb *msg)); void osmo_dgram_conn_set_data(struct osmo_dgram_client_conn *conn, void *data); void osmo_dgram_conn_send(struct osmo_dgram_conn *conn, struct msgb *msg); 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 |