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);