Fix for x86_64 build fail
[platform/upstream/connectedhomeip.git] / src / app / MessageDef / EventList.cpp
1 /**
2  *
3  *    Copyright (c) 2020 Project CHIP Authors
4  *    Copyright (c) 2018 Google LLC.
5  *    Copyright (c) 2016-2017 Nest Labs, Inc.
6  *    Licensed under the Apache License, Version 2.0 (the "License");
7  *    you may not use this file except in compliance with the License.
8  *    You may obtain a copy of the License at
9  *
10  *        http://www.apache.org/licenses/LICENSE-2.0
11  *
12  *    Unless required by applicable law or agreed to in writing, software
13  *    distributed under the License is distributed on an "AS IS" BASIS,
14  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  *    See the License for the specific language governing permissions and
16  *    limitations under the License.
17  */
18 /**
19  *    @file
20  *      This file defines EventList parser and builder in CHIP interaction model
21  *
22  */
23
24 #include "EventList.h"
25
26 #include "MessageDefHelper.h"
27
28 #include <inttypes.h>
29 #include <stdarg.h>
30 #include <stdio.h>
31
32 using namespace chip;
33 using namespace chip::TLV;
34
35 namespace chip {
36 namespace app {
37 #if CHIP_CONFIG_IM_ENABLE_SCHEMA_CHECK
38 CHIP_ERROR EventList::Parser::CheckSchemaValidity() const
39 {
40     CHIP_ERROR err        = CHIP_NO_ERROR;
41     size_t NumDataElement = 0;
42     chip::TLV::TLVReader reader;
43
44     PRETTY_PRINT("EventList =");
45     PRETTY_PRINT("[");
46
47     // make a copy of the EventList reader
48     reader.Init(mReader);
49
50     while (CHIP_NO_ERROR == (err = reader.Next()))
51     {
52         VerifyOrExit(chip::TLV::AnonymousTag == reader.GetTag(), err = CHIP_ERROR_INVALID_TLV_TAG);
53         VerifyOrExit(chip::TLV::kTLVType_Structure == reader.GetType(), err = CHIP_ERROR_WRONG_TLV_TYPE);
54
55         {
56             EventDataElement::Parser event;
57             err = event.Init(reader);
58             SuccessOrExit(err);
59
60             PRETTY_PRINT_INCDEPTH();
61             err = event.CheckSchemaValidity();
62             SuccessOrExit(err);
63             PRETTY_PRINT_DECDEPTH();
64         }
65
66         ++NumDataElement;
67     }
68
69     PRETTY_PRINT("],");
70     PRETTY_PRINT("");
71
72     // if we have exhausted this container
73     if (CHIP_END_OF_TLV == err)
74     {
75         // if we have at least one data element
76         if (NumDataElement > 0)
77         {
78             err = CHIP_NO_ERROR;
79         }
80         // NOTE: temporarily disable this check, to allow test to continue
81         else
82         {
83             ChipLogError(DataManagement, "PROTOCOL ERROR: Empty event list");
84             err = CHIP_NO_ERROR;
85         }
86     }
87
88 exit:
89     ChipLogFunctError(err);
90
91     return err;
92 }
93 #endif // CHIP_CONFIG_IM_ENABLE_SCHEMA_CHECK
94
95 EventDataElement::Builder & EventList::Builder::CreateEventBuilder()
96 {
97     // skip if error has already been set
98     VerifyOrExit(CHIP_NO_ERROR == mError, mEventDataElementBuilder.ResetError(mError));
99
100     mError = mEventDataElementBuilder.Init(mpWriter);
101     ChipLogFunctError(mError);
102
103 exit:
104     // on error, mEventDataElementBuilder would be un-/partial initialized and cannot be used to write anything
105     return mEventDataElementBuilder;
106 }
107
108 EventList::Builder & EventList::Builder::EndOfEventList()
109 {
110     EndOfContainer();
111     return *this;
112 }
113 }; // namespace app
114 }; // namespace chip