IMC plugin update
[platform/core/telephony/tel-plugin-imc.git] / src / imc_phonebook.c
index c5d2c93..ca8ee04 100644 (file)
@@ -51,6 +51,77 @@ typedef struct {
        gboolean used_index_usim_valid;
 } PrivateInfo;
 
+static TelPbResult
+__imc_phonebook_convert_cme_error_tel_phonebook_result(const TcoreAtResponse *at_resp)
+{
+       TelPbResult result = TEL_PB_RESULT_FAILURE;
+       GSList *tokens = NULL;
+       const gchar *line;
+
+       dbg("Entry");
+
+       if (!at_resp || !at_resp->lines) {
+               err("Invalid response data");
+               return result;
+       }
+
+       line = (const gchar *)at_resp->lines->data;
+       tokens = tcore_at_tok_new(line);
+       if (g_slist_length(tokens) > 0) {
+               gchar *resp_str;
+               gint cme_err;
+
+               resp_str = g_slist_nth_data(tokens, 0);
+               if (!resp_str) {
+                       err("Invalid CME Error data");
+                       tcore_at_tok_free(tokens);
+                       return result;
+               }
+               cme_err = atoi(resp_str);
+               dbg("CME Error: [%d]", cme_err);
+
+               switch (cme_err) {
+               case 3:
+                       result = TEL_PB_RESULT_OPERATION_NOT_PERMITTED;
+               break;
+
+               case 4:
+                       result = TEL_PB_RESULT_OPERATION_NOT_SUPPORTED;
+               break;
+
+               case 17:
+                       result = TEL_PB_RESULT_PIN2_REQUIRED;
+               break;
+
+               case 18:
+                       result = TEL_PB_RESULT_PUK2_REQUIRED;
+               break;
+
+               case 20:
+                       result = TEL_PB_RESULT_MEMORY_FAILURE;
+               break;
+
+               case 21:
+                       result = TEL_PB_RESULT_INVALID_INDEX;
+               break;
+
+               case 50:
+                       result =  TEL_PB_RESULT_INVALID_PARAMETER;
+               break;
+
+               case 100:
+                       result =  TEL_PB_RESULT_UNKNOWN_FAILURE;
+               break;
+
+               default:
+                       result = TEL_PB_RESULT_FAILURE;
+               }
+       }
+       tcore_at_tok_free(tokens);
+
+       return result;
+}
+
 static gboolean __imc_phonebook_get_sim_type(CoreObject *co_pb,
                TelSimCardType *sim_type)
 {
@@ -279,11 +350,9 @@ static void __imc_phonebook_get_used_index(CoreObject *co, TelPbType pb_type, gu
        ret = tcore_at_prepare_and_send_request(co,
                at_cmd, "+CPBR",
                TCORE_AT_COMMAND_TYPE_MULTILINE,
-               TCORE_PENDING_PRIORITY_DEFAULT,
                NULL,
                on_response_imc_phonebook_get_used_index, resp_cb_data,
-               on_send_imc_request, NULL,
-               0, NULL, NULL);
+               on_send_imc_request, NULL);
        IMC_CHECK_REQUEST_RET(ret, resp_cb_data, "Get Used Index");
 
        /* Free resources */
@@ -386,11 +455,9 @@ static void __imc_phonebook_get_support_list(CoreObject *co)
        ret = tcore_at_prepare_and_send_request(co,
                "AT+CPBS=?", "+CPBS",
                TCORE_AT_COMMAND_TYPE_SINGLELINE,
-               TCORE_PENDING_PRIORITY_DEFAULT,
                NULL,
                on_response_imc_phonebook_get_support_list, NULL,
-               on_send_imc_request, NULL,
-               0, NULL, NULL);
+               on_send_imc_request, NULL);
        IMC_CHECK_REQUEST_RET(ret, NULL, "Get Support List");
 }
 
@@ -420,6 +487,7 @@ static void on_response_imc_phonebook_get_info(TcorePending *p,
 
        if (at_resp->success != TRUE) {
                err("Response NOK");
+               result = __imc_phonebook_convert_cme_error_tel_phonebook_result(at_resp);
                goto out;
        }
 
@@ -542,6 +610,7 @@ static void on_response_imc_phonebook_read_record(TcorePending *p,
 
        if (at_resp->success != TRUE) {
                err("Response NOK");
+               result = __imc_phonebook_convert_cme_error_tel_phonebook_result(at_resp);
                goto out;
        }
 
@@ -708,6 +777,7 @@ static void on_response_imc_phonebook_update_record(TcorePending *p,
 
        if (at_resp->success != TRUE) {
                err("Response NOK");
+               result = __imc_phonebook_convert_cme_error_tel_phonebook_result(at_resp);
                goto out;
        }
 
@@ -725,6 +795,7 @@ static void on_response_imc_phonebook_update_record(TcorePending *p,
        } else {
                list = g_slist_insert_sorted(list, (gpointer)req_data->index,
                        __imc_phonebook_compare_index);
+               dbg("list: [0x%x]", list);
        }
 
 out:
@@ -752,6 +823,7 @@ static void on_response_imc_phonebook_delete_record(TcorePending *p,
 
        if (at_resp->success != TRUE) {
                err("Response NOK");
+               result = __imc_phonebook_convert_cme_error_tel_phonebook_result(at_resp);
                goto out;
        }
 
@@ -768,7 +840,7 @@ static void on_response_imc_phonebook_delete_record(TcorePending *p,
                err("used_index list is NOT valid");
        } else {
                list = g_slist_remove(list, (gconstpointer)req_data->index);
-               dbg("Remove index: [%u]", req_data->index);
+               dbg("Remove index: [%u], list: [0x%x]", req_data->index, list);
        }
 
 out:
@@ -828,11 +900,9 @@ static TelReturn imc_phonebook_get_info(CoreObject *co,
        ret = tcore_at_prepare_and_send_request(co,
                at_cmd, "+CPB",
                TCORE_AT_COMMAND_TYPE_MULTILINE,
-               TCORE_PENDING_PRIORITY_DEFAULT,
                NULL,
                on_response_imc_phonebook_get_info, resp_cb_data,
-               on_send_imc_request, NULL,
-               0, NULL, NULL);
+               on_send_imc_request, NULL);
        IMC_CHECK_REQUEST_RET(ret, resp_cb_data, "Get Info");
 
        /* Free resources */
@@ -905,11 +975,9 @@ static TelReturn imc_phonebook_read_record(CoreObject *co,
        ret = tcore_at_prepare_and_send_request(co,
                at_cmd, "+CPBR",
                TCORE_AT_COMMAND_TYPE_SINGLELINE,
-               TCORE_PENDING_PRIORITY_DEFAULT,
                NULL,
                on_response_imc_phonebook_read_record, resp_cb_data,
-               on_send_imc_request, NULL,
-               0, NULL, NULL);
+               on_send_imc_request, NULL);
        IMC_CHECK_REQUEST_RET(ret, resp_cb_data, "Read Record");
 
        /* Free resources */
@@ -973,11 +1041,9 @@ static TelReturn imc_phonebook_update_record(CoreObject *co,
        ret = tcore_at_prepare_and_send_request(co,
                at_cmd, NULL,
                TCORE_AT_COMMAND_TYPE_NO_RESULT,
-               TCORE_PENDING_PRIORITY_DEFAULT,
                NULL,
                on_response_imc_phonebook_update_record, resp_cb_data,
-               on_send_imc_request, NULL,
-               0, NULL, NULL);
+               on_send_imc_request, NULL);
        IMC_CHECK_REQUEST_RET(ret, resp_cb_data, "Update Record");
 
        /* Free resources */
@@ -1030,11 +1096,9 @@ static TelReturn imc_phonebook_delete_record(CoreObject *co,
        ret = tcore_at_prepare_and_send_request(co,
                at_cmd, NULL,
                TCORE_AT_COMMAND_TYPE_NO_RESULT,
-               TCORE_PENDING_PRIORITY_DEFAULT,
                NULL,
                on_response_imc_phonebook_delete_record, resp_cb_data,
-               on_send_imc_request, NULL,
-               0, NULL, NULL);
+               on_send_imc_request, NULL);
        IMC_CHECK_REQUEST_RET(ret, resp_cb_data, "Delete Record");
 
        /* Free resources */