00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef MRCP_APPLICATION_H
00020 #define MRCP_APPLICATION_H
00021
00022
00023
00024
00025
00026
00027 #include "mrcp_client_types.h"
00028 #include "mpf_rtp_descriptor.h"
00029 #include "mpf_stream.h"
00030
00031 APT_BEGIN_EXTERN_C
00032
00033
00034 typedef struct mrcp_app_message_t mrcp_app_message_t;
00035
00036
00037 typedef struct mrcp_sig_message_t mrcp_sig_message_t;
00038
00039
00040 typedef struct mrcp_app_message_dispatcher_t mrcp_app_message_dispatcher_t;
00041
00042
00043 typedef apt_bool_t (*mrcp_app_message_handler_f)(const mrcp_app_message_t *app_message);
00044
00045
00046 typedef enum {
00047 MRCP_SIG_MESSAGE_TYPE_REQUEST,
00048 MRCP_SIG_MESSAGE_TYPE_RESPONSE,
00049 MRCP_SIG_MESSAGE_TYPE_EVENT
00050 } mrcp_sig_message_type_e;
00051
00052
00053 typedef enum {
00054 MRCP_SIG_STATUS_CODE_SUCCESS,
00055 MRCP_SIG_STATUS_CODE_FAILURE,
00056 MRCP_SIG_STATUS_CODE_TERMINATE,
00057 MRCP_SIG_STATUS_CODE_CANCEL
00058 } mrcp_sig_status_code_e;
00059
00060
00061
00062 typedef enum {
00063 MRCP_SIG_COMMAND_SESSION_UPDATE,
00064 MRCP_SIG_COMMAND_SESSION_TERMINATE,
00065 MRCP_SIG_COMMAND_CHANNEL_ADD,
00066 MRCP_SIG_COMMAND_CHANNEL_REMOVE,
00067 MRCP_SIG_COMMAND_RESOURCE_DISCOVER
00068 } mrcp_sig_command_e;
00069
00070
00071 typedef enum {
00072 MRCP_SIG_EVENT_TERMINATE
00073 } mrcp_sig_event_e;
00074
00075
00076
00077 typedef enum {
00078 MRCP_APP_MESSAGE_TYPE_SIGNALING,
00079 MRCP_APP_MESSAGE_TYPE_CONTROL
00080 } mrcp_app_message_type_e;
00081
00082
00083 struct mrcp_sig_message_t {
00084
00085 mrcp_sig_message_type_e message_type;
00086
00087 mrcp_sig_command_e command_id;
00088
00089 mrcp_sig_event_e event_id;
00090
00091 mrcp_sig_status_code_e status;
00092 };
00093
00094
00095
00096 struct mrcp_app_message_t {
00097
00098 mrcp_app_message_type_e message_type;
00099
00100
00101 mrcp_application_t *application;
00102
00103 mrcp_session_t *session;
00104
00105 mrcp_channel_t *channel;
00106
00107 mrcp_session_descriptor_t *descriptor;
00108
00109
00110 mrcp_sig_message_t sig_message;
00111
00112 mrcp_message_t *control_message;
00113 };
00114
00115
00116 struct mrcp_app_message_dispatcher_t {
00117
00118 apt_bool_t (*on_session_update)(mrcp_application_t *application, mrcp_session_t *session, mrcp_sig_status_code_e status);
00119
00120 apt_bool_t (*on_session_terminate)(mrcp_application_t *application, mrcp_session_t *session, mrcp_sig_status_code_e status);
00121
00122
00123 apt_bool_t (*on_channel_add)(mrcp_application_t *application, mrcp_session_t *session, mrcp_channel_t *channel, mrcp_sig_status_code_e status);
00124
00125 apt_bool_t (*on_channel_remove)(mrcp_application_t *application, mrcp_session_t *session, mrcp_channel_t *channel, mrcp_sig_status_code_e status);
00126
00127
00128 apt_bool_t (*on_message_receive)(mrcp_application_t *application, mrcp_session_t *session, mrcp_channel_t *channel, mrcp_message_t *message);
00129
00130
00131 apt_bool_t (*on_terminate_event)(mrcp_application_t *application, mrcp_session_t *session, mrcp_channel_t *channel);
00132
00133
00134 apt_bool_t (*on_resource_discover)(mrcp_application_t *application, mrcp_session_t *session, mrcp_session_descriptor_t *descriptor, mrcp_sig_status_code_e status);
00135 };
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145 MRCP_DECLARE(mrcp_application_t*) mrcp_application_create(const mrcp_app_message_handler_f handler, void *obj, apr_pool_t *pool);
00146
00147
00148
00149
00150
00151 MRCP_DECLARE(apt_bool_t) mrcp_application_destroy(mrcp_application_t *application);
00152
00153
00154
00155
00156
00157 MRCP_DECLARE(void*) mrcp_application_object_get(const mrcp_application_t *application);
00158
00159
00160
00161
00162
00163 MRCP_DECLARE(const apt_dir_layout_t*) mrcp_application_dir_layout_get(const mrcp_application_t *application);
00164
00165
00166
00167
00168
00169
00170
00171
00172 MRCP_DECLARE(mrcp_session_t*) mrcp_application_session_create(mrcp_application_t *application, const char *profile, void *obj);
00173
00174
00175
00176
00177
00178 MRCP_DECLARE(apr_pool_t*) mrcp_application_session_pool_get(const mrcp_session_t *session);
00179
00180
00181
00182
00183
00184 MRCP_DECLARE(const apt_str_t*) mrcp_application_session_id_get(const mrcp_session_t *session);
00185
00186
00187
00188
00189
00190 MRCP_DECLARE(int) mrcp_application_session_response_code_get(const mrcp_session_t *session);
00191
00192
00193
00194
00195
00196 MRCP_DECLARE(void*) mrcp_application_session_object_get(const mrcp_session_t *session);
00197
00198
00199
00200
00201
00202
00203 MRCP_DECLARE(void) mrcp_application_session_object_set(mrcp_session_t *session, void *obj);
00204
00205
00206
00207
00208
00209
00210 MRCP_DECLARE(void) mrcp_application_session_name_set(mrcp_session_t *session, const char *name);
00211
00212
00213
00214
00215
00216 MRCP_DECLARE(apt_bool_t) mrcp_application_session_update(mrcp_session_t *session);
00217
00218
00219
00220
00221
00222 MRCP_DECLARE(apt_bool_t) mrcp_application_session_terminate(mrcp_session_t *session);
00223
00224
00225
00226
00227
00228 MRCP_DECLARE(apt_bool_t) mrcp_application_session_destroy(mrcp_session_t *session);
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239 MRCP_DECLARE(mrcp_channel_t*) mrcp_application_channel_create(
00240 mrcp_session_t *session,
00241 mrcp_resource_id resource_id,
00242 mpf_termination_t *termination,
00243 mpf_rtp_termination_descriptor_t *rtp_descriptor,
00244 void *obj);
00245
00246
00247
00248
00249
00250 MRCP_DECLARE(void*) mrcp_application_channel_object_get(const mrcp_channel_t *channel);
00251
00252
00253
00254
00255
00256 MRCP_DECLARE(mpf_rtp_termination_descriptor_t*) mrcp_application_rtp_descriptor_get(const mrcp_channel_t *channel);
00257
00258
00259
00260
00261
00262 MRCP_DECLARE(const mpf_codec_descriptor_t*) mrcp_application_source_descriptor_get(const mrcp_channel_t *channel);
00263
00264
00265
00266
00267
00268 MRCP_DECLARE(const mpf_codec_descriptor_t*) mrcp_application_sink_descriptor_get(const mrcp_channel_t *channel);
00269
00270
00271
00272
00273
00274 MRCP_DECLARE(const mpf_audio_stream_t*) mrcp_application_audio_stream_get(const mrcp_channel_t *channel);
00275
00276
00277
00278
00279
00280
00281 MRCP_DECLARE(apt_bool_t) mrcp_application_channel_add(mrcp_session_t *session, mrcp_channel_t *channel);
00282
00283
00284
00285
00286
00287
00288
00289 MRCP_DECLARE(mrcp_message_t*) mrcp_application_message_create(mrcp_session_t *session, mrcp_channel_t *channel, mrcp_method_id method_id);
00290
00291
00292
00293
00294
00295
00296
00297 MRCP_DECLARE(apt_bool_t) mrcp_application_message_send(mrcp_session_t *session, mrcp_channel_t *channel, mrcp_message_t *message);
00298
00299
00300
00301
00302
00303
00304 MRCP_DECLARE(apt_bool_t) mrcp_application_channel_remove(mrcp_session_t *session, mrcp_channel_t *channel);
00305
00306
00307
00308
00309
00310 MRCP_DECLARE(apt_bool_t) mrcp_application_resource_discover(mrcp_session_t *session);
00311
00312
00313
00314
00315
00316
00317 MRCP_DECLARE(apt_bool_t) mrcp_application_message_dispatch(const mrcp_app_message_dispatcher_t *dispatcher, const mrcp_app_message_t *app_message);
00318
00319
00320
00321
00322
00323
00324
00325
00326 MRCP_DECLARE(mpf_termination_t*) mrcp_application_audio_termination_create(
00327 mrcp_session_t *session,
00328 const mpf_audio_stream_vtable_t *stream_vtable,
00329 mpf_stream_capabilities_t *capabilities,
00330 void *obj);
00331
00332
00333
00334
00335
00336
00337
00338
00339 MRCP_DECLARE(mpf_termination_t*) mrcp_application_source_termination_create(
00340 mrcp_session_t *session,
00341 const mpf_audio_stream_vtable_t *stream_vtable,
00342 mpf_codec_descriptor_t *codec_descriptor,
00343 void *obj);
00344
00345
00346
00347
00348
00349
00350
00351
00352 MRCP_DECLARE(mpf_termination_t*) mrcp_application_sink_termination_create(
00353 mrcp_session_t *session,
00354 const mpf_audio_stream_vtable_t *stream_vtable,
00355 mpf_codec_descriptor_t *codec_descriptor,
00356 void *obj);
00357
00358 APT_END_EXTERN_C
00359
00360 #endif