UniMRCP
1.5.0
Main Page
Related Pages
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Pages
libs
mrcp
message
include
mrcp_header_accessor.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_HEADER_ACCESSOR_H
18
#define MRCP_HEADER_ACCESSOR_H
19
20
/**
21
* @file mrcp_header_accessor.h
22
* @brief Abstract MRCP Header Accessor
23
*/
24
25
#include "
apt_text_stream.h
"
26
#include "
apt_header_field.h
"
27
#include "
mrcp.h
"
28
29
APT_BEGIN_EXTERN_C
30
31
/** MRCP header accessor declaration */
32
typedef
struct
mrcp_header_accessor_t
mrcp_header_accessor_t
;
33
/** MRCP header vtable declaration */
34
typedef
struct
mrcp_header_vtable_t
mrcp_header_vtable_t
;
35
36
/** MRCP header accessor interface */
37
struct
mrcp_header_vtable_t
{
38
/** Allocate actual header data */
39
void
* (*allocate)(
mrcp_header_accessor_t
*accessor, apr_pool_t *pool);
40
/** Destroy header data */
41
void (*
destroy
)(
mrcp_header_accessor_t
*accessor);
42
43
/** Parse header field value */
44
apt_bool_t
(*
parse_field
)(
mrcp_header_accessor_t
*accessor, apr_size_t id,
const
apt_str_t
*value, apr_pool_t *pool);
45
/** Generate header field value */
46
apt_bool_t
(*
generate_field
)(
const
mrcp_header_accessor_t
*accessor, apr_size_t id,
apt_str_t
*value, apr_pool_t *pool);
47
/** Duplicate header field value */
48
apt_bool_t
(*
duplicate_field
)(
mrcp_header_accessor_t
*accessor,
const
mrcp_header_accessor_t
*src, apr_size_t id,
const
apt_str_t
*value, apr_pool_t *pool);
49
50
/** Table of fields */
51
const
apt_str_table_item_t
*
field_table
;
52
/** Number of fields */
53
apr_size_t
field_count
;
54
};
55
56
/** MRCP header accessor */
57
struct
mrcp_header_accessor_t
{
58
/** Actual header data allocated by accessor */
59
void
*
data
;
60
/** Header accessor interface */
61
const
mrcp_header_vtable_t
*
vtable
;
62
};
63
64
65
66
/** Initialize header vtable */
67
static
APR_INLINE
void
mrcp_header_vtable_init(
mrcp_header_vtable_t
*vtable)
68
{
69
vtable->
allocate
= NULL;
70
vtable->
destroy
= NULL;
71
vtable->
parse_field
= NULL;
72
vtable->
generate_field
= NULL;
73
vtable->
duplicate_field
= NULL;
74
vtable->
field_table
= NULL;
75
vtable->
field_count
= 0;
76
}
77
78
/** Validate header vtable */
79
static
APR_INLINE
apt_bool_t
mrcp_header_vtable_validate(
const
mrcp_header_vtable_t
*vtable)
80
{
81
return
(vtable->
allocate
&& vtable->
destroy
&&
82
vtable->
parse_field
&& vtable->
generate_field
&&
83
vtable->
duplicate_field
&& vtable->
field_table
&&
84
vtable->
field_count
) ? TRUE : FALSE;
85
}
86
87
88
/** Initialize header accessor */
89
static
APR_INLINE
void
mrcp_header_accessor_init(
mrcp_header_accessor_t
*accessor)
90
{
91
accessor->
data
= NULL;
92
accessor->
vtable
= NULL;
93
}
94
95
/** Allocate header data */
96
static
APR_INLINE
void
* mrcp_header_allocate(
mrcp_header_accessor_t
*accessor, apr_pool_t *pool)
97
{
98
if
(accessor->
data
) {
99
return
accessor->
data
;
100
}
101
if
(!accessor->
vtable
|| !accessor->
vtable
->
allocate
) {
102
return
NULL;
103
}
104
return
accessor->
vtable
->
allocate
(accessor,pool);
105
}
106
107
/** Destroy header data */
108
static
APR_INLINE
void
mrcp_header_destroy(
mrcp_header_accessor_t
*accessor)
109
{
110
if
(!accessor->
vtable
|| !accessor->
vtable
->
destroy
) {
111
return
;
112
}
113
accessor->
vtable
->
destroy
(accessor);
114
}
115
116
117
/** Parse header field value */
118
MRCP_DECLARE
(
apt_bool_t
)
mrcp_header_field_value_parse
(
mrcp_header_accessor_t
*accessor,
apt_header_field_t
*header_field, apr_pool_t *pool);
119
120
/** Generate header field value */
121
MRCP_DECLARE
(
apt_header_field_t
*)
mrcp_header_field_value_generate
(const
mrcp_header_accessor_t
*accessor, apr_size_t
id
,
apt_bool_t
empty_value, apr_pool_t *pool);
122
123
/** Duplicate header field value */
124
MRCP_DECLARE
(
apt_bool_t
)
mrcp_header_field_value_duplicate
(
mrcp_header_accessor_t
*accessor, const
mrcp_header_accessor_t
*src_accessor, apr_size_t
id
, const
apt_str_t
*value, apr_pool_t *pool);
125
126
127
APT_END_EXTERN_C
128
129
#endif
/* MRCP_HEADER_ACCESSOR_H */
mrcp_header_vtable_t::field_count
apr_size_t field_count
Definition:
mrcp_header_accessor.h:53
MRCP_DECLARE
#define MRCP_DECLARE(type)
Definition:
mrcp.h:40
mrcp_header_vtable_t::parse_field
apt_bool_t(* parse_field)(mrcp_header_accessor_t *accessor, apr_size_t id, const apt_str_t *value, apr_pool_t *pool)
Definition:
mrcp_header_accessor.h:44
mrcp_header_vtable_t::field_table
const apt_str_table_item_t * field_table
Definition:
mrcp_header_accessor.h:51
mrcp_header_vtable_t::duplicate_field
apt_bool_t(* duplicate_field)(mrcp_header_accessor_t *accessor, const mrcp_header_accessor_t *src, apr_size_t id, const apt_str_t *value, apr_pool_t *pool)
Definition:
mrcp_header_accessor.h:48
APT_END_EXTERN_C
#define APT_END_EXTERN_C
Definition:
apt.h:38
apt_bool_t
int apt_bool_t
Definition:
apt.h:57
mrcp_header_field_value_parse
apt_bool_t mrcp_header_field_value_parse(mrcp_header_accessor_t *accessor, apt_header_field_t *header_field, apr_pool_t *pool)
mrcp_header_vtable_t
Definition:
mrcp_header_accessor.h:37
mrcp.h
MRCP Core Definitions.
apt_header_field_t
Definition:
apt_header_field.h:39
mrcp_header_accessor_t::vtable
const mrcp_header_vtable_t * vtable
Definition:
mrcp_header_accessor.h:61
APT_BEGIN_EXTERN_C
#define APT_BEGIN_EXTERN_C
Definition:
apt.h:36
mrcp_header_vtable_t::destroy
void(* destroy)(mrcp_header_accessor_t *accessor)
Definition:
mrcp_header_accessor.h:41
mrcp_header_accessor_t
Definition:
mrcp_header_accessor.h:57
mrcp_header_vtable_t::generate_field
apt_bool_t(* generate_field)(const mrcp_header_accessor_t *accessor, apr_size_t id, apt_str_t *value, apr_pool_t *pool)
Definition:
mrcp_header_accessor.h:46
apt_str_t
Definition:
apt_string.h:36
mrcp_header_accessor_t::data
void * data
Definition:
mrcp_header_accessor.h:59
mrcp_header_field_value_generate
apt_header_field_t * mrcp_header_field_value_generate(const mrcp_header_accessor_t *accessor, apr_size_t id, apt_bool_t empty_value, apr_pool_t *pool)
mrcp_header_field_value_duplicate
apt_bool_t mrcp_header_field_value_duplicate(mrcp_header_accessor_t *accessor, const mrcp_header_accessor_t *src_accessor, apr_size_t id, const apt_str_t *value, apr_pool_t *pool)
apt_header_field.h
Header Field Declaration (RFC5322)
mrcp_header_vtable_t::allocate
void *(* allocate)(mrcp_header_accessor_t *accessor, apr_pool_t *pool)
Definition:
mrcp_header_accessor.h:39
apt_text_stream.h
Text Stream Parse/Generate Routine.
apt_str_table_item_t
Definition:
apt_string_table.h:34
Generated on Tue Aug 22 2017 10:11:48 for UniMRCP by
1.8.6