From 7bf332a4806eea684509dd3d661df7e8f6fdf944 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Fri, 14 May 2010 03:34:35 +0800 Subject: [PATCH] [sccp] Export function to create SCCP Refuse message. --- openbsc/include/sccp/sccp.h | 2 ++ openbsc/src/sccp/sccp.c | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/openbsc/include/sccp/sccp.h b/openbsc/include/sccp/sccp.h index 604a2ac72..5dfcc31bf 100644 --- a/openbsc/include/sccp/sccp.h +++ b/openbsc/include/sccp/sccp.h @@ -148,6 +148,8 @@ 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); + /** * Below this are helper functions and structs for parsing SCCP messages */ diff --git a/openbsc/src/sccp/sccp.c b/openbsc/src/sccp/sccp.c index de18614c3..35589dc8a 100644 --- a/openbsc/src/sccp/sccp.c +++ b/openbsc/src/sccp/sccp.c @@ -638,7 +638,7 @@ static void _sccp_set_connection_state(struct sccp_connection *connection, int n connection->state_cb(connection, old_state); } -static int _sccp_send_refuse(struct sccp_source_reference *src_ref, int cause) +struct msgb *sccp_create_refuse(struct sccp_source_reference *src_ref, int cause) { struct msgb *msgb; struct sccp_connection_refused *ref; @@ -646,6 +646,11 @@ static int _sccp_send_refuse(struct sccp_source_reference *src_ref, int cause) msgb = msgb_alloc_headroom(SCCP_MSG_SIZE, SCCP_MSG_HEADROOM, "sccp ref"); + if (!msgb) { + LOGP(DSCCP, LOGL_ERROR, "Failed to allocate refusal msg.\n"); + return NULL; + } + msgb->l2h = &msgb->data[0]; ref = (struct sccp_connection_refused *) msgb_put(msgb, sizeof(*ref)); @@ -657,6 +662,14 @@ static int _sccp_send_refuse(struct sccp_source_reference *src_ref, int cause) data = msgb_put(msgb, 1); data[0] = SCCP_PNC_END_OF_OPTIONAL; + return msgb; +} + +static int _sccp_send_refuse(struct sccp_source_reference *src_ref, int cause) +{ + struct msgb *msgb = sccp_create_refuse(src_ref, cause); + if (!msgb) + return -1; _send_msg(msgb); return 0;