UniMRCP  1.7.0
mrcp_session_descriptor.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_DESCRIPTOR_H
18 #define MRCP_SESSION_DESCRIPTOR_H
19 
20 /**
21  * @file mrcp_session_descriptor.h
22  * @brief MRCP Session Descriptor
23  */
24 
25 #include "mpf_rtp_descriptor.h"
26 #include "mrcp_sig_types.h"
27 #include <apr_tables.h>
28 #include <apr_hash.h>
29 
31 
32 /** MRCP session status */
33 typedef enum {
35  MRCP_SESSION_STATUS_NO_SUCH_RESOURCE, /**< no such resource found */
36  MRCP_SESSION_STATUS_UNACCEPTABLE_RESOURCE,/**< resource exists, but no implementation (plugin) found */
37  MRCP_SESSION_STATUS_UNAVAILABLE_RESOURCE, /**< resource exists, but is temporary unavailable */
38  MRCP_SESSION_STATUS_ERROR /**< internal error occurred */
40 
41 /** MRCP session attributes */
43  /** Session generic name/value attributes (name -> value) */
44  apr_table_t *generic_attribs;
45  /** Session resource-specific name/value attributes (resource name -> table[name -> value]) */
46  apr_hash_t *resource_attribs;
47 };
48 
49 /** MRCP session descriptor */
51  /** SDP origin */
53  /** Session level IP address */
55  /** Session level external (NAT) IP address */
57  /** Session level resource name (MRCPv1 only) */
59  /** Resource state (MRCPv1 only) */
61  /** Session status */
63  /** Response code (SIP for MRCPv2 and RTSP for MRCPv1) */
65 
66  /** MRCP control media array (mrcp_control_descriptor_t) */
67  apr_array_header_t *control_media_arr;
68  /** Audio media array (mpf_rtp_media_descriptor_t) */
69  apr_array_header_t *audio_media_arr;
70  /** Video media array (mpf_rtp_media_descriptor_t) */
71  apr_array_header_t *video_media_arr;
72 
73  /** Optional session attributes */
75 };
76 
77 /** Create session descriptor */
79 
80 /** Create session descriptor for answer */
82 
83 static APR_INLINE apr_size_t mrcp_session_media_count_get(const mrcp_session_descriptor_t *descriptor)
84 {
85  return descriptor->control_media_arr->nelts + descriptor->audio_media_arr->nelts + descriptor->video_media_arr->nelts;
86 }
87 
88 static APR_INLINE apr_size_t mrcp_session_control_media_add(mrcp_session_descriptor_t *descriptor, void *media)
89 {
90  APR_ARRAY_PUSH(descriptor->control_media_arr,void*) = media;
91  return mrcp_session_media_count_get(descriptor) - 1;
92 }
93 
94 static APR_INLINE void* mrcp_session_control_media_get(const mrcp_session_descriptor_t *descriptor, apr_size_t id)
95 {
96  if((int)id >= descriptor->control_media_arr->nelts) {
97  return NULL;
98  }
99  return APR_ARRAY_IDX(descriptor->control_media_arr,id,void*);
100 }
101 
102 static APR_INLINE apt_bool_t mrcp_session_control_media_set(mrcp_session_descriptor_t *descriptor, apr_size_t id, void *media)
103 {
104  if((int)id >= descriptor->control_media_arr->nelts) {
105  return FALSE;
106  }
107  APR_ARRAY_IDX(descriptor->control_media_arr,id,void*) = media;
108  return TRUE;
109 }
110 
111 
112 static APR_INLINE apr_size_t mrcp_session_audio_media_add(mrcp_session_descriptor_t *descriptor, mpf_rtp_media_descriptor_t *media)
113 {
114  APR_ARRAY_PUSH(descriptor->audio_media_arr,mpf_rtp_media_descriptor_t*) = media;
115  return mrcp_session_media_count_get(descriptor) - 1;
116 }
117 
118 static APR_INLINE mpf_rtp_media_descriptor_t* mrcp_session_audio_media_get(const mrcp_session_descriptor_t *descriptor, apr_size_t id)
119 {
120  if((int)id >= descriptor->audio_media_arr->nelts) {
121  return NULL;
122  }
123  return APR_ARRAY_IDX(descriptor->audio_media_arr,id,mpf_rtp_media_descriptor_t*);
124 }
125 
126 static APR_INLINE apt_bool_t mrcp_session_audio_media_set(const mrcp_session_descriptor_t *descriptor, apr_size_t id, mpf_rtp_media_descriptor_t* media)
127 {
128  if((int)id >= descriptor->audio_media_arr->nelts) {
129  return FALSE;
130  }
131  APR_ARRAY_IDX(descriptor->audio_media_arr,id,mpf_rtp_media_descriptor_t*) = media;
132  return TRUE;
133 }
134 
135 
136 static APR_INLINE apr_size_t mrcp_session_video_media_add(mrcp_session_descriptor_t *descriptor, mpf_rtp_media_descriptor_t *media)
137 {
138  APR_ARRAY_PUSH(descriptor->video_media_arr,mpf_rtp_media_descriptor_t*) = media;
139  return mrcp_session_media_count_get(descriptor) - 1;
140 }
141 
142 static APR_INLINE mpf_rtp_media_descriptor_t* mrcp_session_video_media_get(const mrcp_session_descriptor_t *descriptor, apr_size_t id)
143 {
144  if((int)id >= descriptor->video_media_arr->nelts) {
145  return NULL;
146  }
147  return APR_ARRAY_IDX(descriptor->video_media_arr,id,mpf_rtp_media_descriptor_t*);
148 }
149 
150 static APR_INLINE apt_bool_t mrcp_session_video_media_set(mrcp_session_descriptor_t *descriptor, apr_size_t id, mpf_rtp_media_descriptor_t* media)
151 {
152  if((int)id >= descriptor->video_media_arr->nelts) {
153  return FALSE;
154  }
155  APR_ARRAY_IDX(descriptor->video_media_arr,id,mpf_rtp_media_descriptor_t*) = media;
156  return TRUE;
157 }
158 
159 /** Get session status phrase */
161 
162 static APR_INLINE void mrcp_session_attribs_init(mrcp_session_attribs_t *attribs)
163 {
164  attribs->generic_attribs = NULL;
165  attribs->resource_attribs = NULL;
166 }
167 
168 MRCP_DECLARE(apt_bool_t) mrcp_session_generic_attrib_set(mrcp_session_attribs_t *attribs, const apt_str_t *field, const apt_str_t *value, apr_pool_t *pool);
169 MRCP_DECLARE(apt_bool_t) mrcp_session_resource_attrib_set(mrcp_session_attribs_t *attribs, const apt_str_t *resource_name, const apt_str_t *field, const apt_str_t *value, apr_pool_t *pool);
170 
172 
173 #endif /* MRCP_SESSION_DESCRIPTOR_H */
#define MRCP_DECLARE(type)
Definition: mrcp.h:40
const char * mrcp_session_status_phrase_get(mrcp_session_status_e status)
apr_array_header_t * audio_media_arr
Definition: mrcp_session_descriptor.h:69
Definition: mrcp_session_descriptor.h:36
Definition: mrcp_session_descriptor.h:35
apt_str_t origin
Definition: mrcp_session_descriptor.h:52
#define APT_END_EXTERN_C
Definition: apt.h:38
int apt_bool_t
Definition: apt.h:57
mrcp_session_descriptor_t * mrcp_session_descriptor_create(apr_pool_t *pool)
mrcp_session_status_e
Definition: mrcp_session_descriptor.h:33
apr_hash_t * resource_attribs
Definition: mrcp_session_descriptor.h:46
apt_bool_t resource_state
Definition: mrcp_session_descriptor.h:60
Definition: mrcp_session_descriptor.h:42
apr_array_header_t * video_media_arr
Definition: mrcp_session_descriptor.h:71
apr_array_header_t * control_media_arr
Definition: mrcp_session_descriptor.h:67
#define APT_BEGIN_EXTERN_C
Definition: apt.h:36
MRCP Signaling Types Declaration.
Definition: mrcp_session_descriptor.h:34
apr_table_t * generic_attribs
Definition: mrcp_session_descriptor.h:44
Definition: mrcp_session_descriptor.h:37
mrcp_session_descriptor_t * mrcp_session_answer_create(const mrcp_session_descriptor_t *offer, apr_pool_t *pool)
Definition: mpf_rtp_descriptor.h:51
mrcp_session_attribs_t attribs
Definition: mrcp_session_descriptor.h:74
mrcp_session_status_e status
Definition: mrcp_session_descriptor.h:62
int response_code
Definition: mrcp_session_descriptor.h:64
Definition: mrcp_session_descriptor.h:38
Definition: apt_string.h:36
Definition: mrcp_session_descriptor.h:50
apt_str_t ip
Definition: mrcp_session_descriptor.h:54
apt_str_t resource_name
Definition: mrcp_session_descriptor.h:58
MPF RTP Stream Descriptor.
apt_str_t ext_ip
Definition: mrcp_session_descriptor.h:56