sml_time *sml_time_init() { sml_time *t = (sml_time *) malloc(sizeof(sml_time)); *t = ( sml_time ) { .tag = NULL, .data.sec_index = NULL }; return t; } sml_time *sml_time_parse(sml_buffer *buf) { if (sml_buf_optional_is_skipped(buf)) { return 0; } sml_time *tme = sml_time_init(); if (sml_buf_get_next_type(buf) != SML_TYPE_LIST) { buf->error = 1; goto error; } if (sml_buf_get_next_length(buf) != 2) { buf->error = 1; goto error; } tme->tag = sml_u8_parse(buf); if (sml_buf_has_errors(buf)) goto error; tme->data.timestamp = sml_u32_parse(buf); if (sml_buf_has_errors(buf)) goto error; return tme; error: sml_time_free(tme); return 0; } void sml_time_write(sml_time *t, sml_buffer *buf) { if (t == 0) { sml_buf_optional_write(buf); return; } sml_buf_set_type_and_length(buf, SML_TYPE_LIST, 2); sml_u8_write(t->tag, buf); sml_u32_write(t->data.timestamp, buf); } void sml_time_free(sml_time *tme) { if (tme) { sml_number_free(tme->tag); sml_number_free(tme->data.timestamp); free(tme); } }
void sml_time_write(sml_time *t, sml_buffer *buf) { if (t == 0) { sml_buf_optional_write(buf); return; } sml_buf_set_type_and_length(buf, SML_TYPE_LIST, 2); sml_u8_write(t->tag, buf); sml_u32_write(t->data.timestamp, buf); }
void sml_get_profile_pack_response_write(sml_get_profile_pack_response *msg, sml_buffer *buf) { sml_buf_set_type_and_length(buf, SML_TYPE_LIST, 8); sml_octet_string_write(msg->server_id, buf); sml_time_write(msg->act_time, buf); sml_u32_write(msg->reg_period, buf); sml_tree_path_write(msg->parameter_tree_path, buf); sml_sequence_write(msg->header_list, buf, sml_prof_obj_header_entry_write_); sml_sequence_write(msg->period_list, buf, sml_prof_obj_period_entry_write_); sml_octet_string_write(msg->rawdata, buf); sml_signature_write(msg->profile_signature, buf); }