Esempio n. 1
0
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);
	}
}
Esempio n. 2
0
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;
}