Consider no change in connection state when ipv4_state, ipv6_state and error are... 51/216251/1
authorNishant Chaprana <n.chaprana@samsung.com>
Tue, 22 Oct 2019 14:37:58 +0000 (20:07 +0530)
committerNishant Chaprana <n.chaprana@samsung.com>
Tue, 22 Oct 2019 14:37:58 +0000 (20:07 +0530)
Change-Id: I21dc3cc99de1459a30b0f92af8683980e7f823bd
Signed-off-by: Nishant Chaprana <n.chaprana@samsung.com>
src/inm-error-logger.c

index 28684148daa164a6ccc327df2154aafb923cb5d7..a878f8ab45183d19a50549b36a5c23ab52489d84 100644 (file)
@@ -105,80 +105,122 @@ static void inm_error_logger_tech_data_cpy(inm_tech_data_s *dest,
        dest->type = src->type;
 }
 
-void inm_error_logger_connman_service_msg(inm_service_data_s *data)
+static gboolean inm_error_logger_check_connection_faults(inm_service_data_s *data,
+                                                        inm_service_data_s *prev_data)
 {
-       __INM_FUNC_ENTER__;
-
-       if (inm_error_logger_service_data_cmp(data, &old_service_data))
-               return;
-
-       INM_LOGD("[ConnmanService] name (%s), type (%d), error (%d), "
-                "state_v4 (%d), state_v6 (%d), strength (%d), "
-                "connect_reason (%d), disconnection_requested (%d)",
-                data->name, data->type, data->error, data->state_v4,
-                data->state_v6, data->strength, data->connect_reason,
-                data->disconnection_requested);
-
-       if (old_service_data.state_v4 == data->state_v4 &&
-           old_service_data.state_v6 == data->state_v6) {
+       if (data->error == CONNMAN_SERVICE_ERROR_UNKNOWN) {
+               __INM_FUNC_EXIT__;
+               return FALSE;
+       }
 
-               INM_LOGD("no change in connection state");
-               goto done;
+       if (data->error == prev_data->error) {
+               __INM_FUNC_EXIT__;
+               return TRUE;
        }
 
-       if (old_service_data.error != data->error) {
-               if (data->error == CONNMAN_SERVICE_ERROR_INVALID_KEY) {
-                       /* check whether password mismatched or changed */
-                       INM_LOGD("check whether password mismatched or changed");
-                       if (data->connect_reason ==
-                           CONNMAN_SERVICE_CONNECT_REASON_AUTO)
-                               inm_error_analysis_diagnose(INM_NET_ERR_TYPE_AP_PASSWORD_CHANGED);
-                       else
-                               inm_error_analysis_diagnose(INM_NET_ERR_TYPE_AP_PASSWORD_MISMATCH);
-                       goto done;
+       if (data->error == CONNMAN_SERVICE_ERROR_INVALID_KEY) {
+               /* check whether password mismatched or changed */
+               if (data->connect_reason ==
+                   CONNMAN_SERVICE_CONNECT_REASON_AUTO) {
+                       INM_LOGD("Password changed");
+                       inm_error_analysis_diagnose(INM_NET_ERR_TYPE_AP_PASSWORD_CHANGED);
 
-               } else if (data->error == CONNMAN_SERVICE_ERROR_DHCP_FAILED) {
-                       /* DHCP failed */
-                       INM_LOGD("DHCP failed");
-                       inm_error_analysis_diagnose(INM_NET_ERR_TYPE_DHCP_FAILED);
-                       goto done;
+               } else {
+                       INM_LOGD("Password mismatched");
+                       inm_error_analysis_diagnose(INM_NET_ERR_TYPE_AP_PASSWORD_MISMATCH);
+               }
 
-               } else if (data->error == CONNMAN_SERVICE_ERROR_CONNECT_FAILED) {
-                       /* Connect failed */
-                       INM_LOGD("Connect failed");
+       } else if (data->error == CONNMAN_SERVICE_ERROR_DHCP_FAILED) {
+               /* DHCP failed */
+               INM_LOGD("DHCP failed");
+               inm_error_analysis_diagnose(INM_NET_ERR_TYPE_DHCP_FAILED);
 
-                       goto done;
-               }
+       } else if (data->error == CONNMAN_SERVICE_ERROR_CONNECT_FAILED) {
+               /* Connect failed */
+               INM_LOGD("Connect failed");
        }
 
-       if (old_service_data.state_v4 == CONNMAN_SERVICE_STATE_ONLINE &&
+       __INM_FUNC_EXIT__;
+       return TRUE;
+}
+
+static gboolean inm_error_logger_check_disconnection_faults(inm_service_data_s *data,
+                                                           inm_service_data_s *prev_data)
+{
+       if (prev_data->state_v4 == CONNMAN_SERVICE_STATE_ONLINE &&
            data->state_v4 == CONNMAN_SERVICE_STATE_READY &&
            data->state_v6 != CONNMAN_SERVICE_STATE_ONLINE) {
                INM_LOGD("No internet");
                /* No internet */
                inm_error_analysis_diagnose(INM_NET_ERR_TYPE_NO_INTERNET);
+               goto done;
 
-       } else if (old_service_data.state_v6 == CONNMAN_SERVICE_STATE_ONLINE &&
+       } else if (prev_data->state_v6 == CONNMAN_SERVICE_STATE_ONLINE &&
                   data->state_v6 == CONNMAN_SERVICE_STATE_READY &&
                   data->state_v4 != CONNMAN_SERVICE_STATE_ONLINE) {
                INM_LOGD("No internet");
                /* No internet */
                inm_error_analysis_diagnose(INM_NET_ERR_TYPE_NO_INTERNET);
+               goto done;
 
        } else if (data->state_v4 >= CONNMAN_SERVICE_STATE_DISCONNECT ||
                   data->state_v6 >= CONNMAN_SERVICE_STATE_DISCONNECT) {
-               INM_LOGD("AP disconnected");
-               /* AP is out of range */
-               if (data->strength < 60)
+               INM_LOGD("AP disconnected strength [%d]", data->strength);
+               if (data->strength < 46) {
+                       /* AP is out of range */
+                       INM_LOGD("AP out of range");
                        inm_error_analysis_diagnose(INM_NET_ERR_TYPE_AP_OUT_OF_RANGE);
-               /* Disconnection is user initiated */
-               else if (data->disconnection_requested == TRUE)
+                       goto done;
+
+               } else if (data->disconnection_requested == TRUE) {
+                       /* Disconnection is user initiated */
+                       INM_LOGD("AP disconnection by user");
                        inm_error_analysis_diagnose(INM_NET_ERR_TYPE_DISCONNECTION_BY_USER);
-               /* AP powered off */
-               else
+                       goto done;
+
+               } else {
+                       /* AP powered off */
+                       INM_LOGD("AP powered off");
                        inm_error_analysis_diagnose(INM_NET_ERR_TYPE_AP_POWERED_OFF);
+                       goto done;
+               }
+       }
+
+       __INM_FUNC_EXIT__;
+       return FALSE;
+
+done:
+       __INM_FUNC_EXIT__;
+       return TRUE;
+}
+
+void inm_error_logger_connman_service_msg(inm_service_data_s *data)
+{
+       __INM_FUNC_ENTER__;
+
+       if (inm_error_logger_service_data_cmp(data, &old_service_data))
+               return;
+
+       INM_LOGD("[ConnmanService] name (%s), type (%d), error (%d), "
+                "state_v4 (%d), state_v6 (%d), strength (%d), "
+                "connect_reason (%d), disconnection_requested (%d)",
+                data->name, data->type, data->error, data->state_v4,
+                data->state_v6, data->strength, data->connect_reason,
+                data->disconnection_requested);
+
+       if (old_service_data.state_v4 == data->state_v4 &&
+           old_service_data.state_v6 == data->state_v6 &&
+           old_service_data.error == data->error) {
+
+               INM_LOGD("no change in connection state");
+               goto done;
        }
 
+       if (inm_error_logger_check_connection_faults(data, &old_service_data))
+               goto done;
+
+       inm_error_logger_check_disconnection_faults(data, &old_service_data);
+
 done:
        inm_error_logger_service_data_cpy(&old_service_data, data);