aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/lapd-over-datagram-network.c2
-rw-r--r--examples/lapd-over-datagram-user.c2
-rw-r--r--include/osmocom/netif/datagram.h2
-rw-r--r--src/datagram.c19
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