00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef MRCP_CONNECTION_TYPES_H
00020 #define MRCP_CONNECTION_TYPES_H
00021
00022
00023
00024
00025
00026
00027 #include <apr_network_io.h>
00028 #include "apt_string.h"
00029 #include "apt_timer_queue.h"
00030 #include "mrcp_types.h"
00031
00032 APT_BEGIN_EXTERN_C
00033
00034
00035 typedef struct mrcp_control_descriptor_t mrcp_control_descriptor_t;
00036
00037
00038 typedef struct mrcp_connection_t mrcp_connection_t;
00039
00040
00041 typedef struct mrcp_control_channel_t mrcp_control_channel_t;
00042
00043
00044 typedef struct mrcp_connection_agent_t mrcp_connection_agent_t;
00045
00046
00047 typedef struct mrcp_connection_event_vtable_t mrcp_connection_event_vtable_t;
00048
00049
00050 struct mrcp_connection_event_vtable_t {
00051
00052 apt_bool_t (*on_add)(mrcp_control_channel_t *channel, mrcp_control_descriptor_t *descriptor, apt_bool_t status);
00053
00054 apt_bool_t (*on_modify)(mrcp_control_channel_t *channel, mrcp_control_descriptor_t *descriptor, apt_bool_t status);
00055
00056 apt_bool_t (*on_remove)(mrcp_control_channel_t *channel, apt_bool_t status);
00057
00058 apt_bool_t (*on_receive)(mrcp_control_channel_t *channel, mrcp_message_t *message);
00059
00060 apt_bool_t (*on_disconnect)(mrcp_control_channel_t *channel);
00061 };
00062
00063
00064 struct mrcp_control_channel_t {
00065
00066 mrcp_connection_agent_t *agent;
00067
00068 mrcp_connection_t *connection;
00069
00070 mrcp_message_t *active_request;
00071
00072 apt_timer_t *request_timer;
00073
00074 apt_bool_t removed;
00075
00076 void *obj;
00077
00078 apr_pool_t *pool;
00079
00080 apt_str_t identifier;
00081 };
00082
00083
00084 static APR_INLINE apt_bool_t mrcp_control_channel_add_respond(
00085 const mrcp_connection_event_vtable_t *vtable,
00086 mrcp_control_channel_t *channel,
00087 mrcp_control_descriptor_t *descriptor,
00088 apt_bool_t status)
00089 {
00090 if(vtable && vtable->on_add) {
00091 return vtable->on_add(channel,descriptor,status);
00092 }
00093 return FALSE;
00094 }
00095
00096
00097 static APR_INLINE apt_bool_t mrcp_control_channel_modify_respond(
00098 const mrcp_connection_event_vtable_t *vtable,
00099 mrcp_control_channel_t *channel,
00100 mrcp_control_descriptor_t *descriptor,
00101 apt_bool_t status)
00102 {
00103 if(vtable && vtable->on_modify) {
00104 return vtable->on_modify(channel,descriptor,status);
00105 }
00106 return FALSE;
00107 }
00108
00109
00110 static APR_INLINE apt_bool_t mrcp_control_channel_remove_respond(
00111 const mrcp_connection_event_vtable_t *vtable,
00112 mrcp_control_channel_t *channel,
00113 apt_bool_t status)
00114 {
00115 if(vtable && vtable->on_remove) {
00116 return vtable->on_remove(channel,status);
00117 }
00118 return FALSE;
00119 }
00120
00121
00122 static APR_INLINE apt_bool_t mrcp_connection_message_receive(
00123 const mrcp_connection_event_vtable_t *vtable,
00124 mrcp_control_channel_t *channel,
00125 mrcp_message_t *message)
00126 {
00127 if(vtable && vtable->on_receive) {
00128 return vtable->on_receive(channel,message);
00129 }
00130 return FALSE;
00131 }
00132
00133 APT_END_EXTERN_C
00134
00135 #endif