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 void *log_obj;
00079
00080 apr_pool_t *pool;
00081
00082 apt_str_t identifier;
00083 };
00084
00085
00086 static APR_INLINE apt_bool_t mrcp_control_channel_add_respond(
00087 const mrcp_connection_event_vtable_t *vtable,
00088 mrcp_control_channel_t *channel,
00089 mrcp_control_descriptor_t *descriptor,
00090 apt_bool_t status)
00091 {
00092 if(vtable && vtable->on_add) {
00093 return vtable->on_add(channel,descriptor,status);
00094 }
00095 return FALSE;
00096 }
00097
00098
00099 static APR_INLINE apt_bool_t mrcp_control_channel_modify_respond(
00100 const mrcp_connection_event_vtable_t *vtable,
00101 mrcp_control_channel_t *channel,
00102 mrcp_control_descriptor_t *descriptor,
00103 apt_bool_t status)
00104 {
00105 if(vtable && vtable->on_modify) {
00106 return vtable->on_modify(channel,descriptor,status);
00107 }
00108 return FALSE;
00109 }
00110
00111
00112 static APR_INLINE apt_bool_t mrcp_control_channel_remove_respond(
00113 const mrcp_connection_event_vtable_t *vtable,
00114 mrcp_control_channel_t *channel,
00115 apt_bool_t status)
00116 {
00117 if(vtable && vtable->on_remove) {
00118 return vtable->on_remove(channel,status);
00119 }
00120 return FALSE;
00121 }
00122
00123
00124 static APR_INLINE apt_bool_t mrcp_connection_message_receive(
00125 const mrcp_connection_event_vtable_t *vtable,
00126 mrcp_control_channel_t *channel,
00127 mrcp_message_t *message)
00128 {
00129 if(vtable && vtable->on_receive) {
00130 return vtable->on_receive(channel,message);
00131 }
00132 return FALSE;
00133 }
00134
00135 APT_END_EXTERN_C
00136
00137 #endif