pespin submitted this change.

View Change

Approvals: Jenkins Builder: Verified fixeria: Looks good to me, approved
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(-)

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)

To view, visit change 28853. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: osmo-cbc
Gerrit-Branch: master
Gerrit-Change-Id: Ie40c8e41c297398bbec48f7bb2c60cfdc703fa5d
Gerrit-Change-Number: 28853
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de>
Gerrit-Reviewer: pespin <pespin@sysmocom.de>
Gerrit-MessageType: merged