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