Line data Source code
1 : /**
2 : *
3 : * Copyright (c) 2021 Project CHIP Authors
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 : #include "SubscribeResponseMessage.h"
18 : #include "MessageDefHelper.h"
19 :
20 : namespace chip {
21 : namespace app {
22 : #if CHIP_CONFIG_IM_PRETTY_PRINT
23 212 : CHIP_ERROR SubscribeResponseMessage::Parser::PrettyPrint() const
24 : {
25 212 : CHIP_ERROR err = CHIP_NO_ERROR;
26 212 : TLV::TLVReader reader;
27 212 : PRETTY_PRINT("SubscribeResponseMessage =");
28 212 : PRETTY_PRINT("{");
29 :
30 : // make a copy of the reader
31 212 : reader.Init(mReader);
32 :
33 848 : while (CHIP_NO_ERROR == (err = reader.Next()))
34 : {
35 636 : if (!TLV::IsContextTag(reader.GetTag()))
36 : {
37 0 : continue;
38 : }
39 636 : uint32_t tagNum = TLV::TagNumFromTag(reader.GetTag());
40 636 : switch (tagNum)
41 : {
42 212 : case to_underlying(Tag::kSubscriptionId):
43 212 : VerifyOrReturnError(TLV::kTLVType_UnsignedInteger == reader.GetType(), CHIP_ERROR_WRONG_TLV_TYPE);
44 : #if CHIP_DETAIL_LOGGING
45 : {
46 : SubscriptionId subscriptionId;
47 212 : ReturnErrorOnFailure(reader.Get(subscriptionId));
48 212 : PRETTY_PRINT("\tSubscriptionId = 0x%" PRIx32 ",", subscriptionId);
49 : }
50 : #endif // CHIP_DETAIL_LOGGING
51 212 : break;
52 212 : case to_underlying(Tag::kMaxInterval):
53 212 : VerifyOrReturnError(TLV::kTLVType_UnsignedInteger == reader.GetType(), CHIP_ERROR_WRONG_TLV_TYPE);
54 : #if CHIP_DETAIL_LOGGING
55 : {
56 : uint16_t maxInterval;
57 212 : ReturnErrorOnFailure(reader.Get(maxInterval));
58 212 : PRETTY_PRINT("\tMaxInterval = 0x%x,", maxInterval);
59 : }
60 : #endif // CHIP_DETAIL_LOGGING
61 212 : break;
62 212 : case Revision::kInteractionModelRevisionTag:
63 212 : ReturnErrorOnFailure(MessageParser::CheckInteractionModelRevision(reader));
64 212 : break;
65 0 : default:
66 0 : PRETTY_PRINT("Unknown tag num %" PRIu32, tagNum);
67 0 : break;
68 : }
69 : }
70 212 : PRETTY_PRINT("}");
71 212 : PRETTY_PRINT_BLANK_LINE();
72 :
73 212 : if (CHIP_END_OF_TLV == err)
74 : {
75 212 : err = CHIP_NO_ERROR;
76 : }
77 212 : ReturnErrorOnFailure(err);
78 212 : return reader.ExitContainer(mOuterContainerType);
79 : }
80 : #endif // CHIP_CONFIG_IM_PRETTY_PRINT
81 :
82 212 : CHIP_ERROR SubscribeResponseMessage::Parser::GetSubscriptionId(SubscriptionId * const apSubscribeId) const
83 : {
84 212 : return GetUnsignedInteger(to_underlying(Tag::kSubscriptionId), apSubscribeId);
85 : }
86 :
87 210 : CHIP_ERROR SubscribeResponseMessage::Parser::GetMaxInterval(uint16_t * const apMaxInterval) const
88 : {
89 210 : return GetUnsignedInteger(to_underlying(Tag::kMaxInterval), apMaxInterval);
90 : }
91 :
92 214 : SubscribeResponseMessage::Builder & SubscribeResponseMessage::Builder::SubscriptionId(const chip::SubscriptionId aSubscribeId)
93 : {
94 214 : if (mError == CHIP_NO_ERROR)
95 : {
96 214 : mError = mpWriter->Put(TLV::ContextTag(Tag::kSubscriptionId), aSubscribeId);
97 : }
98 214 : return *this;
99 : }
100 :
101 214 : SubscribeResponseMessage::Builder & SubscribeResponseMessage::Builder::MaxInterval(const uint16_t aMaxInterval)
102 : {
103 214 : if (mError == CHIP_NO_ERROR)
104 : {
105 214 : mError = mpWriter->Put(TLV::ContextTag(Tag::kMaxInterval), aMaxInterval);
106 : }
107 214 : return *this;
108 : }
109 :
110 214 : CHIP_ERROR SubscribeResponseMessage::Builder::EndOfSubscribeResponseMessage()
111 : {
112 214 : if (mError == CHIP_NO_ERROR)
113 : {
114 214 : mError = MessageBuilder::EncodeInteractionModelRevision();
115 : }
116 214 : if (mError == CHIP_NO_ERROR)
117 : {
118 214 : EndOfContainer();
119 : }
120 214 : return GetError();
121 : }
122 : } // namespace app
123 : } // namespace chip
|