mirror of
https://gitea.osmocom.org/cellular-infrastructure/osmo-mgw.git
synced 2025-10-23 08:12:01 +00:00
[sccp] Make it optional to send data on a SCCP Connection Refuse
This can be used to send a Location Updating Reject down to the BSC when it is clear that a subscriber is not allowed.
This commit is contained in:
@@ -148,7 +148,7 @@ extern const struct sockaddr_sccp sccp_ssn_bssap;
|
||||
u_int32_t sccp_src_ref_to_int(struct sccp_source_reference *ref);
|
||||
struct sccp_source_reference sccp_src_ref_from_int(u_int32_t);
|
||||
|
||||
struct msgb *sccp_create_refuse(struct sccp_source_reference *src_ref, int cause);
|
||||
struct msgb *sccp_create_refuse(struct sccp_source_reference *src_ref, int cause, uint8_t *data, int length);
|
||||
|
||||
/**
|
||||
* Below this are helper functions and structs for parsing SCCP messages
|
||||
|
@@ -677,7 +677,7 @@ exit2:
|
||||
|
||||
exit3:
|
||||
/* send a SCCP Connection Refused */
|
||||
refuse = sccp_create_refuse(parsed->src_local_ref, SCCP_REFUSAL_SCCP_FAILURE);
|
||||
refuse = sccp_create_refuse(parsed->src_local_ref, SCCP_REFUSAL_SCCP_FAILURE, NULL, 0);
|
||||
if (refuse) {
|
||||
bsc_send_data(bsc, refuse->l2h, msgb_l2len(refuse), IPAC_PROTO_SCCP);
|
||||
msgb_free(refuse);
|
||||
|
@@ -638,7 +638,7 @@ static void _sccp_set_connection_state(struct sccp_connection *connection, int n
|
||||
connection->state_cb(connection, old_state);
|
||||
}
|
||||
|
||||
struct msgb *sccp_create_refuse(struct sccp_source_reference *src_ref, int cause)
|
||||
struct msgb *sccp_create_refuse(struct sccp_source_reference *src_ref, int cause, uint8_t *inp, int length)
|
||||
{
|
||||
struct msgb *msgb;
|
||||
struct sccp_connection_refused *ref;
|
||||
@@ -660,6 +660,13 @@ struct msgb *sccp_create_refuse(struct sccp_source_reference *src_ref, int cause
|
||||
ref->cause = cause;
|
||||
ref->optional_start = 1;
|
||||
|
||||
if (inp) {
|
||||
data = msgb_put(msgb, 1 + 1 + length);
|
||||
data[0] = SCCP_PNC_DATA;
|
||||
data[1] = length;
|
||||
memcpy(&data[2], inp, length);
|
||||
}
|
||||
|
||||
data = msgb_put(msgb, 1);
|
||||
data[0] = SCCP_PNC_END_OF_OPTIONAL;
|
||||
return msgb;
|
||||
@@ -667,7 +674,7 @@ struct msgb *sccp_create_refuse(struct sccp_source_reference *src_ref, int cause
|
||||
|
||||
static int _sccp_send_refuse(struct sccp_source_reference *src_ref, int cause)
|
||||
{
|
||||
struct msgb *msgb = sccp_create_refuse(src_ref, cause);
|
||||
struct msgb *msgb = sccp_create_refuse(src_ref, cause, NULL, 0);
|
||||
if (!msgb)
|
||||
return -1;
|
||||
|
||||
|
Reference in New Issue
Block a user