diff options
author | Harald Welte <laforge@osmocom.org> | 2024-03-02 20:12:20 +0100 |
---|---|---|
committer | laforge <laforge@osmocom.org> | 2024-03-04 19:16:14 +0000 |
commit | 85687bf176e4b9663f2396a27c28b49221c72fa3 (patch) | |
tree | 9e6b239a967ba766b3f4632f15713812ea33d298 | |
parent | cc1ac2167181391a61365bc662b9c100eedc3752 (diff) |
Change-Id: Icce412e6ee69366c7b131c9bc1d51e8d44204917
Depends: libosmocore.git Change-Id I5e922c54b3431d759b38e81e55076125c5a34008
Related: OS#5755
-rw-r--r-- | TODO-RELEASE | 1 | ||||
-rw-r--r-- | src/osmo-bsc/cbsp_link.c | 55 |
2 files changed, 12 insertions, 44 deletions
diff --git a/TODO-RELEASE b/TODO-RELEASE index 7a7ec225d..91e8dae1f 100644 --- a/TODO-RELEASE +++ b/TODO-RELEASE @@ -8,3 +8,4 @@ # If any interfaces have been removed or changed since the last public release: c:r:0. #library what description / commit summary line libosmocore > 1.9.0 working (compiling) OSMO_SOCKADDR_STR_FMT_ARGS_NOT_NULL +libosmocore > 1.9.0 we use the new osmo_cbsp_segmentation_cb diff --git a/src/osmo-bsc/cbsp_link.c b/src/osmo-bsc/cbsp_link.c index 849b802fe..98f25d358 100644 --- a/src/osmo-bsc/cbsp_link.c +++ b/src/osmo-bsc/cbsp_link.c @@ -54,7 +54,6 @@ const struct osmo_sockaddr_str bsc_cbc_default_server_local_addr = { static int cbsp_srv_closed_cb(struct osmo_stream_srv *conn) { struct bsc_cbc_link *cbc = osmo_stream_srv_get_data(conn); - //struct osmo_fd *ofd = osmo_stream_srv_get_ofd(conn); LOGP(DCBS, LOGL_NOTICE, "CBSP Server lost connection from %s\n", cbc->server.sock_name); talloc_free(cbc->server.sock_name); @@ -63,29 +62,11 @@ static int cbsp_srv_closed_cb(struct osmo_stream_srv *conn) return 0; } -static int cbsp_srv_cb(struct osmo_stream_srv *conn) +static int cbsp_srv_read_cb(struct osmo_stream_srv *conn, struct msgb *msg) { struct bsc_cbc_link *cbc = osmo_stream_srv_get_data(conn); - struct osmo_fd *ofd = osmo_stream_srv_get_ofd(conn); struct osmo_cbsp_decoded *decoded; - struct msgb *msg; - int rc; - - /* READ */ - rc = osmo_cbsp_recv_buffered(cbc, ofd->fd, &msg, &cbc->server.msg); - if (rc <= 0) { - if (rc == -EAGAIN || rc == -EINTR) { - /* more data needs to be read */ - return 0; - } else if (rc == -EPIPE || rc == -ECONNRESET) { - /* lost connection */ - } else if (rc == 0) { - /* connection closed */ - } - osmo_stream_srv_destroy(conn); - cbc->server.srv = NULL; - return -EBADF; - } + OSMO_ASSERT(msg); decoded = osmo_cbsp_decode(conn, msg); if (decoded) { @@ -117,12 +98,15 @@ static int cbsp_srv_link_accept_cb(struct osmo_stream_srv_link *link, int fd) return -1; } - srv = osmo_stream_srv_create(cbc, link, fd, cbsp_srv_cb, cbsp_srv_closed_cb, cbc); + srv = osmo_stream_srv_create2(cbc, link, fd, cbc); if (!srv) { LOGP(DCBS, LOGL_ERROR, "Unable to create stream server for %s\n", osmo_sock_get_name2(fd)); return -1; } + osmo_stream_srv_set_read_cb(srv, cbsp_srv_read_cb); + osmo_stream_srv_set_closed_cb(srv, cbsp_srv_closed_cb); + osmo_stream_srv_set_segmentation_cb(srv, osmo_cbsp_segmentation_cb); cbc->server.srv = srv; if (cbc->server.sock_name) @@ -141,11 +125,10 @@ static int cbsp_srv_link_accept_cb(struct osmo_stream_srv_link *link, int fd) static int cbsp_client_connect_cb(struct osmo_stream_cli *cli) { struct bsc_cbc_link *cbc = osmo_stream_cli_get_data(cli); - struct osmo_fd *ofd = osmo_stream_cli_get_ofd(cli); if (cbc->client.sock_name) talloc_free(cbc->client.sock_name); - cbc->client.sock_name = osmo_sock_get_name(cbc, ofd->fd); + cbc->client.sock_name = osmo_sock_get_name(cbc, osmo_stream_cli_get_fd(cli)); LOGP(DCBS, LOGL_NOTICE, "CBSP Client connected to CBC: %s\n", cbc->client.sock_name); @@ -165,28 +148,11 @@ static int cbsp_client_disconnect_cb(struct osmo_stream_cli *cli) return 0; } -static int cbsp_client_read_cb(struct osmo_stream_cli *cli) +static int cbsp_client_read_cb(struct osmo_stream_cli *cli, struct msgb *msg) { struct bsc_cbc_link *cbc = osmo_stream_cli_get_data(cli); - struct osmo_fd *ofd = osmo_stream_cli_get_ofd(cli); struct osmo_cbsp_decoded *decoded; - struct msgb *msg = NULL; - int rc; - - /* READ */ - rc = osmo_cbsp_recv_buffered(cbc, ofd->fd, &msg, &cbc->client.msg); - if (rc <= 0) { - if (rc == -EAGAIN || rc == -EINTR) { - /* more data needs to be read */ - return 0; - } else if (rc == -EPIPE || rc == -ECONNRESET) { - /* lost connection */ - } else if (rc == 0) { - /* connection closed */ - } - osmo_stream_cli_reconnect(cli); - return -EBADF; - } + OSMO_ASSERT(msg); decoded = osmo_cbsp_decode(cli, msg); if (decoded) { @@ -244,7 +210,8 @@ int bsc_cbc_link_restart(void) osmo_stream_cli_set_data(cbc->client.cli, cbc); osmo_stream_cli_set_connect_cb(cbc->client.cli, cbsp_client_connect_cb); osmo_stream_cli_set_disconnect_cb(cbc->client.cli, cbsp_client_disconnect_cb); - osmo_stream_cli_set_read_cb(cbc->client.cli, cbsp_client_read_cb); + osmo_stream_cli_set_read_cb2(cbc->client.cli, cbsp_client_read_cb); + osmo_stream_cli_set_segmentation_cb(cbc->client.cli, osmo_cbsp_segmentation_cb); } /* CBC side */ osmo_stream_cli_set_addr(cbc->client.cli, cbc->client.remote_addr.ip); |