static apt_bool_t recog_response_define_grammar(mrcp_recog_state_machine_t *state_machine, mrcp_message_t *message) { if(mrcp_resource_header_property_check(message,RECOGNIZER_HEADER_COMPLETION_CAUSE) != TRUE) { mrcp_recog_header_t *recog_header = mrcp_resource_header_prepare(message); recog_header->completion_cause = RECOGNIZER_COMPLETION_CAUSE_SUCCESS; mrcp_resource_header_property_add(message,RECOGNIZER_HEADER_COMPLETION_CAUSE); } return recog_response_dispatch(state_machine,message); }
static apt_bool_t recog_response_define_grammar(mrcp_recog_state_machine_t *state_machine, mrcp_message_t *message) { apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Process DEFINE-GRAMMAR Response [%d]",message->start_line.request_id); if(mrcp_resource_header_property_check(message,RECOGNIZER_HEADER_COMPLETION_CAUSE) != TRUE) { mrcp_recog_header_t *recog_header = mrcp_resource_header_prepare(message); recog_header->completion_cause = RECOGNIZER_COMPLETION_CAUSE_SUCCESS; mrcp_resource_header_property_add(message,RECOGNIZER_HEADER_COMPLETION_CAUSE); } return recog_response_dispatch(state_machine,message); }
static apt_bool_t recog_response_recognize(mrcp_recog_state_machine_t *state_machine, mrcp_message_t *message) { if(message->start_line.request_state == MRCP_REQUEST_STATE_INPROGRESS) { state_machine->recog = state_machine->active_request; recog_state_change(state_machine,RECOGNIZER_STATE_RECOGNIZING,message); } if(state_machine->is_pending == TRUE) { state_machine->is_pending = FALSE; /* not to send the response for pending request */ return TRUE; } return recog_response_dispatch(state_machine,message); }
static apt_bool_t recog_request_define_grammar(mrcp_recog_state_machine_t *state_machine, mrcp_message_t *message) { if(state_machine->state == RECOGNIZER_STATE_RECOGNIZING) { mrcp_message_t *response_message = mrcp_response_create(message,message->pool); response_message->start_line.status_code = MRCP_STATUS_CODE_METHOD_NOT_VALID; return recog_response_dispatch(state_machine,response_message); } else if(state_machine->state == RECOGNIZER_STATE_RECOGNIZED) { recog_state_change(state_machine,RECOGNIZER_STATE_IDLE,message); } return recog_request_dispatch(state_machine,message); }
static apt_bool_t recog_request_recognition_start_timers(mrcp_recog_state_machine_t *state_machine, mrcp_message_t *message) { mrcp_message_t *response_message; if(state_machine->state == RECOGNIZER_STATE_RECOGNIZING) { /* found in-progress request */ return recog_request_dispatch(state_machine,message); } /* found no in-progress request */ response_message = mrcp_response_create(message,message->pool); response_message->start_line.status_code = MRCP_STATUS_CODE_METHOD_NOT_VALID; return recog_response_dispatch(state_machine,response_message); }
static apt_bool_t recog_request_recognition_start_timers(mrcp_recog_state_machine_t *state_machine, mrcp_message_t *message) { mrcp_message_t *response_message; if(state_machine->state == RECOGNIZER_STATE_RECOGNIZING) { /* found in-progress request */ apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Process START-INPUT-TIMERS Request [%d]",message->start_line.request_id); return recog_request_dispatch(state_machine,message); } /* found no in-progress request */ response_message = mrcp_response_create(message,message->pool); response_message->start_line.status_code = MRCP_STATUS_CODE_METHOD_NOT_VALID; return recog_response_dispatch(state_machine,response_message); }
static apt_bool_t recog_request_get_result(mrcp_recog_state_machine_t *state_machine, mrcp_message_t *message) { mrcp_message_t *response_message; if(state_machine->state == RECOGNIZER_STATE_RECOGNIZED) { /* found recognized request */ apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Process GET-RESULT Request [%d]",message->start_line.request_id); return recog_request_dispatch(state_machine,message); } /* found no recognized request */ response_message = mrcp_response_create(message,message->pool); response_message->start_line.status_code = MRCP_STATUS_CODE_METHOD_NOT_VALID; return recog_response_dispatch(state_machine,response_message); }
static apt_bool_t recog_request_define_grammar(mrcp_recog_state_machine_t *state_machine, mrcp_message_t *message) { if(state_machine->state == RECOGNIZER_STATE_RECOGNIZING) { mrcp_message_t *response_message = mrcp_response_create(message,message->pool); response_message->start_line.status_code = MRCP_STATUS_CODE_METHOD_NOT_VALID; return recog_response_dispatch(state_machine,response_message); } else if(state_machine->state == RECOGNIZER_STATE_RECOGNIZED) { recog_state_change(state_machine,RECOGNIZER_STATE_IDLE); } apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Process DEFINE-GRAMMAR Request [%d]",message->start_line.request_id); return recog_request_dispatch(state_machine,message); }
static apt_bool_t recog_request_recognize(mrcp_recog_state_machine_t *state_machine, mrcp_message_t *message) { mrcp_message_header_inherit(&message->header,&state_machine->properties,message->pool); if(state_machine->state == RECOGNIZER_STATE_RECOGNIZING) { mrcp_message_t *response; apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Queue Up RECOGNIZE Request [%d]",message->start_line.request_id); message->start_line.request_state = MRCP_REQUEST_STATE_PENDING; apt_list_push_back(state_machine->queue,message,message->pool); response = mrcp_response_create(message,message->pool); response->start_line.request_state = MRCP_REQUEST_STATE_PENDING; return recog_response_dispatch(state_machine,response); } apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Process RECOGNIZE Request [%d]",message->start_line.request_id); return recog_request_dispatch(state_machine,message); }
static apt_bool_t recog_request_recognize(mrcp_recog_state_machine_t *state_machine, mrcp_message_t *message) { mrcp_header_fields_inherit(&message->header,state_machine->properties,message->pool); if(state_machine->state == RECOGNIZER_STATE_RECOGNIZING) { mrcp_message_t *response; apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Queue Up RECOGNIZE Request "APT_SIDRES_FMT" [%"MRCP_REQUEST_ID_FMT"]", MRCP_MESSAGE_SIDRES(message), message->start_line.request_id); message->start_line.request_state = MRCP_REQUEST_STATE_PENDING; apt_list_push_back(state_machine->queue,message,message->pool); response = mrcp_response_create(message,message->pool); response->start_line.request_state = MRCP_REQUEST_STATE_PENDING; return recog_response_dispatch(state_machine,response); } return recog_request_dispatch(state_machine,message); }
static apt_bool_t recog_response_stop(mrcp_recog_state_machine_t *state_machine, mrcp_message_t *message) { mrcp_message_t *pending_request; mrcp_generic_header_t *generic_header = mrcp_generic_header_prepare(message); apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Process STOP Response [%d]",message->start_line.request_id); /* append active id list */ active_request_id_list_append(generic_header,state_machine->recog->start_line.request_id); mrcp_generic_header_property_add(message,GENERIC_HEADER_ACTIVE_REQUEST_ID_LIST); recog_pending_requests_remove(state_machine,state_machine->active_request,message); recog_state_change(state_machine,RECOGNIZER_STATE_IDLE); recog_response_dispatch(state_machine,message); /* process pending RECOGNIZE requests / if any */ pending_request = apt_list_pop_front(state_machine->queue); if(pending_request) { apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Process Pending RECOGNIZE Request [%d]",pending_request->start_line.request_id); state_machine->is_pending = TRUE; recog_request_dispatch(state_machine,pending_request); } return TRUE; }
/** Update state according to received outgoing response from recognition engine */ static apt_bool_t recog_response_state_update(mrcp_recog_state_machine_t *state_machine, mrcp_message_t *message) { recog_method_f method; if(!state_machine->active_request) { /* unexpected response, no active request waiting for response */ return FALSE; } if(state_machine->active_request->start_line.request_id != message->start_line.request_id) { /* unexpected response, request id doesn't match */ return FALSE; } if(message->start_line.method_id >= RECOGNIZER_METHOD_COUNT) { return FALSE; } method = recog_response_method_array[message->start_line.method_id]; if(method) { return method(state_machine,message); } return recog_response_dispatch(state_machine,message); }
static apt_bool_t recog_response_get_result(mrcp_recog_state_machine_t *state_machine, mrcp_message_t *message) { return recog_response_dispatch(state_machine,message); }
static apt_bool_t recog_response_get_params(mrcp_recog_state_machine_t *state_machine, mrcp_message_t *message) { mrcp_header_fields_get(&message->header,state_machine->properties,&state_machine->active_request->header,message->pool); return recog_response_dispatch(state_machine,message); }
static apt_bool_t recog_response_recognition_start_timers(mrcp_recog_state_machine_t *state_machine, mrcp_message_t *message) { apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Process START-INPUT-TIMERS Response [%d]",message->start_line.request_id); return recog_response_dispatch(state_machine,message); }
static apt_bool_t recog_response_get_result(mrcp_recog_state_machine_t *state_machine, mrcp_message_t *message) { apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Process GET-RESULT Response [%d]",message->start_line.request_id); return recog_response_dispatch(state_machine,message); }
static apt_bool_t recog_response_recognition_start_timers(mrcp_recog_state_machine_t *state_machine, mrcp_message_t *message) { return recog_response_dispatch(state_machine,message); }
static apt_bool_t recog_response_set_params(mrcp_recog_state_machine_t *state_machine, mrcp_message_t *message) { apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Process SET-PARAMS Response [%d]",message->start_line.request_id); return recog_response_dispatch(state_machine,message); }