Line data Source code
1 : /** 2 : * 3 : * Copyright (c) 2020 Project CHIP Authors 4 : * 5 : * Licensed under the Apache License, Version 2.0 (the "License"); 6 : * you may not use this file except in compliance with the License. 7 : * You may obtain a copy of the License at 8 : * 9 : * http://www.apache.org/licenses/LICENSE-2.0 10 : * 11 : * Unless required by applicable law or agreed to in writing, software 12 : * distributed under the License is distributed on an "AS IS" BASIS, 13 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 : * See the License for the specific language governing permissions and 15 : * limitations under the License. 16 : */ 17 : 18 : /** 19 : * @file 20 : * This file describes a Manual Setup Payload parser based on the 21 : * CHIP specification. 22 : */ 23 : 24 : #pragma once 25 : 26 : #include "SetupPayload.h" 27 : 28 : #include <algorithm> 29 : #include <lib/core/CHIPError.h> 30 : #include <string> 31 : #include <utility> 32 : 33 : namespace chip { 34 : 35 : /** 36 : * @class ManualSetupPayloadParser 37 : * A class that can be used to convert a decimal encoded payload to a SetupPayload object 38 : * */ 39 : class ManualSetupPayloadParser 40 : { 41 : private: 42 : std::string mDecimalStringRepresentation; 43 : 44 : public: 45 0 : ManualSetupPayloadParser(std::string decimalRepresentation) : mDecimalStringRepresentation(std::move(decimalRepresentation)) 46 : { 47 : // '-' might be being used in the decimal code as a digit group 48 : // separator, to aid in readability. It's not actually part of the 49 : // decomal code, so strip it out. 50 0 : mDecimalStringRepresentation.erase( 51 0 : std::remove(mDecimalStringRepresentation.begin(), mDecimalStringRepresentation.end(), '-'), 52 0 : mDecimalStringRepresentation.end()); 53 0 : } 54 : CHIP_ERROR populatePayload(SetupPayload & outPayload); 55 : 56 : static CHIP_ERROR CheckDecimalStringValidity(std::string decimalString, std::string & decimalStringWithoutCheckDigit); 57 : static CHIP_ERROR CheckCodeLengthValidity(const std::string & decimalString, bool isLongCode); 58 : static CHIP_ERROR ToNumber(const std::string & decimalString, uint32_t & dest); 59 : static CHIP_ERROR ReadDigitsFromDecimalString(const std::string & decimalString, size_t & index, uint32_t & dest, 60 : size_t numberOfCharsToRead); 61 : }; 62 : 63 : } // namespace chip