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;
}
예제 #2
0
파일: sml_message.c 프로젝트: mhei/libsml
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);
	}
}