UniMRCP  1.3.0
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
mrcp_session_descriptor.h
Go to the documentation of this file.
1 /*
2  * Copyright 2008-2014 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  * $Id: mrcp_session_descriptor.h 2136 2014-07-04 06:33:36Z achaloyan@gmail.com $
17  */
18 
19 #ifndef MRCP_SESSION_DESCRIPTOR_H
20 #define MRCP_SESSION_DESCRIPTOR_H
21 
22 /**
23  * @file mrcp_session_descriptor.h
24  * @brief MRCP Session Descriptor
25  */
26 
27 #include "mpf_rtp_descriptor.h"
28 #include "mrcp_sig_types.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 descriptor */
43  /** SDP origin */
45  /** Session level IP address */
47  /** Session level external (NAT) IP address */
49  /** Session level resource name (MRCPv1 only) */
51  /** Resource state (MRCPv1 only) */
53  /** Session status */
55  /** Response code (SIP for MRCPv2 and RTSP for MRCPv1) */
57 
58  /** MRCP control media array (mrcp_control_descriptor_t) */
59  apr_array_header_t *control_media_arr;
60  /** Audio media array (mpf_rtp_media_descriptor_t) */
61  apr_array_header_t *audio_media_arr;
62  /** Video media array (mpf_rtp_media_descriptor_t) */
63  apr_array_header_t *video_media_arr;
64 };
65 
66 /** Create session descriptor */
68 
69 static APR_INLINE apr_size_t mrcp_session_media_count_get(const mrcp_session_descriptor_t *descriptor)
70 {
71  return descriptor->control_media_arr->nelts + descriptor->audio_media_arr->nelts + descriptor->video_media_arr->nelts;
72 }
73 
74 static APR_INLINE apr_size_t mrcp_session_control_media_add(mrcp_session_descriptor_t *descriptor, void *media)
75 {
76  APR_ARRAY_PUSH(descriptor->control_media_arr,void*) = media;
77  return mrcp_session_media_count_get(descriptor) - 1;
78 }
79 
80 static APR_INLINE void* mrcp_session_control_media_get(const mrcp_session_descriptor_t *descriptor, apr_size_t id)
81 {
82  if((int)id >= descriptor->control_media_arr->nelts) {
83  return NULL;
84  }
85  return APR_ARRAY_IDX(descriptor->control_media_arr,id,void*);
86 }
87 
88 static APR_INLINE apt_bool_t mrcp_session_control_media_set(mrcp_session_descriptor_t *descriptor, apr_size_t id, void *media)
89 {
90  if((int)id >= descriptor->control_media_arr->nelts) {
91  return FALSE;
92  }
93  APR_ARRAY_IDX(descriptor->control_media_arr,id,void*) = media;
94  return TRUE;
95 }
96 
97 
98 static APR_INLINE apr_size_t mrcp_session_audio_media_add(mrcp_session_descriptor_t *descriptor, mpf_rtp_media_descriptor_t *media)
99 {
100  APR_ARRAY_PUSH(descriptor->audio_media_arr,mpf_rtp_media_descriptor_t*) = media;
101  return mrcp_session_media_count_get(descriptor) - 1;
102 }
103 
104 static APR_INLINE mpf_rtp_media_descriptor_t* mrcp_session_audio_media_get(const mrcp_session_descriptor_t *descriptor, apr_size_t id)
105 {
106  if((int)id >= descriptor->audio_media_arr->nelts) {
107  return NULL;
108  }
109  return APR_ARRAY_IDX(descriptor->audio_media_arr,id,mpf_rtp_media_descriptor_t*);
110 }
111 
112 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)
113 {
114  if((int)id >= descriptor->audio_media_arr->nelts) {
115  return FALSE;
116  }
117  APR_ARRAY_IDX(descriptor->audio_media_arr,id,mpf_rtp_media_descriptor_t*) = media;
118  return TRUE;
119 }
120 
121 
122 static APR_INLINE apr_size_t mrcp_session_video_media_add(mrcp_session_descriptor_t *descriptor, mpf_rtp_media_descriptor_t *media)
123 {
124  APR_ARRAY_PUSH(descriptor->video_media_arr,mpf_rtp_media_descriptor_t*) = media;
125  return mrcp_session_media_count_get(descriptor) - 1;
126 }
127 
128 static APR_INLINE mpf_rtp_media_descriptor_t* mrcp_session_video_media_get(const mrcp_session_descriptor_t *descriptor, apr_size_t id)
129 {
130  if((int)id >= descriptor->video_media_arr->nelts) {
131  return NULL;
132  }
133  return APR_ARRAY_IDX(descriptor->video_media_arr,id,mpf_rtp_media_descriptor_t*);
134 }
135 
136 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)
137 {
138  if((int)id >= descriptor->video_media_arr->nelts) {
139  return FALSE;
140  }
141  APR_ARRAY_IDX(descriptor->video_media_arr,id,mpf_rtp_media_descriptor_t*) = media;
142  return TRUE;
143 }
144 
145 /** Get session status phrase */
147 
149 
150 #endif /* MRCP_SESSION_DESCRIPTOR_H */