UniMRCP  1.7.0
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 /** MRCP session request vtable */
85  /** Offer session descriptor */
86  apt_bool_t (*offer)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor);
87  /** Terminate session */
88  apt_bool_t (*terminate)(mrcp_session_t *session);
89  /** Control session (MRCPv1 only) */
90  apt_bool_t (*control)(mrcp_session_t *session, mrcp_message_t *message);
91  /** Discover resources */
92  apt_bool_t (*discover)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor);
93 };
94 
95 /** MRCP session response vtable */
97  /** Answer with remote session descriptor */
98  apt_bool_t (*on_answer)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor);
99  /** Session terminated */
100  apt_bool_t (*on_terminate)(mrcp_session_t *session);
101  /** Control session (MRCPv1 only) */
102  apt_bool_t (*on_control)(mrcp_session_t *session, mrcp_message_t *message);
103  /** Response to resource discovery request */
104  apt_bool_t (*on_discover)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor);
105 };
106 
107 /** MRCP session event vtable */
109  /** Received session termination event without appropriate request */
110  apt_bool_t (*on_terminate)(mrcp_session_t *session);
111 };
112 
113 
114 /** Create new memory pool and allocate session object from the pool. */
115 MRCP_DECLARE(mrcp_session_t*) mrcp_session_create(apr_size_t padding);
116 
117 /** Allocate session object from the provided memory pool. Take over the ownership of the pool, if take_ownership is TRUE */
118 MRCP_DECLARE(mrcp_session_t*) mrcp_session_create_ex(apr_pool_t *pool, apt_bool_t take_ownership, apr_size_t padding);
119 
120 /** Destroy session and assosiated memory pool. */
122 
123 
124 /** Offer */
125 static APR_INLINE apt_bool_t mrcp_session_offer(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
126 {
127  if(session->request_vtable->offer) {
128  return session->request_vtable->offer(session,descriptor);
129  }
130  return FALSE;
131 }
132 
133 /** Terminate */
134 static APR_INLINE apt_bool_t mrcp_session_terminate_request(mrcp_session_t *session)
135 {
136  if(session->request_vtable->terminate) {
137  return session->request_vtable->terminate(session);
138  }
139  return FALSE;
140 }
141 
142 /** Answer */
143 static APR_INLINE apt_bool_t mrcp_session_answer(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
144 {
145  if(session->response_vtable->on_answer) {
146  return session->response_vtable->on_answer(session,descriptor);
147  }
148  return FALSE;
149 }
150 
151 /** On terminate response */
152 static APR_INLINE apt_bool_t mrcp_session_terminate_response(mrcp_session_t *session)
153 {
154  if(session->response_vtable->on_terminate) {
155  return session->response_vtable->on_terminate(session);
156  }
157  return FALSE;
158 }
159 
160 /** On terminate event */
161 static APR_INLINE apt_bool_t mrcp_session_terminate_event(mrcp_session_t *session)
162 {
163  if(session->event_vtable->on_terminate) {
164  return session->event_vtable->on_terminate(session);
165  }
166  return FALSE;
167 }
168 
169 /** Control request */
170 static APR_INLINE apt_bool_t mrcp_session_control_request(mrcp_session_t *session, mrcp_message_t *message)
171 {
172  if(session->request_vtable->control) {
173  return session->request_vtable->control(session,message);
174  }
175  return FALSE;
176 }
177 
178 /** On control response/event */
179 static APR_INLINE apt_bool_t mrcp_session_control_response(mrcp_session_t *session, mrcp_message_t *message)
180 {
181  if(session->response_vtable->on_control) {
182  return session->response_vtable->on_control(session,message);
183  }
184  return FALSE;
185 }
186 
187 /** Resource discovery request */
188 static APR_INLINE apt_bool_t mrcp_session_discover_request(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
189 {
190  if(session->request_vtable->discover) {
191  return session->request_vtable->discover(session,descriptor);
192  }
193  return FALSE;
194 }
195 
196 /** On resource discovery response */
197 static APR_INLINE apt_bool_t mrcp_session_discover_response(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
198 {
199  if(session->response_vtable->on_discover) {
200  return session->response_vtable->on_discover(session,descriptor);
201  }
202  return FALSE;
203 }
204 
206 
207 #endif /* MRCP_SESSION_H */
#define MRCP_DECLARE(type)
Definition: mrcp.h:40
Definition: mrcp_session.h:49
apt_bool_t(* on_terminate)(mrcp_session_t *session)
Definition: mrcp_session.h:110
apt_bool_t(* on_control)(mrcp_session_t *session, mrcp_message_t *message)
Definition: mrcp_session.h:102
const char * name
Definition: mrcp_session.h:59
mpf_termination_factory_t * rtp_factory
Definition: mrcp_session.h:68
Definition: mrcp_session.h:84
apt_bool_t(* offer)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
Definition: mrcp_session.h:86
const mrcp_session_event_vtable_t * event_vtable
Definition: mrcp_session.h:80
apr_pool_t * pool
Definition: mrcp_session.h:51
#define APT_END_EXTERN_C
Definition: apt.h:38
const mrcp_session_response_vtable_t * response_vtable
Definition: mrcp_session.h:78
apt_bool_t(* on_terminate)(mrcp_session_t *session)
Definition: mrcp_session.h:100
apt_bool_t(* on_answer)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
Definition: mrcp_session.h:98
int apt_bool_t
Definition: apt.h:57
apt_bool_t(* control)(mrcp_session_t *session, mrcp_message_t *message)
Definition: mrcp_session.h:90
apt_bool_t(* on_discover)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
Definition: mrcp_session.h:104
void * connection_agent
Definition: mrcp_session.h:64
void * obj
Definition: mrcp_session.h:55
typedefAPT_BEGIN_EXTERN_C struct mpf_engine_t mpf_engine_t
Definition: mpf_types.h:30
Definition: mrcp_session.h:96
apt_bool_t(* terminate)(mrcp_session_t *session)
Definition: mrcp_session.h:88
#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.
Definition: mrcp_sig_agent.h:52
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:108
const mrcp_session_request_vtable_t * request_vtable
Definition: mrcp_session.h:76
Definition: mrcp_session_descriptor.h:50
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.
apt_bool_t(* discover)(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor)
Definition: mrcp_session.h:92
apr_uint32_t mrcp_request_id
Definition: mrcp_types.h:59
void * log_obj
Definition: mrcp_session.h:57
Definition: mrcp_message.h:37