[PROTO] add probe return type to message
authorVitaliy Cherepanov <v.cherepanov@samsung.com>
Wed, 6 Nov 2013 12:32:25 +0000 (16:32 +0400)
committerGerrit Code Review <gerrit@gerrit.vlan144.tizendev.org>
Tue, 12 Nov 2013 06:22:30 +0000 (06:22 +0000)
add for MSG_SWAP_INST_ADD NMSG_SWAP_INST_REMOVE NMSG_START

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

index 4cb9fce4db68f1658f83c0460414f66303091dcc..dd35572b82ebc55b68af36fd7c80bdb2769ea7a5 100644 (file)
@@ -242,6 +242,20 @@ int parse_string_no_alloc(struct msg_buf_t *msg, char *str)
        return 1;
 }
 
+int parse_int8(struct msg_buf_t *msg, uint8_t *val)
+{
+       parse_deb("size = %d\n", get_avail_msg_size(msg));
+       if (get_avail_msg_size(msg) < sizeof(*val))
+               return 0;
+       *val = *(uint8_t *)msg->cur_pos;
+       msg->cur_pos += sizeof(uint8_t);
+
+       parse_deb("<%d><0x%08X>\n", *val, *val);
+       return 1;
+}
+
+
+
 int parse_int32(struct msg_buf_t *msg, uint32_t *val)
 {
        parse_deb("size = %d\n", get_avail_msg_size(msg));
index c7239ef6f670e9a6881c138a411874954b688f67..7d690b5bb86dfe3cb95328c7b378dd10ea98bbeb 100644 (file)
@@ -212,6 +212,12 @@ struct app_info_t {
 
 
 struct us_func_inst_plane_t {
+       //format
+       //name       | type   | len       | info
+       //------------------------------------------
+       //func_addr  | uint64 | 8         |
+       //args       | string | len(args) |end with '\0'
+       //ret_type   | char   | 1         |
        uint64_t func_addr;
        char args[0];
 };
@@ -395,6 +401,7 @@ void print_replay_event(struct replay_event_t *ev, uint32_t num, char *tab);
 int sendACKToHost(enum HostMessageT resp, enum ErrorCode err_code,
                        char *payload, int payload_size);
 
+int parse_int8(struct msg_buf_t *msg, uint8_t *val);
 int parse_int32(struct msg_buf_t *msg, uint32_t *val);
 int parse_int64(struct msg_buf_t *msg, uint64_t *val);
 int parse_string(struct msg_buf_t *msg, char **str);
index 0d03cf8b68a8470bc7e33f80694a63bd23d1d7c5..a2b828fb4b8c5e138cdcb74b984ae413b1b1a9d9 100644 (file)
@@ -172,6 +172,15 @@ int check_us_inst_func_args(char *args)
        return 1;
 }
 
+int check_us_inst_func_ret_type(char ret_type)
+{
+       if (strchr(args_avail, (int)ret_type) == NULL){
+               LOGE("wrong ret type <%c> <0x%02X>\n", (int)ret_type, (char)ret_type);
+               return 0;
+       }
+       return 1;
+}
+
 int check_lib_inst_count(uint32_t lib_count)
 {
        int res = 1;
index 09310c0c7d8f0bbe11edccedbdb456b81ecfadda..3af23c14e3f6373b46309172e9c31365dbc0c6b5 100644 (file)
@@ -58,34 +58,55 @@ static uint32_t calc_app_hash(struct app_info_t *app)
 //----------------------------------- parse -----------------------------------
 int parse_us_inst_func(struct msg_buf_t *msg, struct probe_list_t **dest)
 {
+       //probe format
+       //name       | type   | len       | info
+       //------------------------------------------
+       //func_addr  | uint64 | 8         |
+       //args       | string | len(args) |end with '\0'
+       //ret_type   | char   | 1         |
+
        uint32_t size = 0;
        struct us_func_inst_plane_t *func;
+       int par_count = 0;
+       char *ret_type = NULL;
 
-       size = sizeof(*func) + strlen(msg->cur_pos + sizeof(func->func_addr) ) + 1;
+       par_count = strlen(msg->cur_pos + sizeof(func->func_addr));
+       size = sizeof(*func) + par_count + 1 +
+              sizeof(char) /* sizeof(char) for ret_type */;
        func = malloc(size);
        if (!parse_int64(msg, &(func->func_addr))) {
                LOGE("func addr parsing error\n");
-               free(func);
-               return 0;
+               goto err_ret;
        }
 
        if (!parse_string_no_alloc(msg, func->args) ||
-               !check_us_inst_func_args(func->args))
+           !check_us_inst_func_args(func->args))
        {
                LOGE("args format parsing error\n");
-               free(func);
-               return 0;
+               goto err_ret;
+       }
+
+       //func->args type is char[0]
+       //and we need put ret_type after func->args
+       ret_type = func->args + par_count + 1;
+       if (!parse_int8(msg, (uint8_t *)ret_type) ||
+           !check_us_inst_func_ret_type(*ret_type))
+       {
+               LOGE("return type parsing error\n");
+               goto err_ret;
        }
 
        *dest = new_probe();
        if (*dest == NULL) {
                LOGE("alloc new_probe error\n");
-               free(func);
-               return 0;
+               goto err_ret;
        }
        (*dest)->size = size;
        (*dest)->func = func;
        return 1;
+err_ret:
+       free(func);
+       return 0;
 }
 
 int parse_func_inst_list(struct msg_buf_t *msg,