#include <stdlib.h>
#include "canetworkconfigurator.h"
+#include "cainterfacecontroller.h"
#include "uarraylist.h"
#include "logger.h"
-#include "cainterfacecontroller.h"
-#define TAG PCF("CA")
+#define TAG "OIC_CA_NW_CONFIG"
+
+static u_arraylist_t *g_selectedNetworkList = NULL;
+
+#ifdef EDR_ADAPTER
+static uint32_t NETWORK_RFCOMM = CA_ADAPTER_RFCOMM_BTEDR;
+#endif
+
+#ifdef LE_ADAPTER
+static uint32_t NETWORK_GATT = CA_ADAPTER_GATT_BTLE;
+#endif
+
+#ifdef IP_ADAPTER
+static uint32_t NETWORK_IP = CA_ADAPTER_IP;
+#endif
-static u_arraylist_t *gSelectedNetworkList = NULL;
+#ifdef NFC_ADAPTER
+static uint32_t NETWORK_NFC = CA_ADAPTER_NFC;
+#endif
-CAResult_t CAAddNetworkType(uint32_t ConnectivityType)
+#ifdef RA_ADAPTER
+static uint32_t NETWORK_RA = CA_ADAPTER_REMOTE_ACCESS;
+#endif
+
+#ifdef TCP_ADAPTER
+static uint32_t NETWORK_TCP = CA_ADAPTER_TCP;
+#endif
+
+CAResult_t CAAddNetworkType(CATransportAdapter_t transportType)
{
- if (gSelectedNetworkList == NULL)
+ if (NULL == g_selectedNetworkList)
{
- OIC_LOG_V(DEBUG, TAG, "Create network list");
+ OIC_LOG(DEBUG, TAG, "Create network list");
- gSelectedNetworkList = u_arraylist_create();
- }
+ g_selectedNetworkList = u_arraylist_create();
- switch (ConnectivityType)
+ if (NULL == g_selectedNetworkList)
+ {
+ return CA_MEMORY_ALLOC_FAILED;
+ }
+ }
+ bool res = true;
+ switch (transportType)
{
- case CA_ETHERNET:
-
-#ifndef ETHERNET_ADAPTER
- OIC_LOG_V(DEBUG, TAG, "Add network type(ETHERNET) - Not Supported");
+ case CA_ADAPTER_IP:
+#ifndef IP_ADAPTER
+ OIC_LOG(DEBUG, TAG, "Add network type(IP) - Not Supported");
return CA_NOT_SUPPORTED;
-#endif /* ETHERNET_ADAPTER */
+#else
- OIC_LOG_V(DEBUG, TAG, "Add network type(ETHERNET)");
- u_arraylist_add(gSelectedNetworkList, &NETWORK_ETHERNET);
+ OIC_LOG(DEBUG, TAG, "Add network type(IP)");
+ if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_IP))
+ {
+ goto exit;
+ }
+ res = u_arraylist_add(g_selectedNetworkList, &NETWORK_IP);
break;
+#endif // IP_ADAPTER
- case CA_WIFI:
-
-#ifndef WIFI_ADAPTER
- OIC_LOG_V(DEBUG, TAG, "Add network type(WIFI) - Not Supported");
+ case CA_ADAPTER_RFCOMM_BTEDR:
+#ifndef EDR_ADAPTER
+ OIC_LOG(DEBUG, TAG, "Add network type(EDR) - Not Supported");
return CA_NOT_SUPPORTED;
-#endif /* WIFI_ADAPTER */
+#else
- OIC_LOG_V(DEBUG, TAG, "Add network type(WIFI)");
- u_arraylist_add(gSelectedNetworkList, &NETWORK_WIFI);
+ OIC_LOG(DEBUG, TAG, "Add network type(EDR)");
+ if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_RFCOMM))
+ {
+ goto exit;
+ }
+ res = u_arraylist_add(g_selectedNetworkList, &NETWORK_RFCOMM);
break;
+#endif // EDR_ADAPTER
- case CA_EDR:
-
-#ifndef EDR_ADAPTER
- OIC_LOG_V(DEBUG, TAG, "Add network type(EDR) - Not Supported");
+ case CA_ADAPTER_GATT_BTLE:
+#ifndef LE_ADAPTER
+ OIC_LOG(DEBUG, TAG, "Add network type(LE) - Not Supported");
return CA_NOT_SUPPORTED;
-#endif /* EDR_ADAPTER */
+#else
+
+ OIC_LOG(DEBUG, TAG, "Add network type(LE)");
+ if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_GATT))
+ {
+ goto exit;
+ }
+ res = u_arraylist_add(g_selectedNetworkList, &NETWORK_GATT);
- OIC_LOG_V(DEBUG, TAG, "Add network type(EDR)");
- u_arraylist_add(gSelectedNetworkList, &NETWORK_EDR);
break;
+#endif // LE_ADAPTER
+
+#ifdef RA_ADAPTER
+ case CA_ADAPTER_REMOTE_ACCESS:
+
+ OIC_LOG(DEBUG, TAG, "Add network type(RA)");
+ if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_RA))
+ {
+ goto exit;
+ }
+ res = u_arraylist_add(g_selectedNetworkList, &NETWORK_RA);
+ break;
+#endif // RA_ADAPTER
+
+#ifdef TCP_ADAPTER
+ case CA_ADAPTER_TCP:
+
+ OIC_LOG(DEBUG, TAG, "Add network type(TCP)");
+ if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_TCP))
+ {
+ goto exit;
+ }
+ res = u_arraylist_add(g_selectedNetworkList, &NETWORK_TCP);
+ break;
+#endif // TCP_ADAPTER
+
+
+ case CA_ADAPTER_NFC:
+ #ifndef NFC_ADAPTER
+ OIC_LOG(DEBUG, TAG, "Add network type(NFC) - Not Supported");
+ return CA_NOT_SUPPORTED;
- case CA_LE:
+#else
+ OIC_LOG(DEBUG, TAG, "Add network type(NFC)");
+ if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_NFC))
+ {
+ goto exit;
+ }
+ res = u_arraylist_add(g_selectedNetworkList, &NETWORK_NFC);
-#ifdef LE_ADAPTER
- OIC_LOG_V(DEBUG, TAG, "Add network type(LE) - Not Supported");
- return CA_NOT_SUPPORTED;
-#endif /* LE_ADAPTER */
+ break;
+#endif // CA_ADAPTER_NFC
- OIC_LOG_V(DEBUG, TAG, "Add network type(LE)");
- u_arraylist_add(gSelectedNetworkList, &NETWORK_LE);
+ default:
break;
-
}
+ if (!res)
+ {
+ OIC_LOG_V(ERROR, TAG, "Add arraylist failed[Err code: %d]", res);
+ return CA_STATUS_FAILED;
+ }
// start selected interface adapter
- CAStartAdapter(ConnectivityType);
+ CAResult_t result = CAStartAdapter(transportType);
+ return result;
+exit:
+ OIC_LOG(DEBUG, TAG, "This adapter is already enabled");
return CA_STATUS_OK;
}
-CAResult_t CARemoveNetworkType(uint32_t ConnectivityType)
+CAResult_t CARemoveNetworkType(CATransportAdapter_t transportType)
{
- if (gSelectedNetworkList == NULL)
+ if (NULL == g_selectedNetworkList)
{
- OIC_LOG_V(DEBUG, TAG, "Selected network not found");
+ OIC_LOG(ERROR, TAG, "SelectedNetwork list is NULL");
return CA_STATUS_FAILED;
}
- switch (ConnectivityType)
+ uint32_t selectedNetworkLength = u_arraylist_length(g_selectedNetworkList);
+ for (uint32_t index = 0; index < selectedNetworkLength; index++)
{
- case CA_ETHERNET:
-
-#ifndef ETHERNET_ADAPTER
- OIC_LOG_V(DEBUG, TAG, "Remove network type(ETHERNET) - Not Supported");
- return CA_NOT_SUPPORTED;
-#else
-
- OIC_LOG_V(DEBUG, TAG, "Remove network type(ETHERNET)");
- u_arraylist_remove(gSelectedNetworkList, &NETWORK_ETHERNET);
-#endif /* ETHERNET_ADAPTER */
- break;
-
- case CA_WIFI:
-
-#ifndef WIFI_ADAPTER
- OIC_LOG_V(DEBUG, TAG, "Remove network type(WIFI) - Not Supported");
- return CA_NOT_SUPPORTED;
+ void* ptrType = u_arraylist_get(g_selectedNetworkList, index);
+ if (NULL == ptrType)
+ {
+ continue;
+ }
+
+ CATransportAdapter_t connType = *(CATransportAdapter_t *)ptrType;
+
+ if (transportType == connType)
+ {
+ switch (transportType)
+ {
+ case CA_ADAPTER_IP:
+#ifndef IP_ADAPTER
+ OIC_LOG(DEBUG, TAG, "Remove network type(IP) - Not Supported");
+ return CA_NOT_SUPPORTED;
#else
- OIC_LOG_V(DEBUG, TAG, "Remove network type(WIFI)");
- u_arraylist_remove(gSelectedNetworkList, &NETWORK_WIFI);
-#endif /* WIFI_ADAPTER */
- break;
+ OIC_LOG(DEBUG, TAG, "Remove network type(IP)");
+ u_arraylist_remove(g_selectedNetworkList, index);
- case CA_EDR:
+ break;
+#endif //IP_ADAPTER
+ case CA_ADAPTER_RFCOMM_BTEDR:
#ifndef EDR_ADAPTER
- OIC_LOG_V(DEBUG, TAG, "Remove network type(EDR) - Not Supported");
- return CA_NOT_SUPPORTED;
+ OIC_LOG(DEBUG, TAG, "Remove network type(EDR) - Not Supported");
+ return CA_NOT_SUPPORTED;
#else
- OIC_LOG_V(DEBUG, TAG, "Remove network type(EDR)");
- u_arraylist_remove(gSelectedNetworkList, &NETWORK_EDR);
-#endif /* EDR_ADAPTER */
+ OIC_LOG(DEBUG, TAG, "Remove network type(EDR)");
+ u_arraylist_remove(g_selectedNetworkList, index);
- break;
+ break;
+#endif // EDR_ADAPTER
- case CA_LE:
-
-#ifdef LE_ADAPTER
- OIC_LOG_V(DEBUG, TAG, "Remove network type(LE) - Not Supported");
- return CA_NOT_SUPPORTED;
+ case CA_ADAPTER_GATT_BTLE:
+#ifndef LE_ADAPTER
+ OIC_LOG(DEBUG, TAG, "Remove network type(LE) - Not Supported");
+ return CA_NOT_SUPPORTED;
#else
- OIC_LOG_V(DEBUG, TAG, "Remove network type(LE)");
- u_arraylist_remove(gSelectedNetworkList, &NETWORK_LE);
-#endif /* LE_ADAPTER */
-
- break;
+ OIC_LOG(DEBUG, TAG, "Remove network type(LE)");
+ u_arraylist_remove(g_selectedNetworkList, index);
+
+ break;
+#endif // LE_ADAPTER
+
+#ifdef RA_ADAPTER
+ case CA_ADAPTER_REMOTE_ACCESS:
+ OIC_LOG(DEBUG, TAG, "Remove network type(RA)");
+ u_arraylist_remove(g_selectedNetworkList, index);
+ break;
+#endif // RA_ADAPTER
+
+#ifdef TCP_ADAPTER
+ case CA_ADAPTER_TCP:
+ OIC_LOG(DEBUG, TAG, "Remove network type(TCP)");
+ u_arraylist_remove(g_selectedNetworkList, index);
+ break;
+#endif // TCP_ADAPTER
+
+#ifndef NFC_ADAPTER
+ case CA_ADAPTER_NFC:
+ OIC_LOG(DEBUG, TAG, "Add network type(NFC) - Not Supported");
+ return CA_NOT_SUPPORTED;
+#else
+ OIC_LOG(DEBUG, TAG, "Add network type(NFC)");
+ u_arraylist_remove(g_selectedNetworkList, index);
+
+ break;
+#endif // CA_ADAPTER_NFC
+ default:
+ break;
+ }
+
+ // stop selected interface adapter
+ CAStopAdapter(connType);
+ return CA_STATUS_OK;
+ }
}
- // stop selected interface adapter
- CAStopAdapter(ConnectivityType);
+ return CA_STATUS_FAILED;
+}
- return CA_STATUS_OK;
+u_arraylist_t *CAGetSelectedNetworkList()
+{
+ return g_selectedNetworkList;
}
-u_arraylist_t* CAGetSelectedNetworkList()
+CAResult_t CAGetNetworkInformationInternal(CAEndpoint_t **info, uint32_t *size)
{
- if (gSelectedNetworkList == NULL)
+ OIC_LOG(DEBUG, TAG, "get network information.");
+
+ if (NULL == info || NULL == size)
{
- OIC_LOG_V(DEBUG, TAG, "Selected network not found");
+ OIC_LOG(ERROR, TAG, "Input parameter is invalid value");
- return NULL;
+ return CA_STATUS_INVALID_PARAM;
}
- return gSelectedNetworkList;
+ return CAGetNetworkInfo(info, size);
+}
+
+CAResult_t CATerminateNetworkType()
+{
+ OIC_LOG(DEBUG, TAG, "CATerminateNetworkType()");
+ if (NULL != g_selectedNetworkList)
+ {
+ u_arraylist_free(&g_selectedNetworkList);
+ }
+ return CA_STATUS_OK;
}