UniMRCP  1.5.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-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 
29 
30 /** MRCP session status */
31 typedef enum {
33  MRCP_SESSION_STATUS_NO_SUCH_RESOURCE, /**< no such resource found */
34  MRCP_SESSION_STATUS_UNACCEPTABLE_RESOURCE,/**< resource exists, but no implementation (plugin) found */
35  MRCP_SESSION_STATUS_UNAVAILABLE_RESOURCE, /**< resource exists, but is temporary unavailable */
36  MRCP_SESSION_STATUS_ERROR /**< internal error occurred */
38 
39 /** MRCP session descriptor */
41  /** SDP origin */
43  /** Session level IP address */
45  /** Session level external (NAT) IP address */
47  /** Session level resource name (MRCPv1 only) */
49  /** Resource state (MRCPv1 only) */
51  /** Session status */
53  /** Response code (SIP for MRCPv2 and RTSP for MRCPv1) */
55 
56  /** MRCP control media array (mrcp_control_descriptor_t) */
57  apr_array_header_t *control_media_arr;
58  /** Audio media array (mpf_rtp_media_descriptor_t) */
59  apr_array_header_t *audio_media_arr;
60  /** Video media array (mpf_rtp_media_descriptor_t) */
61  apr_array_header_t *video_media_arr;
62 };
63 
64 /** Create session descriptor */
66 
67 /** Create session descriptor for answer */
69 
70 static APR_INLINE apr_size_t mrcp_session_media_count_get(const mrcp_session_descriptor_t *descriptor)
71 {
72  return descriptor->control_media_arr->nelts + descriptor->audio_media_arr->nelts + descriptor->video_media_arr->nelts;
73 }
74 
75 static APR_INLINE apr_size_t mrcp_session_control_media_add(mrcp_session_descriptor_t *descriptor, void *media)
76 {
77  APR_ARRAY_PUSH(descriptor->control_media_arr,void*) = media;
78  return mrcp_session_media_count_get(descriptor) - 1;
79 }
80 
81 static APR_INLINE void* mrcp_session_control_media_get(const mrcp_session_descriptor_t *descriptor, apr_size_t id)
82 {
83  if((int)id >= descriptor->control_media_arr->nelts) {
84  return NULL;
85  }
86  return APR_ARRAY_IDX(descriptor->control_media_arr,id,void*);
87 }
88 
89 static APR_INLINE apt_bool_t mrcp_session_control_media_set(mrcp_session_descriptor_t *descriptor, apr_size_t id, void *media)
90 {
91  if((int)id >= descriptor->control_media_arr->nelts) {
92  return FALSE;
93  }
94  APR_ARRAY_IDX(descriptor->control_media_arr,id,void*) = media;
95  return TRUE;
96 }
97 
98 
99 static APR_INLINE apr_size_t mrcp_session_audio_media_add(mrcp_session_descriptor_t *descriptor, mpf_rtp_media_descriptor_t *media)
100 {
101  APR_ARRAY_PUSH(descriptor->audio_media_arr,mpf_rtp_media_descriptor_t*) = media;
102  return mrcp_session_media_count_get(descriptor) - 1;
103 }
104 
105 static APR_INLINE mpf_rtp_media_descriptor_t* mrcp_session_audio_media_get(const mrcp_session_descriptor_t *descriptor, apr_size_t id)
106 {
107  if((int)id >= descriptor->audio_media_arr->nelts) {
108  return NULL;
109  }
110  return APR_ARRAY_IDX(descriptor->audio_media_arr,id,mpf_rtp_media_descriptor_t*);
111 }
112 
113 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)
114 {
115  if((int)id >= descriptor->audio_media_arr->nelts) {
116  return FALSE;
117  }
118  APR_ARRAY_IDX(descriptor->audio_media_arr,id,mpf_rtp_media_descriptor_t*) = media;
119  return TRUE;
120 }
121 
122 
123 static APR_INLINE apr_size_t mrcp_session_video_media_add(mrcp_session_descriptor_t *descriptor, mpf_rtp_media_descriptor_t *media)
124 {
125  APR_ARRAY_PUSH(descriptor->video_media_arr,mpf_rtp_media_descriptor_t*) = media;
126  return mrcp_session_media_count_get(descriptor) - 1;
127 }
128 
129 static APR_INLINE mpf_rtp_media_descriptor_t* mrcp_session_video_media_get(const mrcp_session_descriptor_t *descriptor, apr_size_t id)
130 {
131  if((int)id >= descriptor->video_media_arr->nelts) {
132  return NULL;
133  }
134  return APR_ARRAY_IDX(descriptor->video_media_arr,id,mpf_rtp_media_descriptor_t*);
135 }
136 
137 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)
138 {
139  if((int)id >= descriptor->video_media_arr->nelts) {
140  return FALSE;
141  }
142  APR_ARRAY_IDX(descriptor->video_media_arr,id,mpf_rtp_media_descriptor_t*) = media;
143  return TRUE;
144 }
145 
146 /** Get session status phrase */
148 
150 
151 #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:59
Definition: mrcp_session_descriptor.h:34
Definition: mrcp_session_descriptor.h:33
apt_str_t origin
Definition: mrcp_session_descriptor.h:42
#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:31
apt_bool_t resource_state
Definition: mrcp_session_descriptor.h:50
apr_array_header_t * video_media_arr
Definition: mrcp_session_descriptor.h:61
apr_array_header_t * control_media_arr
Definition: mrcp_session_descriptor.h:57
#define APT_BEGIN_EXTERN_C
Definition: apt.h:36
MRCP Signaling Types Declaration.
Definition: mrcp_session_descriptor.h:32
Definition: mrcp_session_descriptor.h:35
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_status_e status
Definition: mrcp_session_descriptor.h:52
int response_code
Definition: mrcp_session_descriptor.h:54
Definition: mrcp_session_descriptor.h:36
Definition: apt_string.h:36
Definition: mrcp_session_descriptor.h:40
apt_str_t ip
Definition: mrcp_session_descriptor.h:44
apt_str_t resource_name
Definition: mrcp_session_descriptor.h:48
MPF RTP Stream Descriptor.
apt_str_t ext_ip
Definition: mrcp_session_descriptor.h:46