[FIX] ACK return error code
authorVitaliy Cherepanov <v.cherepanov@samsung.com>
Fri, 18 Oct 2013 12:47:48 +0000 (16:47 +0400)
committerVitaliy Cherepanov <v.cherepanov@samsung.com>
Fri, 18 Oct 2013 12:47:48 +0000 (16:47 +0400)
return ERR_WRONG_MESSAGE_FORMAT instead of ERR_UNKNOWN if message parse
failed on messages: start, add, remove

Change-Id: I25a75284e4cd167f87816dad884176fa3211c10b
Signed-off-by: Vitaliy Cherepanov <v.cherepanov@samsung.com>
daemon/da_inst.c
daemon/da_inst.h
daemon/da_protocol.c

index 105dfe5..2389535 100644 (file)
@@ -623,11 +623,13 @@ struct app_info_t *app_info_get_next(struct app_list_t **app_list)
 }
 
 //-----------------------------------------------------------------------------
-int msg_start(struct msg_buf_t *data, struct user_space_inst_t *us_inst, struct msg_t **msg)
+int msg_start(struct msg_buf_t *data, struct user_space_inst_t *us_inst,
+             struct msg_t **msg, enum ErrorCode *err)
 {
        char *p = NULL;
        *msg = NULL;
        if (!parse_app_inst_list(data, &us_inst->app_num, &us_inst->app_inst_list)) {
+               *err = ERR_WRONG_MESSAGE_FORMAT;
                LOGE("parse app inst\n");
                return 1;
        }
@@ -638,17 +640,22 @@ int msg_start(struct msg_buf_t *data, struct user_space_inst_t *us_inst, struct
                p = (char *)*msg;
                pack_int32(p, NMSG_START);
        } else {
+               *err = ERR_CANNOT_START_PROFILING;
                return 1;
        }
        return 0;
 }
 
-int msg_swap_inst_add(struct msg_buf_t *data, struct user_space_inst_t *us_inst, struct msg_t **msg)
+int msg_swap_inst_add(struct msg_buf_t *data, struct user_space_inst_t *us_inst,
+                     struct msg_t **msg, enum ErrorCode *err)
 {
        uint32_t lib_num = 0;
        char *p = NULL;
 
+       *err = ERR_UNKNOWN;
+
        if (!parse_lib_inst_list(data, &lib_num, &us_inst->lib_inst_list)) {
+               *err = ERR_WRONG_MESSAGE_FORMAT;
                LOGE("parse lib inst list fail\n");
                return 1;
        }
@@ -677,15 +684,19 @@ int msg_swap_inst_add(struct msg_buf_t *data, struct user_space_inst_t *us_inst,
        // free new_list
        free_data_list((struct data_list_t **)&new_lib_inst_list);
        new_lib_inst_list = NULL;
+       *err = ERR_NO;
        return 0;
 }
 
-int msg_swap_inst_remove(struct msg_buf_t *data, struct user_space_inst_t *us_inst, struct msg_t **msg)
+int msg_swap_inst_remove(struct msg_buf_t *data, struct user_space_inst_t *us_inst,
+                        struct msg_t **msg, enum ErrorCode *err)
 {
        uint32_t lib_num = 0;
        char *p = NULL;
+       *err = ERR_UNKNOWN;
 
        if (!parse_lib_inst_list(data, &lib_num, &new_lib_inst_list)) {
+               *err = ERR_WRONG_MESSAGE_FORMAT;
                LOGE("parse lib inst\n");
                return 1;
        }
@@ -706,5 +717,6 @@ int msg_swap_inst_remove(struct msg_buf_t *data, struct user_space_inst_t *us_in
 
        free_data_list((struct data_list_t **)&new_lib_inst_list);
        new_lib_inst_list = NULL;
+       *err = ERR_NO;
        return 0;
 }
index 4c211aa..ce20510 100644 (file)
@@ -73,9 +73,12 @@ struct data_list_t {
 typedef int (cmp_data_f) (struct data_list_t *el_1, struct data_list_t *el_2);
 typedef char *(*pack_head_t) (char *to, void *data);
 
-extern int msg_swap_inst_remove(struct msg_buf_t *data, struct user_space_inst_t *us_inst, struct msg_t **msg);
-extern int msg_swap_inst_add(struct msg_buf_t *data, struct user_space_inst_t *us_inst, struct msg_t **msg);
-extern int msg_start(struct msg_buf_t *data, struct user_space_inst_t *us_inst, struct msg_t **msg);
+extern int msg_swap_inst_remove(struct msg_buf_t *data, struct user_space_inst_t *us_inst,
+                               struct msg_t **msg, enum ErrorCode *err);
+extern int msg_swap_inst_add(struct msg_buf_t *data, struct user_space_inst_t *us_inst,
+                            struct msg_t **msg, enum ErrorCode *err);
+extern int msg_start(struct msg_buf_t *data, struct user_space_inst_t *us_inst,
+                    struct msg_t **msg, enum ErrorCode *err);
 
 struct probe_list_t *new_probe();
 struct lib_list_t *new_lib();
index efceee6..5b621c7 100644 (file)
@@ -753,7 +753,7 @@ int sendACKToHost(enum HostMessageT resp, enum ErrorCode err_code,
                //copy payload data
                memcpy(p, payload, payload_size);
 
-               LOGI("ACK (%s) errcode<%s> payload=%d; size=%d\n", msg_ID_str(resp),
+               LOGI("ACK (%s) errcode<%s> payload=0x%08X; size=%d\n", msg_ID_str(resp),
                                msgErrStr(err_code), (int)payload, payload_size);
                printBuf((char *)msg, loglen);
 
@@ -951,7 +951,7 @@ static int process_msg_start(struct msg_buf_t *msg_control)
        }
 
        if (msg_start(msg_control, &prof_session.user_space_inst,
-                     &msg_reply) != 0) {
+                     &msg_reply, &err_code) != 0) {
                LOGE("parse error\n");
                goto send_ack;
        }
@@ -1044,9 +1044,9 @@ int host_message_handler(struct msg_t *msg)
        case NMSG_BINARY_INFO:
                return process_msg_binary_info(&msg_control);
        case NMSG_SWAP_INST_ADD:
-               if (msg_swap_inst_add(&msg_control, &prof_session.user_space_inst, &msg_reply) != 0) {
+               if (msg_swap_inst_add(&msg_control, &prof_session.user_space_inst,
+                                     &msg_reply, &error_code) != 0) {
                        LOGE("swap inst add\n");
-                       error_code = ERR_UNKNOWN;
                        goto send_ack;
                }
                if (msg_reply != NULL)
@@ -1057,7 +1057,8 @@ int host_message_handler(struct msg_t *msg)
                //send ack to host
                goto send_ack;
        case NMSG_SWAP_INST_REMOVE:
-               if (msg_swap_inst_remove(&msg_control, &prof_session.user_space_inst, &msg_reply) != 0) {
+               if (msg_swap_inst_remove(&msg_control, &prof_session.user_space_inst,
+                                        &msg_reply, &error_code) != 0) {
                        LOGE("swap inst remove\n");
                        error_code = ERR_UNKNOWN;
                        goto send_ack;