msuraev submitted this change.

View Change

Approvals: Jenkins Builder: Verified fixeria: Looks good to me, approved laforge: Looks good to me, but someone else must approve
SIGTRAN: don't advance FSM on failed connection request

Return proper error code from packet encoding routine and check for it before switching FSM state as it creates
confusing mismatch with actual protocol state.

Related: OS#5579
Change-Id: I8431c77632014e2551d1da779afddffcd1bb541c
---
M src/sccp_scoc.c
1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/src/sccp_scoc.c b/src/sccp_scoc.c
index c209bd7..b85eeb9 100644
--- a/src/sccp_scoc.c
+++ b/src/sccp_scoc.c
@@ -46,6 +46,7 @@
* * use of multiple Routing Contexts in SUA case
*/

+#include <errno.h>
#include <string.h>

#include <osmocom/core/utils.h>
@@ -687,7 +688,9 @@
return NULL;
}

-/* generate xua_msg, encode it and send it to SCRC */
+/* generate xua_msg, encode it and send it to SCRC
+ * returns 0 on success, negative on error
+ */
static int xua_gen_encode_and_send(struct sccp_connection *conn, uint32_t event,
const struct osmo_scu_prim *prim, int msg_type)
{
@@ -695,7 +698,7 @@

xua = xua_gen_msg_co(conn, event, prim, msg_type);
if (!xua)
- return -1;
+ return -ENOMEM;

/* amend this with point code information; Many CO msgs
* includes neither called nor calling party address! */
@@ -817,6 +820,7 @@
struct osmo_scu_prim *prim = NULL;
struct osmo_scu_connect_param *uconp;
struct xua_msg *xua = NULL;
+ int rc;

switch (event) {
case SCOC_E_SCU_N_CONN_REQ:
@@ -827,10 +831,14 @@
conn->calling_addr = uconp->calling_addr;
conn->sccp_class = uconp->sccp_class;
/* generate + send CR PDU to SCRC */
- xua_gen_encode_and_send(conn, event, prim, SUA_CO_CORE);
- /* start connection timer */
- conn_start_connect_timer(conn);
- osmo_fsm_inst_state_chg(fi, S_CONN_PEND_OUT, 0, 0);
+ rc = xua_gen_encode_and_send(conn, event, prim, SUA_CO_CORE);
+ if (rc < 0)
+ LOGPFSML(fi, LOGL_ERROR, "Failed to initiate connection: %s\n", strerror(-rc));
+ else {
+ /* start connection timer */
+ conn_start_connect_timer(conn);
+ osmo_fsm_inst_state_chg(fi, S_CONN_PEND_OUT, 0, 0);
+ }
break;
#if 0
case SCOC_E_SCU_N_TYPE1_REQ:

2 is the latest approved patch-set. No files were changed between the latest approved patch-set and the submitted one.

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

Gerrit-Project: libosmo-sccp
Gerrit-Branch: master
Gerrit-Change-Id: I8431c77632014e2551d1da779afddffcd1bb541c
Gerrit-Change-Number: 29167
Gerrit-PatchSet: 3
Gerrit-Owner: msuraev <msuraev@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de>
Gerrit-Reviewer: laforge <laforge@osmocom.org>
Gerrit-Reviewer: msuraev <msuraev@sysmocom.de>
Gerrit-MessageType: merged