00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef MRCP_CLIENT_SESSION_H
00020 #define MRCP_CLIENT_SESSION_H
00021
00022
00023
00024
00025
00026
00027 #include "mrcp_client_types.h"
00028 #include "mrcp_application.h"
00029 #include "mrcp_session.h"
00030 #include "mpf_engine.h"
00031 #include "apt_task_msg.h"
00032 #include "apt_obj_list.h"
00033
00034 APT_BEGIN_EXTERN_C
00035
00036
00037 typedef struct rtp_termination_slot_t rtp_termination_slot_t;
00038
00039
00040 typedef struct mrcp_client_session_t mrcp_client_session_t;
00041
00042
00043 typedef enum {
00044 SESSION_STATE_NONE,
00045 SESSION_STATE_GENERATING_OFFER,
00046 SESSION_STATE_PROCESSING_ANSWER,
00047 SESSION_STATE_TERMINATING,
00048 SESSION_STATE_DISCOVERING
00049 } mrcp_client_session_state_e;
00050
00051
00052 struct mrcp_client_session_t {
00053
00054 mrcp_session_t base;
00055
00056 mrcp_application_t *application;
00057
00058 void *app_obj;
00059
00060 mrcp_profile_t *profile;
00061
00062
00063 mpf_context_t *context;
00064
00065 const mpf_codec_manager_t *codec_manager;
00066
00067
00068
00069 apr_array_header_t *terminations;
00070
00071 apr_array_header_t *channels;
00072
00073
00074 apt_bool_t registered;
00075
00076
00077 mrcp_session_descriptor_t *offer;
00078
00079 mrcp_session_descriptor_t *answer;
00080
00081
00082 const mrcp_app_message_t *active_request;
00083
00084 apt_obj_list_t *request_queue;
00085
00086
00087 mpf_task_msg_t *mpf_task_msg;
00088
00089
00090 mrcp_client_session_state_e state;
00091
00092 mrcp_sig_status_code_e status;
00093
00094 apr_size_t subrequest_count;
00095 };
00096
00097
00098 struct mrcp_channel_t {
00099
00100 apr_pool_t *pool;
00101
00102 void *obj;
00103
00104 mrcp_resource_t *resource;
00105
00106 mrcp_session_t *session;
00107
00108 mrcp_control_channel_t *control_channel;
00109
00110 mpf_termination_t *termination;
00111
00112 rtp_termination_slot_t *rtp_termination_slot;
00113
00114
00115 apt_bool_t waiting_for_channel;
00116
00117 apt_bool_t waiting_for_termination;
00118 };
00119
00120
00121 struct rtp_termination_slot_t {
00122
00123 apt_bool_t waiting;
00124
00125 mpf_termination_t *termination;
00126
00127 mpf_rtp_termination_descriptor_t *descriptor;
00128
00129 mrcp_channel_t *channel;
00130
00131 apr_size_t id;
00132 };
00133
00134
00135
00136 struct mrcp_profile_t {
00137
00138 mrcp_resource_factory_t *resource_factory;
00139
00140 mpf_engine_t *media_engine;
00141
00142 mpf_termination_factory_t *rtp_termination_factory;
00143
00144 mrcp_sig_agent_t *signaling_agent;
00145
00146 mrcp_connection_agent_t *connection_agent;
00147
00148
00149 mrcp_sig_settings_t *signaling_settings;
00150
00151 mpf_rtp_settings_t *rtp_settings;
00152 };
00153
00154
00155 struct mrcp_application_t {
00156
00157 void *obj;
00158
00159 mrcp_app_message_handler_f handler;
00160
00161 mrcp_client_t *client;
00162
00163 apt_task_msg_pool_t *msg_pool;
00164 };
00165
00166
00167 mrcp_channel_t* mrcp_client_channel_create(
00168 mrcp_client_session_t *session,
00169 mrcp_resource_t *resource,
00170 mpf_termination_t *termination,
00171 mpf_rtp_termination_descriptor_t *rtp_descriptor,
00172 void *obj);
00173
00174
00175 mrcp_app_message_t* mrcp_client_app_signaling_request_create(mrcp_sig_command_e command_id, apr_pool_t *pool);
00176
00177 mrcp_app_message_t* mrcp_client_app_signaling_event_create(mrcp_sig_event_e event_id, apr_pool_t *pool);
00178
00179 mrcp_app_message_t* mrcp_client_app_control_message_create(apr_pool_t *pool);
00180
00181
00182 apt_bool_t mrcp_client_app_message_process(mrcp_app_message_t *app_message);
00183
00184 apt_bool_t mrcp_client_mpf_message_process(mpf_message_container_t *mpf_message_container);
00185
00186
00187 apt_bool_t mrcp_client_session_answer_process(mrcp_client_session_t *session, mrcp_session_descriptor_t *descriptor);
00188
00189 apt_bool_t mrcp_client_session_terminate_response_process(mrcp_client_session_t *session);
00190
00191 apt_bool_t mrcp_client_session_control_response_process(mrcp_client_session_t *session, mrcp_message_t *message);
00192
00193 apt_bool_t mrcp_client_session_discover_response_process(mrcp_client_session_t *session, mrcp_session_descriptor_t *descriptor);
00194
00195 apt_bool_t mrcp_client_session_terminate_event_process(mrcp_client_session_t *session);
00196
00197
00198 apt_bool_t mrcp_client_on_channel_add(mrcp_channel_t *channel, mrcp_control_descriptor_t *descriptor, apt_bool_t status);
00199
00200 apt_bool_t mrcp_client_on_channel_modify(mrcp_channel_t *channel, mrcp_control_descriptor_t *descriptor, apt_bool_t status);
00201
00202 apt_bool_t mrcp_client_on_channel_remove(mrcp_channel_t *channel, apt_bool_t status);
00203
00204 apt_bool_t mrcp_client_on_message_receive(mrcp_channel_t *channel, mrcp_message_t *message);
00205
00206 apt_bool_t mrcp_client_on_disconnect(mrcp_channel_t *channel);
00207
00208 APT_END_EXTERN_C
00209
00210 #endif