+ oc_mutex_lock(g_mutexNetCallbackList);
+ CANetworkCallback_t* callback = NULL;
+ LL_FOREACH(g_networkChangeCallbackList, callback)
+ {
+ if (callback && adapterCB == callback->adapter && connCB == callback->conn)
+ {
+ OIC_LOG(DEBUG, TAG, "this callback is already added");
+ oc_mutex_unlock(g_mutexNetCallbackList);
+ return CA_STATUS_OK;
+ }
+ }
+
+ callback = (CANetworkCallback_t *) OICCalloc(1, sizeof(CANetworkCallback_t));
+ if (NULL == callback)
+ {
+ OIC_LOG(ERROR, TAG, "Memory allocation failed during registration");
+ oc_mutex_unlock(g_mutexNetCallbackList);
+ return CA_MEMORY_ALLOC_FAILED;
+ }
+
+ callback->adapter = adapterCB;
+ callback->conn = connCB;
+ LL_APPEND(g_networkChangeCallbackList, callback);
+ oc_mutex_unlock(g_mutexNetCallbackList);
+ OIC_LOG_V(INFO, TAG, "Added NetworkStateChanged Callback [%p]", callback);
+
+ return CA_STATUS_OK;
+}