1 /*
2 * Copyright (c) 2014-2017, Siemens AG. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 *
7 * 1. Redistributions of source code must retain the above copyright notice,
8 * this list of conditions and the following disclaimer.
9 *
10 * 2. Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
18 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24 * POSSIBILITY OF SUCH DAMAGE.
25 */
26
27 #include <assert.h>
28 #include <embb/mtapi/c/mtapi.h>
29
30 #include <embb_mtapi_log.h>
31 #include <mtapi_status_t.h>
32 #include <embb_mtapi_node_t.h>
33 #include <embb_mtapi_attr.h>
34
35
36 /* ---- INTERFACE FUNCTIONS ------------------------------------------------ */
37
mtapi_queueattr_init(MTAPI_OUT mtapi_queue_attributes_t * attributes,MTAPI_OUT mtapi_status_t * status)38 void mtapi_queueattr_init(
39 MTAPI_OUT mtapi_queue_attributes_t* attributes,
40 MTAPI_OUT mtapi_status_t* status) {
41 mtapi_status_t local_status = MTAPI_ERR_UNKNOWN;
42 embb_mtapi_node_t* node = embb_mtapi_node_get_instance();
43
44 embb_mtapi_log_trace("mtapi_queueattr_init() called\n");
45
46 if (MTAPI_NULL != node) {
47 if (MTAPI_NULL != attributes) {
48 attributes->global = MTAPI_TRUE;
49 attributes->priority = 0;
50 attributes->limit = node->attributes.queue_limit;
51 attributes->ordered = MTAPI_TRUE;
52 attributes->retain = MTAPI_FALSE;
53 attributes->domain_shared = MTAPI_TRUE;
54 local_status = MTAPI_SUCCESS;
55 } else {
56 local_status = MTAPI_ERR_PARAMETER;
57 }
58 } else {
59 local_status = MTAPI_ERR_NODE_NOTINIT;
60 }
61
62 mtapi_status_set(status, local_status);
63 }
64
mtapi_queueattr_set(MTAPI_INOUT mtapi_queue_attributes_t * attributes,MTAPI_IN mtapi_uint_t attribute_num,MTAPI_IN void * attribute,MTAPI_IN mtapi_size_t attribute_size,MTAPI_OUT mtapi_status_t * status)65 void mtapi_queueattr_set(
66 MTAPI_INOUT mtapi_queue_attributes_t* attributes,
67 MTAPI_IN mtapi_uint_t attribute_num,
68 MTAPI_IN void* attribute,
69 MTAPI_IN mtapi_size_t attribute_size,
70 MTAPI_OUT mtapi_status_t* status) {
71 mtapi_status_t local_status = MTAPI_ERR_UNKNOWN;
72
73 embb_mtapi_log_trace("mtapi_queueattr_set() called\n");
74
75 if (MTAPI_NULL != attributes) {
76 if (MTAPI_ATTRIBUTE_POINTER_AS_VALUE != attribute_size &&
77 MTAPI_NULL == attribute) {
78 local_status = MTAPI_ERR_PARAMETER;
79 } else {
80 switch (attribute_num) {
81 case MTAPI_QUEUE_GLOBAL:
82 local_status = embb_mtapi_attr_set_mtapi_boolean_t(
83 &attributes->global, attribute, attribute_size);
84 break;
85
86 case MTAPI_QUEUE_PRIORITY:
87 local_status = embb_mtapi_attr_set_mtapi_uint_t(
88 &attributes->priority, attribute, attribute_size);
89 break;
90
91 case MTAPI_QUEUE_LIMIT:
92 local_status = embb_mtapi_attr_set_mtapi_uint_t(
93 &attributes->limit, attribute, attribute_size);
94 break;
95
96 case MTAPI_QUEUE_ORDERED:
97 local_status = embb_mtapi_attr_set_mtapi_boolean_t(
98 &attributes->ordered, attribute, attribute_size);
99 break;
100
101 case MTAPI_QUEUE_RETAIN:
102 local_status = embb_mtapi_attr_set_mtapi_boolean_t(
103 &attributes->retain, attribute, attribute_size);
104 break;
105
106 case MTAPI_QUEUE_DOMAIN_SHARED:
107 local_status = embb_mtapi_attr_set_mtapi_boolean_t(
108 &attributes->domain_shared, attribute, attribute_size);
109 break;
110
111 default:
112 /* attribute unknown */
113 local_status = MTAPI_ERR_ATTR_NUM;
114 break;
115 }
116 }
117 } else {
118 local_status = MTAPI_ERR_PARAMETER;
119 }
120
121 mtapi_status_set(status, local_status);
122 }
123