void sml_message_body_free(sml_message_body *message_body) { if (message_body) { switch (*(message_body->tag)) { case SML_MESSAGE_OPEN_REQUEST: sml_open_request_free((sml_open_request *) message_body->data); break; case SML_MESSAGE_OPEN_RESPONSE: sml_open_response_free((sml_open_response *) message_body->data); break; case SML_MESSAGE_CLOSE_REQUEST: sml_close_request_free((sml_close_request *) message_body->data); break; case SML_MESSAGE_CLOSE_RESPONSE: sml_close_response_free((sml_close_response *) message_body->data); break; case SML_MESSAGE_GET_PROFILE_PACK_REQUEST: sml_get_profile_pack_request_free((sml_get_profile_pack_request *) message_body->data); break; case SML_MESSAGE_GET_PROFILE_PACK_RESPONSE: sml_get_profile_pack_response_free((sml_get_profile_pack_response *) message_body->data); break; case SML_MESSAGE_GET_PROFILE_LIST_REQUEST: sml_get_profile_list_request_free((sml_get_profile_list_request *) message_body->data); break; case SML_MESSAGE_GET_PROFILE_LIST_RESPONSE: sml_get_profile_list_response_free((sml_get_profile_list_response *) message_body->data); break; case SML_MESSAGE_GET_PROC_PARAMETER_REQUEST: sml_get_proc_parameter_request_free((sml_get_proc_parameter_request *) message_body->data); break; case SML_MESSAGE_GET_PROC_PARAMETER_RESPONSE: sml_get_proc_parameter_response_free((sml_get_proc_parameter_response *) message_body->data); break; case SML_MESSAGE_SET_PROC_PARAMETER_REQUEST: sml_set_proc_parameter_request_free((sml_set_proc_parameter_request *) message_body->data); break; case SML_MESSAGE_GET_LIST_REQUEST: sml_get_list_request_free((sml_get_list_request *) message_body->data); break; case SML_MESSAGE_GET_LIST_RESPONSE: sml_get_list_response_free((sml_get_list_response *) message_body->data); break; case SML_MESSAGE_ATTENTION_RESPONSE: sml_attention_response_free((sml_attention_response *) message_body->data); break; default: printf("NYI: %s for message type %04X\n", __FUNCTION__, *(message_body->tag)); break; } sml_number_free(message_body->tag); free(message_body); } }
sml_open_response *sml_open_response_parse(sml_buffer *buf) { sml_open_response *msg = sml_open_response_init(); if (sml_buf_get_next_type(buf) != SML_TYPE_LIST) { buf->error = 1; goto error; } if (sml_buf_get_next_length(buf) != 6) { buf->error = 1; goto error; } msg->codepage = sml_octet_string_parse(buf); if (sml_buf_has_errors(buf)) goto error; msg->client_id = sml_octet_string_parse(buf); if (sml_buf_has_errors(buf)) goto error; msg->req_file_id = sml_octet_string_parse(buf); if (sml_buf_has_errors(buf)) goto error; msg->server_id = sml_octet_string_parse(buf); if (sml_buf_has_errors(buf)) goto error; msg->ref_time = sml_time_parse(buf); if (sml_buf_has_errors(buf)) goto error; msg->sml_version = sml_u8_parse(buf); if (sml_buf_has_errors(buf)) goto error; return msg; error: sml_open_response_free(msg); return 0; }