Update snapshot(2017-12-06)
[platform/upstream/iotivity.git] / resource / csdk / connectivity / src / ip_adapter / tizen / caipnwmonitor.c
index 4b16863..079ecd5 100644 (file)
@@ -31,7 +31,6 @@
 #include <linux/rtnetlink.h>
 #include <arpa/inet.h>
 #include <netinet/in.h>
-#include <wifi.h>
 #include <net_connection.h>
 
 #include "caipinterface.h"
@@ -43,7 +42,7 @@
 #include <coap/utlist.h>
 
 #define TAG "OIC_CA_IP_MONITOR"
-
+#define MAX_INTERFACE_INFO_LENGTH (1024)
 #define NETLINK_MESSAGE_LENGTH  (4096)
 #define IFC_LABEL_LOOP          "lo"
 #define IFC_ADDR_LOOP_IPV4      "127.0.0.1"
@@ -164,26 +163,30 @@ u_arraylist_t *CAFindInterfaceChange()
 
     for (struct nlmsghdr *nh = (struct nlmsghdr *)buf; NLMSG_OK(nh, len); nh = NLMSG_NEXT(nh, len))
     {
-        if (nh != NULL && nh->nlmsg_type != RTM_NEWLINK)
+        if (nh != NULL && (nh->nlmsg_type != RTM_DELADDR && nh->nlmsg_type != RTM_NEWADDR))
         {
             continue;
         }
-        struct ifinfomsg *ifi = (struct ifinfomsg *)NLMSG_DATA(nh);
 
-        if ((!ifi || (ifi->ifi_flags & IFF_LOOPBACK) || !(ifi->ifi_flags & IFF_RUNNING)))
+        struct ifinfomsg *ifi = (struct ifinfomsg *)NLMSG_DATA(nh);
+        if (!ifi)
         {
             continue;
         }
 
-        int ifiIndex = ifi->ifi_index;
+        if (RTM_DELADDR == nh->nlmsg_type)
+        {
+            CloseMulticastSocket();
+        }
 
+        int ifiIndex = ifi->ifi_index;
         iflist = CAIPGetInterfaceInformation(ifiIndex);
-
         if (!iflist)
         {
             OIC_LOG_V(ERROR, TAG, "get interface info failed: %s", strerror(errno));
             return NULL;
         }
+        CreateMulticastSocket();
     }
     return iflist;
 }
@@ -193,12 +196,6 @@ CAResult_t CAIPStartNetworkMonitor(CAIPAdapterStateChangeCallback callback,
 {
     if (!g_adapterCallbackList)
     {
-        // Initialize Wifi service.
-        if (WIFI_ERROR_NONE != wifi_initialize())
-        {
-            OIC_LOG(ERROR, TAG, "wifi_initialize failed");
-        }
-
         // Initialize Connections.
         connection_error_e ret = connection_create(&connection);
         if (CONNECTION_ERROR_NONE != ret)
@@ -227,12 +224,6 @@ CAResult_t CAIPStopNetworkMonitor(CATransportAdapter_t adapter)
     CAIPUnSetNetworkMonitorCallback(adapter);
     if (!g_adapterCallbackList)
     {
-        // Deinitialize Wifi service.
-        if (WIFI_ERROR_NONE != wifi_deinitialize())
-        {
-            OIC_LOG(ERROR, TAG, "wifi_deinitialize failed");
-        }
-
         // Reset callback for receiving state changes.
         if (connection)
         {
@@ -395,6 +386,8 @@ static CAInterface_t *CANewInterfaceItem(int index, char *name, int family,
 
 void CAIPConnectionStateChangedCb(connection_type_e type, void* userData)
 {
+    (void)userData;
+
     switch (type)
     {
         case CONNECTION_TYPE_DISCONNECTED: