sccp_scoc: move sccp_find_user() up
Move it before sccp_scoc_rx_scrc_rout_fail(), so it can be used in the latter function to figure out the local_ref from the user (follow up commit). Related: OS#3871 Change-Id: Ieabeda3126dcc0349a06c0fc7c9e468b900d7855
This commit is contained in:
parent
67b895e156
commit
ee0bcf2fca
|
@ -1329,6 +1329,31 @@ static struct xua_msg *gen_coref_without_conn(struct osmo_sccp_instance *inst,
|
||||||
return xua;
|
return xua;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Find a SCCP user for given SUA message (based on SUA_IEI_DEST_ADDR */
|
||||||
|
static struct osmo_sccp_user *sccp_find_user(struct osmo_sccp_instance *inst,
|
||||||
|
struct xua_msg *xua)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
struct osmo_sccp_addr called_addr;
|
||||||
|
|
||||||
|
rc = sua_addr_parse(&called_addr, xua, SUA_IEI_DEST_ADDR);
|
||||||
|
if (rc < 0) {
|
||||||
|
LOGP(DLSCCP, LOGL_ERROR, "Cannot find SCCP User for XUA "
|
||||||
|
"Message %s without valid DEST_ADDR\n",
|
||||||
|
xua_hdr_dump(xua, &xua_dialect_sua));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(called_addr.presence & OSMO_SCCP_ADDR_T_SSN)) {
|
||||||
|
LOGP(DLSCCP, LOGL_ERROR, "Cannot resolve SCCP User for "
|
||||||
|
"XUA Message %s without SSN in CalledAddr\n",
|
||||||
|
xua_hdr_dump(xua, &xua_dialect_sua));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sccp_user_find(inst, called_addr.ssn, called_addr.pc);
|
||||||
|
}
|
||||||
|
|
||||||
/*! \brief SCOC: Receive SCRC Routing Failure
|
/*! \brief SCOC: Receive SCRC Routing Failure
|
||||||
* \param[in] inst SCCP Instance on which we operate
|
* \param[in] inst SCCP Instance on which we operate
|
||||||
* \param[in] xua SUA message that was failed to route
|
* \param[in] xua SUA message that was failed to route
|
||||||
|
@ -1355,31 +1380,6 @@ void sccp_scoc_rx_scrc_rout_fail(struct osmo_sccp_instance *inst,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find a SCCP user for given SUA message (based on SUA_IEI_DEST_ADDR */
|
|
||||||
static struct osmo_sccp_user *sccp_find_user(struct osmo_sccp_instance *inst,
|
|
||||||
struct xua_msg *xua)
|
|
||||||
{
|
|
||||||
int rc;
|
|
||||||
struct osmo_sccp_addr called_addr;
|
|
||||||
|
|
||||||
rc = sua_addr_parse(&called_addr, xua, SUA_IEI_DEST_ADDR);
|
|
||||||
if (rc < 0) {
|
|
||||||
LOGP(DLSCCP, LOGL_ERROR, "Cannot find SCCP User for XUA "
|
|
||||||
"Message %s without valid DEST_ADDR\n",
|
|
||||||
xua_hdr_dump(xua, &xua_dialect_sua));
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(called_addr.presence & OSMO_SCCP_ADDR_T_SSN)) {
|
|
||||||
LOGP(DLSCCP, LOGL_ERROR, "Cannot resolve SCCP User for "
|
|
||||||
"XUA Message %s without SSN in CalledAddr\n",
|
|
||||||
xua_hdr_dump(xua, &xua_dialect_sua));
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return sccp_user_find(inst, called_addr.ssn, called_addr.pc);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Generate a COERR based in input arguments */
|
/* Generate a COERR based in input arguments */
|
||||||
static struct xua_msg *gen_coerr(uint32_t route_ctx, uint32_t dest_ref,
|
static struct xua_msg *gen_coerr(uint32_t route_ctx, uint32_t dest_ref,
|
||||||
uint32_t err_cause)
|
uint32_t err_cause)
|
||||||
|
|
Loading…
Reference in New Issue