00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef MRCP_SESSION_H
00020 #define MRCP_SESSION_H
00021
00022
00023
00024
00025
00026
00027 #include "mrcp_sig_types.h"
00028 #include "apt_string.h"
00029
00030 APT_BEGIN_EXTERN_C
00031
00032
00033 #define MRCP_SESSION_PTR(session) (session)
00034
00035 #define MRCP_SESSION_SID(session) \
00036 (session)->id.buf ? (session)->id.buf : "new"
00037
00038
00039 #define MRCP_SESSION_PTRSID(session) \
00040 MRCP_SESSION_PTR(session), MRCP_SESSION_SID(session)
00041
00042
00043 typedef struct mrcp_session_request_vtable_t mrcp_session_request_vtable_t;
00044
00045 typedef struct mrcp_session_response_vtable_t mrcp_session_response_vtable_t;
00046
00047 typedef struct mrcp_session_event_vtable_t mrcp_session_event_vtable_t;
00048
00049
00050
00051 struct mrcp_session_t {
00052
00053 apr_pool_t *pool;
00054
00055 void *obj;
00056
00057 void *log_obj;
00058
00059 const char *name;
00060
00061 mrcp_sig_agent_t *signaling_agent;
00062
00063
00064 apt_str_t id;
00065
00066 mrcp_request_id last_request_id;
00067
00068
00069 const mrcp_session_request_vtable_t *request_vtable;
00070
00071 const mrcp_session_response_vtable_t *response_vtable;
00072
00073 const mrcp_session_event_vtable_t *event_vtable;
00074 };
00075
00076
00077
00078 struct mrcp_session_request_vtable_t {
00079
00080 apt_bool_t (*offer)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor);
00081
00082 apt_bool_t (*terminate)(mrcp_session_t *session);
00083
00084 apt_bool_t (*control)(mrcp_session_t *session, mrcp_message_t *message);
00085
00086 apt_bool_t (*discover)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor);
00087 };
00088
00089
00090 struct mrcp_session_response_vtable_t {
00091
00092 apt_bool_t (*on_answer)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor);
00093
00094 apt_bool_t (*on_terminate)(mrcp_session_t *session);
00095
00096 apt_bool_t (*on_control)(mrcp_session_t *session, mrcp_message_t *message);
00097
00098 apt_bool_t (*on_discover)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor);
00099 };
00100
00101
00102 struct mrcp_session_event_vtable_t {
00103
00104 apt_bool_t (*on_terminate)(mrcp_session_t *session);
00105 };
00106
00107
00108
00109 MRCP_DECLARE(mrcp_session_t*) mrcp_session_create(apr_size_t padding);
00110
00111
00112 MRCP_DECLARE(void) mrcp_session_destroy(mrcp_session_t *session);
00113
00114
00115
00116 static APR_INLINE apt_bool_t mrcp_session_offer(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
00117 {
00118 if(session->request_vtable->offer) {
00119 return session->request_vtable->offer(session,descriptor);
00120 }
00121 return FALSE;
00122 }
00123
00124
00125 static APR_INLINE apt_bool_t mrcp_session_terminate_request(mrcp_session_t *session)
00126 {
00127 if(session->request_vtable->terminate) {
00128 return session->request_vtable->terminate(session);
00129 }
00130 return FALSE;
00131 }
00132
00133
00134 static APR_INLINE apt_bool_t mrcp_session_answer(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
00135 {
00136 if(session->response_vtable->on_answer) {
00137 return session->response_vtable->on_answer(session,descriptor);
00138 }
00139 return FALSE;
00140 }
00141
00142
00143 static APR_INLINE apt_bool_t mrcp_session_terminate_response(mrcp_session_t *session)
00144 {
00145 if(session->response_vtable->on_terminate) {
00146 return session->response_vtable->on_terminate(session);
00147 }
00148 return FALSE;
00149 }
00150
00151
00152 static APR_INLINE apt_bool_t mrcp_session_terminate_event(mrcp_session_t *session)
00153 {
00154 if(session->event_vtable->on_terminate) {
00155 return session->event_vtable->on_terminate(session);
00156 }
00157 return FALSE;
00158 }
00159
00160
00161 static APR_INLINE apt_bool_t mrcp_session_control_request(mrcp_session_t *session, mrcp_message_t *message)
00162 {
00163 if(session->request_vtable->control) {
00164 return session->request_vtable->control(session,message);
00165 }
00166 return FALSE;
00167 }
00168
00169
00170 static APR_INLINE apt_bool_t mrcp_session_control_response(mrcp_session_t *session, mrcp_message_t *message)
00171 {
00172 if(session->response_vtable->on_control) {
00173 return session->response_vtable->on_control(session,message);
00174 }
00175 return FALSE;
00176 }
00177
00178
00179 static APR_INLINE apt_bool_t mrcp_session_discover_request(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
00180 {
00181 if(session->request_vtable->discover) {
00182 return session->request_vtable->discover(session,descriptor);
00183 }
00184 return FALSE;
00185 }
00186
00187
00188 static APR_INLINE apt_bool_t mrcp_session_discover_response(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
00189 {
00190 if(session->response_vtable->on_discover) {
00191 return session->response_vtable->on_discover(session,descriptor);
00192 }
00193 return FALSE;
00194 }
00195
00196 APT_END_EXTERN_C
00197
00198 #endif