1 /*
2 * Copyright (C) 2021 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 "gatt_data.h"
17 #include "bt_def.h"
18 #include "memory"
19 #include "securec.h"
20
21 namespace OHOS {
22 namespace bluetooth {
GattDevice(const RawAddress & addr,uint8_t type,uint8_t transport)23 GattDevice::GattDevice(const RawAddress& addr, uint8_t type, uint8_t transport)
24 : isEncryption_((transport == GATT_TRANSPORT_TYPE_CLASSIC) ? true : false),
25 transport_(transport), addressType_(type), connectState_(0), addr_(addr)
26 {
27 }
28
GattDevice(const RawAddress & addr,uint8_t type,uint8_t transport,int state)29 GattDevice::GattDevice(const RawAddress& addr, uint8_t type, uint8_t transport, int state)
30 : isEncryption_((transport == GATT_TRANSPORT_TYPE_CLASSIC) ? true : false),
31 transport_(transport), addressType_(type), connectState_(state), addr_(addr)
32 {
33 }
34
GattDevice(const RawAddress & addr,uint8_t transport)35 GattDevice::GattDevice(const RawAddress& addr, uint8_t transport)
36 : isEncryption_((transport == GATT_TRANSPORT_TYPE_CLASSIC) ? true : false),
37 transport_(transport), addressType_(0), connectState_(0), addr_(addr) {}
38
Descriptor(const Uuid & uuid,uint16_t handle,int permissions,const uint8_t * value,size_t length)39 Descriptor::Descriptor(const Uuid &uuid, uint16_t handle, int permissions, const uint8_t *value, size_t length)
40 : handle_(handle), permissions_(permissions), value_(nullptr), length_(length), uuid_(uuid)
41 {
42 if (value != nullptr && length != 0) {
43 value_ = std::make_unique<uint8_t[]>(length);
44 (void)memcpy_s(value_.get(), length_, value, length_);
45 } else {
46 value_ = nullptr;
47 length_ = 0;
48 }
49 }
50
Descriptor(const Descriptor & src)51 Descriptor::Descriptor(const Descriptor& src)
52 : handle_(src.handle_), permissions_(src.permissions_), value_(nullptr), length_(src.length_), uuid_(src.uuid_)
53 {
54 if (src.value_ != nullptr && src.length_ != 0) {
55 value_ = std::make_unique<uint8_t[]>(length_);
56 (void)memcpy_s(value_.get(), length_, src.value_.get(), length_);
57 } else {
58 value_ = nullptr;
59 length_ = 0;
60 }
61 }
62
Descriptor(uint16_t handle,const uint8_t * value,size_t length)63 Descriptor::Descriptor(uint16_t handle, const uint8_t *value, size_t length)
64 : handle_(handle), permissions_(0), value_(nullptr), length_(length), uuid_()
65 {
66 value_ = std::make_unique<uint8_t[]>(length_);
67 (void)memcpy_s(value_.get(), length_, value, length_);
68 }
69
Characteristic(const Uuid & uuid,uint16_t handle,int properties,int permissions,const uint8_t * value,size_t length)70 Characteristic::Characteristic(
71 const Uuid& uuid, uint16_t handle, int properties, int permissions, const uint8_t *value, size_t length)
72 : handle_(handle), endHandle_(0), valueHandle_(handle + 1), properties_(properties), permissions_(permissions),
73 value_(nullptr), length_(length), uuid_(uuid), descriptors_()
74 {
75 if (value != nullptr && length != 0) {
76 value_ = std::make_unique<uint8_t[]>(length_);
77 (void)memcpy_s(value_.get(), length_, value, length_);
78 } else {
79 value_ = nullptr;
80 length_ = 0;
81 }
82 }
83
Characteristic(uint16_t handle,const uint8_t * value,size_t length)84 Characteristic::Characteristic(uint16_t handle, const uint8_t *value, size_t length)
85 : handle_(handle), endHandle_(0), valueHandle_(handle + 1), properties_(0), permissions_(0),
86 value_(std::make_unique<uint8_t[]>(length)), length_(length), uuid_(), descriptors_()
87 {
88 (void)memcpy_s(value_.get(), length_, value, length_);
89 }
90
Characteristic(const Characteristic & src)91 Characteristic::Characteristic(const Characteristic& src)
92 : handle_(src.handle_), endHandle_(src.endHandle_), valueHandle_(src.handle_ + 1),
93 properties_(src.properties_), permissions_(src.permissions_), value_(nullptr), length_(src.length_),
94 uuid_(src.uuid_), descriptors_(src.descriptors_)
95 {
96 if (src.value_ != nullptr && src.length_ != 0) {
97 value_ = std::make_unique<uint8_t[]>(length_);
98 (void)memcpy_s(value_.get(), length_, src.value_.get(), length_);
99 } else {
100 value_ = nullptr;
101 length_ = 0;
102 }
103 }
104
SetValue(const uint8_t * value,size_t length)105 void Characteristic::SetValue(const uint8_t *value, size_t length)
106 {
107 if (value_ != nullptr) {
108 value_.reset(nullptr);
109 }
110
111 length_ = length;
112 value_ = std::make_unique<uint8_t[]>(length_);
113 (void)memcpy_s(value_.get(), length_, value, length_);
114 }
115 } // namespace bluetooth
116 } // namespace OHOS