UniMRCP  1.5.0
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
mrcp_session.h
Go to the documentation of this file.
1 /*
2  * Copyright 2008-2015 Arsen Chaloyan
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef MRCP_SESSION_H
18 #define MRCP_SESSION_H
19 
20 /**
21  * @file mrcp_session.h
22  * @brief Abstract MRCP Session
23  */
24 
25 #include "mrcp_sig_types.h"
26 #include "mpf_types.h"
27 #include "apt_string.h"
28 
30 
31 /** Macro to log session pointers */
32 #define MRCP_SESSION_PTR(session) (session)
33 /** Macro to log session string identifiers */
34 #define MRCP_SESSION_SID(session) \
35  (session)->id.buf ? (session)->id.buf : "new"
36 
37 /** Macro to log session pointers and string identifiers */
38 #define MRCP_SESSION_PTRSID(session) \
39  MRCP_SESSION_PTR(session), MRCP_SESSION_SID(session)
40 
41 /** MRCP session request vtable declaration */
43 /** MRCP session response vtable declaration */
45 /** MRCP session event vtable declaration */
47 
48 /** MRCP session */
50  /** Memory pool to allocate memory from */
51  apr_pool_t *pool;
52  /** Whether the memory pool is self-owned or not */
54  /** External object associated with session */
55  void *obj;
56  /** External logger object associated with session */
57  void *log_obj;
58  /** Informative name of the session used for debugging */
59  const char *name;
60 
61  /** Signaling (session managment) agent */
63  /** MRCPv2 connection agent, if any */
65  /** Media processing engine */
67  /** RTP termination factory */
69 
70  /** Session identifier */
72  /** Last request identifier sent for client, received for server */
74 
75  /** Virtual request methods */
77  /** Virtual response methods */
79  /** Virtual event methods */
81 };
82 
83 
84 /** MRCP session request vtable */
86  /** Offer session descriptor */
88  /** Terminate session */
90  /** Control session (MRCPv1 only) */
92  /** Discover resources */
94 };
95 
96 /** MRCP session response vtable */
98  /** Answer with remote session descriptor */
100  /** Session terminated */
102  /** Control session (MRCPv1 only) */
104  /** Response to resource discovery request */
106 };
107 
108 /** MRCP session event vtable */
110  /** Received session termination event without appropriate request */
112 };
113 
114 
115 /** Create new memory pool and allocate session object from the pool. */
116 MRCP_DECLARE(mrcp_session_t*) mrcp_session_create(apr_size_t padding);
117 
118 /** Allocate session object from the provided memory pool. Take over the ownership of the pool, if take_ownership is TRUE */
119 MRCP_DECLARE(mrcp_session_t*) mrcp_session_create_ex(apr_pool_t *pool, apt_bool_t take_ownership, apr_size_t padding);
120 
121 /** Destroy session and assosiated memory pool. */
123 
124 
125 /** Offer */
126 static APR_INLINE apt_bool_t mrcp_session_offer(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
127 {
128  if(session->request_vtable->offer) {
129  return session->request_vtable->offer(session,descriptor);
130  }
131  return FALSE;
132 }
133 
134 /** Terminate */
135 static APR_INLINE apt_bool_t mrcp_session_terminate_request(mrcp_session_t *session)
136 {
137  if(session->request_vtable->terminate) {
138  return session->request_vtable->terminate(session);
139  }
140  return FALSE;
141 }
142 
143 /** Answer */
144 static APR_INLINE apt_bool_t mrcp_session_answer(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
145 {
146  if(session->response_vtable->on_answer) {
147  return session->response_vtable->on_answer(session,descriptor);
148  }
149  return FALSE;
150 }
151 
152 /** On terminate response */
153 static APR_INLINE apt_bool_t mrcp_session_terminate_response(mrcp_session_t *session)
154 {
155  if(session->response_vtable->on_terminate) {
156  return session->response_vtable->on_terminate(session);
157  }
158  return FALSE;
159 }
160 
161 /** On terminate event */
162 static APR_INLINE apt_bool_t mrcp_session_terminate_event(mrcp_session_t *session)
163 {
164  if(session->event_vtable->on_terminate) {
165  return session->event_vtable->on_terminate(session);
166  }
167  return FALSE;
168 }
169 
170 /** Control request */
171 static APR_INLINE apt_bool_t mrcp_session_control_request(mrcp_session_t *session, mrcp_message_t *message)
172 {
173  if(session->request_vtable->control) {
174  return session->request_vtable->control(session,message);
175  }
176  return FALSE;
177 }
178 
179 /** On control response/event */
180 static APR_INLINE apt_bool_t mrcp_session_control_response(mrcp_session_t *session, mrcp_message_t *message)
181 {
182  if(session->response_vtable->on_control) {
183  return session->response_vtable->on_control(session,message);
184  }
185  return FALSE;
186 }
187 
188 /** Resource discovery request */
189 static APR_INLINE apt_bool_t mrcp_session_discover_request(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
190 {
191  if(session->request_vtable->discover) {
192  return session->request_vtable->discover(session,descriptor);
193  }
194  return FALSE;
195 }
196 
197 /** On resource discovery response */
198 static APR_INLINE apt_bool_t mrcp_session_discover_response(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
199 {
200  if(session->response_vtable->on_discover) {
201  return session->response_vtable->on_discover(session,descriptor);
202  }
203  return FALSE;
204 }
205 
207 
208 #endif /* MRCP_SESSION_H */
#define MRCP_DECLARE(type)
Definition: mrcp.h:40
Definition: mrcp_session.h:49
const char * name
Definition: mrcp_session.h:59
mpf_termination_factory_t * rtp_factory
Definition: mrcp_session.h:68
Definition: mrcp_session.h:85
const mrcp_session_event_vtable_t * event_vtable
Definition: mrcp_session.h:80
apr_pool_t * pool
Definition: mrcp_session.h:51
apt_bool_t(* discover)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
Definition: mrcp_session.h:93
#define APT_END_EXTERN_C
Definition: apt.h:38
const mrcp_session_response_vtable_t * response_vtable
Definition: mrcp_session.h:78
int apt_bool_t
Definition: apt.h:57
void * connection_agent
Definition: mrcp_session.h:64
void * obj
Definition: mrcp_session.h:55
apt_bool_t(* offer)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
Definition: mrcp_session.h:87
typedefAPT_BEGIN_EXTERN_C struct mpf_engine_t mpf_engine_t
Definition: mpf_types.h:30
Definition: mrcp_session.h:97
#define APT_BEGIN_EXTERN_C
Definition: apt.h:36
mrcp_session_t * mrcp_session_create(apr_size_t padding)
Definition: mpf_termination_factory.h:30
mpf_engine_t * media_engine
Definition: mrcp_session.h:66
MPF Types Declarations.
apt_bool_t self_owned
Definition: mrcp_session.h:53
MRCP Signaling Types Declaration.
apt_bool_t(* on_discover)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
Definition: mrcp_session.h:105
apt_bool_t(* on_control)(mrcp_session_t *session, mrcp_message_t *message)
Definition: mrcp_session.h:103
Definition: mrcp_sig_agent.h:52
apt_bool_t(* control)(mrcp_session_t *session, mrcp_message_t *message)
Definition: mrcp_session.h:91
apt_bool_t(* on_terminate)(mrcp_session_t *session)
Definition: mrcp_session.h:111
apt_bool_t(* terminate)(mrcp_session_t *session)
Definition: mrcp_session.h:89
apt_bool_t(* on_terminate)(mrcp_session_t *session)
Definition: mrcp_session.h:101
apt_bool_t(* on_answer)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
Definition: mrcp_session.h:99
void mrcp_session_destroy(mrcp_session_t *session)
mrcp_sig_agent_t * signaling_agent
Definition: mrcp_session.h:62
Definition: apt_string.h:36
Definition: mrcp_session.h:109
const mrcp_session_request_vtable_t * request_vtable
Definition: mrcp_session.h:76
Definition: mrcp_session_descriptor.h:40
mrcp_session_t * mrcp_session_create_ex(apr_pool_t *pool, apt_bool_t take_ownership, apr_size_t padding)
mrcp_request_id last_request_id
Definition: mrcp_session.h:73
apt_str_t id
Definition: mrcp_session.h:71
String Representation.
apr_uint32_t mrcp_request_id
Definition: mrcp_types.h:59
void * log_obj
Definition: mrcp_session.h:57
Definition: mrcp_message.h:37