1/*
2 * Copyright (c) 2024 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 UDMF_CAPI_COMMON_H
17#define UDMF_CAPI_COMMON_H
18
19#include "unified_record.h"
20#include "unified_data.h"
21#include <mutex>
22#include <cstdint>
23
24# define MAX_GENERAL_ENTRY_SIZE (100 * 1024 * 1024)
25
26struct UdsObject {
27    const int64_t cid;
28    std::shared_ptr<OHOS::UDMF::Object> obj;
29    std::mutex mutex;
30    explicit UdsObject(int cid);
31    template<typename T> bool HasObjectKey(const char* paramName);
32    template<typename T> T* GetUdsValue(const char* paramName);
33    template<typename T> int SetUdsValue(const char* paramName, const T &pramValue);
34};
35
36enum NdkStructId : std::int64_t {
37    UTD_STRUCT_ID = 1002930,
38    UDS_PLAIN_TEXT_STRUCT_ID,
39    UDS_HYPERLINK_STRUCT_ID,
40    UDS_HTML_STRUCT_ID,
41    UDS_APP_ITEM_STRUCT_ID,
42    UDMF_UNIFIED_DATA_STRUCT_ID,
43    UDMF_UNIFIED_RECORD_STRUCT_ID,
44    UDMF_UNIFIED_DATA_PROPERTIES_ID,
45    UDS_FILE_URI_STRUCT_ID,
46    UDS_PIXEL_MAP_STRUCT_ID,
47    UDS_ARRAY_BUFFER_STRUCT_ID,
48    UDS_CONTENT_FORM_STRUCT_ID
49};
50
51struct OH_Utd {
52    const int64_t cid = UTD_STRUCT_ID;
53    std::mutex mutex;
54    std::string typeId;
55    const char** belongingToTypes{nullptr};
56    unsigned int belongingToTypesCount{0};
57    const char** filenameExtensions{nullptr};
58    unsigned int filenameExtensionsCount{0};
59    const char** mimeTypes{nullptr};
60    unsigned int mimeTypeCount{0};
61    std::string description;
62    std::string referenceURL;
63    std::string iconFile;
64};
65
66struct OH_UdsPlainText : public UdsObject {
67    OH_UdsPlainText();
68};
69struct OH_UdsHyperlink : public UdsObject {
70    OH_UdsHyperlink();
71};
72struct OH_UdsHtml : public UdsObject {
73    OH_UdsHtml();
74};
75struct OH_UdsAppItem : public UdsObject {
76    OH_UdsAppItem();
77};
78struct OH_UdsFileUri : public UdsObject {
79    OH_UdsFileUri();
80};
81struct OH_UdsPixelMap : public UdsObject {
82    OH_UdsPixelMap();
83};
84struct OH_UdsArrayBuffer : public UdsObject {
85    OH_UdsArrayBuffer();
86};
87struct OH_UdsContentForm : public UdsObject {
88    OH_UdsContentForm();
89};
90
91struct OH_UdmfRecord {
92    const int64_t cid = UDMF_UNIFIED_RECORD_STRUCT_ID;
93    std::shared_ptr<OHOS::UDMF::UnifiedRecord> record_;
94    unsigned char *recordData{nullptr};
95    unsigned int recordDataLen{0};
96    char **typesArray{nullptr};
97    unsigned int typesCount{0};
98    char *lastType{nullptr};
99    std::mutex mutex;
100};
101
102struct OH_UdmfData {
103    const int64_t cid = UDMF_UNIFIED_DATA_STRUCT_ID;
104    std::shared_ptr<OHOS::UDMF::UnifiedData> unifiedData_;
105    char **typesArray{nullptr};
106    unsigned int typesCount{0};
107    OH_UdmfRecord **records{nullptr};
108    unsigned int recordsCount{0};
109    std::mutex mutex;
110};
111
112struct OH_UdmfProperty {
113    const int64_t cid = UDMF_UNIFIED_DATA_PROPERTIES_ID;
114    std::shared_ptr<OHOS::UDMF::UnifiedDataProperties> properties_;
115    std::mutex mutex;
116    std::string extraStr;
117};
118
119bool IsInvalidUdsObjectPtr(const UdsObject* pThis, int cid);
120
121bool IsInvalidUdsObjectByType(const UdsObject* pThis, const OHOS::UDMF::UDType& type);
122
123#endif
124