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 const char *name;
00058
00059 mrcp_sig_agent_t *signaling_agent;
00060
00061
00062 apt_str_t id;
00063
00064 mrcp_request_id last_request_id;
00065
00066
00067 const mrcp_session_request_vtable_t *request_vtable;
00068
00069 const mrcp_session_response_vtable_t *response_vtable;
00070
00071 const mrcp_session_event_vtable_t *event_vtable;
00072 };
00073
00074
00075
00076 struct mrcp_session_request_vtable_t {
00077
00078 apt_bool_t (*offer)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor);
00079
00080 apt_bool_t (*terminate)(mrcp_session_t *session);
00081
00082 apt_bool_t (*control)(mrcp_session_t *session, mrcp_message_t *message);
00083
00084 apt_bool_t (*discover)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor);
00085 };
00086
00087
00088 struct mrcp_session_response_vtable_t {
00089
00090 apt_bool_t (*on_answer)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor);
00091
00092 apt_bool_t (*on_terminate)(mrcp_session_t *session);
00093
00094 apt_bool_t (*on_control)(mrcp_session_t *session, mrcp_message_t *message);
00095
00096 apt_bool_t (*on_discover)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor);
00097 };
00098
00099
00100 struct mrcp_session_event_vtable_t {
00101
00102 apt_bool_t (*on_terminate)(mrcp_session_t *session);
00103 };
00104
00105
00106
00107 MRCP_DECLARE(mrcp_session_t*) mrcp_session_create(apr_size_t padding);
00108
00109
00110 MRCP_DECLARE(void) mrcp_session_destroy(mrcp_session_t *session);
00111
00112
00113
00114 static APR_INLINE apt_bool_t mrcp_session_offer(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
00115 {
00116 if(session->request_vtable->offer) {
00117 return session->request_vtable->offer(session,descriptor);
00118 }
00119 return FALSE;
00120 }
00121
00122
00123 static APR_INLINE apt_bool_t mrcp_session_terminate_request(mrcp_session_t *session)
00124 {
00125 if(session->request_vtable->terminate) {
00126 return session->request_vtable->terminate(session);
00127 }
00128 return FALSE;
00129 }
00130
00131
00132 static APR_INLINE apt_bool_t mrcp_session_answer(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
00133 {
00134 if(session->response_vtable->on_answer) {
00135 return session->response_vtable->on_answer(session,descriptor);
00136 }
00137 return FALSE;
00138 }
00139
00140
00141 static APR_INLINE apt_bool_t mrcp_session_terminate_response(mrcp_session_t *session)
00142 {
00143 if(session->response_vtable->on_terminate) {
00144 return session->response_vtable->on_terminate(session);
00145 }
00146 return FALSE;
00147 }
00148
00149
00150 static APR_INLINE apt_bool_t mrcp_session_terminate_event(mrcp_session_t *session)
00151 {
00152 if(session->event_vtable->on_terminate) {
00153 return session->event_vtable->on_terminate(session);
00154 }
00155 return FALSE;
00156 }
00157
00158
00159 static APR_INLINE apt_bool_t mrcp_session_control_request(mrcp_session_t *session, mrcp_message_t *message)
00160 {
00161 if(session->request_vtable->control) {
00162 return session->request_vtable->control(session,message);
00163 }
00164 return FALSE;
00165 }
00166
00167
00168 static APR_INLINE apt_bool_t mrcp_session_control_response(mrcp_session_t *session, mrcp_message_t *message)
00169 {
00170 if(session->response_vtable->on_control) {
00171 return session->response_vtable->on_control(session,message);
00172 }
00173 return FALSE;
00174 }
00175
00176
00177 static APR_INLINE apt_bool_t mrcp_session_discover_request(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
00178 {
00179 if(session->request_vtable->discover) {
00180 return session->request_vtable->discover(session,descriptor);
00181 }
00182 return FALSE;
00183 }
00184
00185
00186 static APR_INLINE apt_bool_t mrcp_session_discover_response(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
00187 {
00188 if(session->response_vtable->on_discover) {
00189 return session->response_vtable->on_discover(session,descriptor);
00190 }
00191 return FALSE;
00192 }
00193
00194 APT_END_EXTERN_C
00195
00196 #endif