From cf115659852a2bd38a547cb6c51bfd9417d73d21 Mon Sep 17 00:00:00 2001
From: Lionel Gauthier <lionel.gauthier@eurecom.fr>
Date: Tue, 9 Dec 2014 19:43:55 +0000
Subject: [PATCH] UE_CONTEXT_RELEASE_COMPLETE

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@6224 818b1a75-f10b-46b9-bf7c-635c3b92a50f
---
 openair-cn/SCTP/sctp_eNB_itti_messaging.h |  1 +
 openair-cn/SCTP/sctp_eNB_task.c           | 30 ++++++++++++++++++++++-
 2 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/openair-cn/SCTP/sctp_eNB_itti_messaging.h b/openair-cn/SCTP/sctp_eNB_itti_messaging.h
index e89b35932c..184c1b0095 100644
--- a/openair-cn/SCTP/sctp_eNB_itti_messaging.h
+++ b/openair-cn/SCTP/sctp_eNB_itti_messaging.h
@@ -41,4 +41,5 @@ int sctp_itti_send_association_ind(task_id_t task_id, instance_t instance,
                                    int32_t assoc_id, uint16_t port,
                                    uint16_t out_streams, uint16_t in_streams);
 
+
 #endif /* SCTP_ITTI_MESSAGING_H_ */
diff --git a/openair-cn/SCTP/sctp_eNB_task.c b/openair-cn/SCTP/sctp_eNB_task.c
index 32e1f4e14a..dfbb114aeb 100644
--- a/openair-cn/SCTP/sctp_eNB_task.c
+++ b/openair-cn/SCTP/sctp_eNB_task.c
@@ -399,6 +399,31 @@ void sctp_send_data(
                sctp_cnx->assoc_id);
 }
 
+static int sctp_close_association(
+		const instance_t instance,
+	    const task_id_t  requestor,
+	    sctp_close_association_t     *close_association_p)
+{
+
+    struct sctp_cnx_list_elm_s *sctp_cnx = NULL;
+
+    DevAssert(close_association_p != NULL);
+    sctp_cnx = sctp_get_cnx(close_association_p->assoc_id, 0);
+
+    if (sctp_cnx == NULL) {
+        SCTP_ERROR("Failed to find SCTP description for assoc_id %d\n",
+            close_association_p->assoc_id);
+        /* TODO: notify upper layer */
+        return -1;
+    } else {
+        close(sctp_cnx->sd);
+        STAILQ_REMOVE(&sctp_cnx_list, sctp_cnx, sctp_cnx_list_elm_s, entries);
+        SCTP_DEBUG("Removed assoc_id %u (closed socket %u)\n",
+                   sctp_cnx->assoc_id, sctp_cnx->sd);
+    }
+    return 0;
+}
+
 static int sctp_create_new_listener(
 		const instance_t instance,
 	    const task_id_t  requestor,
@@ -754,7 +779,10 @@ void *sctp_eNB_task(void *arg)
                     }
                 } break;
                 case SCTP_CLOSE_ASSOCIATION:
-                	break;
+                    sctp_close_association(ITTI_MESSAGE_GET_INSTANCE(received_msg),
+                                                    ITTI_MSG_ORIGIN_ID(received_msg),
+                                                    &received_msg->ittiMsg.sctp_close_association);
+                    break;
 
                 case TERMINATE_MESSAGE:
                     itti_exit_task();
-- 
GitLab