pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-cbc/+/28853 )
Change subject: Propagate error to caller when tx cbsp/sbcap Write-Replace-Req fails ......................................................................
Propagate error to caller when tx cbsp/sbcap Write-Replace-Req fails
Change-Id: Ie40c8e41c297398bbec48f7bb2c60cfdc703fa5d --- M include/osmocom/cbc/cbsp_link.h M include/osmocom/cbc/sbcap_link.h M src/cbc_message.c M src/cbsp_link.c M src/sbcap_link.c 5 files changed, 19 insertions(+), 15 deletions(-)
Approvals: Jenkins Builder: Verified fixeria: Looks good to me, approved
diff --git a/include/osmocom/cbc/cbsp_link.h b/include/osmocom/cbc/cbsp_link.h index a96162d..0a18d21 100644 --- a/include/osmocom/cbc/cbsp_link.h +++ b/include/osmocom/cbc/cbsp_link.h @@ -47,6 +47,6 @@ void cbc_cbsp_link_free(struct cbc_cbsp_link *link); const char *cbc_cbsp_link_name(const struct cbc_cbsp_link *link); int cbc_cbsp_link_open_cli(struct cbc_cbsp_link *link); -void cbc_cbsp_link_tx(struct cbc_cbsp_link *link, struct osmo_cbsp_decoded *cbsp); +int cbc_cbsp_link_tx(struct cbc_cbsp_link *link, struct osmo_cbsp_decoded *cbsp); void cbc_cbsp_link_close(struct cbc_cbsp_link *link); int cbc_cbsp_link_rx_cb(struct cbc_cbsp_link *link, struct osmo_cbsp_decoded *dec); diff --git a/include/osmocom/cbc/sbcap_link.h b/include/osmocom/cbc/sbcap_link.h index 0c23710..ee87be4 100644 --- a/include/osmocom/cbc/sbcap_link.h +++ b/include/osmocom/cbc/sbcap_link.h @@ -47,6 +47,6 @@ void cbc_sbcap_link_free(struct cbc_sbcap_link *link); const char *cbc_sbcap_link_name(const struct cbc_sbcap_link *link); int cbc_sbcap_link_open_cli(struct cbc_sbcap_link *link); -void cbc_sbcap_link_tx(struct cbc_sbcap_link *link, SBcAP_SBC_AP_PDU_t *pdu); +int cbc_sbcap_link_tx(struct cbc_sbcap_link *link, SBcAP_SBC_AP_PDU_t *pdu); void cbc_sbcap_link_close(struct cbc_sbcap_link *link); int cbc_sbcap_link_rx_cb(struct cbc_sbcap_link *link, SBcAP_SBC_AP_PDU_t *pdu); diff --git a/src/cbc_message.c b/src/cbc_message.c index a2bf86a..f17ab75 100644 --- a/src/cbc_message.c +++ b/src/cbc_message.c @@ -70,8 +70,8 @@ peer->name); return -EINVAL; } - cbc_cbsp_link_tx(peer->link.cbsp, cbsp); - break; + return cbc_cbsp_link_tx(peer->link.cbsp, cbsp); + case CBC_PEER_PROTO_SBcAP: /* skip peers without any current SBc-AP connection */ if (!peer->link.sbcap) { @@ -84,17 +84,16 @@ peer->name); return -EINVAL; } - cbc_sbcap_link_tx(peer->link.sbcap, sbcap); - break; + return cbc_sbcap_link_tx(peer->link.sbcap, sbcap); + case CBC_PEER_PROTO_SABP: LOGP(DLGLOBAL, LOGL_ERROR, "Sending message to peer proto %s not implemented!\n", get_value_string(cbc_peer_proto_name, peer->proto)); return -1; + default: OSMO_ASSERT(0); } - - return 0; }
/* receive a new CBC message from the user (REST). Allocates new memory, diff --git a/src/cbsp_link.c b/src/cbsp_link.c index 343ac26..a6462ee 100644 --- a/src/cbsp_link.c +++ b/src/cbsp_link.c @@ -318,14 +318,14 @@ return 0; }
-void cbc_cbsp_link_tx(struct cbc_cbsp_link *link, struct osmo_cbsp_decoded *cbsp) +int cbc_cbsp_link_tx(struct cbc_cbsp_link *link, struct osmo_cbsp_decoded *cbsp) { struct msgb *msg;
if (!link) { LOGP(DCBSP, LOGL_NOTICE, "Cannot transmit %s: no connection\n", get_value_string(cbsp_msg_type_names, cbsp->msg_type)); - return ; + return -ENOLINK; }
LOGPCC(link, LOGL_INFO, "Transmitting %s\n", @@ -336,13 +336,14 @@ LOGPCC(link, LOGL_ERROR, "Failed to encode CBSP %s: %s\n", get_value_string(cbsp_msg_type_names, cbsp->msg_type), osmo_cbsp_errstr); talloc_free(cbsp); - return; + return -EINVAL; } talloc_free(cbsp); if (link->is_client) osmo_stream_cli_send(link->cli_conn, msg); else osmo_stream_srv_send(link->srv_conn, msg); + return 0; }
void cbc_cbsp_link_close(struct cbc_cbsp_link *link) diff --git a/src/sbcap_link.c b/src/sbcap_link.c index 91fa75c..b2a5aa2 100644 --- a/src/sbcap_link.c +++ b/src/sbcap_link.c @@ -379,27 +379,30 @@ return 0; }
-void cbc_sbcap_link_tx(struct cbc_sbcap_link *link, SBcAP_SBC_AP_PDU_t *pdu) +int cbc_sbcap_link_tx(struct cbc_sbcap_link *link, SBcAP_SBC_AP_PDU_t *pdu) { struct msgb *msg; + int rc = 0;
if (!pdu) { LOGP(DSBcAP, LOGL_NOTICE, "Cannot transmit msg: no pdu\n"); - return; + return -ENOMSG; }
if (!link) { LOGP(DSBcAP, LOGL_NOTICE, "Cannot transmit msg %s: no connection\n", sbcap_pdu_get_name(pdu)); - return; + return -ENOLINK; }
LOGPSBCAPC(link, LOGL_INFO, "Tx msg %s\n", sbcap_pdu_get_name(pdu)); OSMO_ASSERT(link->conn); msg = sbcap_encode(pdu); - if (!msg) + if (!msg) { + rc = -EINVAL; goto ret_free; + } LOGPSBCAPC(link, LOGL_DEBUG, "Encoded message %s: %s\n", sbcap_pdu_get_name(pdu), msgb_hexdump(msg)); if (link->is_client) @@ -408,6 +411,7 @@ osmo_stream_srv_send(link->srv_conn, msg); ret_free: sbcap_pdu_free(pdu); + return rc; }
void cbc_sbcap_link_close(struct cbc_sbcap_link *link)