From c43bb089067ca05af4992fbafe46827a1f0a6e9b Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Mon, 17 Oct 2011 12:28:12 +0200 Subject: datagram: add osmo_dgram_conn_recv We provide osmo_dgram_conn_recv(...) which allows you to take control on the message allocation and receival process. Instead of hiding this details inside the datagram infrastructure. Providing more control to clients of this code means more flexibility. --- examples/lapd-over-datagram-network.c | 12 +++++++++++- examples/lapd-over-datagram-user.c | 14 +++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) (limited to 'examples') diff --git a/examples/lapd-over-datagram-network.c b/examples/lapd-over-datagram-network.c index 58ee3fa..fb94515 100644 --- a/examples/lapd-over-datagram-network.c +++ b/examples/lapd-over-datagram-network.c @@ -44,12 +44,22 @@ void sighandler(int foo) exit(EXIT_SUCCESS); } -int read_cb(struct osmo_dgram_conn *conn, struct msgb *msg) +int read_cb(struct osmo_dgram_conn *conn) { int error; + struct msgb *msg; LOGP(DLAPDTEST, LOGL_DEBUG, "received message from datagram\n"); + msg = msgb_alloc(1200, "LAPD/test"); + if (msg == NULL) { + LOGP(DLAPDTEST, LOGL_ERROR, "cannot allocate message\n"); + return -1; + } + if (osmo_dgram_conn_recv(conn, msg) < 0) { + LOGP(DLAPDTEST, LOGL_ERROR, "cannot receive message\n"); + return -1; + } if (lapd_receive(lapd, msg, &error) < 0) { LOGP(DLAPDTEST, LOGL_ERROR, "lapd_receive returned error!\n"); return -1; diff --git a/examples/lapd-over-datagram-user.c b/examples/lapd-over-datagram-user.c index 68fa424..601d12c 100644 --- a/examples/lapd-over-datagram-user.c +++ b/examples/lapd-over-datagram-user.c @@ -55,11 +55,23 @@ void sighandler(int foo) exit(EXIT_SUCCESS); } -static int read_cb(struct osmo_dgram_conn *conn, struct msgb *msg) +static int read_cb(struct osmo_dgram_conn *conn) { int error; + struct msgb *msg; + msg = msgb_alloc(1200, "LAPD/test"); + if (msg == NULL) { + LOGP(DLAPDTEST, LOGL_ERROR, "cannot allocate message\n"); + return -1; + } + if (osmo_dgram_conn_recv(conn, msg) < 0) { + msgb_free(msg); + LOGP(DLAPDTEST, LOGL_ERROR, "cannot receive message\n"); + return -1; + } if (lapd_receive(lapd, msg, &error) < 0) { + msgb_free(msg); LOGP(DLINP, LOGL_ERROR, "lapd_receive returned error!\n"); return -1; } -- cgit v1.2.3