/** Generate MRCP v2 start-line */ static apt_bool_t mrcp_v2_start_line_generate(mrcp_start_line_t *start_line, apt_text_stream_t *stream) { char *pos = stream->pos; mrcp_version_generate(start_line->version,stream); *stream->pos++ = APT_TOKEN_SP; start_line->length = stream->pos - pos; /* length is temporary used to store offset */ /* reserving MAX_DIGIT_COUNT space for start_line->length */ memset(stream->pos,APT_TOKEN_SP,MAX_DIGIT_COUNT+1); stream->pos += MAX_DIGIT_COUNT+1; if(start_line->message_type == MRCP_MESSAGE_TYPE_RESPONSE) { mrcp_request_id_generate(start_line->request_id,stream); *stream->pos++ = APT_TOKEN_SP; mrcp_status_code_generate(start_line->status_code,stream); *stream->pos++ = APT_TOKEN_SP; mrcp_request_state_generate(start_line->request_state,stream); } else { memcpy(stream->pos,start_line->method_name.buf,start_line->method_name.length); stream->pos += start_line->method_name.length; *stream->pos++ = APT_TOKEN_SP; mrcp_request_id_generate(start_line->request_id,stream); if(start_line->message_type == MRCP_MESSAGE_TYPE_EVENT) { *stream->pos++ = APT_TOKEN_SP; mrcp_request_state_generate(start_line->request_state,stream); } } return TRUE; }
/** Generate mrcp request-id list */ static apt_bool_t mrcp_request_id_list_generate(mrcp_request_id_list_t *request_id_list, apt_text_stream_t *stream) { size_t i; for(i=0; i<request_id_list->count; i++) { mrcp_request_id_generate(request_id_list->ids[i],stream); if(i < request_id_list->count-1) { *stream->pos++ = ','; } } return TRUE; }
/** Generate MRCP response-line */ static apt_bool_t mrcp_response_line_generate(mrcp_start_line_t *start_line, apt_text_stream_t *stream) { mrcp_version_generate(start_line->version,stream); *stream->pos++ = APT_TOKEN_SP; mrcp_request_id_generate(start_line->request_id,stream); *stream->pos++ = APT_TOKEN_SP; mrcp_status_code_generate(start_line->status_code,stream); *stream->pos++ = APT_TOKEN_SP; mrcp_request_state_generate(start_line->request_state,stream); return TRUE; }
/** Generate mrcp request-id list */ static apt_bool_t mrcp_request_id_list_generate(mrcp_request_id_list_t *request_id_list, apt_str_t *str, apr_pool_t *pool) { apr_size_t i; char buf[256]; apt_text_stream_t stream; apt_text_stream_init(&stream,buf,sizeof(buf)); for(i=0; i<request_id_list->count; i++) { mrcp_request_id_generate(request_id_list->ids[i],&stream); if(i < request_id_list->count-1) { *stream.pos++ = ','; } } apt_string_assign_n(str,stream.text.buf, stream.pos - stream.text.buf, pool); return TRUE; }
/** Generate MRCP request-line */ static apt_bool_t mrcp_request_line_generate(mrcp_start_line_t *start_line, apt_text_stream_t *stream) { memcpy(stream->pos,start_line->method_name.buf,start_line->method_name.length); stream->pos += start_line->method_name.length; *stream->pos++ = APT_TOKEN_SP; mrcp_request_id_generate(start_line->request_id,stream); *stream->pos++ = APT_TOKEN_SP; if(start_line->message_type == MRCP_MESSAGE_TYPE_REQUEST) { if(start_line->status_code != MRCP_STATUS_CODE_UNKNOWN) { mrcp_status_code_generate(start_line->status_code,stream); *stream->pos++ = APT_TOKEN_SP; } } else if(start_line->message_type == MRCP_MESSAGE_TYPE_EVENT) { mrcp_request_state_generate(start_line->request_state,stream); *stream->pos++ = APT_TOKEN_SP; } mrcp_version_generate(start_line->version,stream); return TRUE; }