1 /* 2 * Copyright (C) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef OHOS_VCARD_DECODER_V21_H 17 #define OHOS_VCARD_DECODER_V21_H 18 19 #include <memory> 20 #include <mutex> 21 #include <set> 22 23 #include "vcard_decoder.h" 24 #include "vcard_raw_data.h" 25 26 namespace OHOS { 27 namespace Telephony { 28 class VCardDecoderV21 : public VCardDecoder { 29 public: 30 ~VCardDecoderV21(); 31 virtual void AddVCardDecodeListener(std::shared_ptr<VCardDecodeListener> listener); 32 virtual void Decode(int32_t &errorCode); 33 virtual bool DecodeOne(int32_t &errorCode); 34 35 protected: 36 bool ReadBegin(); 37 void ParseItems(int32_t &errorCode); 38 bool ParseItem(int32_t &errorCode); 39 void DealRawDataValue(const std::string &name, std::shared_ptr<VCardRawData> rawData, int32_t &errorCode); 40 virtual std::string GetVersion(); 41 void RecordUnknowParamType(const std::string &name); 42 virtual std::string GetLine(); 43 virtual std::string PeekLine(); 44 virtual std::string GetNonEmptyLine(); 45 void BuildRawData(const std::string &line, std::shared_ptr<VCardRawData> rawData, int32_t &errorCode); 46 virtual void DealParams(const std::string ¶ms, std::shared_ptr<VCardRawData> rawData, int32_t &errorCode); 47 virtual void DealNoNameParam( 48 const std::string ¶mValue, std::shared_ptr<VCardRawData> rawData, int32_t &errorCode); 49 virtual void DealTypeParam(const std::string &type, std::shared_ptr<VCardRawData> rawData, int32_t &errorCode); 50 void DealValueParam(const std::string &value, std::shared_ptr<VCardRawData> rawData, int32_t &errorCode); 51 void DealEncodingParam(const std::string &encoding, std::shared_ptr<VCardRawData> rawData, int32_t &errorCode); 52 void DealCharsetParam(const std::string &charset, std::shared_ptr<VCardRawData> rawData, int32_t &errorCode); 53 void DealLanguageParam(const std::string &language, std::shared_ptr<VCardRawData> rawData, int32_t &errorCode); 54 virtual void DealAnyParam(const std::string ¶m, const std::string ¶mValue, 55 std::shared_ptr<VCardRawData> rawData, int32_t &errorCode); 56 virtual std::vector<std::string> GetSupportParamType(); 57 virtual std::vector<std::string> GetSupportParamValue(); 58 virtual std::vector<std::string> GetSupportType(); 59 virtual std::vector<std::string> GetSupportParamEncoding(); 60 void DealAdrOrgN(const std::string &rawValue, std::shared_ptr<VCardRawData> rawData, const std::string &fromCharSet, 61 const std::string &toCharSet, int32_t &errorCode); 62 void DealAgent(std::shared_ptr<VCardRawData> rawData, int32_t &errorCode); 63 virtual std::string GetBase64(const std::string &value, int32_t &errorCode); 64 virtual std::string UnescapeText(const std::string &from); 65 virtual std::string UnescapeChar(char ch); 66 67 protected: 68 std::set<std::string> unknowParamType_; 69 std::set<std::string> unknowParamValue_; 70 71 private: 72 void DealV21Value(std::string &rawValue); 73 void DealBase64OrB(const std::string &rawValue, std::shared_ptr<VCardRawData> rawData, int32_t &errorCode); 74 void DealEncodingQPOrNoEncodingFN(const std::string &rawValue, std::shared_ptr<VCardRawData> rawData, 75 const std::string &fromCharSet, const std::string &toCharSet, int32_t &errorCode); 76 void DealGroupOrTypeNameStatus(const std::string &line, std::shared_ptr<VCardRawData> rawData, int32_t &errorCode, 77 int32_t &status, int32_t &namePos, int32_t &index); 78 void DealParamsStatus(const std::string &line, std::shared_ptr<VCardRawData> rawData, int32_t &errorCode, 79 int32_t &status, int32_t &namePos, int32_t &index); 80 bool IsAllAscLetter(const std::string &value); 81 bool ContainValue(const std::string &value, const std::vector<std::string> values); 82 void ParseQuotedPrintableValues(const std::string &rawValue, std::vector<std::string> &encodedValues, 83 const std::string &fromCharSet, const std::string &toCharSet, int32_t &errorCode); 84 std::string ParseQuotedPrintableValue( 85 const std::string &from, const std::string &fromCharSet, const std::string &toCharSet, int32_t &errorCode); 86 std::string GetQuotedPrintableValue(const std::string &str, int32_t &errorCode); 87 std::string DecodeQuotedPrintable(const std::string &encodedString); 88 std::vector<std::string> BuildListFromValue(const std::string &value); 89 std::string GetPoMultiLine(const std::string &from); 90 std::string getUpperName(const std::string &from); 91 bool IsAscChar(char ch); 92 void NotifyStarted(); 93 void NotifyEnded(); 94 void NotifyOneContactStarted(); 95 void NotifyOneContactEnded(); 96 void NotifyRawDataCreated(std::shared_ptr<VCardRawData> rawData); 97 98 private: 99 std::string currentEncoding_; 100 std::string currentCharset_; 101 std::vector<std::shared_ptr<VCardDecodeListener>> listeners_; 102 }; 103 } // namespace Telephony 104 } // namespace OHOS 105 #endif // OHOS_VCARD_DECODER_V21_H 106