• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020 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 #include "element_name_utils.h"
17 
18 #include <cstring>
19 
20 #include "utils.h"
21 
22 #ifdef OHOS_APPEXECFWK_BMS_BUNDLEMANAGER
23 namespace {
24     constexpr int VALUE_NULL = 0;
25     constexpr int VALUE_OBJECT = 1;
26     constexpr int MAX_BUNDLE_NAME = 127;
27     constexpr int MAX_ABILITY_NAME = 127;
28     constexpr int MAX_DEVICE_ID = 1024;
29 }
30 #endif
31 
ClearElement(ElementName * element)32 void ClearElement(ElementName *element)
33 {
34     if (element == nullptr) {
35         return;
36     }
37 
38     AdapterFree(element->deviceId);
39     AdapterFree(element->bundleName);
40     AdapterFree(element->abilityName);
41 }
42 
SetElementDeviceID(ElementName * element,const char * deviceId)43 bool SetElementDeviceID(ElementName *element, const char *deviceId)
44 {
45     if (element == nullptr) {
46         return false;
47     }
48 
49     AdapterFree(element->deviceId);
50     element->deviceId = OHOS::Utils::Strdup(deviceId);
51     return element->deviceId != nullptr;
52 }
53 
SetElementBundleName(ElementName * element,const char * bundleName)54 bool SetElementBundleName(ElementName *element, const char *bundleName)
55 {
56     if (element == nullptr) {
57         return false;
58     }
59 
60     AdapterFree(element->bundleName);
61     element->bundleName = OHOS::Utils::Strdup(bundleName);
62     return element->bundleName != nullptr;
63 }
64 
SetElementAbilityName(ElementName * element,const char * abilityName)65 bool SetElementAbilityName(ElementName *element, const char *abilityName)
66 {
67     if (element == nullptr) {
68         return false;
69     }
70 
71     AdapterFree(element->abilityName);
72     element->abilityName = OHOS::Utils::Strdup(abilityName);
73     return element->abilityName != nullptr;
74 }
75 
76 #ifdef OHOS_APPEXECFWK_BMS_BUNDLEMANAGER
SerializeElement(IpcIo * io,const ElementName * element)77 bool SerializeElement(IpcIo *io, const ElementName *element)
78 {
79     if ((io == nullptr) || (element == nullptr)) {
80         return false;
81     }
82 
83     if (element->deviceId == nullptr || strlen(element->deviceId) == 0) {
84         IpcIoPushInt32(io, VALUE_NULL);
85     } else if (strlen(element->deviceId) > MAX_DEVICE_ID) {
86         return false;
87     } else {
88         IpcIoPushInt32(io, VALUE_OBJECT);
89         IpcIoPushString(io, element->deviceId);
90     }
91     if (element->bundleName == nullptr || strlen(element->bundleName) == 0) {
92         IpcIoPushInt32(io, VALUE_NULL);
93     } else if (strlen(element->bundleName) > MAX_BUNDLE_NAME) {
94         return false;
95     } else {
96         IpcIoPushInt32(io, VALUE_OBJECT);
97         IpcIoPushString(io, element->bundleName);
98     }
99     if (element->abilityName == nullptr || strlen(element->abilityName) == 0) {
100         IpcIoPushInt32(io, VALUE_NULL);
101     } else if (strlen(element->abilityName) > MAX_ABILITY_NAME) {
102         return false;
103     } else {
104         IpcIoPushInt32(io, VALUE_OBJECT);
105         IpcIoPushString(io, element->abilityName);
106     }
107     return true;
108 }
109 
DeserializeElement(ElementName * element,IpcIo * io)110 bool DeserializeElement(ElementName *element, IpcIo *io)
111 {
112     if ((io == nullptr) || (element == nullptr)) {
113         return false;
114     }
115 
116     if (IpcIoPopInt32(io) == VALUE_OBJECT &&
117         !SetElementDeviceID(element, reinterpret_cast<char *>(IpcIoPopString(io, nullptr)))) {
118         return false;
119     }
120     if (IpcIoPopInt32(io) == VALUE_OBJECT &&
121         !SetElementBundleName(element, reinterpret_cast<char *>(IpcIoPopString(io, nullptr)))) {
122         ClearElement(element);
123         return false;
124     }
125     if (IpcIoPopInt32(io) == VALUE_OBJECT &&
126         !SetElementAbilityName(element, reinterpret_cast<char *>(IpcIoPopString(io, nullptr)))) {
127         ClearElement(element);
128         return false;
129     }
130     return true;
131 }
132 #endif