コード例 #1
0
/** Generate MRCP message (excluding message body) */
MRCP_DECLARE(apt_bool_t) mrcp_message_generate(const mrcp_resource_factory_t *resource_factory, mrcp_message_t *message, apt_text_stream_t *stream)
{
	/* validate message */
	if(mrcp_message_validate(message) == FALSE) {
		return FALSE;
	}
	
	/* generate start-line */
	if(mrcp_start_line_generate(&message->start_line,stream) == FALSE) {
		return FALSE;
	}

	if(message->start_line.version == MRCP_VERSION_2) {
		mrcp_channel_id_generate(&message->channel_id,stream);
	}

	/* generate header section */
	if(apt_header_section_generate(&message->header.header_section,stream) == FALSE) {
		return FALSE;
	}

	/* finalize start-line generation */
	if(mrcp_start_line_finalize(&message->start_line,message->body.length,stream) == FALSE) {
		return FALSE;
	}

	return TRUE;
}
コード例 #2
0
/** Generate message */
APT_DECLARE(apt_message_status_e) apt_message_generator_run(apt_message_generator_t *generator, void *message, apt_text_stream_t *stream)
{
	if(!message) {
		return APT_MESSAGE_STATUS_INVALID;
	}

	if(message != generator->context.message) {
		generator->stage = APT_MESSAGE_STAGE_START_LINE;
		generator->context.message = message;
		generator->context.header = NULL;
		generator->context.body = NULL;
	}

	if(generator->stage == APT_MESSAGE_STAGE_START_LINE) {
		/* generate start-line */
		if(generator->vtable->on_start(generator,&generator->context,stream) == FALSE) {
			return apt_message_generator_break(generator,stream);
		}

		if(!generator->context.header || !generator->context.body) {
			return APT_MESSAGE_STATUS_INVALID;
		}

		/* generate header */
		if(apt_header_section_generate(generator->context.header,stream) == FALSE) {
			return apt_message_generator_break(generator,stream);
		}

		if(generator->vtable->on_header_complete) {
			generator->vtable->on_header_complete(generator,&generator->context,stream);
		}
		if(generator->verbose == TRUE) {
			apr_size_t length = stream->pos - stream->text.buf;
			apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Generated Message Header [%"APR_SIZE_T_FMT" bytes]\n%.*s",
					length, length, stream->text.buf);
		}

		generator->stage = APT_MESSAGE_STAGE_START_LINE;
		generator->content_length = generator->context.body->length;
		if(generator->content_length) {
			generator->context.body->length = 0;
			generator->stage = APT_MESSAGE_STAGE_BODY;
		}
	}

	if(generator->stage == APT_MESSAGE_STAGE_BODY) {
		if(apt_message_body_write(generator,stream) == FALSE) {
			return apt_message_generator_break(generator,stream);
		}
		
		generator->stage = APT_MESSAGE_STAGE_START_LINE;
	}

	return APT_MESSAGE_STATUS_COMPLETE;
}
コード例 #3
0
/** Add content part to multipart content */
APT_DECLARE(apt_bool_t) apt_multipart_content_add(apt_multipart_content_t *multipart_content, const apt_content_part_t *content_part)
{
	if(!content_part) {
		return FALSE;
	}

	/* insert preceding eol, hyppens and boudnary */
	if(apt_multipart_content_initialize(multipart_content) == FALSE) {
		return FALSE;
	}

	/* insert header fields */
	if(apt_header_section_generate(&content_part->header,&multipart_content->stream) == FALSE) {
		return FALSE;
	}

	/* insert body */
	return apt_text_string_insert(&multipart_content->stream,&content_part->body);
}