msc_a: add callref as call id to ASSIGNMENT REQ.

The BSSMAP message ASSIGNMENT REQUEST may contain an optional CALL
IDENTIFIER IE. While this IE is optional some BSC implementions may
require it.

Change-Id: I4288f47e4a6d61ec672f431723f6e72c7c6b0799
Related: OS#4582
diff --git a/src/libmsc/msc_a.c b/src/libmsc/msc_a.c
index 4d856d0..3bfc0f8 100644
--- a/src/libmsc/msc_a.c
+++ b/src/libmsc/msc_a.c
@@ -541,6 +541,8 @@
 			.channel_type = &channel_type,
 			.osmux_present = msc_a->cc.call_leg->rtp[RTP_TO_RAN]->use_osmux,
 			.osmux_cid = msc_a->cc.call_leg->rtp[RTP_TO_RAN]->local_osmux_cid,
+			.call_id_present = true,
+			.call_id = cc_trans->callref,
 		},
 	};
 	if (msc_a_ran_down(msc_a, MSC_ROLE_I, &msg)) {
diff --git a/src/libmsc/ran_msg_a.c b/src/libmsc/ran_msg_a.c
index 28f99ce..e6dee52 100644
--- a/src/libmsc/ran_msg_a.c
+++ b/src/libmsc/ran_msg_a.c
@@ -959,6 +959,7 @@
 	struct sockaddr_storage rtp_addr;
 	struct sockaddr_storage *use_rtp_addr = NULL;
 	struct msgb *msg;
+	const uint32_t *call_id = NULL;
 	int rc;
 
 	if (!ac->channel_type) {
@@ -999,7 +1000,10 @@
 		}
 	}
 
-	msg = gsm0808_create_ass(ac->channel_type, NULL, use_rtp_addr, use_scl, NULL);
+	if(ac->call_id_present == true)
+		call_id = &ac->call_id;
+
+	msg = gsm0808_create_ass(ac->channel_type, NULL, use_rtp_addr, use_scl, call_id);
 	if (ac->osmux_present)
 		_gsm0808_assignment_extend_osmux(msg, ac->osmux_cid);
 	return msg;