sml_set_proc_parameter_request *sml_set_proc_parameter_request_parse(sml_buffer *buf) { sml_set_proc_parameter_request *msg = sml_set_proc_parameter_request_init(); if (sml_buf_get_next_type(buf) != SML_TYPE_LIST) { buf->error = 1; goto error; } if (sml_buf_get_next_length(buf) != 5) { buf->error = 1; goto error; } msg->server_id = sml_octet_string_parse(buf); if (sml_buf_has_errors(buf)) goto error; msg->username = sml_octet_string_parse(buf); if (sml_buf_has_errors(buf)) goto error; msg->password = sml_octet_string_parse(buf); if (sml_buf_has_errors(buf)) goto error; msg->parameter_tree_path = sml_tree_path_parse(buf); if (sml_buf_has_errors(buf)) goto error; msg->parameter_tree = sml_tree_parse(buf); if (sml_buf_has_errors(buf)) goto error; return msg; error: sml_set_proc_parameter_request_free(msg); return 0; }
sml_attention_response *sml_attention_response_parse(sml_buffer *buf){ sml_attention_response *msg = sml_attention_response_init(); if (sml_buf_get_next_type(buf) != SML_TYPE_LIST) { buf->error = 1; goto error; } if (sml_buf_get_next_length(buf) != 4) { buf->error = 1; goto error; } msg->server_id = sml_octet_string_parse(buf); if (sml_buf_has_errors(buf)) goto error; msg->attention_number = sml_octet_string_parse(buf); if (sml_buf_has_errors(buf)) goto error; msg->attention_message = sml_octet_string_parse(buf); if (sml_buf_has_errors(buf)) goto error; msg->attention_details = sml_tree_parse(buf); if (sml_buf_has_errors(buf)) goto error; return msg; error: sml_attention_response_free(msg); return 0; }
TEST(sml_tree, parse_with_child) { hex2binary("730648616C6C6F0171730648616C6C6F0101", sml_buf_get_current_buf(buf)); sml_tree *t = sml_tree_parse(buf); TEST_ASSERT_NOT_NULL(t); TEST_ASSERT_NOT_NULL(t->child_list[0]); TEST_ASSERT_EQUAL(1, t->child_list_len); }
TEST(sml_tree, parse_with_error_child) { hex2binary("730648616C6C6F0171720648616C6C6F0101", sml_buf_get_current_buf(buf)); sml_tree *t = sml_tree_parse(buf); TEST_ASSERT_NULL(t); sml_tree_free( t ); }
sml_tree *sml_tree_parse(sml_buffer *buf) { if (sml_buf_optional_is_skipped(buf)) { return 0; } sml_tree *tree = sml_tree_init(); if (sml_buf_get_next_type(buf) != SML_TYPE_LIST) { buf->error = 1; goto error; } if (sml_buf_get_next_length(buf) != 3) { buf->error = 1; goto error; } tree->parameter_name = sml_octet_string_parse(buf); if (sml_buf_has_errors(buf)) goto error; tree->parameter_value = sml_proc_par_value_parse(buf); if (sml_buf_has_errors(buf)) goto error; if (!sml_buf_optional_is_skipped(buf)) { if (sml_buf_get_next_type(buf) != SML_TYPE_LIST) { buf->error = 1; goto error; } sml_tree *c; int elems; for (elems = sml_buf_get_next_length(buf); elems > 0; elems--) { c = sml_tree_parse(buf); if (sml_buf_has_errors(buf)) goto error; if (c) { sml_tree_add_tree(tree, c); } } } return tree; error: sml_tree_free(tree); return 0; }