00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef MRCP_SERVER_SESSION_H
00020 #define MRCP_SERVER_SESSION_H
00021
00022
00023
00024
00025
00026
00027 #include <apr_hash.h>
00028 #include "mrcp_session.h"
00029 #include "mpf_engine.h"
00030 #include "apt_task.h"
00031 #include "apt_obj_list.h"
00032
00033
00034 APT_BEGIN_EXTERN_C
00035
00036
00037 typedef struct mrcp_channel_t mrcp_channel_t;
00038
00039 typedef struct mrcp_server_session_t mrcp_server_session_t;
00040
00041 typedef struct mrcp_signaling_message_t mrcp_signaling_message_t;
00042
00043
00044 typedef enum {
00045 SIGNALING_MESSAGE_OFFER,
00046 SIGNALING_MESSAGE_CONTROL,
00047 SIGNALING_MESSAGE_TERMINATE,
00048 } mrcp_signaling_message_type_e;
00049
00050
00051 struct mrcp_signaling_message_t {
00052
00053 mrcp_signaling_message_type_e type;
00054
00055
00056 mrcp_server_session_t *session;
00057
00058 mrcp_session_descriptor_t *descriptor;
00059
00060
00061 mrcp_channel_t *channel;
00062
00063 mrcp_message_t *message;
00064 };
00065
00066
00067 typedef enum {
00068 SESSION_STATE_NONE,
00069 SESSION_STATE_GENERATING_ANSWER,
00070 SESSION_STATE_INITIALIZING,
00071 SESSION_STATE_DEACTIVATING,
00072 SESSION_STATE_TERMINATING
00073 } mrcp_server_session_state_e;
00074
00075
00076
00077 struct mrcp_server_session_t {
00078
00079 mrcp_session_t base;
00080
00081 mrcp_server_t *server;
00082
00083 mrcp_profile_t *profile;
00084
00085
00086 mpf_context_t *context;
00087
00088
00089 apr_array_header_t *terminations;
00090
00091 apr_array_header_t *channels;
00092
00093
00094 mrcp_signaling_message_t *active_request;
00095
00096 apt_obj_list_t *request_queue;
00097
00098
00099 mrcp_session_descriptor_t *offer;
00100
00101 mrcp_session_descriptor_t *answer;
00102
00103
00104 mpf_task_msg_t *mpf_task_msg;
00105
00106
00107 mrcp_server_session_state_e state;
00108
00109 apr_size_t subrequest_count;
00110 };
00111
00112
00113 struct mrcp_profile_t {
00114
00115 const char *id;
00116
00117 apr_hash_t *engine_table;
00118
00119 mrcp_resource_factory_t *resource_factory;
00120
00121 mpf_engine_t *media_engine;
00122
00123 mpf_termination_factory_t *rtp_termination_factory;
00124
00125 mpf_rtp_settings_t *rtp_settings;
00126
00127 mrcp_sig_agent_t *signaling_agent;
00128
00129 mrcp_connection_agent_t *connection_agent;
00130 };
00131
00132
00133 mrcp_server_session_t* mrcp_server_session_create(void);
00134
00135
00136 apt_bool_t mrcp_server_signaling_message_process(mrcp_signaling_message_t *signaling_message);
00137
00138 apt_bool_t mrcp_server_mpf_message_process(mpf_message_container_t *mpf_message_container);
00139
00140
00141 apt_bool_t mrcp_server_on_channel_modify(mrcp_channel_t *channel, mrcp_control_descriptor_t *answer, apt_bool_t status);
00142
00143 apt_bool_t mrcp_server_on_channel_remove(mrcp_channel_t *channel, apt_bool_t status);
00144
00145 apt_bool_t mrcp_server_on_channel_message(mrcp_channel_t *channel, mrcp_message_t *message);
00146
00147 apt_bool_t mrcp_server_on_disconnect(mrcp_channel_t *channel);
00148
00149
00150 apt_bool_t mrcp_server_on_engine_channel_open(mrcp_channel_t *channel, apt_bool_t status);
00151
00152 apt_bool_t mrcp_server_on_engine_channel_close(mrcp_channel_t *channel);
00153
00154 apt_bool_t mrcp_server_on_engine_channel_message(mrcp_channel_t *channel, mrcp_message_t *message);
00155
00156
00157 mrcp_session_t* mrcp_server_channel_session_get(mrcp_channel_t *channel);
00158
00159 APT_END_EXTERN_C
00160
00161 #endif